linux htb中多余的带宽是如何分配的?

linux htb中多余的带宽是如何分配的?

假设我有 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 选项仅用于指定比率。

相关内容