Сетевой планировщик
Сетевой планировщик , также называемый планировщиком пакетов , дисциплиной очередей ( qdisc ) или алгоритмом организации очередей , является арбитром на узле в сети связи с коммутацией пакетов . Он управляет последовательностью сетевых пакетов передачи и приема в очередях и стека протоколов контроллера сетевого интерфейса . доступно несколько сетевых планировщиков Для различных операционных систем , которые реализуют многие из существующих алгоритмов сетевого планирования .
Логика сетевого планировщика решает, какой сетевой пакет пересылать следующим. Сетевой планировщик связан с системой массового обслуживания, временно сохраняя сетевые пакеты до тех пор, пока они не будут переданы. Системы могут иметь одну или несколько очередей, и в этом случае каждая из них может содержать пакеты одного потока , классификации или приоритета.
В некоторых случаях может оказаться невозможным запланировать все передачи в рамках ограничений системы. В этих случаях сетевой планировщик отвечает за принятие решения о том, какой трафик пересылать, а какой отбрасывать .
Терминология и обязанности [ править ]
Сетевой планировщик может нести ответственность за реализацию конкретных инициатив по управлению сетевым трафиком . Контроль сетевого трафика — это общий термин для всех мер, направленных на снижение перегрузки сети , задержек и потерь пакетов. В частности, активное управление очередью (AQM) — это выборочное удаление сетевых пакетов, находящихся в очереди, для достижения более широкой цели — предотвращения чрезмерной перегрузки сети. Планировщик должен выбрать, какие пакеты отбрасывать. Формирование трафика сглаживает требования к полосе пропускания потоков трафика за счет задержки пакетов передачи, когда они ставятся в очередь пакетами. Планировщик определяет время для передаваемых пакетов. Качество обслуживания (QoS) — это приоритезация трафика на основе класса обслуживания ( Дифференцированные услуги ) или зарезервированного соединения ( Интегрированные услуги ).
Алгоритмы [ править ]
С течением времени было разработано множество дисциплин сетевых очередей. Каждый из них обеспечивает определенное переупорядочение или удаление сетевых пакетов внутри различных буферов передачи или приема . [1] Дисциплины организации очередей обычно используются как попытки компенсировать различные сетевые условия, например, уменьшить задержку для определенных классов сетевых пакетов, и обычно используются как часть мер QoS. [2] [3] [4]
Классовые дисциплины очередей позволяют создавать классы, которые работают как ветви дерева. Затем можно установить правила для фильтрации пакетов по каждому классу. Каждому классу может быть назначена другая классовая или бесклассовая дисциплина массового обслуживания. Бесклассовые дисциплины массового обслуживания не позволяют добавлять к ним дополнительные дисциплины массового обслуживания. [5]
Примеры алгоритмов, подходящих для управления сетевым трафиком, включают:
Алгоритм | Акроним | Тип | Аппаратная поддержка |
---|---|---|---|
Общий алгоритм скорости передачи данных | ГКРА | ||
ВЫБЕРИТЕ и убейте для не отвечающих потоков | Душить | Бесклассовый | |
Контролируемая задержка | КоДел | Бесклассовый | |
Распространенные приложения продолжают улучшаться [6] | ТОРТ | ||
Сначала самое раннее время передачи | ETF | Бесклассовый | Да |
Первым пришел, первым вышел | ФИФО | Бесклассовый | |
Честная очередь | часто задаваемые вопросы | Бесклассовый | |
Задержка, контролируемая справедливой организацией очереди | FQ-CoDel | Бесклассовый | |
Улучшение организации очереди потоков с помощью пропорционального интегрального контроллера | FQ-ПИРОГ | Бесклассовый | |
Обобщенное случайное раннее обнаружение | ОЦЕНКА | Бесклассовый | |
Фильтр тяжелых нападающих [7] | ХХФ | Бесклассовый | |
Приоритет нескольких очередей | MQ-PRIO | Бесклассовый | Да |
Многохвостый | МУЛЬТИК | Бесклассовый | Да |
Сетевой эмулятор [8] | Я НЕ | Бесклассовый | |
Пропорциональный интегральный контроллер с расширенными возможностями [9] | В | Бесклассовый | |
Случайное раннее обнаружение | КРАСНЫЙ | Бесклассовый | |
Стохастический Ярмарка Синий | СФБ | Бесклассовый | |
Стохастическая справедливость в очередях | СФК | Бесклассовый | |
Фильтр сегмента токенов | ТБФ | Бесклассовый | |
Очередь на основе классов | CBQ | классный | |
Кредитный формирователь | CBS | классный | Да |
Раунд-робин по дефициту [10] | СРБ | классный | |
Расширенный выбор коробки передач | ETS | классный | |
Иерархическая кривая справедливого обслуживания | ВФСК | классный | |
Иерархический сегмент токенов [11] | ХТБ | классный | |
Приоритет | ПРИО | классный | |
Быстрая справедливая очередь [12] | QFQ | классный | |
Формирователь приоритетов с учетом времени | ТАПРИО | классный | Да |
Некоторые из вышеперечисленных были реализованы в виде модулей ядра Linux. [13] [14] и находятся в свободном доступе .
Буферраздувание [ править ]
Раздувание буфера — это явление в сетях с коммутацией пакетов, в котором избыточная буферизация пакетов приводит к высокой задержке и колебаниям задержки пакетов . Раздувание буфера можно решить с помощью сетевого планировщика, который стратегически отбрасывает пакеты, чтобы избежать ненужной задержки буферизации. Примеры включают CoDel , FQ-CoDel и случайное раннее обнаружение .
Реализации [ править ]
Этот раздел нуждается в расширении . Вы можете помочь, добавив к нему . ( октябрь 2018 г. ) |
Ядро Linux [ править ]
Планировщик пакетов ядра Linux является неотъемлемой частью сетевого стека ядра Linux и управляет кольцевыми буферами передачи и приема всех сетевых карт, например, работая на уровне 2 модели OSI и обрабатывая кадры Ethernet .
Планировщик пакетов настраивается с помощью утилиты под названием tc
(сокращение от «регулирование дорожного движения»). В качестве дисциплины организации очередей по умолчанию планировщик пакетов использует реализацию FIFO, называемую pfifo_fast . [15] хотя systemd, начиная с версии 217, меняет дисциплину очередей по умолчанию на fq_codel
. [16]
The ifconfig
и ip
утилиты позволяют системным администраторам настраивать размеры буфера txqueuelen
и rxqueuelen
для каждого устройства отдельно по количеству кадров Ethernet независимо от их размера. Сетевой стек ядра Linux содержит несколько других буферов, которые не управляются сетевым планировщиком. [а]
Фильтры Berkeley Packet Filter можно прикрепить к классификаторам планировщика пакетов. Функциональность eBPF, представленная в версии 4.1 ядра Linux в 2015 году, расширяет классические программируемые классификаторы BPF до eBPF. [17] Их можно скомпилировать с помощью LLVM eBPF и загрузить в работающее ядро с помощью команды tc
полезность. [18]
BSD и OpenBSD [ править ]
ALTQ — реализация сетевого планировщика для BSD . Начиная с версии OpenBSD 5.5, ALTQ был заменен планировщиком HFSC.
См. также [ править ]
Примечания [ править ]
- ^ Общий размер всех буферов стал предметом критики со стороны проекта Bufferbloat , который предоставил частичное решение с помощью CoDel, которое в первую очередь тестировалось в OpenWrt .
Ссылки [ править ]
- ^ «HOWTO по управлению трафиком: бесклассовые дисциплины массового обслуживания (qdiscs)» . tldp.org . Проверено 24 ноября 2013 г.
- ^ «HOWTO по управлению трафиком: компоненты управления трафиком в Linux» . tldp.org . Проверено 24 ноября 2013 г.
- ^ «HOWTO по управлению дорожным движением: традиционные элементы управления дорожным движением» . tldp.org . Проверено 24 ноября 2013 г.
- ^ «Дисциплины организации очередей: порядок передачи и отбрасывания пакетов» (PDF) . тау.ac.il . 25 октября 2006 года . Проверено 18 марта 2014 г.
- ^ «Расширенное управление трафиком — ArchWiki» . wiki.archlinux.org . Проверено 11 сентября 2023 г.
- ^ «Пусть управляют ТОРТОМ» . LWN.net .
- ^ «Qdisc фильтра тяжелых нападающих» . ядро.орг .
- ^ «Модуль сетевого планировщика ядра Linux-эмулятора» . ядро.орг . Проверено 7 сентября 2013 г.
- ^ «Усовершенствованный пропорциональный интегральный контроллер (PIE)» . ядро.орг .
- ^ «Модуль сетевого планировщика ядра DRR Linux» . ядро.орг . Проверено 7 сентября 2013 г.
- ^ «Модуль сетевого планировщика ядра HTB Linux» . ядро.орг . Проверено 7 сентября 2013 г.
- ^ «Модуль сетевого планировщика ядра QFQ Linux» . ядро.орг . Проверено 7 сентября 2013 г.
- ^ «Сетевой планировщик ядра Linux» . ядро.орг . 26 декабря 2012 г. Проверено 7 сентября 2013 г.
- ^ «tc(8) — страница руководства Linux» . man7.org . Проверено 11 сентября 2023 г.
- ^ «Практическое руководство по расширенной маршрутизации и управлению трафиком в Linux, раздел 9.2.1. pfifo_fast» . lartc.org . 19 мая 2012 г. Проверено 19 сентября 2014 г.
- ^ «Диспетчер систем и служб systemd: файл новостей» . сайт freedesktop.org . 22 мая 2015 г. Проверено 9 июня 2015 г.
- ^ «Ядро Linux 4.1, Раздел 11. Работа в сети» . kernelnewbies.org . 21 июня 2015 г.
- ^ «Справочное руководство по BPF и XDP» . Веб-сайт документации Cilium .