tc netemを使用して、[0、1500ms]の範囲で短い[0.5、1.5]秒の遅延増加をシミュレートしようとしています。
これは、次のコマンドを使用して実行されます。
sudo tc qdisc add dev enp37s0 root netem delay 200ms
タイムアウト後にqdiscを削除して遅延をリセットします。
sudo tc qdisc del dev enp37s0 root
または、遅延を0msに変更します。
sudo tc qdisc add dev enp37s0 root netem delay 0ms
遅延時間が200ミリ秒を超えると、リセットステップによってパケットが破棄されます。これは内部バッファまたはキューのオーバーフローが原因で発生すると仮定します。
たとえば、待ち時間が1500ミリ秒の場合、パケットサイズが80バイトの場合、1 Mbpsで大量のパケットが連続的に失われます。
これが起こらないようにする方法はありますか?
netemがこれを行うのに適したツールであるかどうかはわかりません。アドバイスをいただきありがとうございます。
役立つ場合は、iperfを使用してパケット損失を測定します。
iperf3 -c <host> -t 1200 -u -l 80
答え1
速度をテストするためにUDPを使用しています(-u)。 UDPは接続がなく、輻輳制御機能がないため、TCPのように利用可能な帯域幅に縮小されません。
したがって、iperf は常に生成されます。UDPデータグラム最初から一定の速度で(デフォルトは1Mbit/秒)。
その後、データグラムはフロー制御サブシステムによってキューに追加され、キュールール(qdisc)が適用されます。
明らかにトラフィック速度を制限するために、tcは必要な帯域幅/遅延時間と一致するようにキュー除去速度を制御します。
最も簡単な場合は、キュー速度>キュー解除速度の場合、キューがいっぱいになるため、超過データグラムはキューの前に削除されます。
1Mb/s 0.1Mb/s
process -> queue -> interface
この動作は期待されており、問題を示していません。
TCPを試してください。