Use RTT jitter and fixed margin for ETCP retransmission timeout

This commit is contained in:
evgeny committed 2026-10-23 12:52:35 +02:00
1 parent e84e17c396
commit 9dbef48eb3
3 files changed
+23 -15

No files matched your search

+1 -1
View File
@@ -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;
+2 -1
View File
@@ -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 на соединение.