帰ってきた VMware ESXi ディスクベンチマーク

以前 VMware ESXi で各種ディスクのベンチマークをとってみた - daily dayflower にてVMware ESXi で各種(ネットワーク)ディスクのベンチマークをとりましたが、残念ながら 100Mbps イーサネット環境での実験でした。

今回、GbE 環境が整ったので改めて各種ネットワークストレージのベンチマークをおこないました。

おことわり

おもに(前回と同じく)下記の命題を検証するために測定をおこないました。

  • NFS データストアでも iSCSI データストア・LUN マッピングと比べて遜色ない(といいな)
  • ネットワークストレージ環境でもローカルストレージ環境に比べて遜色ない(といいな)

なお前回と比べてネットワークスピード以外に結構環境が違うので*1単純に結果を比較することはできません。

NAS 買ったよ!

じつはとっくにギガビットスイッチと Celeron 440 (Core2 世代) のストレージサーバで VMware ESXi 環境を実運用中なのです。ですが、忙しかったり面倒くさかったりでベンチマークはとっていませんでした。

が、重い腰をあげるきっかけになったのが、下記の NAS

QNAP ターボNAS TS-259Pro 黒 TS-259Pro
QNAP
売り上げランキング: 43397

Linux ベースでストレージサーバを立てるのなら、Core2 じゃなくて Atom でも結構いけるんじゃない?と思って会社に買ってもらいました。そこで、この Atom による NAS が ESXi のストレージサーバとしてどれくらい力を発揮できるのかという興味もあってベンチマークをようやくとることにしたのでした。

なお、だいたいどこで買っても(Amazon 含めて)実売 70,000円弱*2なので、ポイントのたまるお店で買うのがいいかもしんないです。私はさいわい Amazon で 62,910円という破格なときに買うことができました。


QNAP TS-259 Pro 自体の感想ですが、モニタをつなぐと*3わかるとおり、まるっきり Linux ベース*4NAS です。ウェブ経由のコントロールパネルはそこそこよくできています(日本語にもおかしなところは見当たりません)。ただ同等の Atom の PC に比べるとブートに非常に時間がかかる気がします。また、紙のマニュアルはほとんどありません。DHCP 有効なネットワークだと IP が DHCP で振られるというのがわからずしばらく右往左往していました。また、ネットワークインタフェースのボンディングの設定を変えると IP の設定まわりがリセットされるところにも注意が必要でした。

環境

スペックなど

インテリジェントスイッチであり VLAN などもやろうと思えばできるのですが、面倒なのでそのままハブとして使っています。そのかわり、今回は物理 NIC を2つ ESXi サーバに載せたこともあり、仮想スイッチを2つにして、

  • 1つをマネージメント+ストレージアクセス (Management Network)
  • 1つを VM の環境が使うネットワーク環境(VM Network)

のように分離しました(ネットワーク自体は同一ネットワークに所属)。

TS-259 Pro も NIC の口が2つあるのでマネージメントとストレージアクセスポートをわけたりボンディング/チーミングしたりできるんですが、やはり面倒だったのと、普通に使う分にはわける必要はないだろうということで1つ分しか使っていません。

VM の設定

以下の4とおりのケースについて計測をおこないました。

  • local
    • ローカルにぶら下げた HDD にデータストア(vmfs)を構築
    • シン・プロビジョニングなし(シック・プロビジョニング)
  • iscsi-raw
  • iscsi-vmfs
    • NAS 上の iSCSI ボリュームをデータストア(vmfs)として仮想ディスクを作成
    • シン・プロビジョニングなし(シック・プロビジョニング)
  • iscsi-vmfs2
    • NAS 上の iSCSI ボリュームをデータストア(vmfs)として仮想ディスクを作成
    • シン・プロビジョニング
    • 面倒になったので後述するカーネル RPM ビルドベンチはおこなっていない
  • nfs
    • NAS 上の NFS ボリュームをデータストア(vmfs)として仮想ディスクを作成
    • シン・プロビジョニング(しか選べない?)

ほか共通の設定は下記のとおりです。

仮想 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 を(MinTime0.01 に変えつつ((今考えたら MinTime0.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%

おもしろい傾向がでています。

  • 生 I/O に近いベンチマーク(Sequential Out / In / Random Seek)では
    • Sequential Access ではローカルとネットワークにそれほど差はない
      • iscsi-raw にいたってはほぼローカル並の速度
    • Sequential Access では NFSiSCSI よりパフォーマンスが劣る
    • Random Access ではなぜかネットワークのほうがローカルに勝る
  • 実地の I/O に近いベンチマーク(Create / Delete 系)では

カーネル 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 を同時に立ち上げたときにローカルストレージとネットワークストレージでどれくらい差がでるかを計測するべきかもしれません。でももう力尽きました。

資料: くわしい環境

資料: Bonnie++ の詳細な結果

local

Sequential OutputSequential InputRandom
Per ChrBlockRewritePer ChrBlockSeeks
K/sec%CPK/sec%CPK/sec%CPK/sec%CPK/sec%CP/sec%CP
54613685732473030727584987734151200.10
Sequential CreateRandom Create
CreateReadDeleteCreateReadDelete
/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP
18020613216101173601852096752510013690

iscsi-raw

Sequential OutputSequential InputRandom
Per ChrBlockRewritePer ChrBlockSeeks
K/sec%CPK/sec%CPK/sec%CPK/sec%CPK/sec%CP/sec%CP
55277684892962761724501753659001389.70
Sequential CreateRandom Create
CreateReadDeleteCreateReadDelete
/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP
602061677797699064609652421006490

iscsi-vmfs

Sequential OutputSequential InputRandom
Per ChrBlockRewritePer ChrBlockSeeks
K/sec%CPK/sec%CPK/sec%CPK/sec%CPK/sec%CP/sec%CP
27878392797532481724270351679341349.40
Sequential CreateRandom Create
CreateReadDeleteCreateReadDelete
/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP
611057612891685073009703941006550

iscsi-vmfs2 (シン・プロビジョニングあり)

Sequential OutputSequential InputRandom
Per ChrBlockRewritePer ChrBlockSeeks
K/sec%CPK/sec%CPK/sec%CPK/sec%CPK/sec%CP/sec%CP
32945402867842295034541754577461268.20
Sequential CreateRandom Create
CreateReadDeleteCreateReadDelete
/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP
649061665597702072109664371006440

nfs

Sequential OutputSequential InputRandom
Per ChrBlockRewritePer ChrBlockSeeks
K/sec%CPK/sec%CPK/sec%CPK/sec%CPK/sec%CP/sec%CP
28197352531132385233536341458201387.60
Sequential CreateRandom Create
CreateReadDeleteCreateReadDelete
/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP/sec%CP
58006043349971007260859734997540

*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:個人的にはもうネットワーク帯域自体がネックになっていないと思います。