Document ETCP receiver-clock bandwidth sampling

This commit is contained in:
evgeny committed 2026-10-24 17:26:59 +02:00
1 parent d2703b2145
commit 8ff4a0bf46
2 files changed
+6 -4

No files matched your search

+5 -3
View File
@@ -116,9 +116,11 @@ ACK с подтверждениями также возвращает точку
OOM до сохранения и отвергнутые DATA его не меняют. Считаются байты полезной нагрузки секции, без заголовков.
При отправке попытка запоминает известную точку. ACK действующей попытки продвигает точку пути;
повторный/чужой ID её не меняет, переставленные ACK не откатывают. Противоречивая пара логируется и игнорируется.
При положительных дельтах добавляется нижняя граница интервала ceil(delivered*delta_rx_us/delta_rx_bytes).
Итоговый interval — максимум трёх границ; BW может только уменьшиться относительно прежнего sample.
Счётчики и времена — uint64, часы двух сторон не сравниваются. Нулевые/неизвестные дельты не создают границы.
При положительных дельтах interval=max(send_us,ceil(delivered*delta_rx_us/delta_rx_bytes)).
Приёмный интервал заменяет ACK clock: обратная очередь больше не завышает BW сжатием ACK
и не занижает его растяжением. Send-интервал сохраняет защиту от сжатия приёмного времени.
Без достоверной приёмной базы/положительных дельт используется max(send_us,ack_us).
Счётчики и времена — uint64, часы двух сторон не сравниваются; нужны только дельты одних часов.
Если интервал не представим в uint32, sample не используется для BW вместо насыщения, завышающего скорость.
После пустого физического flight база начинается заново, чтобы простой не занижал скорость следующей передачи.
Reset потока обнуляет точки приёма; исчерпание локального 64-битного счётчика закрывает соединение с ERROR.
+1 -1
View File
@@ -55,7 +55,7 @@ enum bbr_ack_phase { BBR_ACKS_INIT = 0, BBR_ACKS_REFILLING, BBR_ACKS_PROBE_ST
struct bbr_rate_sample {
uint32_t delivered; // байты, подтверждённые за измерительный интервал; не только текущим ACK
uint32_t interval_us; // измерительный интервал, мкс; ETCP берёт max(send,ACK,приёмная граница); 0 — нет оценки BW
uint32_t interval_us; // мкс; ETCP: max(send,приёмная граница), без RX-базы max(send,ACK); 0 — нет оценки BW
uint32_t rtt_us; // RTT линка, мкс; 0 — пока неизвестен
uint32_t acked_sacked; // новые подтверждённые байты текущего ACK; только они увеличивают общий delivered
uint32_t prior_delivered; // счётчик delivered при отправке подтверждённого пакета, modulo 2^32