diff --git a/doc/etcp_multipath_plan.txt b/doc/etcp_multipath_plan.txt index 6f4d60d0..98c0fcaa 100644 --- a/doc/etcp_multipath_plan.txt +++ b/doc/etcp_multipath_plan.txt @@ -22,6 +22,38 @@ piggyback разных путей, смену головы, early timer callback Диагностика расширена до 106 полей: ранние записи внутри готовой пачки допустимы; early_ordinary_ack_packets отдельно проверяет отправку всего пакета раньше срока. +Проверка после исправления: windows 60 сценариев PASS с управляемыми и реальными +часами; восемь профильных тестов ETCP/STCP ASAN/UBSan с detect_leaks=1 PASS без +ошибок/утечек. Отдельный ASAN two-stuck с диагностикой 10 мс: 5202 проверенных среза, +ранних ACK-пакетов нет, доставка/ресурсы PASS. Полный check.sh: 184/184, proxy 9/9, +burst 1/1, load 8/8 PASS, 134217728 проверенных байт, 185 с со сборкой. + +Три последовательных bidirectional с диагностикой: ранних обычных ACK-пакетов 0 +во всех трёх прогонах. На одиночном 8 Мбит/с пути полоса ACK 0.143..0.169 Мбит/с +вместо 0.347/0.390 в предыдущем диагностическом прогоне. Агрегат: A->B +8.667..8.804, B->A 8.695..8.796 из 10 Мбит/с. Сам агрегат проходит все свои пороги +каждый раз; весь профиль остаётся FAIL из-за одиночных каналов, с 3/2/4 нарушениями. +Средний возраст entries ACK-only на 8 Мбит/с может быть меньше 2 мс: внутри готового +кадра передаются и новые entries. Это учитывается отдельно от ранней отправки кадра. + +Полная штатная последовательная матрица после калибровки эмулятора: первые шесть +скоростных профилей и все 9 профилей отказов PASS. Агрегированный goodput, +Мбит/с: equal 14.416/16, bandwidth 9.032/10, rtt 14.516/16, fast-distant 8.857/10, +slow-distant 8.978/10, three 11.122/12, bidirectional 8.750/8.768 из 10 на направление. +Остаются два FAIL одиночного дуплекса: 1.609 вместо 1.700 Мбит/с (путь 2 Мбит/с) +и 6.730 вместо 6.800 Мбит/с (обратное направление пути 8 Мбит/с). +Two-stuck: gap 206.227 мс, latency 375.457 мс; load-drop/load-hold: gap 41.402/41.845 мс, +steady goodput 7.229/7.466 из 8 Мбит/с. Max latency насыщенного источника +180.693/89.239 мс записана; отдельным порогом она здесь не ограничена. +Дальше отдельно разбирать недооценку полосы/PROBE_RTT одиночного дуплекса, +STCP backpressure и проверки изменения RTT/BW и повторного отказа. + +Логи: /tmp/etcp-ack-deadline-{windows,real-time,full-check}.log, +/tmp/etcp-ack-deadline-asan-test_*.log, /tmp/etcp-ack-deadline-asan-two-stuck.log/.csv, +/tmp/etcp-ack-deadline-matrix.log/.csv, /tmp/etcp-ack-deadline-duplex-<1..3>.log/.csv. +Сводка ACK: /tmp/etcp-ack-deadline-summary.json; актуальный HTML с 106 полями: +/tmp/etcp-ack-deadline-duplex.html. Проверка CSV и JS smoke графиков/фильтров PASS. + Предыдущий этап: диагностика до исправления ACK. 24.10.2026: добавлена буферизованная диагностика multipath с шагом 100 мс. diff --git a/doc/tasks.md b/doc/tasks.md index ac7e88d3..a0ee86b9 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -25,6 +25,20 @@ 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. + Предыдущий этап — диагностика до исправления ACK: Продолжение 24.10.2026: диагностика срезов 100 мс (настройка 10..1000 мс), 104 поля; CSV и лог буферизуются до drain. Видны очереди, callbacks/deferred waiter, DATA/ACK, flight/cwnd, BBR/RTT/RTO, долг/готовность pacer и канал эмулятора. tools/etcp_diag_report.py проверяет CSV и строит автономные интерактивные графики с исходными срезами.