Linux Advanced Routing & Traffic Control HOWTO
Шрифт:
При создании, к каждому из классов, по-умолчанию присоединяется дисциплина FIFO, однако, для более равномерного распределения пропускной способности между соединениями, присоединим к каждому из классов дисциплину обработки очереди SFQ.
В
Обратите внимание: команда tc class add СОЗДАЕТ класс в пределах дисциплины, а tc qdisc add – добавляет дисциплину к классу.
У вас может возникнуть резонный вопрос: "Что будет с трафиком, который не подпадает под условия установленных фильтров?". В этом случае трафик останется неклассифицированым и будет обработан корневой дисциплиной 1:0, т.е. пройдет без ограничений.
Если сумма SMTP+web трафиков превысят сконфигурированные 6 мегабит, то вся полоса пропускания будет разделена между классами, в соответствии с их весами. Таким образом WEB-сервер получит 5/8 ширины канала, а SMTP-сервер — 3/8.
В соответствии с данной конфигурацией можно утверждать, что WEB-сервер всегда будет иметь полосу, как минимум 5/8*6=3.75 мегабита.
9.5.4.5. Прочие параметры настройки CBQ: split и defmap.
Как уже говорилось выше, для классификации трафика, полноклассовые дисциплины используют фильтры.
Но кроме фильтров, CBQ может предложить вам параметры split и defmap. Хотя назначение этих параметров достаточно сложно понять, и к тому же они не являются жизненно необходимыми, тем не менее я постараюсь описать их.
Так как наиболее часто классификация трафика производится только на основе поля TOS, в заголовке пакета, то предусматривается специальный синтаксис команд. Каждый раз, когда CBQ сталкивается с необходимостью определения — в какую из очередей поставить пакет, она проверяет — является ли этот узел "узлом разбиения" и если это так, то выбирается подочередь с заданным приоритетом, который может быть рассчитан исходя из значения поля TOS.
Значение приоритета пакета складывается по "И" с параметром defmap и проверяется — есть ли совпадение. Проще говоря — это самый простой способ создания высокоскоростных фильтров, которые работают с незначительным числом приоритетов. С параметром defmap, равным 0xFF будет совпадать любой пакет, 0x00 — ни один. Возможно пример настройки поможет вам полнее понять вышесказанное:
Самое обычное начало для CBQ. Значения для параметра defmap можно определить из следующей таблицы:
TC_PRIO.. | Число | Значение поля TOS |
---|---|---|
BESTEFFORT | 0 | Maximize Reliablity (0x04) (Максимальная надежность) |
FILLER | 1 | Minimize Cost (0x02) (Минимальная стоимость) |
BULK | 2 | Maximize Throughput (0x08) (Максимальная пропускная способность) |
INTERACTIVE_BULK | 4 | |
INTERACTIVE | 6 | Minimize Delay (0x10) (Минимальная
|
CONTROL | 7 |
Уровень приоритета TC_PRIO.. рассчитывается исходя из значения поля TOS (за дополнительной информацией о значениях приоритета пакета, обращайтесь к разделу pfifo_fast).
Теперь создадим классы, через которые пойдет интерактивный и объемный трафик:
В данном случае "узлом разбиения" назначается дисциплина 1:0, это та точка, где будет делаться выбор. Число 0xC0 в двоичном представлении имеет вид 11000000, а 0x3F — 00111111, таким образом оба класса перекрывают весь диапазон возможных приоритетов. Первому классу будут соответствовать пакеты, приоритеты которых имеют 6 и/или 7 биты в установленном состоянии, что соответствует интерактивному и управляющему трафику. Ко второму классу будут отнесены все остальные пакеты.
Таблица выбора для узла 1:0 теперь будет иметь следующий вид:
приоритет | класс |
---|---|
0 | 1:3 |
1 | 1:3 |
2 | 1:3 |
3 | 1:3 |
4 | 1:3 |
5 | 1:3 |
6 | 1:2 |
7 | 1:2 |
Кроме того, можно изменять приоритеты отдельных видов трафика. Для этого используется команда вида: tc class change, например, чтобы повысить приоритет трафика best effort и классифицировать его, как принадлежащий классу 1:2, нужно дать следующую команду:
В этом случае, таблица выбора будет иметь следующий вид:
приоритет | класс |
---|---|
0 | 1:2 |
1 | 1:3 |
2 | 1:3 |
3 | 1:3 |
4 | 1:3 |
5 | 1:3 |
6 | 1:2 |
7 | 1:2 |
FIXME: Корректность работы команды tc class change не проверена. Выводы были сделаны исключительно на основе изучения исходных текстов.