100kbpsの帯域幅があるとしましょう
- Root - 100kbps
/ \
/ \
/ \
/ \
/ \
/ \
Assured 30kbps 10kbps
そして、クラスAは30kbps、クラスBは10kbpsを保証します。 60kbpsは予備または超過帯域幅です
HTBマニュアル それは言う
未使用の帯域幅は、それを必要とするすべてのクラスで使用できます(割り当てられたシェアの割合で)。
ただし、上記のアスキーアートに示されている次のテストを実行すると、次のようになります。
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、クラスの場合は37kbps B
これは約1.5の比率ですが、初期の割り当てとして比率は3:1になると予想していました。
30と10が提供されたようで、超過分は2つのクラス間で均等に分割されました。これは、これら2つのクラスを保持するRedBlackツリーが、スケジューラーがそれらに対してRRを実行するというコードのように意味があります。
私の質問ですが、超過帯域幅は結果として均等に分割され、 コード が示唆していますか? (おそらく私はコードを誤解しました)
または、クラスAとクラスBの比率を3:1にする必要がありますか?
HTBドキュメントの「クォンタム」を見てください。割り当てられていないすべてのbwは、クラスのクォンタムに従って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のセルがあるため、100kbpsを超えることはできません。また、300kbpsオプションは、比率を指定するためだけにあります。