Record retry scheduler architecture and regression coverage
This commit is contained in:
1 parent
3d40951e66
commit
a2f9b76d10
2 files changed
+48
No files matched your search
@@ -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 транспортом, а не при подготовке пакета.
|
||||
|
||||
@@ -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мс.
|
||||
|
||||
Reference in new issue
Block a user