Windows版のnetemとNetwork Link Conditioner
Linuxにはtc netem、MacにはNetwork Link Conditionerがあります。Windowsには、遅延やパケット損失を加える標準機能がありません。このページでは、すでに知っている操作をBean Network Testerに対応づけ、数値がそのままでは通用しない点も示します。
netemのオプションを1つずつ
ここにあるどのコマンドにも --target と --duration を付けてください。付けないとコンピューター全体に影響します。
| netem | ウィンドウの設定 | フラグ |
|---|---|---|
delay 100ms | Latency | --latency 100 |
delay 100ms 20ms | Latency, Jitter | --latency 100 --jitter 20 |
loss 5% | Loss | --loss 5 |
loss 5% 25% | Loss, Losses in a row (burst) | --loss 5 --loss-burst 4 |
duplicate 1% | Duplication | --dup 1 |
corrupt 0.1% | Corruption | --corrupt 0.1 |
reorder 25% | Spike chance, Spike size | --spike-prob 5 --spike-ms 200 |
rate 1mbit | Download, Upload | --down 122 --up 122 |
limit 1000 | Buffer | --buffer 1000 |
- バースト損失。netemの相関値はバースト長ではありません。Losses in a row (burst)は連続して失われるパケット数の平均で、最も近い対応です。
- 順序の入れ替え。入れ替えの割合を指定する項目はありません。スパイクは1つのパケットだけを遅らせ、あとから送ったパケットに追い越させます。実際に起きたかどうかはStatisticsページの入れ替えカウンターで確認できます。
- キューの大きさ。netemのlimitはパケット数です。Bufferはミリ秒の時間です。
知っておきたい3つの違い
方向。netemはインターフェースから出ていくものだけを遅らせ、返事はそのまま戻ります。このツールは双方向を捕捉するので、--latency 100 はpingを約200ミリ秒増やします(行きの100と帰りの100)。netemと同じにするには、送信方向だけを捕捉します。
BeanNetworkTester.exe --filter out --latency 100 --jitter 20 --target myapp.exe --duration 120
単位。netemのrateはビット毎秒です。速度制限のフィールドはKB/sで、Kは1024です。メガビットの換算は次のとおりです。
| netemのrate | 速度制限フィールド(KB/s) |
|---|---|
1mbit | 122 |
5mbit | 610 |
10mbit | 1221 |
50mbit | 6104 |
100mbit | 12207 |
対象範囲。tcはネットワークインターフェース全体に作用し、root権限が必要です。このツールは --target で1つのプログラムだけを狙い、管理者権限が必要です。
Network Link Conditionerに慣れている方へ
Appleのツールは名前付きのプロファイルで動きます。こちらで最も近いものは次のとおりです。
| Network Link Conditioner | こちらで最も近いもの |
|---|---|
| 100% Loss | Lossを100にする |
| 3G | 3G network |
| DSL | Home DSL (VDSL) |
| LTE | LTE / 4G |
| WiFi | Good WiFi |
| Very Bad Network | Terrible network |
| Edge | 対応するプロファイルはありません。速度制限と遅延を自分で入力し、Save...ボタンで自分のプロファイルとして保存します。 |
数値はAppleのものとは異なるため、プロファイルは出発点として使ってください。プロファイルが設定する値はすべてリファレンスページに載っています。
Windowsで得られるもの
- コンピューター全体ではなく、1つのプログラム。障害を1つのアプリに向けて、ほかの部分は普段どおりに保てます。
- シェルスクリプトの代わりにタイムライン。時間で変わるシナリオは決めた秒数で設定を変えます。Linuxで
tcとsleepのスクリプトがやることと同じです。 - パイプラインから実行できる。同じ実行ファイルがCIで動き、終了コードで結果を返します。
LinuxやmacOSでは、オリジナルのツールを使ってください。このツールはWindows専用です。