web-dev-qa-db-ja.com

Linux htbで過剰な帯域幅はどのように分散されますか?

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にする必要がありますか?

5
Tony Tannous

HTBドキュメントの「クォンタム」を見てください。割り当てられていないすべてのbwは、クラスのクォンタムに従ってWRRアルゴリズムによって処理されます。

3
Martin Devera

私の知る限り、「割り当てられたシェア」は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オプションは、比率を指定するためだけにあります。

0
Sanael