# tc qdisc add dev eth1 root handle 10: cbq bandwidth 100Mbit \
avpkt1000
Данную команду можно условно разделить на несколько частей.
• add dev eth1
. Данный компонент команды сообщает системе о том, что вы добавляете дисциплину очереди для eth1
.
• root
. В некоторых случаях дисциплины могут составлять деревья. Этот параметр указывает на создание корневого узла нового дерева.
• handle 10
. Этот компонент команды определяет метку ( handle
) для дисциплины.
• cbq
. Вам необходимо сообщить системе, какой метод организации очереди должен быть использован. Метод CBQ (Class-Based-Queueing — очередь на базе классов) применяется чаще всего. Данный параметр отражается в имени одной из опций ядра в меню QoS and/or Fair Queueing.
• bandwidth 100Mbit
. С помощью данного компонента вы сообщаете системе о пропускной способности линии. Если различные интерфейсы маршрутизатора подключены через линии с разной пропускной способностью, задается наименьшее значение.
• avpkt 10 0 0
. По сети могут передаваться пакеты различного размера, но, для того, чтобы планировать использование линии, система должна иметь хотя бы приблизительное представление о том, какими могут быть размеры пакетов. Конкретное значение данного параметра может отличаться от указанного здесь.
Теперь надо определить классы для сети и для каждой из подсетей. Для этого используются команды наподобие следующей:
# tc class add dev eth1 parent 10:0 classid 10:1 cbq \
bandwidth 100Mbit rate 100Mbit allot 1514 weight 10Mbit \
prio 8 maxburst 20 avpkt 1000
Эта команда похожа на предыдущую, но она создает класс, определяющий одну из двух сетей. Обратите внимание на то, что данный класс задается для использования всей доступной пропускной способности. Впоследствии этот ресурс будет разделен между подсетями. В отличие от предыдущей команды, некоторые параметры изменены, кроме того, в состав этой команды входят дополнительные компоненты.
• class
. Если в предыдущей команде был задан объект qdisc
, то здесь присутствует объект class
, определяющий класс.
• parent 10:0
. Этот компонент команды задает корень дерева. К метке, определенной в предыдущей команде, добавляется значение 0.
• classid 10:1
. Данный компонент задает идентификатор конкретного класса.
• allot 1514
. С помощью этого параметра указывается значение MTU для сети (оно на несколько байт превышает реальное значение).
• weight 1Mbit
. Данный параметр используется для настройки. Возможно, для конкретной сети необходимо специально подобрать его значение.
• prio 8
. Этот компонент команды задает приоритет правила. Чем больше значение, тем выше приоритет.
Правила для подсетей задаются с помощью команд, подобных рассмотренной выше.
# tc class add dev eth1 parent 10:1 classid 10:100 cbq \
bandwidth 100Mbit rate 50Mbit allot 1514 weight 5Mbit \
prio 5 maxburst 20 avpkt 1000 bounded
# tc class add dev eth1 parent 10:1 classid 10:200 cbq \
bandwidth 100Mbit rate 50Mbit allot 1514 weight 5Mbit \
prio 5 maxburst 20 avpkt 1000 bounded
Эти команды различаются только значением classid
. Обе ссылаются на корневой класс, и каждая выделяет соответствующей подсети 50 Мбод пропускной способности линии. (Вы можете задать разные значения для каждой подсети, например 60 Мбод и 40 Мбод.) Параметр bounded
указывает на то, что система не должна выделять классу часть пропускной способности линии, превышающую указанное значение. Часто такое ограничение бывает нежелательным, поскольку если из одной сети данные не передаются, другая сеть не сможет использовать остальную часть пропускной способности линии. Отказавшись от параметра bounded
, вы обеспечите большую гибкость при работе через линии связи, в частности, предоставите офисам возможность "занимать" друг у друга пропускную способность линии. Если же обоим офисам потребуется передавать данные, этот ресурс будет распределен поровну.
Теперь необходимо связать дисциплину очереди с каждым из двух классов.
# tc qdisc add dev eth1 parent 10:100 sfq quantum 1514b \
perturb 15
# tc qdisc add dev eth1 parent 10:200 sfq quantum 1514b \
perturb 15
Данные команды аналогичны рассмотренной ранее команде, определяющей порядок обслуживания очереди. Они сообщают Linux о том, что для планирования трафика внутри подсети каждого офиса должна использоваться дисциплина SFQ (Stochastic Fairness Queueing — стохастическая организация очереди, обеспечивающая равный доступ). Эта дисциплина популярна, так как для ее реализации не требуется много ресурсов процессора. Если понадобится, можете задать другую дисциплину.
Читать дальше