Add isolated slow-duplex measurements and record BBR diagnosis

This commit is contained in:
evgeny committed 2026-10-24 19:07:18 +02:00
1 parent a198cfb9e3
commit f8a2ecaabd
2 files changed
+83 -12

No files matched your search

+56
View File
@@ -3,6 +3,62 @@ ETCP: независимая обратная связь каналов и до
Статус
24.10.2026, продолжение после push: отдельно исследован одиночный дуплекс2Мбит/с.
Все прежние15 локальных коммитов вошли в origin/master после rebase; патчи сохранены.
Из-за параллельных изменений основного каталога продолжение изолировано в ветке
etcp/solo-duplex-20261024, база a198cfb9. Протокол ETCP/BBR на этом этапе не изменён.
Добавлен нативный сценарий duplex-slow: один20мс/2Мбит/с путь, два насыщенных отправителя.
Он использует прежние проверки полезных/свежих байтов, очереди, retries и полного drain.
UTUN_MULTIPATH_SAMPLE_MS=1000..60000 задаёт только длительность steady скоростных замеров;
по умолчанию прежние4с, warmup3с и отказные интервалы сохранены. Пороги не снижены.
Таблица скоростных профилей теперь содержит count/duplex вместе с настройками;
выбор режима/числа путей больше не зависит от порядкового номера строки.
Для единственного пути замер не повторяется как фиктивный агрегат.
Длинный замер дополняет короткие повторы: разовый PASS одного из них задачу не закрывает.
Точные ACK/TX-события буферизованы отдельным диагностическим observer в /tmp,
без синхронного I/O внутри замера и без изменения BBR. Контрольный20-секундный steady:
полезная скорость1.726/1.658Мбит/с, retries=0; пик очереди23.7/23.0мс.
Сторона0 провела около4.49с в PROBE_DOWN, сторона1 —6.43с из20с.
В этой фазе pacing около1.39Мбит/с при доступной полосе2Мбит/с.
Разложены7763 действующих DATA ACK без повторов: прямой путь DATA,
ожидание ACK у получателя, обратный путь ACK. Пример side=1, seq1084, t=5.830182с:
DATA15.909мс + ожидание ACK0.029мс + обратный путь32.219мс = raw RTT48.157мс.
В BBR переданы48.128мс после вычитания ожидания, minRTT25.451мс.
PROBE_DOWN длится142.4мс; DATA-flight после ACK7644байта, цель осушения5915байт.
При почти свободном прямом пути выход из DOWN продолжает ждать уменьшения
неподтверждённого flight, который также зависит от встречной очереди ACK.
По7763 точкам проверена сумма трёх частей и соответствие RTT после вычитания hold.
Это подтверждает вклад обратной очереди; не доказывает, что он единственный.
Проверенные прототипы остаются только в /tmp, в рабочий BBR не переносились:
- округление цели DOWN до MSS, округление Reno-раундов, их комбинация:
есть FAIL повторных коротких прогонов; один успешный прогон не воспроизводится устойчиво;
- добавление2мс ACK-резерва: короткий прогон1.754/1.674 FAIL, длинный1.732/1.757 PASS;
- уменьшение очереди до min(20мс,minRTT/4): длинный1.257/1.036 FAIL;
задержка ниже, но утилизация ухудшилась, также пострадал дуплексный агрегат;
- временный предел окна DOWN существующей целью осушения: DOWN сократился до6..22мс,
длинный1.754/1.764 PASS, короткий1.752/1.656 FAIL;
- округление верхнего предела очереди до MSS, в том числе вместе с пределом DOWN:
короткие1.734/1.681 и1.721/1.664 FAIL; длинный1.752/1.752 PASS.
Следовательно, ни фиксированный ACK-резерв, ни округление, ни одно сокращение DOWN
не подтверждены как самостоятельное полное исправление. Повышать minRTT/порог задержки,
отключать PROBE_RTT или понижать порог скорости для получения PASS оснований нет.
Далее нужны сопоставленные причины остановки DATA в CRUISE/REFILL после короткого DOWN:
окно физического flight, общий admission budget и pacer; затем один причинный фикс
с отдельными модельными регрессиями, короткими повторами и длинным сетевым замером.
Повтор текущего кода из корня:
UTUN_MULTIPATH_DIAG=/tmp/solo.csv ./tests/test_etcp_multipath duplex-slow
UTUN_MULTIPATH_SAMPLE_MS=20000 UTUN_MULTIPATH_DIAG=/tmp/solo-long.csv ./tests/test_etcp_multipath duplex-slow
python3 tools/etcp_diag_report.py /tmp/solo-long.csv /tmp/solo-long.html
Для длинного замера использовать обычные100мс срезы:10мс/60с может исчерпать буфер.
Артефакты контрольного RTT-разложения: /tmp/etcp-solo-feedback-{model,tx,diag}.csv
и /tmp/etcp-solo-feedback.log; observer/build: /tmp/etcp-solo-bbr-probe.c/.mk.
Прототипы: /tmp/etcp-solo-bbr-control.c, /tmp/etcp-solo-*-model.csv и соответствующие .log.
24.10.2026: исправлены возраст RTT-фильтра, сроки PROBE_RTT и замораживание DATA-измерений при росте RTT.
min_rtt_us теперь копируется вместе с probe_rtt_min_stamp_tb. Повторное использование
сохранённого короткого минимума не ставит текущее время на старое измерение.