次のコマンドを使用して、インターフェイスに遅延を追加できることを知っています。
# tc qdisc add dev eth0 root netem delay 50ms
レイテンシに加えて、このインターフェイスの帯域幅を制限を100kbpsにしたいと考えています。
これどうやってするの?
帯域幅を制限する方法の例をいくつか見ました。例えば:
# tc qdisc add dev eth0 root handle 1: cbq avpkt 1000 bandwidth 10mbit
# tc class add dev eth0 parent 1: classid 1:1 cbq rate 512kbit \
allot 1500 prio 5 bounded isolated
# tc filter add dev eth0 parent 1: protocol ip prio 16 u32
しかし、レイテンシの遅延を設定した後でこれらのコマンドを実行しようとすると、次のようなエラーが発生します。
RTNETLINK answers: File exists
例えば:
# tc qdisc add dev eth0 root netem delay 97ms
# tc qdisc add dev eth0 root handle 1: cbq avpkt 1000 bandwidth 10kbit
RTNETLINK answers: File exists
私は本当に両方を実行できるようにしたいです:帯域幅を制限し、待ち時間の遅延を導入します。誰かがこれを達成する方法を知っていますか?
あなたの例では、出口に2つのルートqdiscsを追加しようとしています。ルートqdiscがすでにあり、許可されているのは1つだけなので、2番目のコマンドは失敗します。代わりに、ルートqdisc、次にその子クラスを作成し、2番目のqdiscをクラスの子として追加します。例えば:
tc qdisc add dev eth0 root handle 1:0 cbq avpkt 1000 bandwidth 10kbit
tc class add dev eth0 parent 1:0 classid 1:1 cbq rate 512kbit \
allot 1500 prio 5 bounded isolated
tc qdisc add dev eth0 parent 1:1 netem delay 97ms
この例では、ルートqdiscにハンドル1:0を割り当てました。次に、クラスを1:0の子として指定し、ハンドルを1:1にしました。次に、2番目のqdiscを1:1の子として追加しました。
これらのコマンドを実行した後、tc qdisc
は、cbq qdiscとnetem qdiscの両方を表示する必要があります。 Linux Advanced Routing&Traffic Control HOWTO は、qdiscsに関する詳細情報を提供します。