Проект по избавлению Linux-ядра от излишней сетевой буферизации

Анонсировано создание экспериментального репозитория Linux-ядра - debloat-testing, созданного для реализации идей по избавлению сетевых подсистем от излишней буферизации. Репозиторий создан в рамках проекта BufferBloat.net, изучающего феномен негативного влияния промежуточной буферизации пакетов на пропускную способность, однородность потока (jitter) и время прохождения пакетов (latency). После проверки и стабилизации, обкатанные в ветке debloat-testing патчи будут направлены для включения в состав основного Linux-ядра.

Изначально термин Bufferbloat несколько месяцев назад предложил Джим Гетиc (Jim Gettys), член комитета W3C и разработчик спецификации HTTP/1.1, который в цикле статей достаточно подробно описал связь буферизации с проблемами, приводящими к возникновению дополнительных задержек и понижению пропускной способности. Последние годы актуальность проблемы значительно возросла, так как удешевление памяти привело к излишнему пристрастию производителей маршрутизаторов и коммутаторов, а также разработчиков операционных систем к дополнительной буферизации сетевых пакетов. В конечном итоге это выливается в ощутимом снижении эффективности используемых алгоритмов контроля перегрузки (TCP congestion control), в большой степень полагающихся на потери пакетов при расчете доступной пропускной способности.

Буферизация затормаживает отбрасывание пакетов, в то время как алгоритм контроля перегрузки все наращивает и наращивает скорость, используя для обратной связи начало потери пакетов. В результате, так как снижения скорости из-за начала потери пакетов вовремя не происходит, алгоритм не может подобрать нужный баланс скорости потока, соотносящийся со скоростью физического линка. При этом чем больше размер буфера, тем больше становится задержка в доставке пакетов, так как реакция алгоритма контроля перегрузки следует только после заполнения буфера. У современных маршрутизаторов размер буфера исчисляется мегабайтами, т.е. величина задержки в принятии решения о понижении скорости потока может достигать 10 сек и более. Особенно чувствительны к проблемам излишней буферизации интерактивные виды трафика, например игры и VoIP, при этом методы приоритезации (QoS), при которых для определенного вида трафика создается отдельная очередь пакетов, мало помогают решению проблемы.

Представленная ветка debloat-testing является своего рода экспериментальной площадкой для обкатывания механизмов для решения вышеотмеченных проблем - от интеграции новых механизмов контроля перегрузки, до небольших оптимизаций и модификаций текущего кода. В частности, в debloat-testing уже интегрированы планировщики потока пакетов CHOKe (CHOose and Keep) и SFB (Stochastic Fair Blue scheduler), в подсистеме mac80211 реализован алгоритм eBDP для снижения задержек в беспроводных сетях, переработаны метода работы с очередями в драйвере iwlwifi, добавлены исправления в код драйверов e1000, e1000e и ath9k. Дополнительно подготовлен набор патчей для утилиты "tc" из пакета iproute2, в которых реализованы средства для управления планировщиками CHOKe AQM и SFB.

©  OpenNet