omni-test による latency 測定
最近の netperf は "omni-test" による測定を行うのが一般的のようです。
omni test で latency を測定しましょう。
ここで、latency とは送信サーバと受信サーバでパケットが往復するのにかかる時間(RTT)のことを言うとします。 まずは受信側で受信準備します。
# netserver送信側で UDP で RTT を測定するコマンドを発行します。
# netperf -t omni -H localhost -- -d rr -T UDP -k MIN_LATENCY,MEAN_LATENCY,P90_LATENCY,P99_LATENCY,MAX_LATENCY,STDDEV_LATENCY OMNI Send|Recv TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to localhost.localdomain () port 0 AF_INET MIN_LATENCY=11 MEAN_LATENCY=44.34 P90_LATENCY=50 P99_LATENCY=74 MAX_LATENCY=3079 STDDEV_LATENCY=13.49latency の単位は micro second です。 オプションについて簡単に説明します。
-t : テストモード指定。ここでは omni テスト。
-H : 受信サーバのホスト名またはIP addressを指定。
-- : 以降が omni テストのためのオプションになります。
-d : direction 指定。rr は request/response = 往復時間測定。
-T : プロトコルを指定。ここでは UDP。他には TCP, SCTP も指定可能。
-k : omni test 特有の出力項目セレクタ。
出力は レイテンシの最小値、平均値、90%分位点、99%分位点、最大値、標準偏差、などが出力可能です。
-k オプションで omni test で出力する項目を指定する項目は非常にたくさんあります。
-k all とすると、すべて出力されるようになります。測定ログとして残すには十分でしょう。
# netperf -t omni -H localhost -- -d rr -T UDP -k all OMNI Send|Recv TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to localhost.localdomain () port 0 AF_INET SOCKET_TYPE=Stream PROTOCOL=UDP DIRECTION=Send|Recv ELAPSED_TIME=10.00 THROUGHPUT=22333.41 THROUGHPUT_UNITS=Trans/s ... UUID=46412b12-8a4a-11e2-985e-e91ceb3a7ad7 MIN_LATENCY=11 MAX_LATENCY=2478 P50_LATENCY=44 P90_LATENCY=52 P99_LATENCY=77 MEAN_LATENCY=43.90 STDDEV_LATENCY=15.74 LOCAL_SOCKET_PRIO=-1 REMOTE_SOCKET_PRIO=-1 LOCAL_SOCKET_TOS=0xffffffff REMOTE_SOCKET_TOS=0xffffffff LOCAL_CONG_CONTROL= REMOTE_CONG_CONTROL= LOCAL_FILL_FILE= REMOTE_FILL_FILE= COMMAND_LINE="netperf -t omni -H localhost -- -d rr -T UDP -k all"
ヒストグラム出力
レイテンシの測定では、分位点などの要約統計量だけでなくヒストグラムが欲しいことがあります。
netperf でヒストグラムを出力する際は、コンパイルする際に、configure に --enable-histogram オプションを渡します。
# ./configure --enable-histogram測定の際には -v 2 オプションを付け、 verbosity を 1 より大きくします。
# netperf -t omni -H localhost -v 2 -- -d rr -T UDP -k MIN_LATENCY,MEAN_LATENCY,P90_LATENCY,P99_LATENCY,MAX_LATENCY,STDDEV_LATENCY OMNI Send|Recv TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to localhost.localdomain () port 0 AF_INET : histogram MIN_LATENCY=11 MEAN_LATENCY=44.87 P90_LATENCY=46 P99_LATENCY=71 MAX_LATENCY=1447 STDDEV_LATENCY=7.58 Histogram of request/response times UNIT_USEC : 0: 0: 0: 0: 0: 0: 0: 0: 0: 0 TEN_USEC : 0: 3031: 1094: 413: 197318: 9043: 4774: 1942: 441: 135 HUNDRED_USEC : 0: 163: 4: 2: 3: 0: 1: 0: 0: 0 UNIT_MSEC : 0: 1: 0: 0: 0: 0: 0: 0: 0: 0 TEN_MSEC : 0: 0: 0: 0: 0: 0: 0: 0: 0: 0 HUNDRED_MSEC : 0: 0: 0: 0: 0: 0: 0: 0: 0: 0 UNIT_SEC : 0: 0: 0: 0: 0: 0: 0: 0: 0: 0 TEN_SEC : 0: 0: 0: 0: 0: 0: 0: 0: 0: 0 >100_SECS: 0 HIST_TOTAL: 218365
余談
上記の測定には、対象として自身(localhost)を指定していました。
レイテンシの最大値: 1.4 ms という数字は、ping コマンドで RTT を測定した場合に比べて大きいです。これは、Kernel 内でパケットが折り返す ping(ICMP) とは違い、ユーザ空間までのパケット往復時間で図っているためです。 パケットがユーザ空間まで上がる分、スケジュールの関係で netperf や netserver プロセスの実行が遅れてしまうことがあるからです。
参考文献
Care and Feeding of Netperf
0 件のコメント:
コメントを投稿