Record retry scheduler architecture and regression coverage

This commit is contained in:
evgeny committed 2026-10-24 14:43:03 +02:00
1 parent 3d40951e66
commit a2f9b76d10
2 files changed
+48

No files matched your search

+37
View File
@@ -3,6 +3,43 @@ ETCP: независимая обратная связь каналов и до
Статус
24.10.2026: реализованы сканирование send_q, история путей пакета и быстрое застревание.
Остались прежние input_send_q/input_wait_ack: первый готовый повтор имеет приоритет,
иначе выбирается первый готовый новый DATA. Заблокированная запись остаётся на месте
и не мешает следующим. Если кандидата нет, допускается одна подгрузка из input_queue
в пределах общего бюджета unacked_bytes/optimal_inflight и приёмного окна пира.
После синхронного callback проверяются reset/close/эпоха; прежний указатель линка не используется.
Во время ограниченной burst-серии готовый повтор другого пути ждёт её завершения;
FILLER сохраняет измерение, а новые DATA не обгоняют этот повтор.
Каждый логический пакет хранит32 байта битовой истории живых слотов local_link_id.
Пока есть неиспользованный допустимый путь, повтор ждёт его cwnd/pacer, а не начинает
новый обход уже использованных. После полного обхода прежний путь также уступает
другой допустимой альтернативе. История/last_rr_link меняются только после принятия
DATA транспортом; rollback их сохраняет. Удаление линка очищает слот до unlink и
callbacks, поэтому новый линк с тем же local_link_id не наследует старую историю.
Три RTO физических попыток без ACK-прогресса ставят tx_stalled. Пока есть хотя бы
один незастрявший initialized+UP путь, повторы исключают застрявшие, даже когда
рабочий временно занят. Если застряли все — разрешены все UP-пути. Новые DATA
используют прежний выбор и могут проверить восстановление: флаг снимает действующий
ACK собственной попытки, отправленной после установки флага. Старый/чужой ACK
этого не делает. Reset очищает состояние; физический UP, ACK/keepalive и формула RTO
сохранены. Новых очередей, payload-копий, таймеров или ранних повторов до RTO нет.
Windows51 сценарий PASS с управляемыми и реальными часами. Покрыты заблокированный
префикс256 записей, приоритет повторов, общий бюджет, OOM, rollback, полный обход,
ID255/переиспользование слота из callback, три RTO, старые ACK, восстановление,
все застрявшие пути и reset/close/удаление burst-линка из callback подгрузки.
Восемь профильных тестов ASAN/UBSan с detect_leaks=1 проходят без ошибок/утечек.
Контроль занятости рабочего пути1мс теперь проходит: latency377.012мс вместо736.623мс,
gap206.810мс, ready_wait2.318мс при бюджете460.552мс. Отрицательный контроль200мс
по-прежнему проваливает ready_wait (200.764мс), gap и latency; пороги не ослаблены.
Логи: /tmp/etcp-send-scan-{windows-final,real-time,busy_1ms,ready_delay_200ms}.log,
/tmp/etcp-send-scan-asan-test_*.log.
Предыдущая диагностика (до реализации сканирования и истории):
24.10.2026: проверки отказов разделены на RTO, готовность повтора и доставку.
В этом этапе менялись только тесты/диагностика, логика ETCP сохранена.
TX учитывается после принятия send транспортом, а не при подготовке пакета.
+11
View File
@@ -25,6 +25,17 @@
Windows/FreeBSD runtime не проверялся.
[ ] **ETCP: полезная утилизация нескольких каналов и доставка при зависании части линков** — общая задача открыта.
24.10.2026: реализованы сканирование send_q с приоритетом готовых повторов и ограниченная подгрузка новых DATA.
Заблокированный пакет пропускается. История путей пакета (32 байта) исключает новый обход до перебора допустимых;
история/RR фиксируются после принятого send, удаление линка очищает слот до callbacks/повторной выдачи ID.
После3 RTO без ACK-прогресса tx_stalled исключает путь из повторов при наличии незастрявшего UP-пути.
Все застрявшие пути допускаются, новые DATA сохраняют прежний выбор; действующий ACK отправки после флага снимает его.
Старый/чужой ACK не восстанавливает путь; reset очищает состояние. Новых очередей/таймеров/копий нет, RTO сохранён.
Windows51 сценарий PASS с управляемыми/реальными часами; восемь ASAN/UBSan-тестов без ошибок/утечек.
Контроль занятого на1мс рабочего пути: latency377.012 вместо736.623мс, ready_wait2.318мс, профиль PASS.
Отрицательный контроль задержки готового повтора200мс остаётся FAIL по очереди и общей задержке.
Логи: /tmp/etcp-send-scan-*.log; подробности — doc/etcp_multipath_plan.txt.
Предыдущая диагностика:
24.10.2026: тесты отдельно проверяют обработку RTO (опоздание<=20мс), ожидание готового повтора (<=100мс)
и доставку сверх заданной задержки канала (<=100мс). TX учитывается после принятия send.
Быстрые профили сохраняют общий предел100мс; длинные учитывают по одному RTO отказавших путей плюс100мс.