Use RTT jitter and fixed margin for ETCP retransmission timeout
This commit is contained in:
1 parent
e84e17c396
commit
9dbef48eb3
3 files changed
+23
-15
No files matched your search
@@ -16,7 +16,7 @@ static struct INFLIGHT_PACKET* logical_find(struct ETCP_CONN* conn, uint32_t seq
|
||||
|
||||
uint32_t etcp_tx_rto_us(const struct ETCP_LINK* link) {
|
||||
uint64_t rtt = link->data_rtt_us ? link->data_rtt_us : (uint64_t)link->rtt_last * 100;
|
||||
uint64_t rto = rtt ? 2 * (rtt + link->data_jitter_us) : 1000000;
|
||||
uint64_t rto = rtt ? (12 * rtt + 15ULL * link->data_jitter_us + 9) / 10 + 3000 : 1000000;
|
||||
if (rto < 10000) rto = 10000;
|
||||
if (rto > 1000000) rto = 1000000;
|
||||
return (uint32_t)rto;
|
||||
|
||||
@@ -33,7 +33,8 @@ int etcp_tx_link_init(struct ETCP_LINK* link);
|
||||
* reset не меняет физический UP; destroy дополнительно освобождает очереди. */
|
||||
void etcp_tx_link_reset(struct ETCP_LINK* link, int retry);
|
||||
void etcp_tx_link_destroy(struct ETCP_LINK* link);
|
||||
/* Расчётный RTO в микросекундах: 2*(собственный RTT+jitter), 10мс..1с; до DATA ACK использует KA RTT/1с. */
|
||||
/* RTO = clamp(ceil(1.2*RTT + 1.5*jitter + 3000), 10000, 1000000), все величины в мкс.
|
||||
* RTT/jitter — собственные DATA-измерения линка; до DATA ACK использует KA RTT, без RTT — 1с. */
|
||||
uint32_t etcp_tx_rto_us(const struct ETCP_LINK* link);
|
||||
/* Резервировать окно для packet; NULL — ошибка с логом, packet остаётся в очереди отправки.
|
||||
* Физические записи ограничены MAX_INFLIGHT_SIZE на линк и 2*MAX_INFLIGHT_SIZE на соединение.
|
||||
|
||||
Reference in new issue
Block a user