Идеологически, HTB представляет собой набор иерархически упорядоченных буферов токенов (да, наверно вы и сами догадались об этом [В переводе с английского HTB означает "иерархический буфер токенов" — Прим.пер.] ). Давайте рассмотрим простейший сценарий. Главная дисциплина обработки исходящей очереди любого устройства, называется корневой (root qdisc) .
Корневая дисциплина содержит один класс (в сложных конфигурациях корневая дисциплина может содержать несколько классов). Этот класс HTB создается с указанием двух параметров: rate и ceil . Значения этих параметров должны совпадать для корневого класса и задают общую полосу пропускания канала.
В HTB, rate задает гарантированную полосу пропускания для данного класса, а ceil , сокращение от ceiling, определяет максимальную полосу пропускания, которую класс может получить. Любая полоса пропускания, находящаяся между rate и ceil одалживается у родительского класса, откуда вытекает утверждение, что для корневого класса значение параметров rate и ceil должны совпадать.
В корневом классе можно определять подклассы, каждому из которых можно выделить некоторую часть доступной полосы пропускания родительского класса. У классов-потомков, значения параметров rate и ceil не обязаны совпадать с соответствующими значениями родительского класса. Это позволяет резервировать часть пропускной способности заданного класса. Кроме того, это позволяет HTB рассчитывать отношение, в котором должна быть разделена полоса пропускания между классами. Это станет ясней после рассмотрения примеров.
Hierarchical Token Bucket реализует классовый механизм формирования очередей для системы управления трафиком в linux; пользователю предоставляются параметры rate и ceil для контроля над полосой пропускания отдельных классов и задания отношения распределения пропускной способности в случае, когда часть полосы пропускания остается свободной (до значения ceil ).
При указании пропускной способности вы должны помнить, что ограничение полосы пропускания будет работать только в том случае, если вы ( машина, на которой выполняется управление трафиком — Прим.пер. ) являетесь узким местом между ЛВС и Internet. Обычно, это используется в домашних и офисных сетях, где вся локальная сеть обслуживается DSL– или T1-соединением.
На деле это означает, что вам, вероятно, нужно будет установить значение пропускной способности равным реальной пропускной способности канала, минус небольшая ее часть.
Traffic Control Next Generation (tcng) — это проект Вернера Альмесбергера (Werner Almesberger) призванный реализовать мощный, абстрактный и стандартизированный язык для описания структур управления трафиком. Синтаксический анализатор tccиз дистрибутива tcngпреобразовывает язык tcng в различные форматы. По умолчанию, tccчитает входной файл (переданный в качестве аргумента или стандартный ввод) и выводит в стандартный вывод последовательности команд tc(смотрите ниже iproute2) необходимые для создания желаемой структуры управления трафиком в ядре.
Обратитесь к справочнику по параметрам tcngза информацией о поддерживаемых дисциплинах обработки очереди. Джакоб Теплитски (Jacob Teplitsky), активный участник списка рассылки LARTCи контрибьютор проекта tcng, написал поддержку htb для tcng.
Утилита tccможет генерировать вывод различных типов, но в этом документе мы будем рассматривать только стандартный вывод и вывод по умолчанию. За детальной информацией об использовании tcngобратитесь к руководству TCNG.
Программа tcsim — имитатор системы управления трафиком, который работает с конфигурационными файлами tcng и имитирует поведение ядра при передаче данных, согласно структурам управления трафиком. Несмотря на то, что tcsimявляется значительной частью проекта tcng, в этом документе он вообще не рассматривается.
Есть некоторые требования по поддержке ядром HTB и DSMARK, поддержке HTB и DSMARK в tc и самому tcng.
В частности, поддержка HTB в ядре и tc абсолютно необходима, иначе вы не сможете воспользоваться советами, предоставляемыми данным руководством (обратите внимание на название, если у вас есть какие-то сомнения). Поддержка DSMARK, строго говоря, необязательна, однако некоторые примеры (алгоритм выбора класса, в частности, и возможно и другие) могут не работать без нее.
Читать дальше