さまり
BSDRPをnetmap由来のpkt-gen試験機としても使うので、手元の環境で基準値性能を測定しておく。
構成図
こう、自分から自分に向けて。
動作環境
USBメモリにBSDRP 1.52を入れて、下記の物理マシン(C2550D4I + 16GMem(SMD-16G28ECP-16KL-D DDR3-1600) + Intel EXPI9402PT)の上で動かします。
|
|
初期設定
完全にゼロスタートです。rootでログインしたら
|
|
rootのパスワードと管理用のIPは適当に決めます。保存しないで再起動したら何も残らないし。
測定コマンド
FCSを含む長さでそれぞれ 64/128/256/512/1024/1280/1518[Byte] に加え、フロー数を 1/100(src)/100(dst)/10000(src+dst) にばらした計28パターン。
pkt-genの長さ指定はFCSを含まないので、コマンド的には4[Byte]少ない値になる。
パケット数は指定フレーム長で180[sec]分となる数を理論値から算出し、100未満の数値を適当に切り上げて、おおよそ180[sec]の試験時間としている。
- 60[Byte]を指定した場合は (1000000000[bps]/8[bit]) / (60+4+12+8) = 1488095 なので、 1488100[pps]
- 124[Byte]を指定した場合は (1000000000[bps]/8[bit]) / (124+4+12+8) = 844594 なので、 844600[pps]
- 252[Byte]を指定した場合は (1000000000[bps]/8[bit]) / (252+4+12+8) = 452898 なので、 452900[pps]
- 508[Byte]を指定した場合は (1000000000[bps]/8[bit]) / (508+4+12+8) = 234962 なので、 235000[pps]
- 1020[Byte]を指定した場合は (1000000000[bps]/8[bit]) / (1020+4+12+8) = 119731 なので、 119800[pps]
- 1276[Byte]を指定した場合は (1000000000[bps]/8[bit]) / (1276+4+12+8) = 96153 なので、 96200[pps]
- 1514[Byte]を指定した場合は (1000000000[bps]/8[bit]) / (1514+4+12+8) = 81274 なので、 81300[pps]
それぞれ180[sec]掛けて、トータルのパケット数とします。
受信側は常に pkt-gen -i em1 -f rx
なので特段語ることも無し。
基本手順は以下の通り。(cshの場合)
|
|
適当にシェルスクリプト風テキストファイルに書き直し、実行するだけ。( /bin/sh を使うのでバックグラウンド実行の書式は上記と少し違うよ)
|
|
出力はこんな感じで得られるので、適当に切り取ってまとめます。
|
|
ただし、全くのロスなしと言うのも保証しきれないので、どうしても厳密な測定に用いる場合を除いては秒間の統計を横に並べるだけでも十分だと言えます。
また、全く同様の試験を複数サンプル取得して、中央値を採用するなどの方法を取るのも良いでしょう。
受信側の出力は、通常の
kill
コマンドで停止すると最後の統計が取得できないので kill -INT
を使うようにしましょう。また、処理能力が不足する環境では dev.em.0.rx_overruns
や dev.em.0.mac_stats.missed_packets
が計上されることがあります。
pkt-genを使用している装置側の問題だと考えられますが、出来ることはバッファを少し深くすること位かと思います。
方法例はこんな感じ。
|
|
netmapのdev.netmap.generic_mitと言うのもあるのだけど “Controls interrupt moderation for emulated mode"って書いてあった ので、試してないけど多分効果ないんじゃないかな。
測定結果
測定結果を見て行きます。
理論値レートと比較しながらご確認ください。
Packet size(include RCS) | Maximum packet rate |
---|---|
64 Byte | 1488095 pps |
128 Byte | 844594 pps |
256 Byte | 452898 pps |
512 Byte | 234962 pps |
1024 Byte | 119731 pps |
1280 Byte | 96153 pps |
1518 Byte | 81274 pps |
まずは、全体の送信レートを簡単に確認しておきます。
|
|
いずれも理論限界に近い値が出ています。(若干起動、停止時の統計取得間隔のずれがあるので、ぴったりとはいきません)
次に、ロスが無いかを確認します。
|
|
一応無さそう。でもタイミングが悪いとロスったりするので…。
それでは、個別にグラフを描いて見てみましょう。
1 / 64 Byte (1フロー/100フロー(src)/100フロー(dst)/10000フロー(src+dst))
2 / 128 Byte (1フロー/100フロー(src)/100フロー(dst)/10000フロー(src+dst))
3 / 256 Byte (1フロー/100フロー(src)/100フロー(dst)/10000フロー(src+dst))
4 / 512 Byte (1フロー/100フロー(src)/100フロー(dst)/10000フロー(src+dst))
5 / 1024 Byte (1フロー/100フロー(src)/100フロー(dst)/10000フロー(src+dst))
6 / 1280 Byte (1フロー/100フロー(src)/100フロー(dst)/10000フロー(src+dst))
7 / 1518 Byte (1フロー/100フロー(src)/100フロー(dst)/10000フロー(src+dst))
はい、とても面白みのないグラフでした。
面白みが無くて非常に助かります。これで変にインパルスなんてあろうものなら、原因がピーーーーーガガガガガですよ。
まとめ
とにかく、BSDRPをUSBメモリに焼いて適当にスクリプト書けば、立派なパケット試験機になるということが分かりました。
CPUは貧弱そうなAtom C2550(2.4GHz)でも平気でした。
とりあえず今回はここまで。