предисловие
TCP BBR — это новый алгоритм управления перегрузкой TCP, опубликованный Neal Cardwell и Yuchung Cheng из Google, который широко используется в Google и официально выпущен в версии linux 4.9. Однако впервые я столкнулся с BBR, когда создавал онлайн-инструмент. Я почувствовал, что скорость доступа после включения BBR значительно улучшилась. Здесь я в основном суммирую соответствующие знания, которые я получил из Интернета.
Введение в BBR
Название BBR на самом деле является аббревиатурой от узких мест полосы пропускания и времени распространения туда и обратно, что указывает на основной рабочий механизм BBR: контроль перегрузки путем обнаружения двух индикаторов пропускной способности и RTT. Основные особенности алгоритма BBR заключаются в следующем:
- BBR не учитывает потерю пакетов, потому что потеря пакетов (в наши дни) не обязательно является признаком перегрузки сети.
- BBR полагается на обнаруженную пропускную способность в реальном времени и RTT для определения размера окна перегрузки: размер окна = пропускная способность * RTT.
Потеря пакетов не обязательно равна перегрузке
В статье "Предотвращение и контроль перегрузок", опубликованной в 1988 г., Ван Якобсон предположил, что потеря пакетов может использоваться как сигнал о перегрузке. Этот вывод был сделан в соответствии с производительностью оборудования в то время, и многие последующие алгоритмы управления перегрузкой также были основаны на Для достижения (конечно, есть исключения, такие как Vegas и Westwood), и теперь, когда пропускная способность сетевой карты увеличилась с Мбит/с до Гбит/с, корреляция между потерей пакетов и перегрузкой стала слабой.
В текущих сетевых условиях потеря пакетов может быть вызвана перегрузкой или ошибками. Внутри центра обработки данных процент потери пакетов с ошибками невелик (около 1 на 100 000), в глобальной сети он намного выше. Что еще более важно, в длинном толстом конвейере с определенной скоростью потери пакетов с ошибками (сеть с большой пропускной способностью и высокой задержкой) традиционный алгоритм управления перегрузкой будет сводить скорость передачи к относительно небольшому значению, что приводит к очень высокой загрузке сети. .
Кроме того, многие устройства в сетевом канале будут иметь буферы для поглощения колебаний в сети и повышения вероятности успешной пересылки.Однако, когда традиционный алгоритм управления перегрузкой на основе потери пакетов обнаруживает потерю пакетов, эти буферы уже заполнены.Эта проблема становится буферным (buffer bloat). Есть два основных эффекта раздувания буфера:
- Задержка будет увеличиваться, и чем больше буфер, тем больше будет увеличиваться задержка
- Когда соединение между сетевым узким местом больше, пакет может возникнуть из-за заполнения буфера. Но эта потеря не означает перегрузки.
Подводя итог, времена изменились, и потеря пакетов не обязательно означает перегрузку.
Определить окно перегрузки на основе пропускной способности и RTT
Поскольку BBR не использует потерю пакетов в качестве сигнала о перегрузке, необходимо найти другие механизмы для обнаружения перегрузки. Алгоритм Vegas определяет наличие перегрузки на основе задержки.Алгоритм Westwood определяет размер окна перегрузки на основе пропускной способности и RTT.Однако из-за реализации контроля перегрузки в Linux метод расчета пропускной способности и RTT, предложенный Westwood, является очень грубым. . BBR также использует тот же метод, что и Westwood, но его авторы также улучшили реализацию контроля перегрузки Linux, так что BBR можно более полно контролировать.
Максимальная пропускная способность, которую может передавать сетевое соединение, зависит от физической задержки (время распространения туда-обратно, сокращенно RTprop в BBR) в сетевом соединении и пропускной способности сегмента с самой низкой скоростью в соединении (время распространения-бутылки). Произведение полосы пропускания шеи, сокращенно BtlBw в BBR. Этот продукт называется BDP (Bottle-neck Bandwidth Delay Production), то есть BDP=BltBw x RTprop, то есть максимальное количество данных, буферизованных каналом, заполняется данными без заполнения устройства промежуточного звена. Что преследует BBR, так это оптимальную точку скорости передачи данных, достигающую BDP.
Принцип неопределенности полосы пропускания и RTT
В сетевом канале RTprop и BtlBw фактически являются двумя независимыми переменными, каждая из которых может увеличиваться или уменьшаться, в то время как другая остается неизменной. Для точного измерения минимального значения задержки необходимо убедиться, что буфер сетевого устройства пуст, и чем меньше трафика на канале, тем лучше, но пропускная способность в это время невелика; измерить максимальное значение пропускной способности, он должен быть отправлен как можно больше данных, чтобы заполнить пропускную способность сети, буфер будет частично заполнен, а задержка возрастет; это немного похоже на принцип неопределенности в физике.
Решение BBR этой проблемы состоит в том, чтобы принять минимальное значение RTprop и максимальное значение BtlBw в пределах определенного временного диапазона в качестве расчетного значения.
Этапы алгоритма BBR
Когда соединение установлено, BBR также постепенно увеличивает скорость отправки аналогично медленному старту, а затем вычисляет BDP в соответствии с полученным подтверждением. фаза (этот процесс совершенно не зависит от того, есть потеря пакетов или нет). В процессе медленного старта, поскольку буфер промежуточного устройства вряд ли будет заполнен, минимальной задержкой в этом процессе является начальная расчетная минимальная задержка, а максимальная пропускная способность в конце медленного старта — начальная расчетная максимальная задержка.
После завершения медленного старта, чтобы очистить данные, которые могут быть заполнены в буфере в процессе медленного старта, BBR перейдет к этапу очистки, во время которого скорость передачи будет снижена.Если в буфере есть данные , уменьшение скорости передачи вызовет задержки вниз (буфер постепенно опорожняется) до тех пор, пока задержка не перестанет падать.
После фазы опорожнения наступает устойчивое состояние, в котором полоса пропускания и задержка зонда чередуются. Фаза проверки пропускной способности представляет собой систему с положительной обратной связью: периодически пытайтесь увеличивать скорость отправки пакетов, и если скорость получения подтверждений также увеличивается, увеличивайте скорость отправки пакетов еще больше. В частности, при каждых 8 RTT в качестве цикла в первом RTT старайтесь отправлять данные со скоростью 5/4 расчетной пропускной способности, а во втором RTT, чтобы очистить лишние пакеты, отправленные предыдущим RTT, Отправляйте данные на 3/4 предполагаемой пропускной способности. В оставшихся 6 RTT используйте расчетную пропускную способность для отправки пакетов (оценочная пропускная способность может быть обновлена в предыдущем процессе). Этот механизм позволяет BBR быстро увеличивать скорость отправки при увеличении пропускной способности, но требуется определенное время, чтобы BBR снизился до стабильного уровня при уменьшении пропускной способности.
В дополнение к определению пропускной способности BBR также выполняет обнаружение минимальной задержки. Каждые 10 с, если минимальное значение RTT не изменяется (т. е. не найдена более низкая задержка), начинается фаза обнаружения задержки. Фаза обнаружения задержки длится всего 200 мс (или задержка туда-обратно, если последняя больше), а окно отправки фиксируется на уровне 4 пакетов за это время, то есть пакеты почти не отправляются. Минимальная задержка, измеренная в течение этого периода времени, служит новой оценкой задержки. То есть около 2% времени BBR измеряет задержку с очень низкой скоростью передачи пакетов.
Суммировать
На этот раз я в основном резюмирую характеристики и различные этапы BBR, но BBR — это не идеальный алгоритм управления перегрузкой, который заметает все. Его нужно объединить с реальной сценой, чтобы проявить его силу. Я продолжу понимать его позже.