net6501-70 ネットワークベンチマーク harvest編

Posted on 2012/10/14(Sun) 16:53 in technical

FreeBSDのネットワークパフォーマンスチューニングに関するwikiページがあるのですよ。

http://wiki.freebsd.org/NetworkPerformanceTuning

で、OS tuningの項目には、以下のように書いてある。

Skip feeding /dev/random from network.
kern.random.sys.harvest.ethernet=0
kern.random.sys.harvest.point_to_point=0
kern.random.sys.harvest.interrupt=0

そんなに変わるかなぁ、と半信半疑なので、簡単に測定してみた。

※見たら分かると思うけど信憑性超低いですぞな。

前提

物理構成

Node1 ---(SW)--- net6501 --- Node2

環境

OS : FreeBSD 9.0R
pf : disable
fastforward: disable
hw.intr_storm_threshold: 40000

/boot/loader.conf

console=comconsole
autoboot_delay="3"
hw.em.txd=4096
hw.em.rxd=4096
kern.ipc.nmbclusters=65535

以下の値が0の時がoff、1の時がonということで。

kern.random.sys.harvest.ethernet
kern.random.sys.harvest.point_to_point
kern.random.sys.harvest.interrupt

TCP/IP

image0

特に違いが見えないんですよねー。

TCP/IPv6

image1

特に違いが見えないんですよねー。

UDP/IP interrupt storm on

image2

スループットが下がる前の値で比較すると、640Mbpsと620Mbps位かなぁ。UDPで見ると一応意味がありそう。

一応連続試験なのでこの670MBps出てるヤツも説明したいところだけど放置(ぇー

ここでは、hw.intr_storm_threshold=40000として設定しているものの、スループットがガタッと下がっているタイミングで

"interrupt storm detected on "irq260:"; throttling interrupt source"

が多発していることが確認できていて、それのせいかなぁ...とか漠然と考えてて役に立たない。

大体こういう感じになってる。(これは別にstormが起きてる時の値ではないけれど)

# vmstat -i
interrupt total rate
irq4: uart0 8754 0
cpu0:timer 15828222 207
irq256: ahci0 49996 0
irq260: em1:rx 0 80635053 1057
irq261: em1:tx 0 22777456 298
irq262: em1:link 53415734 700
irq263: em2:rx 0 30604895 401
irq264: em2:tx 0 97307041 1276
irq265: em2:link 6 0
irq266: em3:rx 0 66534 0
cpu1:timer 15266797 200
Total 315960488 4144

UDP/IPv6 interrupt storm on

image3

こっちも似たような感じ。485Mbpsと470Mbps位の違いかな。

UDP/IP interrupt storm off

image4

hw.intr_storm_threshold=0にしたバージョン。

限界まで割り込みさせるので、スループットがガタッと下がることはなくて多少見やすくなったんじゃないかなぁ、と。

先のグラフで、スループットが下がる前のと比べると大体同じレートで推移してるように見える。

つまりはこの程度の効果がありそうだ、という話(でもさっきの670MBps近く出てるラインは無視してる)

UDP/IPv6 interrupt storm off

image5

hw.intr_storm_threshold=0にしたバージョン。

これがまた面倒で、一部スループットが変に高いというか。

300[sec]の間、特に大きな変動もなく推移してるのでちょっと意味がわかりませんね、って感じなのだけど。

pfはdisableなのでステート数はあんまり。

キャッシュヒット率とかは見てないからなぁ...。再現出来たら追うべきか。

暫定結論

kern.random.sys.harvest.ethernet=0
kern.random.sys.harvest.point_to_point=0
kern.random.sys.harvest.interrupt=0

は、若干ながら意味がある(が、5%未満とかそういうレベルなので、ある意味誤差レベル)。

むしろ、interrupt storm detectedを防ぐように設定した方が、転送性能だけを見れば余程意味があるのではないか、というところ。