Record duplex validation and remaining BBR follow-ups
This commit is contained in:
1 parent
8ff4a0bf46
commit
deee734e6c
2 files changed
+66
-13
No files matched your search
@@ -3,6 +3,56 @@ ETCP: независимая обратная связь каналов и до
|
||||
|
||||
Статус
|
||||
|
||||
24.10.2026: устранена недооценка BW из-за растяжения ACK обратной очередью.
|
||||
Прежний max(send_us,ack_us,RX-bound) мог только уменьшать BW по точке приёма:
|
||||
при разгоне дуплекса интервал ACK 181424 мкс перекрывал RX-bound 130689 мкс
|
||||
и send 138456 мкс. STARTUP завершался с оценкой около 5.2 Мбит/с на пути 8 Мбит/с.
|
||||
Отключение только PROBE_RTT или только задержечного выхода STARTUP не устраняло все FAIL.
|
||||
|
||||
При достоверных положительных RX-дельтах теперь interval=max(send_us,RX-bound),
|
||||
RX-bound=ceil(delivered*delta_rx_us/delta_rx_bytes). Без базы/прогресса остаётся
|
||||
max(send_us,ack_us). Сохраняются send-граница против сжатия времени, проверка пары,
|
||||
монотонность точки, защита от переполнения и очистка после idle/reset.
|
||||
Изменён только выбор часов BW: wire, RTT/min_rtt, окно, RTO, ACK deadlines и очереди прежние.
|
||||
DEBUG ACK показывает clock=RX/ACK и исходные send/ACK/RX интервалы.
|
||||
|
||||
Регрессия до фикса FAIL: /tmp/etcp-rx-clock-before.log. Новые точные сценарии
|
||||
увеличивают ACK-интервал 20->100мс при неизменной доставке, проверяют send-границу,
|
||||
неизвестную/нулевую RX-дельту и отсутствующую базу. test_etcp_windows: 61 сценарий PASS
|
||||
с обоими режимами часов; BBR 20/20 и ещё пять профильных ETCP-тестов PASS.
|
||||
Восемь ASAN/UBSan-тестов ETCP/STCP с detect_leaks=1 PASS без ошибок/утечек.
|
||||
Полный check.sh после rebase и этого фикса: 186/186, proxy 9/9, burst 1/1,
|
||||
load 8/8 PASS, 134217728 проверенных байт; 201с со сборкой.
|
||||
|
||||
Полная последовательная матрица: все 7 скоростных и 9 отказных профилей PASS.
|
||||
Goodput агрегата, Мбит/с: equal 14.711/16, bandwidth 9.093/10, rtt 14.296/16,
|
||||
fast-distant 8.860/10, slow-distant 9.074/10, three 10.761/12, дуплекс 8.768/8.789 из10.
|
||||
В этом прогоне одиночный дуплекс 2Мбит/с — 1.730/1.775, 8Мбит/с — 7.078/7.080.
|
||||
В трёх прогонах рабочего кода (матрица и два отдельных) путь 8Мбит/с даёт
|
||||
7.045..7.081 в обе стороны; агрегат 8.768..8.801 / 8.700..8.820 проходит каждый раз.
|
||||
Ранних ACK-пакетов 0, retries в steady дуплекса 0, пик очереди 22.5/23.4/27.8мс;
|
||||
ACK на одиночном 8Мбит/с пути занимает 0.170..0.180Мбит/с.
|
||||
В третьем прогоне остаётся один FAIL 2Мбит/с: 1.672<1.700Мбит/с. Общая задача открыта;
|
||||
разовый PASS полной матрицы не закрывает нестабильность малого одиночного дуплекса.
|
||||
Two-stuck: gap 223.404мс, max latency 377.634мс. Load-drop/load-hold: gap 42.841/57.655мс,
|
||||
steady 7.227/7.492 из8Мбит/с, max latency насыщенного источника 174.541/102.388мс.
|
||||
|
||||
Дальше: отдельно диагностировать 2Мбит/с, затем STCP backpressure, смену RTT/BW и повторный отказ.
|
||||
До проверки смены RTT исправить подтверждённый дефект возраста min_rtt:
|
||||
при копировании старого probe_rtt_min_us min_rtt_stamp_tb обновляется на каждом ACK.
|
||||
Точный стенд с единственным RTT=20мс и последующими RTT=100мс удерживает старый минимум
|
||||
15100мс вместо окна 10000мс. Нужны время исходного минимума, регрессии возраста и TB wrap;
|
||||
это отдельное изменение контроллера, к семисекундным steady-замерам не относится.
|
||||
Стенд/лог: /tmp/etcp-min-rtt-stamp-probe.c/.mk/.log.
|
||||
|
||||
Логи: /tmp/etcp-rx-clock-{windows,windows-real,bbr,full-check}.log,
|
||||
/tmp/etcp-rx-clock-asan-*.log, /tmp/etcp-rx-clock-matrix.log/.csv,
|
||||
/tmp/etcp-rx-clock-matrix-diag.csv, /tmp/etcp-rx-clock-duplex-{2,3}.log/.csv.
|
||||
8372 среза матрицы проверены tools/etcp_diag_report.py; отчёт /tmp/etcp-rx-clock-matrix.html,
|
||||
сводка /tmp/etcp-rx-clock-summary.json. Контрольные прототипы: /tmp/etcp-bbr-next-*.
|
||||
|
||||
Предыдущий этап: абсолютные сроки ACK.
|
||||
|
||||
24.10.2026: исправлены абсолютные сроки ACK и конкуренция ACK/DATA разных путей.
|
||||
Обычный ACK-only обслуживается от received_at_us головы своего пути + 2 мс;
|
||||
piggyback готового DATA и срочный ответ остаются немедленными. Среди готовых ACK
|
||||
|
||||
+16
-13
@@ -102,19 +102,22 @@
|
||||
Windows/FreeBSD runtime не проверялся.
|
||||
|
||||
[ ] **ETCP: полезная утилизация нескольких каналов и доставка при зависании части линков** — общая задача открыта.
|
||||
24.10.2026: исправлен обход срока ACK посторонним wake. Абсолютный срок головы пути +2 мс,
|
||||
один общий таймер, пересчёт после piggyback/частичной отправки; новые DATA не отодвигают старые ACK.
|
||||
Наступивший ACK другого пути имеет приоритет перед DATA; свой DATA забирает его piggyback.
|
||||
Сохранены срочный ответ, bounded burst, OOM fallback и очистка при reset/close; wire/BBR/RTO не менялись.
|
||||
Windows 60 сценариев с обоими режимами часов PASS; восемь ASAN/UBSan-тестов и ASAN two-stuck без ошибок/утечек.
|
||||
В трёх дуплексных прогонах ранних ACK-пакетов 0; на 8 Мбит/с ACK занимают 0.143..0.169 вместо прежних 0.347/0.390 Мбит/с.
|
||||
Агрегат проходит все свои пороги: 8.667..8.804 / 8.695..8.796 из 10 Мбит/с; одиночные каналы ещё дают FAIL.
|
||||
Полная матрица: первые 6 скоростных профилей и все 9 профилей отказов PASS, агрегат дуплекса 8.750/8.768.
|
||||
Остались 2 FAIL одиночного дуплекса: 1.609<1.700 и 6.730<6.800 Мбит/с; дальше разбирать BW/PROBE_RTT и STCP backpressure.
|
||||
Load-drop/load-hold: паузы 41.402/41.845 мс, steady 7.229/7.466 из 8 Мбит/с; max latency 180.693/89.239 мс записана.
|
||||
Check.sh 184/184, proxy 9/9, burst 1/1, load 8/8 PASS, 134217728 проверенных байт, 185 с.
|
||||
Диагностика 106 полей различает раннюю запись в готовой пачке и отправку всего ACK-пакета раньше срока.
|
||||
Логи/CSV: /tmp/etcp-ack-deadline-*; HTML: /tmp/etcp-ack-deadline-duplex.html; детали — doc/etcp_multipath_plan.txt.
|
||||
24.10.2026: исправлена недооценка BW растянутыми ACK: достоверный RX clock заменяет ACK clock,
|
||||
interval=max(send_us,ceil(delivered*delta_rx_us/delta_rx_bytes)); без RX-базы/прогресса max(send_us,ack_us).
|
||||
Сохранены send-граница, проверка пары/переполнения/idle и логические ACK; wire/RTT/RTO/окно не менялись.
|
||||
DEBUG ACK показывает исходные интервалы и выбранные часы. До фикса точная регрессия FAIL, после PASS.
|
||||
test_etcp_windows: 61 сценарий с обоими режимами часов PASS; BBR 20/20, восемь ASAN/UBSan-тестов без ошибок/утечек.
|
||||
Check.sh 186/186, proxy 9/9, burst 1/1, load 8/8 PASS, 134217728 проверенных байт, 201с.
|
||||
Полная последовательная матрица: все 7 скоростных и 9 отказных профилей PASS; дуплексный агрегат 8.768/8.789 из10.
|
||||
Три прогона рабочего кода: одиночный 8Мбит/с даёт 7.045..7.081 в обе стороны, агрегат проходит каждый раз.
|
||||
Ранних ACK-пакетов 0; steady retries=0; ACK на одиночном 8Мбит/с пути 0.170..0.180Мбит/с.
|
||||
Остаётся нестабильность одиночного дуплекса 2Мбит/с: один повтор дал 1.672<1.700Мбит/с.
|
||||
Далее — этот недобор, STCP backpressure, отдельные проверки смены RTT/BW и повторного отказа.
|
||||
До смены RTT исправить отдельный подтверждённый дефект возраста min_rtt: старый probe minimum
|
||||
обновляет min_rtt_stamp_tb на каждом ACK. При RTT20->100мс старое значение живёт 15.1с вместо10с;
|
||||
стенд /tmp/etcp-min-rtt-stamp-probe.c/.mk/.log, нужны регрессии возраста и TB wrap. Код пока не менялся.
|
||||
Логи/CSV: /tmp/etcp-rx-clock-*; 8372 среза проверены, HTML /tmp/etcp-rx-clock-matrix.html.
|
||||
Подробности и предыдущие этапы: doc/etcp_multipath_plan.txt.
|
||||
Предыдущий этап — диагностика до исправления ACK:
|
||||
Продолжение 24.10.2026: диагностика срезов 100 мс (настройка 10..1000 мс), 104 поля; CSV и лог буферизуются до drain.
|
||||
Видны очереди, callbacks/deferred waiter, DATA/ACK, flight/cwnd, BBR/RTT/RTO, долг/готовность pacer и канал эмулятора.
|
||||
|
||||
Reference in new issue
Block a user