
Существует дисциплина очереди tc DRR (Dificite Round Robin).
Он имеет те же возможности, что и HTB, но вместо использования ведер, заполненных токенами, он просто назначает каждой очереди некий Dificit Counter. При отправке пакета 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
Скорость остается одинаковой :( Что я делаю не так?
решение1
Ответ: DRR сам по себе не отбрасывает пакеты. Чтобы получить желаемое поведение, добавьте дочерние qdiscs к дочерним классам DRR, например, pfifo limit 50
чтобы заставить дочерний qdisc отбрасывать пакеты вместо того, чтобы фактически ставить их в очередь на неопределенный срок. Решение было найдено здесь:ветка linux.org.ru
Ссылка:человек tc-drr
ПРИМЕЧАНИЯ Эта реализация не отбрасывает пакеты из самой длинной очереди при переполнении, поскольку ограничения обрабатываются отдельными дочерними qdisc.
решение2
ДРР - этопланировщик, вам все равно придется выделять разную полосу пропускания для классов с htb. Я полагаю, вы думали, что указание кванта как 600 и 1400 даст близкое к 1:2 соотношение. На самом деле это не так. Вы можете получить близкое к этому соотношению в вашей конфигурации только в случае перегрузки, например, создав несколько потоков UDP, а затем измерив два из них, но это все равно не то, что вы ожидаете.