From 519d6e4eaf9cf32735a676a8e132cd788cc61153 Mon Sep 17 00:00:00 2001 From: evgeny Date: Fri, 23 Oct 2026 00:25:55 +0200 Subject: [PATCH] Record verified BBR fixes and remaining multipath contract conflicts --- doc/tasks.md | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/doc/tasks.md b/doc/tasks.md index ad44e5d2..8f43669e 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -19,7 +19,8 @@ при насыщении оставшийся набор должен давать >=85% своей ёмкости после переходного периода. Начальные прогоны выявили нарушения: RTT 20/20мс, DROP одного пути — пауза 204мс, latency 344мс; при разных RTT/BWlim не выполняются требования утилизации, в том числе из-за повторов и переполнения очередей. - Протокольный фикс не вносился. Отдельно проверить выбор пути повторов, общий RTO, BBR/pacing и блокировку сборки. + Базовые исправления BBR/pacing внесены 23.10.2026 в fix/etcp-multipath-recovery (см. завершённую подзадачу ниже). + Выбор пути повторов, общий RTO и блокировка сборки ещё не исправлены. Финальный прогон девяти отказов: drop-reverse/short-hold PASS, остальные семь FAIL по целевым требованиям; повтор на обычных часах slow-drop: пауза 450мс, latency 1267мс. Trace показывает повторную отправку в зависший путь. Связанные регрессии 5/5 PASS. ASAN/UBSan + detect_leaks=1: calibration и short-hold PASS; @@ -29,6 +30,44 @@ /tmp/etcp-channels-asan-final-results.log, /tmp/test_*-asan-final.log. После исправлений добавить смену профилей на ходу, повторяющиеся отказы и смешанный UDP/STCP со stalled TCP write. Полная матрица дольше 90s общего runner и запускается отдельной целью; нарушения завершают её с ошибкой. + Текущая диагностика: /tmp/etcp-recovery-rtt-diagnostic.log/.csv. RTT 20/200мс даёт около 10.1–10.5 из 16 Мбит/с. + В одиночном длинном канале PROBE_RTT снижает cwnd до 4*MTU=5120 вместо max(4*MSS, 0.5*BDP) из BBRv3; + транспорт повышает его обратно до 8192. При inflight=6582 модель всё ещё ждёт осушения ниже 5120. + Перед дальнейшим исправлением согласовать минимальное эффективное окно BBR/транспорта и единицу MSS: + сейчас BBR получает link->mtu (для STCP 65535), хотя DATA-фрагменты normalizer существенно меньше. + Затем согласовать обратную связь: ACK выбирает путь по inflight/RR, скорость оценивается по фактическому времени + возврата ACK, а RTT модели берётся из отдельного timestamp-обмена исходного линка. Это разные интервалы. + При повторах ACK не идентифицирует попытку: запись хранит только last_link, старый ACK может быть приписан новому пути. + Нужен явный контракт учёта попыток до изменения выбора пути/повторов; простой запрет прошлого линка его не заменяет. + После этого исправлять здоровье линка, независимые сроки повторов и доставку при DROP/HOLD по существующим тестам. + Финальные профили: equal PASS (14.37 из 16 Мбит/с), bandwidth по скорости PASS (9.34 из 10), но очередь 47.7мс >40мс; + rtt FAIL. Пороги очереди и утилизации не ослаблены. Логи: /tmp/etcp-recovery-{equal,bandwidth,rtt}-final.log. + +[+] **ETCP/BBR: байтовые единицы, delivery clock и независимость ACK от локального DATA-pacer** — исправлено 23.10.2026: + Устранено повторное умножение на MSS при расчёте pacing/BDP: доставка 1MB/s давала 570240000B/s при MSS=576, + теперь cruise pacing=990000B/s независимо от MSS. Q16 байт/мкс сохраняет многогигабитные оценки; + выходы pacing/BDP/cwnd и рост inflight_hi насыщаются вместо переполнения. + PROBE_UP растит inflight_hi на MSS за подтверждённое окно; резерв равен 2*MSS, Reno rounds считаются в пакетах. + Счётчики ACK aggregation расширены до 32 бит, подтверждения свыше 64KiB больше не усекаются. + Delivery sample использует снимки delivered/time/send-time пакета и max(send_elapsed, ack_elapsed); + несколько ACK в одном tick больше не создают ложный пик скорости. Суммарный delivered растёт только на новые ACKed байты. + ACK без DATA обходит локальный DATA-cwnd и DATA-pacer и не начисляет их нагрузку: низкая исходящая DATA-скорость + получателя не тормозит обратные подтверждения. Физическая очередь канала остаётся общей для DATA/ACK. + dummynet измеряет максимальное время очереди/сериализации отдельно от заданной propagation delay; + multipath проверяет его предел base_RTT+20ms наряду с полезной утилизацией, FILLER/повторы не засчитываются. + BBR 14/14, window/sender 14 сценариев PASS. ASAN/UBSan с detect_leaks=1: BBR/windows/calibration/session/transport/STCP/NCD 7/7; + после последнего исправления переполнения BBR/windows повторены отдельно. Основная multipath-задача остаётся открытой. + Общий check.sh перед последним исправлением переполнения: 181/183; падения вынесены отдельной задачей ниже. + Логи: /tmp/etcp-recovery-overflow-{before,after,windows}.log, /tmp/etcp-recovery-asan-results.log, + /tmp/etcp-recovery-asan-overflow-{bbr,windows}.log, /tmp/etcp-multipath-recovery-check.log. + +[ ] **Разобрать падения NAT fault и encrypted attachment в общем прогоне** — обнаружено 23.10.2026: + check.sh: test_nat_detection_faults завершился assert в run_alias (ожидался inbound OPEN, получен UNKNOWN/contact_history); + отдельный повтор тоже упал, уже в run_case mode=5: mapping DEPENDENT корректен, inbound UNKNOWN вместо ожидаемого. + test_encrypted_attachment достиг phase=3/12001 heartbeat и упал; отдельный повтор завершился phase=10/560 heartbeat PASS. + Связь с изменениями BBR не установлена. Разобрать фикстуры/таймеры по логам, не ослаблять ожидания. + Логи: tests/logs/test_nat_detection_faults.log, tests/logs/test_encrypted_attachment.log, + /tmp/etcp-recovery-nat-retry.log, /tmp/etcp-recovery-attachment-retry.log. [+] **ETCP: единый установщик прямого транспорта через NCD** — исправлено 22.10.2026: Удалён неиспользуемый рабочим кодом etcp_connect с EARLY/LATE, отдельными линками и таймерами;