Linux

linux htb 中多餘的頻寬如何分配?

  • June 26, 2018

假設我有 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

我得到以下結果:A 類為56kbps , B類為37kbps

這是〜1.5的比率,而我預計該比率為3:1,作為早期分配。

似乎提供了 30 和 10,然後多餘的部分在兩個類之間平均分配,這是有道理的,因為在程式碼中它說 RedBlack 樹持有這兩個類,調度程序對它們執行 RR。

我的問題是,超出的頻寬是否按照結果和程式碼的建議平均分配?(也許我誤解了程式碼)

或者我應該期待 A 類和 B 類之間的比例為 3:1 嗎?

查看 HTB 文件中的“量子”。所有未分配的體重都由 WRR 算法根據類的量子處理。

據我所知,“分配的份額”是指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 的 ceil,因此它不會提供超過 100kbps 的速率,而 300kbps 選項只是在這裡指定比率。

引用自:https://serverfault.com/questions/917301