Document namespace stream bench and completion after consumer drain

This commit is contained in:
evgeny committed 2026-10-12 00:01:40 +02:00
1 parent a877ba8a73
commit e78eaf45f7
2 files changed
+36 -2

No files matched your search

+10 -2
View File
@@ -34,6 +34,12 @@ python3 tests/stream_netns/run.py --duration 120 --faults
python3 tests/stream_netns/run.py --publisher n05 --tcp --faults
```
Чтобы требовать именно TCP/STCP, без возможности выбрать UDP:
```sh
python3 tests/stream_netns/run.py --publisher n05 --tcp-only --duration 20
```
Ту же проверку запускает отдельная ручная цель:
```sh
@@ -82,12 +88,14 @@ One-way latency измеряется по общему CLOCK_MONOTONIC ядра
По умолчанию результаты находятся в новом `tests/stream_netns/runs/<date-time>/`:
- `result.json` — PASS/FAIL, ошибка и фазы; `host-check.json` — сравнение основной сети, с исключением естественно уменьшающихся DHCP lifetime/cache timers.
- `result.json` — PASS/FAIL, ошибка, фазы, транспорт, bitrate, наблюдаемые обороты timestamp и результат сравнения основной сети; `host-check.json` — снимок сравнения, с исключением естественно уменьшающихся DHCP lifetime/cache timers.
- `calibration.json`, `topology.json`, `namespaces.json` — измерения, параметры, PID и inode namespace.
- `samples.jsonl`, `final-stats.json`, `summary.csv` — доставленные записи, GAP, p50/p95/p99/max latency, буферы, пробы, миграции и пути каждого субпотока.
- `samples.jsonl`, `final-stats.json`, `last-stats.json`, `summary.csv` — доставленные записи, GAP, p50/p95/p99/max latency, буферы, пробы, миграции, source timestamp, rates/lag/stops и пути каждого субпотока. Последний снимок сохраняется также при FAIL.
- `network.jsonl`, `network-initial.json`, `network-final.json`, `g_*.nft` — точные команды, ошибки, маршруты, tc counters и правила NAT.
- `nXX/utun.log`, `stderr.log`, `rpc.jsonl`, `node.conf`, `db/` — диагностика и состояние каждого процесса. Конфиги содержат **тестовые** приватные ключи.
Категория `stream=debug`, JOIN/Merkle/BGP/connection — `info`; ошибки остальных категорий сохраняются. Для диагностики очередей можно запросить RPC `{"id":"1","op":"stats","loads":"1"}`; обычные снимки не опрашивают отсутствующие peer-load записи, чтобы не засорять лог. Stdout агента зарезервирован для JSONL.
Ctrl+C и нормальное завершение закрывают процессы и namespace. PID namespace с `--kill-child` также ограничивает время жизни процессов при аварии launcher; namespace не закрепляются mount-именами на хосте. Файлы результатов сохраняются для анализа.
Короткий TCP-only прогон выявил остановку оптимизатора при END первого поставщика, до дочитывания потребителем FEC-пачки. Для этого случая добавлена регрессия в `test_stream_service`: END устанавливает подписанную границу, автоматические пробы и восстановление продолжаются до прохождения consumer cursor за эту границу. Стенд проверяет завершение у всех подписчиков, а не наличие END в одном сетевом handle.