diff --git a/doc/etcp_multipath_plan.txt b/doc/etcp_multipath_plan.txt index 4bf4d9d2..df5459fe 100644 --- a/doc/etcp_multipath_plan.txt +++ b/doc/etcp_multipath_plan.txt @@ -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. diff --git a/doc/tasks.md b/doc/tasks.md index aa5abbd4..56420c94 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -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).