Назад | Перейти на главную страницу

Linux qos: tc DRR qdisc не работает

Существует дисциплина очереди DRR (Dificite Round Robin).

Он имеет те же возможности, что и HTB, но вместо использования сегментов, заполненных токенами, он просто назначает каждой очереди некоторый счетчик Dificit. При отправке пакета DC уменьшается на размер пакета. Если DC меньше размера пакета, DC увеличивается на квант очереди, и следующая очередь обрабатывается. Таким образом, он может делить исходящий трафик в некотором соотношении, не зная ширины канала (что требуется для HTB). Видеть http://www.unix.com/man-page/linux/8/tc-drr/

Настройка: два хоста, 172.16.1.1 и 172.16.1.2.

На первом хосте мы прослушиваем трафик:

nc -l 8111
nc -l 8112

На втором хосте проверяем скорость:

pv /dev/zero | nc 172.16.1.1 8111
pv /dev/zero | nc 172.16.1.1 8112

Теперь скорость равна (pv - утилита, позволяющая измерять скорость передачи данных по конвейеру). Добавьте DRR на втором хосте (HTB вверху используется для имитации реальных ограничений скорости канала):

tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
tc qdisc add dev eth0 parent 1:1 handle 2: drr
tc class add dev eth0 parent 2: classid 2:1 drr quantum 600
tc class add dev eth0 parent 2: classid 2:2 drr quantum 1400
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport 8111 0xffff classid 2:1
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport 8112 0xffff classid 2:2

Скорость остается равной :( Что я не так делаю?

Ответ: DRR сам по себе не отбрасывает пакеты. Чтобы получить желаемое поведение, добавьте дочерние qdiscs в дочерние классы DRR, например pfifo limit 50 чтобы дочерний qdisc отбрасывал пакеты вместо того, чтобы ставить их в очередь на неопределенное время. Решение было найдено здесь: ветка linux.org.ru

Ссылка: человек tc-drr

ЗАМЕЧАНИЯ Эта реализация не отбрасывает пакеты из самой длинной очереди при переполнении, поскольку ограничения обрабатываются отдельными дочерними qdiscs.

Drr это планировщик, вам все равно придется выделить другую полосу пропускания для классов с htb. Я предполагаю, что вы, указав квант как 600 и 1400, дадите соотношение, близкое к 1: 2. На самом деле не будет. Вы можете приблизиться к этому соотношению в своей конфигурации только в случае перегрузки, например создайте несколько потоков UDP, а затем измерьте два из них, но это все еще не то, чего вы ожидаете.