Document BBR queue time policy and its physical delay limits
This commit is contained in:
1 parent
34e3d9bba0
commit
7e0a0905e5
2 files changed
+18
-6
No files matched your search
@@ -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; ограничение окном не означает отсутствие данных.
|
||||
|
||||
@@ -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 в тестах.
|
||||
|
||||
Reference in new issue
Block a user