The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

tc-cbq-details (8)
  • >> tc-cbq-details (8) ( Русские man: Команды системного администрирования )
  • tc-cbq-details (8) ( Linux man: Команды системного администрирования )
  •  

    ИМЯ

    CBQ - очередь, базирующая на классах  

    СИНТАКСИС

    tc qdisc ... dev УСТРОЙСТВО ( parent classid | root) [ handle major: ] cbq 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% времени.

    С точки зрения ядра это сложно вычислить, поэтому CBQ получает время простоя из количества микросекунд, которые проходят между запросами драйвера устройства пакетов для передачи. Основываясь на знании о размерах пакетов можно приблизительно оценить насколько загружен или пуст канал.

    Это довольно осторожные оценки и они не всегда приводят к правильным результатам. Например, какова действительная скорость канала интерфейса, если невозможно обеспечить скорость передачи данных 100 мбит/c из-за неверно написанного драйвера? Сетевые карты PCMCIA никогда не позволяют добиться скорости 100 мбит/c из-за архитектурных ограничений шины. Как в этом случае вычислить время простоя?

    Физическая пропускная способность канала не может быть правильно определена для псевдо-сетевых интерфейсов типа PPP через Ethernet или PPTP через TCP/IP. Эффективная пропускная способность в этом случае определяется приблизительно по эффективности каналов (pipes) пользовательского пространства, которые чётко не определены.

    Во время операций эффективное время простоя вычисляется по EWMA (exponential weighted moving average), которое основано на предположении, что последние пакеты экспоненциально более важные, чем ранние. Средняя загрузка Unix рассчитывается таким же образом.

    Вычисленное время простоя вычитается из значения EWMA и получается значение, называемое 'avgidle'. Идеально загруженный канал имеет значение avgidle равным нулю: пакеты прибывают точно с заданным интервалом.

    Перегруженный канал имеет отрицательное значение avgidle и, если это отрицательное значение слишком большое по модулю, CBQ забивается.

    И наоборот, простаивающий канал имеет большое значение avgidle, которое позволяет обеспечить канал бесконечного объема после нескольких часов отсутствия пакетов. Для предотвращения таких перегибов, значение avgidle ограничивается значением maxidle.

    При переполнении канала, в теории, CBQ тоже может забиться на период между отправлением пакетов. Однако в связи с ограничениями принятие решения по таймеру (см. параметр minburst ниже) это невозможно.

     

    РАСПРЕДЕЛЕНИЕ

    В рамках одной очереди CBQ может существовать множество классов. Каждый из этих классов имеет собственную очередь, по умолчанию tc-pfifo(8).

    При постановке пакета в очередь, он попадает в очередь на верхнем уровне и, с использованием различных методов определяется, какой класс должен получить этот пакет. Если такой класс определен, процесс классификации повторяется для всех дочерних классов этого класса, если они есть.

    CBQ использует следующие методы для распределения пакета по дочерним классам:

    (i)
    по skb->priority. Устанавливается из пользовательского пространства опцией SO_PRIORITY в функции setsockopt. skb->priority используется только тогда, когда skb->priority содержит идентификатор существующего класса в виде major:minor, который является дочерним для очереди с этим пакетом.
    (ii)
    по фильтрам, привязанным к этому классу
    (iii)
    по карте defmap класса, которая задается параметрами split & defmap . defmap может содержать инструкции для каждого возможного приоритета пакета Linux.

    Каждый класс также имеет уровень . Конечные классы, находящиеся в конце иерархии (и не имеющие дочерних классов), находятся на уровне 0.

     

    АЛГОРИТМ РАСПРЕДЕЛЕНИЯ

    Распределение идет по циклу, который заканчивается когда найден конечный класс. На любом этапе цикла может быть вызван обработчик ошибок.

    Цикл состоит из следующих этапов:

    (i)
    Если пакет создан локально и содержит правильный идентификатор класса в поле skb->priority, выбирается этот класс и цикл заканчивается.

    (ii)
    Проверка условий фильтров, привязанных к классу. Если это последняя ветвь, закончить работу. В противном случае повторить операцию.
    (iii)
    Если фильтры не вернули класс, но вернули идентификатор класса (classid), попробовать найти класс с таким идентификатором для текущей очереди. Сравнить уровни найденного класса и текущего класса. Если уровень найденного класса меньше и этот класс не является конечным, повторить цикл для этого класса. Если класс конечный, прервать цикл. Если уровень больше, то вызвать обработчик ошибок.
    (iv)
    Если фильтры не вернули ни класс, ни правильную ссылку на него, определить класс по приоритету. Он ищется в таблице defmap класса. Если по приоритету класс не найден, найти в таблице класс, помеченный как BEST_EFFORT . Если уровень этого класса выше или в таблице не определен класс BEST_EFFORT , вызвать обработчик ошибок. Обработчик ошибок находится вне цикла и состоит из следующих этапов:
    (i)
    Найти в таблице defmap класс, на который передавать управление в случае ошибки. Если defmap содержит класс с приоритетом пакета (указывается в поле TOS), выбрать этот класс и закончить.
    (ii)
    Найти в таблице класс с приоритетом BEST_EFFORT . Если такой класс есть в таблице, выбрать его и закончить.
    (iii)
    Выбрать класс, на котором произошла ошибка и закончить. Если пакет поставлен в очередь в случае завершения при обработке ошибки, то, возможно, что он попадет не в конечный класс, а будет поставлен в очередь где-то в середине иерархии.

     

    АЛГОРИТМ РАСПРЕДЕЛЕНИЯ ССЫЛОК (LINK SHARING)

    Когда необходимо забрать пакет из очереди для отправки на сетевой интерфейс, CBQ определяет, из очереди какого класса это необходимо сделать. Это осуществляется посредством процесса Weighted Round Robin, когда каждый класс получает шанс отправить пакет. Процесс WRR начинает опрос сначала с классов с наивысшим приоритетом (с минимальным числом, но более высоким семантически) и, в случае если очередь этих классов пуста, переходит к менее приоритетным классам.

    Каждый класс только освобождает заданное количество данных из очереди на каждом раунде.

    Если класс находится близко к переполнению и не отмечен как bounded , он будет пытаться занимать avgidle от соседних классов, которые не помечены как isolated.

    Этот процесс повторяется снизу вверх. Если классу невозможно занять достаточно avgidle для отправки пакета, он забивается и не принимает пакеты, пока avgidle не станет положительным числом.

     

    ОЧЕРЕДЬ

    Верхний элемент дерева классов очереди CBQ имеет следующие параметры:

    parent major:minor | root
    Обязательный параметр, определяющий место экземпляра CBQ: как root (корневой) класс сетевого интерфейса или дочерний класс указанного по идентификатору класса.
    handle major:
    Как и другие типы очередей, CBQ поддерживает идентификатор 'handle' (обработчик), состоящий только из основного номера и двоеточия после него. Опциональный параметр.
    avpkt размер
    Средний размер пакета, используемый для вычисления. Как минимум 2/3 от MTU интерфейса. Обязательный параметр.
    bandwidth скорость
    Для определения времени простоя, CBQ должна знать скорость физического интерфейса или родительской очереди. Это очень важный параметр. Объяснения см. ниже. Обязательный параметр.
    cell
    Размер ячейки определяет шаг времени передачи пакетов. Значение по умолчанию вполне походит для большинства случаев.
    mpu
    Пустой пакет также требует некоторое время на передачу. Это значение задает минимальное время отправки пакета. По умолчанию - 0.
    ewma степень
    Когда вычисляется среднее время простоя, используется EWMA, которое сглаживает полученное значение. Степень задает силу сглаживания. Малые значения означают большую чувствительность. Значение параметра должно быть от 0 до 31. По умолчанию - 5. Очередь CBQ не разделяет трафик по каналам, она лишь задает параметры об интерфейсе и канале. Реально трафик разделяется в классах.

     

    КЛАССЫ

    Следующие параметры используются для классов:

    parent major:minor
    Место класса в иерархии. Если класс верхнего уровня, дополнительный номер может быть опущен. Обязательный параметр.
    classid major:minor
    Как и очереди, классы могут быть именованы. Основной номер должен совпадать с основным номером родительской очереди. Если класс имеет дочерние классы, нужно указать дополнительный номер.
    weight вес
    При отправке пакетов на интерфейс учитывается вес. Классы с более высоким весом могут передать больше трафика за раз. Вес классов нормализуется и в дальнейшем учитываются пропорции, а не числа. По умолчанию - 1.
    allot размер
    Задает сколько байтов взять из очереди за раз. Вес вычисляется с учётом нормализованного веса класса, описанного выше.

    priority приоритет
    Классы с меньшим значением приоритета быстрее ставятся на отправку пакетов. Обязательный параметр.

    rate rate
    rate скорость Максимальная скорость для этого класса и всех его дочерних классов. Обязательный параметр.

    bandwidth скорость
    Параметр для класса отличается от аналогичного параметра для корневой очереди CBQ. Используется только для определения значений параметров maxidle и offtime, которые рассчитываются для maxburst или minburst. Обязательный параметр, если указан параметр maxburst или minburst.

    maxburst
    Количество пакетов для вычисления значения параметра maxidle. При таком значении avgidle равно maxidle, то есть количество средних пакетов, которое будет передано до тех пор как avgidle станет равно 0. Чем выше это значение, тем чаще будут отправки. Вы не можете установить maxidle напрямую, только через этот параметр.

    minburst
    Как упомянуто выше, CBQ нужно определить границу переполнения. Идеальным решением будет сделать это для вычисленного времени простоя и пропустить 1 пакет. Однако ядра Unix имеют жестко заданные события планировщика с периодом короче 10 мс, поэтому лучше установить границу на более продолжительный период и затем пропустить пакеты.

    Время ожидания называется 'offtime'. Более высокие значения minburst приводят к более аккуратному разделению на длительном периоде, но к более высоким скачкам в масштабах миллисекунд.

    minidle
    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. Эти значения отражают чувствительность среднего значения от пиков. Более высокое значение означает меньшую чувствительность.

     

    ЛИТЕРАТУРА

    o
    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 Guarantee 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, not published.

     

    СМ. ТАКЖЕ

    tc(8)

     

    АВТОРЫ

    Алексей Кузнецов <kuznet@ms2.inr.ac.ru>. man-страница сопровождается Бертом Хубертом (Bert Hubert) <ahu@ds9a.nl>

     

    ПЕРЕВОД

    Андрей Черепанов <cas@altlinux.ru> 2007


     

    Index

    ИМЯ
    СИНТАКСИС
    ОПИСАНИЕ
    АЛГОРИТМ РАЗДЕЛЕНИЯ
    РАСПРЕДЕЛЕНИЕ
    АЛГОРИТМ РАСПРЕДЕЛЕНИЯ
    АЛГОРИТМ РАСПРЕДЕЛЕНИЯ ССЫЛОК (LINK SHARING)
    ОЧЕРЕДЬ
    КЛАССЫ
    ЛИТЕРАТУРА
    СМ. ТАКЖЕ
    АВТОРЫ
    ПЕРЕВОД


    Поиск по тексту MAN-ов: 




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру