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で特定のポートの帯域幅を制限しますか?