web-dev-qa-db-ja.com

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

Macvlansを使用して仮想ネットワークをセットアップしており、トラフィック制御tcをそれぞれに接続しています。それぞれの遅延を90msに設定しました。しかし、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はmacvlansです。

2
shaifali Gupta

あなたの問題は、ルーティングがどのように行われるかに関係しており、 tcnetem または macvlan ではありません。

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

カーネルに選択するルートを尋ねることで、これを確認できます。たとえば、m1およびm2のアドレスが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がm1のLANにある場合(そしてm2インターフェイスは回避するために抑えられました考えられる無関係なARPの問題)、m1が使用されるため、ping 192.0.2.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 

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

1
A.B