帰ってきた VMware ESXi ディスクベンチマーク
以前 VMware ESXi で各種ディスクのベンチマークをとってみた - daily dayflower にてVMware ESXi で各種(ネットワーク)ディスクのベンチマークをとりましたが、残念ながら 100Mbps イーサネット環境での実験でした。
今回、GbE 環境が整ったので改めて各種ネットワークストレージのベンチマークをおこないました。
おことわり
おもに(前回と同じく)下記の命題を検証するために測定をおこないました。
NAS 買ったよ!
じつはとっくにギガビットスイッチと Celeron 440 (Core2 世代) のストレージサーバで VMware ESXi 環境を実運用中なのです。ですが、忙しかったり面倒くさかったりでベンチマークはとっていませんでした。
が、重い腰をあげるきっかけになったのが、下記の NAS。
売り上げランキング: 43397
Linux ベースでストレージサーバを立てるのなら、Core2 じゃなくて Atom でも結構いけるんじゃない?と思って会社に買ってもらいました。そこで、この Atom による NAS が ESXi のストレージサーバとしてどれくらい力を発揮できるのかという興味もあってベンチマークをようやくとることにしたのでした。
なお、だいたいどこで買っても(Amazon 含めて)実売 70,000円弱*2なので、ポイントのたまるお店で買うのがいいかもしんないです。私はさいわい Amazon で 62,910円という破格なときに買うことができました。
QNAP TS-259 Pro 自体の感想ですが、モニタをつなぐと*3わかるとおり、まるっきり Linux ベース*4の NAS です。ウェブ経由のコントロールパネルはそこそこよくできています(日本語にもおかしなところは見当たりません)。ただ同等の Atom の PC に比べるとブートに非常に時間がかかる気がします。また、紙のマニュアルはほとんどありません。DHCP 有効なネットワークだと IP が DHCP で振られるというのがわからずしばらく右往左往していました。また、ネットワークインタフェースのボンディングの設定を変えると IP の設定まわりがリセットされるところにも注意が必要でした。
環境
スペックなど
- ストレージサーバ
- QNAP TurboNAS TS-259Pro
- HDD: SATA2 WD 1TB (Caviar Green WD10EADS) x1 (単独ディスクボリューム)
- 仮想マシンサーバ
- ハブ
- BUFFALO レイヤー2 インテリジェント GbE スイッチ BS-G2016MR
インテリジェントスイッチであり VLAN などもやろうと思えばできるのですが、面倒なのでそのままハブとして使っています。そのかわり、今回は物理 NIC を2つ ESXi サーバに載せたこともあり、仮想スイッチを2つにして、
のように分離しました(ネットワーク自体は同一ネットワークに所属)。
TS-259 Pro も NIC の口が2つあるのでマネージメントとストレージアクセスポートをわけたりボンディング/チーミングしたりできるんですが、やはり面倒だったのと、普通に使う分にはわける必要はないだろうということで1つ分しか使っていません。
VM の設定
以下の4とおりのケースについて計測をおこないました。
- local
- ローカルにぶら下げた HDD にデータストア(vmfs)を構築
- シン・プロビジョニングなし(シック・プロビジョニング)
- iscsi-raw
- iscsi-vmfs
- iscsi-vmfs2
- nfs
ほか共通の設定は下記のとおりです。
仮想 CPU 数 | 1 |
---|---|
仮想メモリ | 384MB |
仮想ディスク | 16GB |
仮想 HDC | LSI Logic |
ゲスト OS | CentOS 5.4 x86_64 |
ややこしいのは、各環境でシン・プロビジョニング(簡単にいうとストレージ容量を動的割り当てすること)のありなしが異なるところです。ですがもっとややこしいことに、QNAP TS-259 Pro の iSCSI ボリューム自身もシン・プロビジョニングできる*5んです。で、静的に確保するのが面倒だったので iSCSI ターゲット側のボリュームもシン・プロビジョニングしています。
CentOS 5 のインストールにかかった時間
ローカルネットワークに CentOS のディストリビューションサーバをしたてて、ネットワーク経由で kickstart インストールしました(パッケージは base, core のみ、SELinux なし)。ラフなストップウォッチ計測です。
local | iscsi-raw | iscsi-vmfs | iscsi-vmfs2 | nfs |
---|---|---|---|---|
04:27 | 02:21 | 03:02 | 02:54 | 02:38 |
まさかの「local が一番遅い」という結果になりました。たしかに使用しているハードディスクは local のものは network に比べてやや劣るものなので「ネットワークのボトルネックよりハードディスクのボトルネックのほうが大きい」といえなくもないのですが、後述する別のベンチマーク群の結果をみればこれは何らかの別の理由(不明)によるものなのでしょう。
とはいえ、ネットワークストレージのものがまるでローカルストレージに比べて遜色ないということはいえるでしょう。GbE おそるべし。
あと、前回いまいち安定しなかった iscsi-vmfs ですが、きちんと安定して高速な環境になってます。QNAP の iSCSI target ってどの実装を使っているんだろう。
hdparm による Disk I/O ベンチマーク
hdparm コマンドを使うと下位レベルでのディスク読み取り性能を測定することができます。下記のコマンドラインで計測をおこないました。
# hdparm -tT /dev/sda
結果はこちらです(単位は MB/sec)。
local | iscsi-raw | iscsi-vmfs | iscsi-vmfs2 | nfs | |
---|---|---|---|---|---|
cached reads | 3831.34 | 3827.76 | 3996.37 | 3887.75 | 3901.35 |
buffered disk reads | 348.70 | 79.90 | 357.63 | 343.23 | 105.84 |
結果のブレが大きいので*65回試行の中央値を採用しました。
前回説明したとおり、cached reads はバッファキャッシュとのデータやりとり速度なのですべての条件で同じような数値になっています。そしておそるべきは iscsi-vmfs の結果です。なんと local と同じ速度になっています。シン・プロビジョニングするかどうかはそれほど関係はなさそうです。一方同じ iSCSI なのに iscsi-raw は nfs にすら負ける結果となっています。
おおざっぱな傾向としては
- ネットワークストレージはローカルストレージに比べ3.5〜4倍ほど遅い
- (なぜか)iSCSI 上にデータストアを構築するとローカルストレージと同等の速度となる
ということがいえます。
Bonnie++ による Disk I/O ベンチマーク
epel にも Bonnie++ のパッケージがあるのですが、MinTime
がデフォルトのままであり一部計測結果がでないので、Bonnie++ 1.03e を(MinTime
を 0.01
に変えつつ((今考えたら MinTime
が 0.5
でも計測可能なように file size と files を多くすればよかった(より正しい計測になった)のかな。)))自力でビルドしました。パラメータはデフォルトのまま file size = 1G, files = 16 です。
実行は
# bonnie++ -d / -u root -b
のようにしておこないました。
前回のようにだらだらと結果をつらねてもわかりにくいので、local の結果に対するスループットの百分率をまとめました(詳細な結果は末尾の資料に記載)。
ただし、
- CPU 利用率が環境によって安定しない Sequential I/O の Per Chr
- CPU bounds になる Sequential Create / Random Create の Read
については結果からはぶいてあります*7。
nfs | iscsi-image | iscsi-image2 | iscsi-raw | |
---|---|---|---|---|
Seq Out Block | 44.2% | 48.8% | 50.0% | 85.4% |
Seq Out Rewrite | 78.7% | 81.9% | 75.7% | 91.1% |
Seq In Block | 62.4% | 92.5% | 78.7% | 89.8% |
Rand Seek | 193.7% | 174.6% | 134.1% | 194.8% |
Seq Cr Create | 32.2% | 33.9% | 36.0% | 33.4% |
Seq Cr Del | 40.9% | 39.5% | 40.4% | 40.3% |
Rand Create | 39.2% | 39.4% | 38.9% | 34.9% |
Rand Del | 55.1% | 47.8% | 47.0% | 47.4% |
おもしろい傾向がでています。
カーネル RPM パッケージビルドにかかった時間
より実地に近いベンチマークとして前回と同じく、カーネルパッケージのビルドをおこなってみました。
実行は
$ time rpmbuild -bb --target x86_64 \ --with baseonly --without headers SPECS/kernel-2.6.spec
のようにしておこないました((前回と同じく signmodules
を 0 に変えてあります。))。
結果は下記のとおりです。秒未満は四捨五入しています。
local | iscsi-raw | iscsi-vmfs | nfs | |
---|---|---|---|---|
real | 55:09 | 59:33 | 57:21 | 57:23 |
user | 29:06 | 29:09 | 29:08 | 29:09 |
sys | 13:29 | 13:15 | 13:34 | 13:23 |
(other) | 12:34 | 17:09 | 14:39 | 14:52 |
驚くべきことに、すべての環境でほぼ同じ数値となっています。I/O を反映していると考えられる other 項だけみるとたしかに local が速いのですが、それでも 100MbE 時代と比べてほとんど差はありません。またなぜか iscsi-raw が今回は遅くなっています。
総評
まとめると以下のようなことがいえます。
- GbE の環境では、raw level に近いスループットとしてはネットワークはローカルの3割〜4割程度の性能となる
- だが、実地環境ではネットワークストレージはローカルストレージより遅いと感じることはない
- 上記の結果で満足できるのならストレージサーバは Atom 世代で十分性能を発揮できる
iSCSI target 専用機を使ったり Solaris + ZFS + iSCSI を使ったりすると、よりローカルストレージに肉薄させることも可能かもしれません。あと NIC をチーミングしたりとか*8。ですが、Linux でストレージサーバを構築するなら、メンテナンスの手間を考えると Atom (NAS) + NFS でいいや、と思える結果が出て個人的には満足しました。
ただ上記のベンチマークはすべて 1 VM で計測してるんですよね。ほんとは複数 VM を同時に立ち上げたときにローカルストレージとネットワークストレージでどれくらい差がでるかを計測するべきかもしれません。でももう力尽きました。
資料: くわしい環境
- ストレージサーバ
- 仮想マシンサーバ
- ディストリビューションサーバ
- ハブ
- BUFFALO レイヤー2 インテリジェント GbE スイッチ BS-G2016MR
- ただのハブとして仕様(VLAN は切ってない)
資料: Bonnie++ の詳細な結果
local
Sequential Output | Sequential Input | Random | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Per Chr | Block | Rewrite | Per Chr | Block | Seeks | ||||||
K/sec | %CP | K/sec | %CP | K/sec | %CP | K/sec | %CP | K/sec | %CP | /sec | %CP |
54613 | 68 | 57324 | 7 | 30307 | 2 | 75849 | 87 | 73415 | 1 | 200.1 | 0 |
Sequential Create | Random Create | ||||||||||
Create | Read | Delete | Create | Read | Delete | ||||||
/sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP |
1802 | 0 | 613216 | 101 | 1736 | 0 | 1852 | 0 | 967525 | 100 | 1369 | 0 |
iscsi-raw
Sequential Output | Sequential Input | Random | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Per Chr | Block | Rewrite | Per Chr | Block | Seeks | ||||||
K/sec | %CP | K/sec | %CP | K/sec | %CP | K/sec | %CP | K/sec | %CP | /sec | %CP |
55277 | 68 | 48929 | 6 | 27617 | 2 | 45017 | 53 | 65900 | 1 | 389.7 | 0 |
Sequential Create | Random Create | ||||||||||
Create | Read | Delete | Create | Read | Delete | ||||||
/sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP |
602 | 0 | 616777 | 97 | 699 | 0 | 646 | 0 | 965242 | 100 | 649 | 0 |
iscsi-vmfs
Sequential Output | Sequential Input | Random | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Per Chr | Block | Rewrite | Per Chr | Block | Seeks | ||||||
K/sec | %CP | K/sec | %CP | K/sec | %CP | K/sec | %CP | K/sec | %CP | /sec | %CP |
27878 | 39 | 27975 | 3 | 24817 | 2 | 42703 | 51 | 67934 | 1 | 349.4 | 0 |
Sequential Create | Random Create | ||||||||||
Create | Read | Delete | Create | Read | Delete | ||||||
/sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP |
611 | 0 | 576128 | 91 | 685 | 0 | 730 | 0 | 970394 | 100 | 655 | 0 |
iscsi-vmfs2 (シン・プロビジョニングあり)
Sequential Output | Sequential Input | Random | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Per Chr | Block | Rewrite | Per Chr | Block | Seeks | ||||||
K/sec | %CP | K/sec | %CP | K/sec | %CP | K/sec | %CP | K/sec | %CP | /sec | %CP |
32945 | 40 | 28678 | 4 | 22950 | 3 | 45417 | 54 | 57746 | 1 | 268.2 | 0 |
Sequential Create | Random Create | ||||||||||
Create | Read | Delete | Create | Read | Delete | ||||||
/sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP |
649 | 0 | 616655 | 97 | 702 | 0 | 721 | 0 | 966437 | 100 | 644 | 0 |
nfs
Sequential Output | Sequential Input | Random | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Per Chr | Block | Rewrite | Per Chr | Block | Seeks | ||||||
K/sec | %CP | K/sec | %CP | K/sec | %CP | K/sec | %CP | K/sec | %CP | /sec | %CP |
28197 | 35 | 25311 | 3 | 23852 | 3 | 35363 | 41 | 45820 | 1 | 387.6 | 0 |
Sequential Create | Random Create | ||||||||||
Create | Read | Delete | Create | Read | Delete | ||||||
/sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP | /sec | %CP |
580 | 0 | 604334 | 99 | 710 | 0 | 726 | 0 | 859734 | 99 | 754 | 0 |
*1:ESXi ホスト環境(CPU, ESXi のバージョン)が違うこと、ストレージサーバが違うこと(Core2 ベースから Atom ベースへ)、CentOS が 5.2 から 5.4 になっていること、ストレージネットワークとVMネットワークのNICを分離していること、カーネル RPM ビルドのオプションが異なること、などが前回と違います。
*2:ReadyNAS などと比べて高い気もしますが、こちらは Atom なので無理をいって買ってもらいました。実質 PC と同じアーキテクチャであると考えると、ややお高めなのも仕方ないかな。普通の PC と違ってホットスワップができますし。
*3:もちろんこの NAS はモニタをつながずに運用するのが普通です。
*4:モニタをつないでみてると結構荒い仕上げだなと思うところもあります。もちろん表にはみえませんが。
*5:買ってから気づいたんですが、これは嬉しい機能です。
*6:実は前回と異なりブレはあまりありませんでした。ですが、実行回数を重ねるほどパフォーマンスが上がっていくという謎の現象がおきました。
*7:CPU bounds になると当たり前ですが、local だろうとネットワークストレージだろうと同じような数値になります。
*8:個人的にはもうネットワーク帯域自体がネックになっていないと思います。