macvlan 上の tc-netem を使用したトラフィック シェーピング

macvlan 上の tc-netem を使用したトラフィック シェーピング

私は macvlan を使用して仮想ネットワークを設定しており、それぞれのネットワークにトラフィック制御 tc を接続しています。それぞれの遅延を 90 ミリ秒に設定しました。しかし、ping では 0.02 秒の時間が返されます。なぜ tc が macvlan で動作しないのでしょうか?

次のコマンドを使用しています:

tc qdisc add dev m1 root netem delay 90ms
tc qdisc add dev m2 root netem delay 90ms

次に、m1 の IP から m2 の IP に ping を実行します。m1 と m2 は macvlan です。

答え1

あなたの問題はルーティングの実行方法に関係しており、tcネットムまたはマックVLAN

ホストに属する IP アドレスからホストに属する別の IP アドレスに到達する場合、ルートはloローカル ルーティング テーブル (hidden、try ip route show table local) を参照して (ループバック) インターフェイスを使用し、IP アドレスが割り当てられた実際のインターフェイスは使用しません。

これを確認するには、カーネルに選択するルートを問い合わせます。たとえば、1 メートルそして平方メートル192.0.2.2/24 と 192.0.2.3/24 でした:

# ip route get from 192.0.2.2 to 192.0.2.3
local 192.0.2.3 from 192.0.2.2 dev lo table local uid 0 
    cache <local> 

これらのインターフェースでテストを行う必要がある場合は、テスト用の独自のルーティング スタックを備えた別のシステムが必要です。このシステムは、実際のホスト、VM、コンテナー、またはおそらくすでに開始したように、追加のネットワーク名前空間 (複数可) を使用するだけのシステムである可能性があります。

上記の私の仮定のケースでは、192.0.2.1が1 メートルのLAN(および平方メートルインターフェースは、無関係なARPの問題を回避するためにダウンしたままにされていたため、ping 192.0.2.1遅延が表示される。1 メートル次のように使用されます:

# ip route get from 192.0.2.2 192.0.2.1
192.0.2.1 from 192.0.2.2 dev m1 uid 0 
    cache 

最初の ping では、IP リンクを解決するためにその前に ARP 要求も実行され、これも遅延されるため、通常は 2 倍の遅延ペナルティが発生します。

関連情報