Record final RTT timer, callback and network validation

This commit is contained in:
evgeny committed 2026-10-24 17:26:59 +02:00
1 parent 76afc56be8
commit 8185b83eba
2 files changed
+38 -24

No files matched your search

+29 -18
View File
@@ -27,38 +27,49 @@ DATA EWMA остался25.353мс, RTO34.135мс, хотя timestamp-RTT пок
Новых очередей/таймеров/полей нет. Ранняя уже назначенная проверка применяет текущий RTO.
Контрольный временный бинарник восстановил DATA-измерения примерно за200мс и дал5 переходных повторов.
Пересчёт прежнего таймера attempts вызывается также при изменении timestamp-RTT,
включая сокращение без новых DATA/ACK. Точная регрессия123->27мс до этого оставляла
старый срок, опаздывающий на96мс. Теперь срок сокращается сразу; раннюю проверку при росте RTO можно сохранить.
Пересчёт выполняется до внешнего RTT-уведомления; callback может закрыть conn и освободить линк.
OOM таймера закрывает conn и пропускает уведомление. Проверены оба закрытия, в том числе ASAN:
промежуточный порядок «callback, затем пересчёт» воспроизводил UAF, итоговый порядок PASS.
Переиспользован прежний обработчик таймера; TRACE показывает назначенный срок и расчётный RTO.
В репозитории добавлен профиль rtt-change: один канал8Мбит/с, небольшая нагрузка,
RTT20->100->20мс. Проверяет прогресс DATA ACK после скачка, снятие stalled,
старение прежнего минимума, быстрое принятие снижения и полную упорядоченную доставку после drain.
В полной нативной матрице DATA EWMA начал учитывать рост через202мс. Через1с
DATA104.667мс, timestamp104.6мс, RTO129.595мс, stalled=0, переходных повторов6.
minRTT вырос до103.271мс по возрасту исходной точки; после возврата —24.068мс в течение1с.
ASAN/UBSan: этот же профиль PASS, DATA104.777мс, min103.507мс, после возврата min23.596мс,
четыре переходных повтора, без ошибок/утечек. Порог скорости здесь не вводится: проверяется обратная связь RTT.
В итоговой нативной матрице DATA EWMA начал учитывать рост через203мс. Через1с
DATA104.801мс, timestamp105.1мс, RTO130.341мс, stalled=0, переходных повторов4.
minRTT вырос до103.794мс по возрасту исходной точки; после возврата —23.941мс в течение1с.
ASAN/UBSan: этот же профиль PASS, DATA104.399мс, min103.420мс, после возврата min23.978мс,
пять переходных повторов, без ошибок/утечек. Порог скорости здесь не вводится: проверяется обратная связь RTT.
Регрессии до фикса: BBR20/24 (четыре новых FAIL), рост RTT с настоящим retrans-таймером FAIL.
После: BBR24/24; test_etcp_windows62 сценария с ускоренными и обычными часами PASS.
После: BBR24/24; test_etcp_windows63 сценария с ускоренными и обычными часами PASS.
Покрыты основной/быстрый путь, 32-битная граница TB, длительный idle, свежий равный/меньший RTT,
нулевой RTT, границы окна и hold, ACK-раунд до/после срока. Четыре профильных ASAN/UBSan-теста
и отдельно ASAN rtt-change с detect_leaks=1 PASS. check.sh:186/186, proxy9/9, burst1/1,
load8/8 PASS,134217728 проверенных байт,186с со сборкой.
load8/8 PASS,134217728 проверенных байт,189с со сборкой после последнего изменения кода.
Полная матрица: первые6 скоростных профилей, все9 отказных и новый rtt-change PASS.
Единственный FAIL — прежняя нестабильность одиночного дуплекса2Мбит/с:1.699<1.700Мбит/с.
Путь8Мбит/с даёт7.085/7.063, агрегат8.734/8.820 из10Мбит/с на направление.
Goodput агрегатов: equal14.454/16, bandwidth9.014/10, rtt14.507/16, fast-distant9.248/10,
slow-distant9.086/10, three11.139/12 (минимум app/fresh DATA).
Two-stuck: gap207.859мс, max latency376.227мс; load-drop/load-hold: gap55.690/56.164мс,
steady7.479/7.243 из8Мбит/с. Общая задача остаётся открытой.
Единственный FAIL — прежняя нестабильность одиночного дуплекса2Мбит/с:1.662<1.700Мбит/с.
Путь8Мбит/с даёт7.076/7.019, агрегат8.737/8.717 из10Мбит/с на направление.
Goodput агрегатов: equal14.703/16, bandwidth9.069/10, rtt14.284/16, fast-distant8.853/10,
slow-distant8.976/10, three10.773/12 (минимум app/fresh DATA).
Two-stuck: gap216.882мс, max latency377.484мс; load-drop/load-hold: gap43.431/49.716мс,
steady7.243/7.500 из8Мбит/с. Общая задача остаётся открытой.
Дальше: малый одиночный дуплекс, STCP backpressure, смена RTT нескольких путей/BW и повторный отказ.
Логи: /tmp/etcp-rtt-age-before.log, /tmp/etcp-rtt-growth-before.log,
/tmp/etcp-rtt-change-probe.log, /tmp/etcp-rtt-change-control.log;
/tmp/etcp-rtt-final-{bbr,windows,windows-real,transport,session,model-debug,full-check}.log,
/tmp/etcp-rtt-final-asan-*.log, /tmp/etcp-rtt-final-matrix.log/.csv,
/tmp/etcp-rtt-final-matrix-diag.csv. Проверены8678 срезов; отчёт /tmp/etcp-rtt-final-matrix.html.
Отдельные330 срезов RTT и графики: /tmp/etcp-rtt-final-rtt-change.csv/.html;
сводка /tmp/etcp-rtt-final-summary.json. Повтор: UTUN_MULTIPATH_DIAG=/tmp/rtt.csv
/tmp/etcp-rtt-complete-{windows,windows-real,asan-windows,full-check}.log,
/tmp/etcp-rtt-close-{transport,session,model-debug}.log, /tmp/etcp-rtt-close-asan-*.log,
/tmp/etcp-rtt-complete-matrix.log/.csv, /tmp/etcp-rtt-complete-matrix-diag.csv.
Проверены8652 среза; отчёт /tmp/etcp-rtt-complete-matrix.html.
Отдельные332 среза RTT и графики: /tmp/etcp-rtt-complete-rtt-change.csv/.html;
сводка /tmp/etcp-rtt-complete-summary.json. Негативные регрессии пересчёта/порядка callback:
/tmp/etcp-rto-rearm-before.log и /tmp/etcp-rtt-close-before-asan.log.
Повтор: UTUN_MULTIPATH_DIAG=/tmp/rtt.csv
./tests/test_etcp_multipath rtt-change. Диагностика модели: UTUN_TEST_DEBUG=1 ./tests/test_etcp_bbr.
Предыдущий этап: выбор часов BW.
+9 -6
View File
@@ -108,13 +108,16 @@
Исправлено замораживание DATA-измерений при скачке RTT: RTO берёт max(DATA EWMA, timestamp-RTT своего линка).
Формула1.2*RTT+1.5*DATA_jitter+3мс и clamp10мс..1с сохранены; BBR обновляют только действующие DATA ACK.
Новый профиль rtt-change:20->100->20мс, проверяет обновление RTT, снятие stalled, старение/снижение minRTT и доставку.
DATA-измерения возобновились примерно за202мс, после перехода повторов нет; minRTT103.271мс, после возврата24.068мс.
DATA-измерения возобновились примерно за203мс, после перехода повторов нет; minRTT103.794мс, после возврата23.941мс.
До фикса стенд дал2035 повторов и остановку DATA ACK-модели; отдельная регрессия настоящего retrans-таймера также FAIL.
BBR24/24; test_etcp_windows62 сценария в обоих режимах часов PASS; четыре ASAN/UBSan-теста и ASAN rtt-change без ошибок/утечек.
Check.sh186/186, proxy9/9, burst1/1, load8/8 PASS,134217728 проверенных байт,186с.
Полная матрица: первые6 скоростных профилей, все9 отказов и rtt-change PASS; остался1 FAIL2Мбит/с:1.699<1.700.
Одиночный8Мбит/с7.085/7.063, агрегат8.734/8.820 из10. Далее —2Мбит/с, STCP backpressure, смена RTT нескольких путей/BW и повторный отказ.
Логи/CSV /tmp/etcp-rtt-final-*;8678 срезов проверены, отдельные330 RTT: /tmp/etcp-rtt-final-rtt-change.csv/.html.
Пересчёт attempts-таймера вызывается и при сокращении timestamp-RTT без новых DATA/ACK: регрессия123->27мс
до фикса сохраняла96мс лишнего ожидания. Пересчёт идёт до внешнего RTT callback, который может закрыть conn/линк;
OOM таймера также безопасно закрывает conn из RX. Негативный ASAN-тест ловит UAF при обратном порядке.
BBR24/24; test_etcp_windows63 сценария в обоих режимах часов PASS; четыре ASAN/UBSan-теста и ASAN rtt-change без ошибок/утечек.
Check.sh186/186, proxy9/9, burst1/1, load8/8 PASS,134217728 проверенных байт,189с после последней правки.
Полная матрица: первые6 скоростных профилей, все9 отказов и rtt-change PASS; остался1 FAIL2Мбит/с:1.662<1.700.
Одиночный8Мбит/с7.076/7.019, агрегат8.737/8.717 из10. Далее —2Мбит/с, STCP backpressure, смена RTT нескольких путей/BW и повторный отказ.
Логи/CSV /tmp/etcp-rtt-complete-* и /tmp/etcp-rtt-close-*;8652 среза проверены, отдельные332 RTT: /tmp/etcp-rtt-complete-rtt-change.csv/.html.
Детали: doc/etcp_multipath_plan.txt. Предыдущий этап — исправление BW:
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).