Интерактивная система просмотра системных руководств (man-ов)
tc-cbq (8)
>> tc-cbq (8) ( Русские man: Команды системного администрирования )
tc-cbq (8) ( Linux man: Команды системного администрирования )
ИМЯ
CBQ - очередь, базирующая на классах
СИНТАКСИС
tc qdisc ... dev
УСТРОЙСТВО
( parent
classid
| root) [ handle
major:
] cbq [ allot
размер
] avpkt
размер
bandwidth
скорость
[ cell
размер
] [ ewma
степень
] [ mpu
размер
]
tc class ... dev
УСТРОЙСТВО
parent
major:[minor]
[ classid
major:minor
] cbq allot
размер
[ bandwidth
скорость
] [ rate
скорость
] prio
приоритет
[ weight
вес
] [ minburst
количество_пакетов
] [ maxburst
количество_пакетов
] [ ewma
степень
] [ cell
размер
] avpkt
размер
[ mpu
размер
] [ bounded isolated ] [ split
handle
& defmap
defmap
] [ estimator
интервал константа
]
ОПИСАНИЕ
Очередь, базирующая на классах (Class Based Queueing) реализует мощную иерархию классов.
Поддерживает ограничения и приоритеты. Разделение осуществляется
по времени простоя канала, вычисляемого на основании временных характеристик освобождения очереди и полосы
пропускания.
АЛГОРИТМ
При ограничении канала 10 мбит/с до 1 мбит/с, полоса простаивает 90% времени. Если это не так,
необходимо распределить трафик так, чтобы полоса простаивала 90% времени.
Во время операций эффективное время простоя вычисляется по EWMA (exponential
weighted moving average), которое основано на предположении, что последние пакеты экспоненциально
более важные, чем ранние. Средняя загрузка Unix рассчитывается таким же образом.
Вычисленное время простоя вычитается из значения EWMA и получается значение, называемое 'avgidle'.
Идеально загруженный канал имеет значение avgidle равным нулю: пакеты прибывают точно с заданным
интервалом.
Перегруженный канал имеет отрицательное значение avgidle и, если это отрицательное значение
слишком большое по модулю, CBQ забивается.
И наоборот, простаивающий канал имеет большое значение avgidle, которое позволяет
обеспечить канал бесконечного объема после нескольких часов отсутствия пакетов. Для
предотвращения таких перегибов, значение avgidle ограничивается значением
maxidle.
При переполнении канала, в теории, CBQ тоже может забиться на период между отправлением
пакетов. Однако в связи с ограничениями принятие решения по таймеру (см. параметр
minburst
ниже) это невозможно.
КЛАССИФИКАЦИЯ
В рамках одной очереди CBQ может существовать множество классов. Каждый из этих классов
имеет собственную очередь, по умолчанию
tc-pfifo(8).
При постановке пакета в очередь, он попадает в очередь на верхнем уровне и, с использованием
различных методов определяется, какой класс должен получить этот пакет.
Если не указаны необязательные параметры настройки, процесс достаточно прост.
На каждой ветви проверяются действия и управление переходит на класс, на который
ссылаются действия. Если класс не имеет дочерних элементов, пакет ставится в очередь этого
класса. Если это не конечная ветвь, для нее производятся все указанные операции.
Следующие варианты проверяются по порядку для каждой ветви до тех пор, пока управление
не будет передано другой ветви или процесс не будет завершен.
(i)
Проверка условий фильтров, привязанных к классу. Если это последняя ветвь, закончить работу.
В противном случае повторить операцию.
(ii)
Найти в defmap значение приоритета, назначенного пакету, который зависит от битов TOS. Проверить,
есть ли дочерние элементы, в противном случае повторить операцию.
(iii)
Найти в defmap инструкции для приоритета 'best effort' (лучшее достижение).
Проверить, есть ли дочерние элементы, в противном случае повторить операцию.
(iv)
Если ни один из вариантов не вернул инструкции, поставить в текущую очередь.
Этот алгоритм обеспечивает гарантированное распределение пакета даже если конфигурация
была произведена с ошибкой.
Когда необходимо забрать пакет из очереди для отправки на сетевой интерфейс, CBQ
определяет, из очереди какого класса это необходимо сделать. Это осуществляется
посредством процесса Weighted Round Robin, когда каждый класс получает шанс
отправить пакет. Процесс WRR начинает опрос сначала с классов с наивысшим
приоритетом (с минимальным числом, но более высоким семантически) и, в случае
если очередь этих классов пуста, переходит к менее приоритетным классам.
В свою очередь, классы опрашивают свои дочерние классы по тому же принципу. Класс
может быть исключен из опроса, если объявлен как 'bounded' (связанный). Класс также
может сообщить о своей неготовности, если отмечен как 'isolated' (изолированный).
ОЧЕРЕДЬ
Верхний элемент дерева классов очереди CBQ имеет следующие параметры:
parent major:minor | root
Обязательный параметр, определяющий место экземпляра CBQ: как
root
(корневой) класс сетевого интерфейса или дочерний класс указанного по идентификатору класса.
handle major:
Как и другие типы очередей, CBQ поддерживает идентификатор 'handle' (обработчик), состоящий только из
основного номера и двоеточия после него. Опционально, но очень удобно, если классы имеют идентификатор
с номером этой очереди.
allot размер
Доля при распределении ссылок для определения времени передачи. Распределение времени на очередь отличается
от распределения времени на класс (см. ниже). Опциональный параметр, связан с avpkt.
avpkt размер
Средний размер пакета, используемый для вычисления maxidle и определяющий безопасный размер доли. Обязательный
параметр.
bandwidth скорость
Для определения времени простоя, CBQ должна знать скорость физического интерфейса или
родительской очереди. Это очень важный параметр. Объяснения см. ниже. Обязательный
параметр.
cell
Размер ячейки определяет шаг времени передачи пакетов.
mpu
Пустой пакет также требует некоторое время на передачу. Это значение задает минимальное время отправки пакета.
По умолчанию - 0.
ewma степень
Когда вычисляется среднее время простоя, используется EWMA, которое сглаживает полученное
значение. Степень задает силу сглаживания. Малые значения означают большую чувствительность.
Значение параметра должно быть от 0 до 31. По умолчанию - 5.
Очередь CBQ не разделяет трафик по каналам, она лишь задает параметры об интерфейсе и канале.
Реально трафик разделяется в классах.
КЛАССЫ
Следующие параметры используются для классов:
parent major:minor
Место класса в иерархии. Если класс верхнего уровня, дополнительный
номер может быть опущен. Обязательный параметр.
classid major:minor
Как и очереди, классы могут быть именованы. Основной номер должен
совпадать с основным номером родительской очереди. Если класс имеет
дочерние классы, нужно указать дополнительный номер.
weight вес
При отправке пакетов на интерфейс учитывается вес. Классы с более
высоким весом могут передать больше трафика за раз. Вес классов
нормализуется и в дальнейшем учитываются пропорции, а не числа. По умолчанию - 1.
allot размер
Задает сколько байтов взять из очереди за раз. Этот параметр зависит от
параметра weight и ограничивается как минимум 2/3 avpkt. Обязательный параметр.
prio приоритет
Классы с меньшим значением приоритета быстрее ставятся на отправку пакетов.
Обязательный параметр.
avpkt
См. раздел ОЧЕРЕДЬ.
rate скорость
Максимальная скорость для этого класса и всех его дочерних классов. Обязательный параметр.
bandwidth скорость
Параметр для класса отличается от аналогичного параметра для корневой очереди CBQ.
Используется только для определения значений параметров maxidle и offtime, которые
рассчитываются для maxburst или minburst. Обязательный параметр, если указан параметр
maxburst или minburst.
maxburst
Количество пакетов для вычисления значения параметра maxidle. При таком значении
avgidle равно maxidle, то есть количество средних пакетов, которое будет передано до тех пор
как avgidle станет равно 0. Чем выше это значение, тем чаще будут отправки.
Вы не можете установить maxidle напрямую, только через этот параметр.
minburst
Как упомянуто выше, CBQ нужно определить границу переполнения. Идеальным решением будет
сделать это для вычисленного времени простоя и пропустить 1 пакет. Однако ядра Unix
имеют жестко заданные события планировщика с периодом короче 10 мс, поэтому лучше установить
границу на более продолжительный период и затем пропустить пакеты.
Время ожидания называется 'offtime'. Более высокие значения minburst приводят к более
аккуратному разделению на длительном периоде, но к более высоким скачкам в масштабах миллисекунд.
Необязательный параметр.
minidle
Если avgidle меньше 0, очередь перегружена и необходимо подождать, пока значение avgidle будет
достаточно большим для отправки хотя бы одного пакета. Для предотвращения внезапных скачков
во время продленного периода, avgidle сбрасывается до minidle, если оно слишком маленькое.
Minidle указывает отрицательное количество микросекунд, так что заданное значение 10 означает
ограничение avgidle до -10 микросекунд. Необязательный параметр.
bounded
Указывает что класс не получает очереди на отправку от других классов того же уровня
isolated
Указывает что класс не передает очередь на отправку другим классам того же уровня
split major:minor & defmap bitmap[/bitmap]
Если фильтры, привязанные к классу не вынесли решение, может быть проведена классификация
по приоритету пакетов. Доступно 16 приоритетов (от 0 до 15).
defmap определяет какой класс получает пакеты каких приоритетов в виде битовой таблицы. Бит LSB соответствует
приоритету 0. Параметр
split
какому классу передается трафик.
Например, 'tc class add ... classid 10:1 cbq .. split 10:0 defmap c0'
задает для класса 10:0 передачу пакетов с приоритетами 6 и 7 классу 10:1.
Дополнительная конфигурация
be: 'tc class add ... classid 10:2 cbq ... split 10:0 defmap 3f'
отправляет все пакеты с приоритетами 0, 1, 2, 3, 4 и 5 классу 10:1.
estimator интервал константа
CBQ устанавливает какую полосу канала может использовать каждый класс, которая необходима
для работы фильтров. Для этого используется простой механизм в виде
интервала
(в микросекундах) когда отправляется трафик. Временная
константа
также задается в микросекундах для EWMA.
Эти значения отражают чувствительность среднего значения от пиков. Более высокое значение означает меньшую чувствительность.
ОБНАРУЖЕННЫЕ ОШИБКИ
Реальная полоса канала может быть неизвестна, к примеру, для соединений PPoE или PPTP, которые посылают пакеты
через канал вместо физического устройства. На настроенном канале CBQ будет достаточно устойчиво работать, возможно,
за счет грубого разделения.
По умолчанию ядра предоставляют ограниченное время на принятие решений. Это сказывается на точном разделении в долгосрочной
перспективе, но приводит к грубому разделению в краткосрочной (в рамках секунды) перспективе.
Sally Floyd and Van Jacobson, "Link-sharing and Resource
Management Models for Packet Networks",
IEEE/ACM Transactions on Networking, Vol.3, No.4, 1995
o
Sally Floyd, "Notes on CBQ and Guaranteed Service", 1995
o
Sally Floyd, "Notes on Class-Based Queueing: Setting
Parameters", 1996
o
Sally Floyd and Michael Speer, "Experimental Results
for Class-Based Queueing", 1998, не опубликовано.