小さいパケットを大量に生成する

高 pps のトラフィック生成

SmartBits とか高くて買えないので、 PC で高 pps のトラフィックを生成してみた。

FreeBSD 7.2-RELEASE i386 on Express5800/i110Rb-1h で以下のコマンドを叩き、
53bytes のパケットを生成すると 168kpps 出せる。

send# netperf -H 172.16.2.100 -t UDP_STREAM -l 100 -- -m 1

デュアルコアの力を絞り出すために複数個動かして見たところ、
2プロセスだと 188kpps ぐらい。 4プロセスだと 220kpps を叩き出せる。
SMPng はきちんと効いている模様。
Giant Lock な他の OS と比べたら面白いかも、とか思った。

netperf -t TCP_STREAM -- -m 1 の挙動

netperf の -- -m オプションでパケットサイズを指定でき、 UDP では期待通りの動作をする。
しかし、 TCP だと pps の計算が合わなかったので、ちょっと調べてみた。

netperf -H 172.16.2.200 -t TCP_STREAM -l 100 -- -m 1

と叩くと、 1byte づつ write(2) していることを ktrace で確認できる。
しかし、 tcpdump で実際に吐き出されるパケットを見てみると、
パケットサイズは 1500bytes 近い大きさになっている。
kernel が気を利かせてくれて、複数の write(2) をひとまとめにして NIC に投げている模様。

Linux だとどういう挙動になるのかしらん。