ネットワーク遅延測定(Linux)


8

SNMP GETリクエストのネットワーク遅延を測定したいのですが。timeさまざまなコマンドのタイミング統計を見つけるために使用できる無料のコマンドラインツールがあります。たとえばsnmpget、次のように使用できます。

$ time snmpget -v 2c -c public 192.168.1.3 .1.3.6.1.2.1.2.2.1.10.2
IF-MIB::ifInOctets.2 = Counter32: 112857973

real    0m0.162s
user    0m0.069s
sys 0m0.005s

マニュアルによると、統計は次のように構成されています:

  • 呼び出しから終了までの経過リアルタイム

  • ユーザーCPU時間( times(2)
    によって返される、struct tms内のtms_utimeとtms_cutimeの値の合計
    )、

  • システムCPU時間( times(2)
    によって返されるstruct tms内のtms_stime値とtms_cstime値の合計
    )。

ご覧のように、これらのオプションでは実際のネットワーク遅延時間を測定できません(他のプログラム実行時間の統計は除外されています)。そうする方法はありますか?時間ツールを使用していないかもしれませんが、いくつかのカーネルハックはありますか?

自分のプログラムを書き始める前に、聞きたかったのですが。

ありがとう、Piotr

回答:


5

tcpdump(8)プログラムの-ttt旗はあなたが必要なものだけかもしれ。

00:00:00.000031 IP haig.mdns > 224.0.0.251.mdns: 0 PTR (QM)? 1.0.168.192.in-addr.arpa. (42)
00:00:01.897031 IP haig.45240 > stackoverflow.com.www: Flags [F.], seq 866615166, ack 62506321, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000030 IP haig.45242 > stackoverflow.com.www: Flags [F.], seq 853537650, ack 61102072, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000019 IP haig.45243 > stackoverflow.com.www: Flags [F.], seq 863535366, ack 62086489, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0

行の先頭のタイムスタンプは、前のパケットからの時間をマイクロ秒単位で示しています。-tコマンドラインで異なる数を指定することにより、絶対時間、最初のパケット以降の相対時間、またはパケット間の相対時間を取得できます。

私のシステムでは簡単に見つけることができるので、ランダムなmdnsとWebトラフィックを示しました。SNMPトラフィックを簡単にフィルタリングしてtcpdump(8)、必要なパケットのみを取得できます(ビジーなシステムからのすべてのトラフィックをダンプすると、大きな負荷が発生する可能性があるため、これは良い考えです)。


-ttttt最後のパケットからマイクロ秒を表示する代わりに、トレースの開始からマイクロ秒を表示することもできます。
Alex D

8

pingを試してください:

$ ping -U 192.168.1.3

pingマニュアルから:

-Uユーザー間の待ち時間をすべて表示します(以前の動作)。通常、pingはネットワークの往復時間を出力しますが、DNSの障害のために異なる場合があります。


回答ありがとうございます。SNMPgetリクエストに固有のレイテンシを測定したいと思います。

5

プログラムを実行し、その間、tcpdumpまたはでネットワークトラフィックをキャプチャしますwireshark。リクエストと返信の時間を確認し、簡単な減算を行います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.