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

Ton*_*ous 5 networking linux traffic-shaping linux-networking

假设我有 100kbps 的带宽

                - Root - 100kbps
                /       \
               /         \
              /           \
             /             \
            /               \
           /                 \
Assured  30kbps             10kbps
Run Code Online (Sandbox Code Playgroud)

我保证 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
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:A类为56kbps,B 类为37kbps

这是一个 ~1.5 的比率,而我预计该比率为 3:1,作为早期分配。

似乎服务了 30 和 10,然后多余的部分在两个类之间平分,这是有道理的,因为在代码中它说 RedBlack 树持有这两个类,调度程序对它们进行 RR。

我的问题是,多余的带宽是否按照结果和代码的建议平均分配?(也许我误解了代码)

或者我应该期待 A 类和 B 类之间的比例为 3:1 吗?

小智 3

查看 HTB 文档中的“量子”。所有未分配的 bw 均由 WRR 算法根据 classe 的量程进行处理。