История изменений
Исправление Pinkbyte, (текущая версия) :
class htb 1:2 root rate 50Mbit ceil 50Mbit
class htb 1:10 parent 1:2 leaf 10: prio 1 rate 30Mbit ceil 40Mbit
class htb 1:20 parent 1:2 rate 20Mbit ceil 40Mbit
40+40 != 50, htb подстроит гарантированную скорость как ему будет удобнее(с учетом prio, но это не абсолют, большое количество трафика для 1:20 засрет тебе канал невзирая на prio).
Например, если трафика в классе 10 нет, то и 201 и 202 могут получить все 50 Мбит канала (по 25 каждый). А не определенные в их «родительском» классе максимальные 40.
Только что проверил - в отсутствии трафика в классе 10 суммарная загрузка канала у меня составила именно 40, а не 50. Кури что не так у тебя в системе
Вот выхлоп iperf(2 потока на разные IP):
на IP 172.30.13.64:
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 25.8 MBytes 21.7 Mbits/sec 5 sender
[ 4] 0.00-10.00 sec 25.6 MBytes 21.5 Mbits/sec receiver
на IP 172.30.13.254:
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 20.7 MBytes 17.3 Mbits/sec 3 sender
[ 4] 0.00-10.00 sec 20.6 MBytes 17.2 Mbits/sec receiver
Адаптированный скрипт для tc, используемый мною в тестах:
#!/bin/sh
IFACE=eth1
tc qdisc del dev ${IFACE} root 2>/dev/null
tc qdisc add dev ${IFACE} root handle 1: htb
tc class add dev ${IFACE} parent 1:0 classid 1:2 htb rate 50Mbit quantum 1500
tc class add dev ${IFACE} parent 1:2 classid 1:10 htb prio 1 rate 30Mbit ceil 40Mbit quantum 1500
tc class add dev ${IFACE} parent 1:2 classid 1:20 htb rate 20Mbit ceil 40Mbit quantum 1500
tc class add dev ${IFACE} parent 1:20 classid 1:201 htb prio 2 rate 10Mbit ceil 25Mbit quantum 1500
tc class add dev ${IFACE} parent 1:20 classid 1:202 htb prio 2 rate 10Mbit ceil 25Mbit quantum 1500
tc qdisc add dev ${IFACE} parent 1:201 handle 201: pfifo limit 127
tc qdisc add dev ${IFACE} parent 1:202 handle 202: pfifo limit 127
tc filter add dev ${IFACE} parent 1:0 protocol ip u32 match ip dst 172.30.13.64/32 flowid 1:201
tc filter add dev ${IFACE} parent 1:0 protocol ip u32 match ip dst 172.30.13.254/32 flowid 1:202
Update: прогнал тест с sfq вместо pfifo(ибо ты используешь именно его как leaf-класс) - картина не изменилась
Исходная версия Pinkbyte, :
class htb 1:2 root rate 50Mbit ceil 50Mbit
class htb 1:10 parent 1:2 leaf 10: prio 1 rate 30Mbit ceil 40Mbit
class htb 1:20 parent 1:2 rate 20Mbit ceil 40Mbit
40+40 != 50, htb подстроит гарантированную скорость как ему будет удобнее(с учетом prio, но это не абсолют, большое количество трафика для 1:20 засрет тебе канал невзирая на prio).
Например, если трафика в классе 10 нет, то и 201 и 202 могут получить все 50 Мбит канала (по 25 каждый). А не определенные в их «родительском» классе максимальные 40.
Только что проверил - в отсутствии трафика в классе 10 суммарная загрузка канала у меня составила именно 40, а не 50. Кури что не так у тебя в системе
Вот выхлоп iperf(2 потока на разные IP):
на IP 172.30.13.64:
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 25.8 MBytes 21.7 Mbits/sec 5 sender
[ 4] 0.00-10.00 sec 25.6 MBytes 21.5 Mbits/sec receiver
на IP 172.30.13.254:
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 20.7 MBytes 17.3 Mbits/sec 3 sender
[ 4] 0.00-10.00 sec 20.6 MBytes 17.2 Mbits/sec receiver
Адаптированный скрипт для tc, используемый мною в тестах:
#!/bin/sh
IFACE=eth1
tc qdisc del dev ${IFACE} root 2>/dev/null
tc qdisc add dev ${IFACE} root handle 1: htb
tc class add dev ${IFACE} parent 1:0 classid 1:2 htb rate 50Mbit quantum 1500
tc class add dev ${IFACE} parent 1:2 classid 1:10 htb prio 1 rate 30Mbit ceil 40Mbit quantum 1500
tc class add dev ${IFACE} parent 1:2 classid 1:20 htb rate 20Mbit ceil 40Mbit quantum 1500
tc class add dev ${IFACE} parent 1:20 classid 1:201 htb prio 2 rate 10Mbit ceil 25Mbit quantum 1500
tc class add dev ${IFACE} parent 1:20 classid 1:202 htb prio 2 rate 10Mbit ceil 25Mbit quantum 1500
tc qdisc add dev ${IFACE} parent 1:201 handle 201: pfifo limit 127
tc qdisc add dev ${IFACE} parent 1:202 handle 202: pfifo limit 127
tc filter add dev ${IFACE} parent 1:0 protocol ip u32 match ip dst 172.30.13.64/32 flowid 1:201
tc filter add dev ${IFACE} parent 1:0 protocol ip u32 match ip dst 172.30.13.254/32 flowid 1:202