VIA VT6122のパラメータをチューニングしてみた。

ふと思い立ち、家の仮想環境用のストレージの性能測定をしてみたが、妙に遅い。
MarvellのSATAコントローラーでHyperDuoを構成したものをFreeNASでミラーを組んでいる構成。
直接サーバで計測するとWRITEは約90MB/secほど。
root@sto01[/mnt/pool0]# dd if=/dev/random of=test bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes transferred in 5.689354 secs (92152470 bytes/sec)

一方READはキャッシュから読まれているのか早い。
ディスクの性能測定にはならないが、iSCSIで接続した場合にはNICの性能がネックになるだろう。
root@sto01[/mnt/pool0]# dd if=test of=/dev/null bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes transferred in 0.418108 secs (1253954697 bytes/sec)

ではiSCSIで接続したESXi上から実行してみると、妙に遅く、WRITEで約17MB/secほど。
[root@esx01:/vmfs/volumes/634f9750-3747bd9a-1559-0010181b5821] time dd if=/dev/zero of=test bs=1M count=500
500+0 records in
500+0 records out
real    0m 29.43s
user    0m 0.42s
sys     0m 0.00s

READの方は比較的マシで約48MB/secほどのスピードが出ている。
[root@esx01:/vmfs/volumes/634f9750-3747bd9a-1559-0010181b5821] time dd if=test of=/dev/null bs=1M count=500
500+0 records in
500+0 records out
real    0m 10.35s
user    0m 1.83s
sys     0m 0.00s

流石に遅すぎるということで、sysctlパラメータを弄ってみた。
dev.vge.%d.int_holdoffを1100(デフォルト150)
dev.vge.%d.rx_coal_pktを16(デフォルト64)
dev.vge.%d.tx_coal_pktを32(デフォルト128)

そしたら、WRITEは約34MB/secほどで少しマシになった。
[root@esx01:/vmfs/volumes/634f9750-3747bd9a-1559-0010181b5821] time dd if=/dev/zero of=test bs=1M count=500
500+0 records in
500+0 records out
real    0m 14.56s
user    0m 0.42s
sys     0m 0.00s

一方、READは約43MB/secで若干遅くなったが、バランス的にはこれぐらいか。
[root@esx01:/vmfs/volumes/634f9750-3747bd9a-1559-0010181b5821] time dd if=test of=/dev/null bs=1M count=500
500+0 records in
500+0 records out
real    0m 11.63s
user    0m 2.00s
sys     0m 0.00s

ついでに仮想マシン(今となっては古くて塩漬けなWindows Home Server)上でCrystal Disk Markを実行してみた。
チューニング前は以下のような感じ。
freenas-block-sync_standard.PNG

チューニング後はシーケンシャルWRITEはよくなったが、割り込み減速の影響かランダム性能が悪くなった。
tuned_freenas-block-sync_standard.PNG

バランス的には後者かなと思いつつ、安物チップの限界を感じる結果となった。

ちなみに、BroadcomのNICだとWRITEが約80MB/sec、READが約75MB/secと結構な差となった。
[root@esx01:/vmfs/volumes/634f9750-3747bd9a-1559-0010181b5821] time dd if=/dev/zero of=test bs=1M count=500
500+0 records in
500+0 records out
real    0m 6.23s
user    0m 0.41s
sys     0m 0.00s

[root@esx01:/vmfs/volumes/634f9750-3747bd9a-1559-0010181b5821] time dd if=test of=/dev/null bs=1M count=500
500+0 records in
500+0 records out
real    0m 6.67s
user    0m 0.91s
sys     0m 0.00s

2.5GbEも流行ってきているので換装の機運は高まっているが、内部性能的にはGbEで十分そうだ。
と思ったが、900Mbpsぐらいでていそうなので、2.5GbEとかにするのも面白そう。
broadcom_freenas-block-sync_standard.PNG

GbEのカードでも性能差が結構あるので、2.5GbEとかを導入するにしてもまともなチップを選んだ方がよさそうだ。