Record verified INIT recovery and BGP regression results

This commit is contained in:
evgeny committed 2026-10-23 14:24:31 +02:00
1 parent 5b8aba9c8b
commit cc01457957
2 files changed
+33 -17

No files matched your search

+19 -7
View File
@@ -72,13 +72,25 @@ jitter30мс есть у обеих формул и требует отдель
ранее подтверждённый дефект удаления активного temp по-прежнему остаётся открытым.
Логи: /tmp/etcp-rto-margin-full-check.log, /tmp/etcp-rto-margin-bgp-repeat.log.
Разбор BGP-падения: подтверждён дефект ETCP при односторонней потере A->B.
На B линки уже DOWN; его повторные INIT несут flag_up=0. На A ветка INIT
обновляет recv_keepalive/last_recv, но не remote_keepalive: прежнее 1 удерживает
часть входящих линков UP и маршрут A->C. Полный debug тоже воспроизводит падение;
оно не является только эффектом параллельного runner или уровня диагностики.
Тест получил снимки фаз/таймаута; логика ядра и пороги тестов не менялись.
Логи: /tmp/bgp-route-snapshot-2.log, /tmp/bgp-route-detailed-2.log.
Дефект BGP-падения при односторонней потере A->B исправлен в ETCP.
Повторный INIT с flag_up=0 больше не сохраняет устаревший remote_keepalive=1:
RX/remote/status учитываются до перезаписи входного буфера ответом. При DOWN
handshake отвечает и запускает keepalive для двусторонней проверки. Живой
альтернативный линк сохраняет UP соединения. RX защищён от close/удаления
линка из callbacks; повторы прежнего состояния не создают новых DOWN/UP.
INIT_RESPONSE проверяет полное тело >=64 байт без timestamp/flag_up и node_id
до изменения состояния; прежняя проверка общей длины пропускала тело 61..63 байта.
Новых таймеров, очередей, полей или изменений формата нет; пороги тестов сохранены.
test_etcp_init_liveness: 130 отказов с сохранением link/conn и владения pkt,
12 допустимых ответов, потери в обе стороны/оба порядка ключей, восстановление,
резервный линк, close/удаление линка из INIT и KA callbacks PASS.
Тест проходит также с обычными часами. Семь профильных тестов ASAN/UBSan
с detect_leaks=1 PASS; дополненный сценарий удаления линка повторён отдельно.
BGP route exchange: 100/100 PASS (A<B:48, A>B:52; последние пять с debug).
Основной регрессионный набор: 184/184 PASS. Логи:
/tmp/etcp-init-boundary-before.log, /tmp/etcp-init-final-{liveness,realtime,asan-liveness}.log,
/tmp/etcp-init-fix-asan-test_*.log, /tmp/etcp-init-bgp-stable-*.log,
/tmp/etcp-init-fix-full-check.log. Скоростные ограничения и ранние копии остаются отдельной задачей.
Качество мультилинка: три последовательных прогона каждого скоростного профиля,
3с прогрев +4с измерение, штатный test_clock, UDP/dummynet и настоящее шифрование.
+14 -10
View File
@@ -28,7 +28,7 @@
Три прогона скоростей: 8+8 RTT20/20 — 13.868..14.083Мбит/с; RTT20/200 — 13.567..13.951;
2+8+2 RTT20/80/200 — 10.566..10.749 из12; 2+8 одновременно в обе стороны — 8.080..8.379 из10 на направление.
DATA-повторов в измеряемых исправных интервалах нет. Подробные результаты: /tmp/etcp-multilink-quality-20261023.csv/.txt.
BGP-падение локализовано до обработки INIT/remote_keepalive в ETCP (отдельная задача ниже).
BGP-падение из-за INIT/remote_keepalive исправлено; отдельная задача ниже содержит итог проверки.
Ранние копии до RTO, здоровье/пробы каналов и STCP backpressure пока не реализованы; пороги тестов сохранены.
OOM после принятия данных исправлен аварийной сменой эпохи с сохранением физических линков.
Старый поток отбрасывается без воспроизведения; после согласования владельцы получают REINIT.
@@ -52,15 +52,19 @@
Лог: /tmp/utun_encrypted_attachment_HwkBUM/test.log (удаление → отказ записи),
/tmp/etcp-oom-reinit-full-check.log; профильные OOM/ETCP sanitizer-тесты проходят.
[ ] **ETCP: входящий INIT сохраняет устаревший признак обратной достижимости** — локализовано 23.10.2026:
test_bgp_route_exchange падает при одностороннем разрыве A->B и наличии встречных client-линков B->A.
На B линки DOWN, повтор INIT несёт flag_up=0; на A обработчик запроса обновляет recv_keepalive/last_recv,
но не применяет flag_up к remote_keepalive. Старое remote_keepalive=1 удерживает UP и маршрут A->C.
Ошибка повторяется отдельно: 1/5 обычных запусков, затем 1/3 со снимками и 1/3 с полным debug.
Нужен единый переход состояния живости для принятого INIT и обычных пакетов с корректными DOWN/UP callbacks;
проверить односторонний разрыв в обе стороны, обе роли collision и восстановление без ложного UP.
Диагностика добавлена в тест, логика ядра пока не менялась. Логи: /tmp/bgp-route-snapshot-2.log,
/tmp/bgp-route-detailed-2.log (повторы INIT с flag_up=0 при сохранённом remote_keepalive=1).
[+] **ETCP: входящий INIT сохранял устаревший признак обратной достижимости** — исправлено 23.10.2026:
Принятый INIT обновляет RX и remote_keepalive до переиспользования буфера для ответа; flag_up=0 снимает ложный UP.
INIT/INIT_RESPONSE и обычный RX публикуют переходы живости с защитой от close/удаления линка из callback.
При DOWN handshake продолжает ответ/keepalive; исправный второй линк сохраняет UP соединения.
INIT_RESPONSE проверяет длину тела (>=64 байт без timestamp/flag_up) и node_id до изменения состояния.
Раньше проверка общей длины принимала усечённое тело 61..63 байта. Новых таймеров/очередей/полей нет.
test_etcp_init_liveness: 130 отказов без изменения link/conn и передачи владения pkt, 12 допустимых ответов;
оба направления односторонней потери, оба порядка ключей, восстановление без смены эпохи, резервный линк,
close и удаление link из INIT/keepalive callback PASS, также с обычными часами.
Семь профильных тестов ASAN/UBSan с detect_leaks=1 PASS; дополненный тест удаления link повторён отдельно.
BGP route exchange: 100/100 PASS (A<B:48, A>B:52; последние пять с debug). Основной набор: 184/184 PASS.
Логи: /tmp/etcp-init-boundary-before.log, /tmp/etcp-init-final-{liveness,realtime,asan-liveness}.log,
/tmp/etcp-init-fix-asan-test_*.log, /tmp/etcp-init-bgp-stable-*.log, /tmp/etcp-init-fix-full-check.log.
[+] **ETCP/BBR: бюджет очереди в установившемся режиме** — реализовано 23.10.2026 по выбору пользователя:
В PROBE_BW окно ограничено max(4*MSS, BDP + BW*20мс), с насыщением арифметики и учётом ACK/PROBE_UP резервов