tc-prio(8)
| PRIO(8) | Linux | PRIO(8) |
ИМЯ
PRIO - приоритетная очередь
СИНТАКСИС
tc qdisc ... dev УСТРОЙСТВО ( parent classid | root) [ handle major: ] prio [ bands bands ] [ priomap band,band,band... ] [ estimator interval timeconstant ]
ОПИСАНИЕ
Очередь PRIO - простая реализация постановки в очередь, которая поддерживает классы, и содержит опредёленное число классов с различным приоритетом. Очереди классов освобождаются в порядке снижения приоритета. PRIO - планировщик,который никогда не задерживает пакеты - это работа внутренних очередей.
Очень полезно использовать PRIO для снижения задержки в случае, когда нет необходимости замедлять трафик.
АЛГОРИТМ
При создании с помощью 'tc qdisc add', создается фиксированное число полос. Каждая полоса является классом, хотя для PRIO невозможно добавлять классы вручную при помощи 'tc qdisc add', вместо этого число создаваемых полос должно быть указано в командной строке, добавляющей PRIO к вышестоящей очереди.
При освобождении пакета из очереди вначале происходит попытка использовать полосу 0 и в случае, если она не доставила пакет, PRIO будет пытаться использовать полосу 1, и так далее. Соответственно, пакеты с максимальной надёжностью должны быть отправлены на полосу 0, с минимальной задержкой - на полосу 1, и все оставшиеся - на полосу 2.
Так как очередь PRIO сама по себе будет иметь дополнительный (minor) номер равный 0, полоса 0 на самом деле major:1, полоса 1 является major:2, и т.д. Вместо major, подставьте основной номер, назначенный очереди в момент её создания при помощи 'tc qdisc add" с параметром handle.
КЛАССИФИКАЦИЯ
Три метода доступны в PRIO для определения, в какую полосу будет помещён пакет.
- Из пользовательского пространства (userspace)
- Процесс с достаточными привилегиями может указать требуемый класс напрямую при помощи SO_PRIORITY, см. tc(7).
- С tc-фильтром
- tc-фильтр, добавленный к корневой очереди, может указывать класс напрямую.
- С использованием priomap
- Основываясь на приоритете пакета, который, в свою очередь, получается из типа услуги, назначенного пакету.
Для этого
типа
очереди
специфичен
только priomap.
ПАРАМЕТРЫ
- bands
- Число полос, если отличается от используемых трёх по умолчанию. priomap также должен быть обновлен.
- priomap
- priomap
назначает
класс в
зависимости
от
приоритета
пакета.
Приоритет
может быть
или
напрямую
установлен
из
пользовательского
пространства
или быть
определён
на основе
типа
услуги.
Определяет, каким образом приоритеты пакета, назначенные ядром, влияют на выбор полосы. Выбор основывается на TOS-октете пакета, который выглядит приблизительно так:
0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | | | | |СТАРШИНСТВО| TOS |MBZ| | | | | +---+---+---+---+---+---+---+---+
Четыре бита поля TOS определены как:
Двоичный Десятичный Значение --------------------------------------------------------------- 1000 8 Минимизировать задержку (minimize delay - md) 0100 4 Максимизировать пропускную способность (maximize
thorughput - mt) 0010 2 Максимальная надежность (maximal reliability - mr) 0001 1 Минимизировать денежную стоимость (minimize monetary
cost - mmc) 0000 0 Обычное обслуживание (normal service)Так как справа от этих полей находится 1 бит, действительное значение TOS вдвое больше значение битов TOS. Tcpdump -v -v показывает значение всего поля TOS, а не только четырех битов. Это значение, которые вы видите в первом столбце следующей таблицы:
TOS Биты Значение Linux Приоритет Полоса --------------------------------------------------------------- 0x0 0 Обычное обслуживание 0 Best Effort 1 0x2 1 Минимизировать затраты 1 Filler 2 0x4 2 Макс. надежность 0 Best Effort 1 0x6 3 mmc+mr 0 Best Effort 1 0x8 4 Макс. пропускн. способн. 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 Минимизировать задержку 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 14 mr+mt+md 4 Int. Bulk 1 0x1e 15 mmc+mr+mt+md 4 Int. Bulk 1
Второй столбец содержит значение соответствующих четырех битов TOS, за которыми следует их расшифрованное значение. К примеру, 15 обозначает пакет, которые требует минимальные денежные затраты, максимальную надежность, максимальную скорость прохождения и минимальную задержку.
Четвертый столбец перечисляет, каким образом ядро Linux интерпретирует биты TOS, и показывает, какие приоритеты ставятся им в соответствие.
Последний столбец показывает используемый по умолчанию priomap. В командной строке, priomap по умолчанию выглядит так:
1, 2, 2, 2, 1, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1Это означает, что приоритету 4, например, будет поставлена в соответствие полоса номер 1. priomap также разрешает использовать более высокие приоритеты (>7), которые не соответствуют значениям TOS, но устанавливаются другими способами.
Эта таблица из RFC 1349 (обратитесь к RFC за дополнительной информацией) объясняет, как приложения могут устанавливать свои биты TOS:
TELNET 1000 (минимальная задержка) FTP
Control 1000 (минимизировать задержку)
Data 0100 (макс. пропускн. способность) TFTP 1000 (минимизировать задержку) SMTP
Command phase 1000 (минимальная задержка)
DATA phase 0100 (макс. пропускн. способность) Domain Name Service
UDP Query 1000 (минимальная задержка)
TCP Query 0000
Zone Transfer 0100 (макс. пропускн. способность) NNTP 0001 (минимальные денежные затраты) ICMP
Errors 0000
Requests 0000 (как правило)
Responses <такой же, как и в Request> (как правило)
КЛАССЫ
Классы PRIO не могут настраиваться - они автоматически создаются, при добавлении очереди PRIO. Тем не менее, каждый класс может содержать ещё одну очередь.
ОШИБКИ
Большие объемы трафика в младших полосах могут вызывать "голод" в старших полосах. Это может быть предотвращено добавлением ограничения скорости (например, shaper, tc-tbf(8) ) к этим полосам, чтобы быть уверенным, что они не захватят соединение полностью.
АВТОРЫ
Алексей Н. Кузнецов <kuznet@ms2.inr.ac.ru>, J Hadi Salim <hadi@cyberus.ca>. Эта страница руководства поддерживается Бертом Хубертом (Bert Hubert) <ahu@ds9a.nl>
ПЕРЕВОД
Перевод с английского Виктор Ерёмин <ErV2005@rambler.ru> 2007.
| 16 декабря 2001 | iproute2 |
