Record verified BBR fixes and remaining multipath contract conflicts

This commit is contained in:
evgeny committed 2026-10-23 00:25:55 +02:00
1 parent 716db3a820
commit 519d6e4eaf
1 file changed
+40 -1
+40 -1
View File
@@ -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, отдельными линками и таймерами;