デバイスごとに複数のqdiscを使用できますか?

デバイスごとに複数のqdiscを使用できますか?

tcを使用して同じデバイスに複数のqdiscを追加できますか、それともデバイスごとに1つのqdiscしか使用できませんか?

さらに、qdiscにはサブqdiscを含めることができますか、それともサブクラスのみを含めることができますか?つまり、これは可能ですかtc qdisc add parent <existing qdisc> handle <child qdisc> <qdisc type>

答え1

OPの質問には解決しなければならない実際の問題がないので、1つを提供します。とても簡単ですネットワークネームスペースの使用例

  • コミュニケーションの構築

    ip -n test1 link add up type veth peer netns test2
    ip -n test2 link set veth0 up
    ip -n test1 address add 192.0.2.11/24 dev veth0
    ip -n test2 address add 192.0.2.12/24 dev veth0
    
  • 予備テスト

    # ip netns exec test1 ping -c1 192.0.2.12
    PING 192.0.2.12 (192.0.2.12) 56(84) bytes of data.
    64 bytes from 192.0.2.12: icmp_seq=1 ttl=64 time=0.068 ms
    
    --- 192.0.2.12 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.068/0.068/0.068/0.000 ms
    
  • 最初のデフォルトのqdiscを追加します。ネテム

    tc -n test1 qdisc add dev veth0 root handle 1: netem delay 100ms
    
  • 試験結果

    # ip -n test1 neigh flush all
    # ip netns exec test1 ping -c2 192.0.2.12
    PING 192.0.2.12 (192.0.2.12) 56(84) bytes of data.
    64 bytes from 192.0.2.12: icmp_seq=1 ttl=64 time=200 ms
    64 bytes from 192.0.2.12: icmp_seq=2 ttl=64 time=100 ms
    
    --- 192.0.2.12 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1001ms
    rtt min/avg/max/mdev = 100.152/150.223/200.294/50.071 ms
    

    (IP レイテンシに加えて、最初の ping は ARP レイテンシも選択するため、レイテンシは 2 倍も高くなります.)

  • qdiscを再度追加し、以前のqdiscの親になります。

    tc -n test1 qdisc add dev veth0 parent 1: handle 2: netem delay 350ms
    
  • もう一度テストする

    # ip -n test1 neigh flush all
    # ip netns exec test1 ping -c2 192.0.2.12
    PING 192.0.2.12 (192.0.2.12) 56(84) bytes of data.
    64 bytes from 192.0.2.12: icmp_seq=1 ttl=64 time=900 ms
    64 bytes from 192.0.2.12: icmp_seq=2 ttl=64 time=450 ms
    
    --- 192.0.2.12 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1000ms
    rtt min/avg/max/mdev = 450.228/675.272/900.317/225.044 ms
    

    ご覧のように、二人はネテム使用されたqdisc:100 + 350 = 450ms(最初のARPのために2回使用されます)

qdiscの特定の属性が意味がある限り、続行できます。

tc -n test1 qdisc add dev veth0 parent 2: handle 3: prio

言わないまで(prioはオシャレを知るqディスク):

# tc -n test1 qdisc add dev veth0 parent 3: handle 4: sfq
Error: Specified class not found.

または、サポートがない場合(おそらく話すことができないため):

# tc -n test1 qdisc del dev veth0 parent 2: handle 3:
# tc -n test1 qdisc add dev veth0 parent 2: handle 3: sfq
# tc -n test1 qdisc add dev veth0 parent 3: handle 4: netem delay 100ms
RTNETLINK answers: Operation not supported

しかし、2番目のqdiscを何かに追加することはできません(これが複数のクラスを提供するqdiscクラスがある理由です):

# tc -n test1 qdisc add dev veth0 root handle 5: netem delay 100ms
Error: NLM_F_REPLACE needed to override.

結論として:

  • はい、複数の可能性があります。キューディスクデバイスごとの合計ですが、特定の階層内には1つしかありません。キューディスク。 「同じレベルの」複数のqdiscを持つには、次のものが必要です。キューディスクそれはいくつか提供しますフレンドリーそれぞれは次の親になります。キューディスク

  • (非カテゴリのみ)キューディスクまたありえますキューディスク子供として。

最も有用な状況では、人々は以下を使用します。オシャレを知るqdiscとフレンドリー、追加qdiscを追加フレンドリー親として、次のようなものがあります。フィルタークラスの選択方法を選択してください。

以下は、パート2のこのシナリオに対する答えです。CentOS 7で特定のポートの帯域幅を制限しますか?

関連情報