Document BBR queue time policy and its physical delay limits

This commit is contained in:
evgeny committed 2026-10-23 01:03:27 +02:00
1 parent 34e3d9bba0
commit 7e0a0905e5
2 files changed
+18 -6

No files matched your search

+3
View File
@@ -67,6 +67,9 @@ BBR каждого линка получает ACK/loss samples и возвра
8192 — нижняя допустимая граница настройки bbr_max_cwnd; транспорт не повышает до неё текущее окно.
PROBE_RTT осушает flight до max(4*MSS, 0.5*BDP), выдерживает >=200мс и раунд ACK, затем восстанавливает окно.
MSS — размер DATA-фрагмента normalizer без заголовков; начальное окно UDP и STCP равно 4*MSS с верхним лимитом конфига.
В PROBE_BW действует дополнительный целевой бюджет очереди 20мс: всё окно, включая резервы ACK и PROBE_UP,
ограничивается max(4*MSS, BDP + BW*20мс) по min_rtt. STARTUP/DRAIN не ограничиваются этим бюджетом.
Это цель по оценкам BBR; минимум окна, изменение полосы и очереди обратного пути могут давать большую задержку.
Отказ из-за нехватки окна сохраняет cwnd_limited до следующего ACK: вычитание ACK
не должно скрывать этот факт от BBR. app_limited учитывает ожидающие очереди и
pending/частичный буфер normalizer; ограничение окном не означает отсутствие данных.
+15 -6
View File
@@ -50,12 +50,21 @@ PROBE_RTT осушает flight до `max(4*MSS, 0.5*BDP)`, выдерживае
DATA, отправленные в PROBE_RTT, помечаются app_limited, чтобы низкая скорость осушения не понижала оценку полосы.
ACK-only не ограничивается этим pacing, но проходит общую физическую очередь канала.
Целевое окно PROBE_BW равно `2*BDP + ACK-резерв`, в PROBE_UP добавляются ещё `2*MSS`;
применяются также минимум окна и изученные ограничения inflight. Это резерв для утилизации канала,
а не фиксированный лимит времени очереди. Например, в диагностике канала 2Мбит/с с базовым RTT=20мс
модель получила min_rtt=24мс и окно `12060 + 1893 + 2194 = 16147` байт DATA.
Наблюдаемая очередь 44–48мс укладывается в такое окно, но нарушает отдельное требование теста <=40мс.
Для фиксированного бюджета задержки нужна отдельная политика ограничения; это изменение поведения контроллера.
Штатное целевое окно PROBE_BW равно `2*BDP + ACK-резерв`, в PROBE_UP добавляются ещё `2*MSS`;
применяются также минимум окна и изученные ограничения inflight. Без отдельного ограничения такие резервы
на канале 2Мбит/с с базовым RTT=20мс давали окно `12060 + 1893 + 2194 = 16147` байт и очередь 44–48мс.
В адаптации ETCP итоговое окно всех фаз PROBE_BW дополнительно ограничено бюджетом очереди:
`max(4*MSS, BDP + BW*queue_budget_us/1000000)`. `BDP` использует min_rtt, а не текущий RTT с очередью.
Резервы ACK/PROBE_UP входят в этот предел. `bbr_init` задаёт `queue_budget_us=20000`; значение можно менять
в uasync-потоке, `0` отключает политику. `queue_cwnd_cap` показывает действующий предел в DATA-байтах;
`0` означает, что ограничение не активно. Callback окна получает уже ограниченный результат, включая fast path.
Это целевая задержка по оценке полосы, а не гарантия физического времени очереди. STARTUP и DRAIN
сохраняют свои правила поиска полосы/осушения. Минимум 4*MSS может требовать больше 20мс сериализации;
при неизвестном min_rtt или нулевой оценке полосы дополнительный предел не применяется.
Изменение пропускной способности и другой путь возврата ACK могут делать оценку неточной.
После изучения полосы меньший предел может ограничивать скорость; реальную очередь отдельно измеряет multipath-тест.
### Тестирование
Поле `now_tb` позволяет подменять реальное время (`get_time_tb()`) на заданное — при `now_tb == 0` используется `get_time_tb()`, иначе управляемое значение. `on_cwnd_update` — callback для отслеживания изменений cwnd в тестах.