2つのマシン間の一方向レイテンシを測定しようとしています。ping
を使用して、1つのマシンから別のマシンにICMP
パケットを送信したいと思います。パケットの間隔は1マイクロ秒(1us)で、100万パケット(10 ^ 6)を送信したいので、パケットの送信には合計で1秒かかります。
また、他のマシンの応答は気にしません(2番目のマシンでパケットをキャプチャして分析するだけです)。
今私は試しました:
ping -I eth0 -c 1000000 -l 1000000 -f -i 0.000001 -b 255.255.255.255
また、-l
オプションと-f
オプションを無効にして実験しました。 -l
に大きな値を使用すると、rcvbufではプリロードを保持するのに十分ではないという警告が表示されます。
私はtcpdumpを使用して、自分のマシンからの発信パケットと、他のマシンへの着信パケットをキャプチャしています。
問題は、パケット間の間隔がほとんどの場合5us〜15usであり、わずかに大きいことです。
グーグルのようなウェブサイトに直接送信しているときに同じ問題があります:
ping -I eth0 -c 1000000 -l 1000000 -f -i 0.000001 google.com
私が欲しいのは:
ping
コマンドとそれが提供するオプション(十分な場合)を使用することをお勧めします。管理者権限があります。
更新
私の目標は、さまざまなケーブルがパケットに導入する遅延を測定することです。したがって、正確なパケットの生成とキャプチャが必要です。ハードウェアに関しては、適切なツールがありますが、期待どおりの結果が得られません。問題はソフトウェアにあると思います。
私の問題は、-i
オプションを使用しているときにpingが期待どおりに動作しないように見えることです。 -f -l 1000000
を使用している場合、キャプチャは3us〜5usごとに送信されます。 -f
を指定するか、これら2つのいずれも指定しない場合、パケットは12msごとに生成されます。
一般的に、ブロードキャストされたpingのパケット距離を制御することはできないと思います。
ping -f
will notリモートパーティからの応答を待ちます。
ただし、連続するパケット間の1usの遅延は、ハードウェア(CPU)とソフトウェア(IPスタック)の組み合わせから求めるには大きすぎる可能性があります。
パフォーマンスを最大化(および送信遅延を最小化)するには、電源管理機能を無効にするか、少なくともperformance
CPUガバナーを使用してください。
おそらく、レイテンシとスループットの間で混乱を招くでしょう。 1パケットを送信し、その遅延を測定して待ち時間を決定するだけで十分です。必要なのは、高精度で時間を測定するメカニズムです。 1つの方法はPTP(Precision Time Protocol)です。つまり、送信者は送信されたパケットにタイムスタンプを添付します。 WRTスループット、パケットのサイズは非常に重要です。デフォルトでは、pingの長さは64バイトです。