Linux Advanced Routing & Traffic Control HOWTO (Hubert, Graf) - страница 49

Теперь создадим классы, через которые пойдет интерактивный и объемный трафик:

># tc class add dev eth1 parent 1:1 classid 1:2 cbq bandwidth 10Mbit \

> rate 1Mbit allot 1514 cell 8 weight 100Kbit prio 3 maxburst 20 \

> avpkt 1000 split 1:0 defmap c0

># tc class add dev eth1 parent 1:1 classid 1:3 cbq bandwidth 10Mbit \

> rate 8Mbit allot 1514 cell 8 weight 800Kbit prio 7 maxburst 20 \

> avpkt 1000 split 1:0 defmap 3f

В данном случае "узлом разбиения" назначается дисциплина 1:0, это та точка, где будет делаться выбор. Число 0xC0 в двоичном представлении имеет вид 11000000, а 0x3F — 00111111, таким образом оба класса перекрывают весь диапазон возможных приоритетов. Первому классу будут соответствовать пакеты, приоритеты которых имеют 6 и/или 7 биты в установленном состоянии, что соответствует интерактивному и управляющему трафику. Ко второму классу будут отнесены все остальные пакеты.

Таблица выбора для узла 1:0 теперь будет иметь следующий вид:

приоритеткласс
01:3
11:3
21:3
31:3
41:3
51:3
61:2
71:2

Кроме того, можно изменять приоритеты отдельных видов трафика. Для этого используется команда вида: tc class change, например, чтобы повысить приоритет трафика best effort и классифицировать его, как принадлежащий классу 1:2, нужно дать следующую команду:

># tc class change dev eth1 classid 1:2 cbq defmap 01/01

В этом случае, таблица выбора будет иметь следующий вид:

приоритеткласс
01:2
11:3
21:3
31:3
41:3
51:3
61:2
71:2

FIXME: Корректность работы команды tc class change не проверена. Выводы были сделаны исключительно на основе изучения исходных текстов.

9.5.5. Hierarchical Token Bucket

Мартин Девера (Martin Devera) aka справедливо отмечает, что CBQ слишком сложна и слабо оптимизирована для большинства типичных ситуаций. Его подход более точно соответствует конфигурациям, когда необходимо распределить заданную полосу пропускания между различными видами трафика на полосы гарантированной ширины, с возможностью заимствования.

HTB работает точно так же, как и CBQ, но, в отличие от последней, принцип работы основан не на вычислении времени простоя, а на определении объема трафика, что полностью соответствует названию Token Bucket Filter. Эта дисциплина имеет незначительное число параметров настройки, которые достаточно хорошо описаны на сайте http://luxik.cdi.cz/~devik/qos/htb/.

Хотя конфигурирование HTB — задача достаточно сложная, тем не менее конфигурации хорошо масштабируются. В случае же с CBQ процесс конфигурирования становится слишком сложным даже в самых простых случаях! HTB3 теперь стала частью ядра (начиная с версий 2.4.20-pre1 и 2.5.31). Однако, вам может потребоваться пропатченная версия утилиты