Linux活用レシピ > KNOPPIXの活用 > 帯域制御装置の作成


帯域制御 - 遅延生成


    帯域制御PCで、遅延を発生させてみます。

1. 「tc」コマンドによる遅延の生成

  • 以下の「tc」コマンドで、遅延を発生させることができます。
  • root@Microknoppix;~# tc qdisc add dev eth0 root netem delay 100ms[ENTER]
    
    ここでは、ネットワークデバイス「eth0」から出ていくパケットに対して「100ms」の遅延を発生させています。

  • 確認してみましょう。帯域制御PCをはさんで、Windowsパソコンから以下の通りpingコマンドを発生させておき・・。
  • >ping -t 192.168.1.13[ENTER]
    192.168.1.13 に ping を送信しています 32 バイトのデータ:
    192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128
    
    帯域制御PCのコンソールで、先ほどの遅延を発生させます。
    root@Microknoppix;~# tc qdisc add dev eth0 root netem delay 100ms[ENTER]
    
    すると・・。
    192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128 <---コマンド発行
    192.168.1.13 からの応答: バイト数 =32 時間 =102ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =100ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =100ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =100ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =100ms TTL=128
    
    コマンドを発行した瞬間、遅延が発生していることが分かります。
    また、以下のコマンドで、現在の設定を確認できます。
    root@Microknoppix;~# tc qdisc show dev eth0 [ENTER]
    qdisk netem 8007: root refcnt 2 limit 1000 delay 100.0ms
    

     

    • なお、これらはKNOPPIXのターミナルで作業を行います。ターミナルが起動できていない場合は、以下のターミナルアイコンをクリックし、

    • 以下の通りターミナルが起動しとところで、
      knoppix@Microknoppix:~$
      

      以下のコマンドで「root」ユーザに変更し、これまでのコマンドを実行してください。
      knoppix@Microknoppix;~$ su - [ENTER]
      root@Microknoppix;~#
      


2. 「tc」コマンドによる様々な遅延の制御

  • 「tc」コマンドで、単純な遅延を発生させることができました。
    それでは、一旦以下のコマンドで設定を削除します。
  • root@Microknoppix;~# tc qdisc del dev eth0 root[ENTER]
    
    これで、ネットワークデバイス「eth0」から出ていくパケットに対して加えていた「100ms」の遅延が解除されます。

  • 確認してみましょう。帯域制御PCをはさんで、Windowsパソコンからのping応答が以下のように変化します。
  • 192.168.1.13 からの応答: バイト数 =32 時間 =100ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =100ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =100ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =100ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =100ms TTL=128 <---コマンド発行
    192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128
    
    コマンドを発行した瞬間、遅延がなくなり、元通りの通信に戻っていることが分かります。
    また、以下のコマンドで、解除後の設定を確認できます。
    root@Microknoppix;~# tc qdisc show dev eth0 [ENTER]
    
    qdisk pfifo_fast 0: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

      tc」コマンドの説明
      tcコマンドはさまざまなトラフィック制御ができ、非常に奥が深いです。しかしこのレシピのような単純な遅延の発生だけ行う場合は、以下の使い方だけおさえておけばOKです。
      新しく設定を追加する時は 「tc qdisc add」 で、
      設定済みの値を変更する際は 「tc qdisc change 」です。
      また、先ほどのように 「tc qdisc del」 で設定した値を消せますし、
      tc qdisc show」 で設定している値を確認できます。

3. よりリアリティのある制御

    はじめに説明したように、オンプレミスで運用しているサーバーがあって、それをクラウド化した場合のレスポンスを確認したい場合は、よりリアリティのある遅延を発生させ、クラウド環境に近い状況をエミュレーションさせたいですよね。

  • そこで、以下のコマンドで、200msの遅延を発生しつつ、半分(50%)の確率で、200msの遅延から±20msの範囲で遅延を増減させてゆらぎを与えることができます。
  • root@Microknoppix;~# tc qdisc del dev eth0 root[ENTER] <--設定を一旦消去
    root@Microknoppix;~# tc qdisc change dev eth0 root netem delay 200ms 20ms 50%
    [ENTER]
    

    実際に再現したいクラウド環境に合わせ、上記の遅延の値を変更してください。

  • 確認してみましょう。帯域制御PCをはさんで、Windowsパソコンからのping応答が以下のように変化します。
  • 192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 <1ms TTL=128 <---コマンド発行
    192.168.1.13 からの応答: バイト数 =32 時間 =220ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =188ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =213ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =218ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =220ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =220ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =218ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =210ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =218ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =197ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =208ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =219ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =188ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =211ms TTL=128
    192.168.1.13 からの応答: バイト数 =32 時間 =196ms TTL=128
    
    コマンドを発行した瞬間、200ms±20msの範囲で遅延が変化していることが分かります。
    どうでしょうか、リアリティが出てきましたよね。

    それでは、実際の設定を確認してみましょう。以下のようになっています。
    root@Microknoppix;~# tc qdisc show dev eth0 [ENTER]
    
    qdisk netem 8007: root refcnt 2 limit 1000 delay 100.0ms 20.0ms 50%


4. まとめ

    このように、帯域制御PCで遅延を自由に与えられますので、これをネットワーク上の装置間にはさみ込むことで、遅延のエミュレーションを行うことができます。