假设我有100kbps带宽
- Root - 100kbps / \ / \ / \ / \ / \ / \ Assured 30kbps 10kbps
我保证A类30kbps,B类10kbps. 60kbps是保留或超额带宽
在HTB manual它说
Any unused bandwidth can be used by any class which needs it (in proportion of its allocated share).
但是,当我运行以下测试时,如上面的ascii艺术所示:
tc qdisc add dev eno1 root handle 1: htb tc class add dev eno1 parent 1: classid 1:1 htb rate 100kbps ceil 100kbps tc class add dev eno1 parent 1:1 classid 1:10 htb rate 10kbps ceil 100kbps tc class add dev eno1 parent 1:1 classid 1:20 htb rate 30kbps ceil 100kbps tc filter add dev eno1 protocol ip parent 1:0 prio 1 u32 match ip dport 8000 0xffff flowid 1:10 tc filter add dev eno1 protocol ip parent 1:0 prio 1 u32 match ip dport 8001 0xffff flowid 1:20
我得到以下结果:A类为56kbps,B类为37kbps
这是〜1.5的比率,而我预计该比率为3:1,作为早期分配.
似乎服务了30和10,然后在两个类之间平均分配了多余的部分,这在代码中表示RedBlack树持有这两个类,调度程序对它们执行了RR.
我的问题是,超出的带宽是否与结果相同,code建议? (也许我误解了代码)
或者我应该期望A级和B级之间的比例为3:1?
解决方法
看看HTB文档中的“量子”.所有未分配的bw由WRR算法根据classe的量子处理.