2010年3月20日土曜日

Network Emulation: netem

  • ネットワーク遅延を簡単に検証できる方法が無いかと探していたら、Linux で簡単にできそうだということが分かりました。
早速、Linux KVM で Ubuntu 9.10 (kernel: 2.6.31-20-generic-pae) を動作させて、実験してみました。


[JeOS11]eth0----eth0[JeOS13]eth1----eth0[JeOS12]

※ JeOS13 を NIC 2枚挿しにして、ルータとして機能させ、ネットワークの遅延などを発生させます。

/etc/sysctl.conf で、"net.ipv4.ip_forward=1" として、再起動すればルーティングできるようになります。


使い方
  • eth0 からの出力を 1000ms 遅延させる
    $ sudo tc qdisc add dev eth0 root netem delay 1000ms
    $ tc qdisc show dev eth0 ## 設定の確認
    qdisc netem 8001: root limit 1000 delay 1.0s
  • eth0 からの出力を 1000ms±100ms 遅延させる
  • $ sudo tc qdisc change dev eth0 root netem delay 1000ms 100ms
    ## 既に設定が存在するときは、add ではなく change を使う。
    $ tc qdisc show dev eth0
    qdisc netem 8001: root limit 1000 delay 1.0s 100.0ms
  • eth0 からの出力の設定を削除する
    $ sudo tc qdisc del dev eth0 root
    $ sudo tc qdisc show dev eth0
    qdisc pfifo_fast 0: root bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
  • eth0 からの出力を平均 1000ms で正規分布に従い遅延させる
    $ sudo tc qdisc add dev eth0 root netem delay 1000ms 200ms distribution normal
    $ tc qdisc show dev eth0
    qdisc netem 8003: root limit 1000 delay 1.0s 200.0ms
  • eth0 からの出力を 10% パケットをロスさせる
    $ sudo tc qdisc add dev eth0 root netem loss 10%
    $ tc qdisc show dev eth0
    qdisc netem 8002: root limit 1000 loss 10%
  • eth0 からの出力を 500ms±100ms 遅延、10% パケットをロス、10% 複製する
    $ sudo tc qdisc add dev eth0 root netem delay 500ms 100ms loss 10% duplicate 10%
    $ tc qdisc show dev eth0
    qdisc netem 8003: root limit 1000 delay 500.0ms 100.0ms loss 10% duplicate 10%


参考

0 件のコメント: