假设我有 100kbps 带宽
- Root - 100kbps
/ \
/ \
/ \
/ \
/ \
/ \
Assured 30kbps 10kbps
我保证 A 类 30kbps,B 类 10kbps。60kbps 是保留或多余的带宽
在里面HTB 手册它说
任何未使用的带宽都可以被任何需要它的类别使用(按其分配的份额比例)。
但是,当我运行以下测试时,如上面的 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
我得到以下结果:56kbps对于 A 类和37kbpsB 类
这个比例是~1.5,而我预计这个比例是 3:1,作为早期的分配。
看起来 30 和 10 已经被服务了,然后多余的部分被平等地分配给这两个类,这是有道理的,因为代码中说红黑树保存着这两个类,调度程序对它们执行了 RR。
我的问题是,多余的带宽是否平均分配给结果和代码建议?(也许我误解了代码)
或者我应该预期 A 类和 B 类之间的比例是 3:1?
答案1
查看 HTB 文档中的“量程”。所有未分配的带宽均由 WRR 算法根据类的量程进行处理。
答案2
据我所知,“分配份额”是指 ceil。因此,如果您想要 3:1 的比例,则需要这样写:
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 300kbps
由于根类的上限为 100kbps,因此它不会提供超过 100kbps 的速度,而 300kbps 选项仅用于指定比率。