動的遅延の変更に tc netem を使用すると、パケット損失が発生します。

動的遅延の変更に tc netem を使用すると、パケット損失が発生します。

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を試してください。

おすすめ記事