Linux Advanced Routing & Traffic Control HOWTO
Шрифт:
Наиболее распространенной дисциплиной является pfifo_fast — она используется по умолчанию.
Каждая из дисциплин имеет свои достоинства и недостатки. Не все из них досконально протестированы.
9.2.1. pfifo_fast
Эта дисциплина работает, как видно из названия, по принципу "первым пришел, первым ушел" (First In, First Out). Это означает, что ни один пакет не получает специальной обработки. Однако это не совсем так. Данная очередь имеет три, так называемых, "полосы". В каждой "полосе" пакеты обрабатываются по принципу FIFO. Но полоса 1 не будет обслуживаться до тех пор, пока есть пакеты в полосе 0. Аналогично, пока есть пакеты в полосе 1, не обрабатывается полоса 2.
Ядро учитывает значение поля пакета Type of Service, и направляет пакеты с установленным флагом 'минимальная задержка' в полосу 0.
Не путайте эту простую бесклассовую дисциплину с классовой дисциплиной PRIO! Хотя они ведут себя похожим образом, pfifo_fast является бесклассовой и вы не
9.2.1.1. Параметры и использование
Вы не можете конфигурировать pfifo_fast, поскольку ее параметры жестко "зашиты". Вот ее конфигурация по умолчанию:
Определяет отображение пакетных приоритетов, присвоенных ядром, в полосы. Отображение основывается на значении поля TOS, которое выглядит следующим образом:
Четыре бита TOS (поле TOS) определяются так:
Двоичн | Десятичн | Значение |
---|---|---|
1000 | 8 | Минимизировать задержку (md) |
0100 | 4 | Максимальная пропускная способность (mt) |
0010 | 2 | Максимальная надежность (mr) |
0001 | 1 | Минимальная стоимость (mmc) |
0000 | 0 | Обычное обслуживание |
Поскольку справа еще есть 1 бит, реальное значение поля TOS вдвое больше значения битов TOS. Команда tcpdump –v –v выводит значение всего поля TOS, а не только четырех бит. Оно приведено в первой колонке таблицы:
TOS | Биты | Значение | Приоритет Linux | Полоса |
---|---|---|---|---|
0x0 | 0 | Normal Service | 0 Best Effort | 1 |
0x2 | 1 | Minimize Monetary Cost | 1 Filler | 2 |
0x4 | 2 | Maximize Reliability | 0 Best Effort | 1 |
0x6 | 3 | mmc+mr | 0 Best Effort | 1 |
0x8 | 4 | Maximize Throughput | 2 Bulk | 2 |
0xa | 5 | mmc+mt | 2 Bulk | 2 |
0xc | 6 | mr+mt | 2 Bulk | 2 |
0xe | 7 | mmc+mr+mt | 2 Bulk | 2 |
0x10 | 8 | Minimize Delay | 6 Interactive | 0 |
0x12 | 9 | mmc+md | 6 Interactive | 0 |
0x14 | 10 | mr+md | 6 Interactive | 0 |
0x16 | 11 | mmc+mr+md | 6 Interactive | 0 |
0x18 | 12 | mt+md | 4 Int. Bulk | 1 |
0x1a | 13 | mmc+mt+md | 4 Int. Bulk | 1 |
0x1c | 4 | mr+mt+md | 4 Int. Bulk | 1 |
0x1e | 15 | mmc+mr+mt+md | 4 Int. Bulk | 1 |
Куча
цифр. Вторая колонка содержит значение четырех значимых битов поля TOS, а в третьей расшифровывается значение. Например, 15 означает минимальную стоимость (Minimal Monetary Cost), максимальную надежность (Maximum Reliability), максимальную полосу пропускания (Maximum Throughput) и минимальную задержку (Minimum Delay).В четвертой колонке приведены соответствующие уровни приоритетов, выставляемые ядром Linux.
В последней колонке демонстрируется результат отображения в полосы по-умолчанию. В командной строке это выглядит так:
Это означает, что, например, приоритет 4 отображается в первую полосу. priomap позволяет задавать и более высокие приоритеты (> 7) , которые не соответствуют полю TOS, но они используются в других целях.
Ниже приводится таблица из документа RFC 1349 (за подробной информацией обратитесь к этому документу). Она показывает, каким образом приложения могут выставлять биты TOS:
TELNET | 1000 | (minimize delay) | |
FTP | Control | 1000 | (minimize delay) |
Data | 0100 | (maximize throughput) | |
TFTP | 1000 | (minimize delay) | |
SMTP | Command phase | 1000 | (minimize delay) |
DATA phase | 0100 | (maximize throughput) | |
Domain Name Service | UDP Query | 1000 | (minimize delay) |
TCP Query | 0000 | ||
Zone Transfer | 0100 | (maximize throughput) | |
NNTP | 0001 | (minimize monetary cost) | |
ICMP | Errors | 0000 | |
Requests | 0000 (mostly) | ||
Responses | <same as request> (mostly) |
Длина этой очереди определяется конфигурацией интерфейса, просмотреть которую можно командами ifconfig и ip. Для задания очереди длиной 10, выполните: ifconfig eth0 txqueuelen 10.
Вы не можете управлять этим параметром при помощи утилиты tc.
9.2.2. Token Bucket Filter
Token Bucket Filter (TBF) простая дисциплина очереди, которая передает поступающие пакеты со скоростью не превышающей административно заданный порог, но с возможностью превышающих его коротких всплесков.
TBF очень точная дисциплина, при этом она не создает серьезных нагрузок на сеть и процессор. Если вам нужно просто ограничить скорость на интерфейсе, то это первый кандидат на использование.
Реализована TBF в виде буфера, постоянно заполняющегося токенами с заданой скоростью. Наиболее важным параметром буфера является его размер, определяющий количество хранимых токенов.
Каждый прибывающий токен сопоставляеться с одним пакетом данных из очереди после чего удаляется. Связав этот алгоритм с двумя потоками — токенов и данных, получим три возможных ситуации:
• Данные прибывают со скоростью равной скорости входящих токенов. В этом случае каждый пакет имеет соответствующий токен и проходит очередь без задержки.
• Данные прибывают со скоростью меньшей скорости поступления токенов. В этом случае лишь часть существующих токенов будет уничтожаться, потому они станут накапливаться до размера буфера. Далее, накопленные токены могут использоваться при всплесках, для передачи данных со скоростью превышающей скорость пребывающих токенов.
• Данные прибывают быстрее, чем токены. Это означает, что в буфере скоро не останеться токенов, что заставит дисциплину приостановить передачу данных. Эта ситуация называется "превышением". Если пакеты продолжают поступать, они начинают уничтожаться.
Последняя ситуация очень важна, поскольку позволяет административно ограничивать доступную полосу пропускания.
Накопленные токены позволяют пропускать короткие всплески, но при продолжительном превышении пакеты будут задерживаться, а в крайнем случае – уничтожаться.
Учтите, что в реальной реализации дисциплины, токены соответствуют байтам, а не пакетам.
9.2.2.1. Параметры и использование
Не смотря на то, что вам вероятно ничего не придется менять, дисциплина TBF имеет определенные параметры. В первую очередь это: