diff --git a/doc/etcp_multipath_plan.txt b/doc/etcp_multipath_plan.txt index 5f0b2ed8..37f02ea0 100644 --- a/doc/etcp_multipath_plan.txt +++ b/doc/etcp_multipath_plan.txt @@ -9,6 +9,11 @@ STARTUP/DRAIN, сериализация и обратный трафик не д В штатном тесте equal получено 14.464/16Мбит/с, bandwidth — 9.060/10Мбит/с; очередь медленного канала в bandwidth сократилась примерно с 47 до 21мс. Изменения протокола и учёта попыток ниже ещё не реализованы. +По уточнению пользователя расчётный RTO ограничен снизу 10мс, сверху 1с. +Текущая общая формула 2*(RTT+jitter) сохранена; нижняя граница уже исправлена. +test_etcp_windows: 17 сценариев PASS, включая семь проверок RTO на управляемых +и обычных часах (нижняя граница, RTT20/200мс, jitter, верхняя граница). +Логи: /tmp/etcp-rto-windows.log, /tmp/etcp-rto-windows-real.log. Что подтверждено кодом и диагностикой @@ -221,7 +226,8 @@ uint8: хранить факт состоявшейся отправки отд перестаёт соответствовать новому владению. FIFO допустима при одном текущем RTO для всех попыток линка; пересчитывать таймер при его смене. До первого DATA ACK использовать RTT того же KA-пути как начальную оценку - либо консервативный начальный RTO; не начинать неизвестный путь с 5мс. + либо консервативный начальный RTO. Расчёт по собственным RTT/jitter с запасом + ограничить диапазоном 10мс..1с; 10мс — нижняя граница, не верхняя. Добавить ротацию retry сразу, пока старый канал ещё UP; не откладывать до DOWN. Не оставлять промежуточный формат, в котором новый ACK продолжает обращаться только к last_link. diff --git a/doc/etcp_protocol.txt b/doc/etcp_protocol.txt index 8b5825a1..dc9f0e07 100644 --- a/doc/etcp_protocol.txt +++ b/doc/etcp_protocol.txt @@ -31,7 +31,12 @@ HELLO/CHALLENGE/CONFIRM и keepalive передаются своим незав пересканирование inflight: - запускается при добавлении пакета в очередь ожидания ACK (wait_ack_cb). устанавливается таймер на первый неистекший пакет. - возраст последней отправки сравнивается с (RTT_avg10*32+jitter*32)/16, - ограниченным диапазоном 50..10000 таймбаз (5ms..1s). + ограниченным диапазоном 100..10000 таймбаз (10ms..1s). + RTT_avg10 — историческое имя максимального RTT среди links; jitter — среднее + по links значение link->jitter/32768. Оба значения здесь в единицах 0.1ms. + При текущих коэффициентах формула равна 2*(RTT_avg10+jitter), включая запас. + Проверка таймером назначается с дополнительной 1ms и округлением uasync вверх + до миллисекунды; фактический callback может выполняться позже расчётного RTO. - истёкший пакет освобождает окно прежнего линка и переходит в input_send_q; его новая попытка проходит обычный допуск по окну и pacing выбранного линка. - очередь FIFO (сортирована по timestamp добавления = времени отправки), сканирование прекращается на первом неистекшем пакете