有队列纪律DRR(Dificite循环赛)。
它具有与HTB相同的function,但是不使用桶,而是使用令牌,它只是为每个队列分配一个DIFS计数器。 在发送数据包DC时,数据包的大小会减小。 如果DC小于数据包大小,则按队列的数量增加DC,然后处理下一个队列。 因此,它可以以一定的比例划分出局traffec,不知道信道宽度(这是HTB所需的)。 见http://www.unix.com/man-page/linux/8/tc-drr/
设置:两台主机,172.16.1.1和172.16.1.2。
在第一台主机上,我们正在听stream量:
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是允许通过pipe道测量数据传输速度的实用程序)。 在第二个主机上添加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本身不丢包。 为了获得所需的行为,将子qdisc添加到DRR子类,如pfifo limit 50以使子qdisc丢弃数据包,而不是pfifo limit 50地排队它们。 解决方法是在这里find: linux.org.ru线程
参考: man tc-drr
注意这个实现不会从溢出时间最长的队列中丢弃数据包,因为限制是由各个子qdisc来处理的。
DRR是一个调度器 ,你仍然必须分配不同的带宽到类与htb。 我想你虽然指定量子为600和1400将接近1:2的比例。 事实上它不会。 只有在拥塞的情况下,你才可能在你的configuration上接近这个比例,例如创build多个UDPstream,然后测量两个问题,但是这并不是你所期望的。