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時間(
によって返されるstruct tmsのtms_utimeとtms_cutimeの値
回(2))、
システムのCPU時間(
によって返されるstruct tmsのtms_stimeとtms_cstimeの値
回(2))。
ご覧のように、これらのオプションでは実際のネットワーク遅延時間を測定できません(他のプログラム実行時間の統計は除外されています)。そうする方法はありますか?時間ツールを使用していないかもしれませんが、いくつかのカーネルハックはありますか?
自分のプログラムを書き始める前に、聞きたかったのですが。
ありがとう、Piotr
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トラフィックを示しました。 tcpdump(8)
を使用してSNMPトラフィックを簡単にフィルタリングし、必要なパケットのみを取得できます(ビジーなシステムからすべてのトラフィックをダンプすると、hugeload。)
Pingを試してください:
$ ping -U 192.168.1.3
Pingマニュアルから:
-Uユーザー間の完全な出力待機時間(古い動作)。通常、pingはネットワークの往復時間を出力します。これは異なる場合があります。 DNS障害のため。
プログラムを実行し、その間にtcpdump
またはwireshark
を使用してネットワークトラフィックをキャプチャします。要求と応答の時間を確認し、簡単な減算を行います。