Linuxでストレージ・ベンチマーク

コンピューターを運用していると「なんだか遅い。以前からこの程度だっけ?」という疑問はしばしばあるが、元の正しい値を知らないと比較しようがないため、アイドル時にマシンの基礎性能を計っておくことは非常に重要である。特に(HDDもSSDも)ストレージは「動いているんだけど、なんだか遅い」という状況が少なくないので必ず取得しよう。

Linuxでストレージ性能ベンチマークを取るにはhdparmBonnie++などが有名だが、これらはどんな設定でIOしているのかがよく分からず、また結果もスループットだけだったりして細かな評価ができないため、今回はfioを使用する。以下は Scientifc Linux (SL) 5.5 での方法だが、Red Hat Enterprise Linux (RHEL) / CentOS / Oracle Linux でも同様だろう。

まずはfioをインストールする。dagリポジトリを追加する方法は 複眼中心: 国内 Scientific Linux 5 サーバーのためのyum設定 を参考にしてほしい。

続いてfioをどのような設定で動作させるかを記述したジョブ・ファイルを用意する。fioのfはflexibleのfなだけあって非常に多彩な設定が可能だが、今回はシンプルな設定にとどめて多くの項目にデフォルト値を使用した。以下では /mnt/tmp 以下の1GBのファイルに対してダイレクトIOの1MBブロック・サイズでシーケンシャル・リードを行なうテストを5回実行している。なお、fioが自動生成したファイルはベンチマーク後に自動削除されないので、容量には注意すること。

パラメーターファイルを渡すと計測が始まる。以下はSupermicro X7SPA-HF-D525Seagate Barracuda Green ST2000DL003 3本をRAID5(256Kチャンク、アルゴリズム2)で構築したときの結果である。

実行中を見ていれば分かるが、Jobs行は直近の値なので結果ログとしては無視すること。概要としてはread行が適しており、ioが全体のIO量(1GBを5回試しているので5120MBになっている)、bwがbandwidth(帯域幅、スループット)、iopsがIOPS、runtがruntime(実行時間)となっている。clat (completion latency) とlat (latency) をどう差をつけて評価すればよいのかボクには分からないが、レイテンシの最小値 / 最大値 / 平均値 / 標準偏差が記述されている。また、lat (msec) 行にはレイテンシのヒストグラムがある。

以下はシーケンシャル・ライトのベンチマーク結果だ。RAID5なのでパリティ計算コストが掛かるために、リードに比べてスループット(163,978KB/s→30,364KB/s)とIOPS(160→29)が大分落ちている。cpu行にCPU使用率が書いてあるが、sysが6.44%とパリティ計算のCPUコストはそれほどでもない。

以下は512Kブロック・サイズでランダム・リードを行なっている。

以下は512Kブロック・サイズでランダム・ライトを行なっている。

以下は4Kブロック・サイズでランダム・リードを行なっている。1GBファイルに対して5回行うと時間が掛かりすぎてしまったので、100MBファイルに対して3回に減らした。

以下は4Kブロック・サイズでランダム・ライトを行なっている。こちらも1GBファイルに対して5回行うと時間が掛かりすぎてしまったので、100MBファイルに対して3回に減らした。

以下は4Kブロック・サイズのランダム・リードを32多重で行なっている。100MBファイルに対して行うと時間が掛かりすぎてしまったので、10MBファイルに減らした。

group_reportingをつけないと結果は32スレッドそれぞれに出るので、まとめた結果である Run status group 0 (all jobs) 行も見てほしい。上記4Kランダム・リード1多重よりも32多重のほうがスループットが伸びている(1211KB/s→2812KB/s)ので、AHCINCQが正しく動作していそうだ。ただし、レイテンシの標準偏差が4200程度から42000程度と一桁悪くなっている。

以下は4Kブロック・サイズのランダム・ライトを32多重で行なっている。こちらも100MBファイルに対して行うと時間が掛かりすぎてしまったので、10MBファイルに減らした。

リード同様に、上記4Kランダム・ライト1多重よりも32多重のほうがスループットが伸びている(591KB/s→936KB/s)。

RAIDを組んでいない1台のみのST2000DL003の結果は以下のとおり。ライトがRAID5に比べて速いのは当然なんだけど、レイテンシが2000ミリ秒を超えるものがまれにあり、平均値はRAID5より小さいものの、標準偏差はRAID5より大きくなっている。こういうのが分かってしまうfioってステキ!

スループットとIOPSの結果をまとめると以下のようになる。また、以上はすべてext3フォーマットで実施したが、参考にext4フォーマットのRAID5も合わせて載せておく。

RAID5 ext3 Single ext3 RAID5 ext4
KB/s IOPS KB/s IOPS KB/s IOPS
Sequential Read 163,978 160 128,587 125 149,685 146
Sequential Write 30,364 29 74,761 73 37,043 36
Random Read 512K 40,904 79 46,411 90 42,068 82
Random Write 512K 21,222 41 53,474 104 20,119 39
Random Read 4K 1,211 302 802 195 1,094 273
Random Write 4K 591 144 987 246 593 144
Random Read 4K ×32 2,812 704 1,148 304 2,460 608
Random Write 4K ×32 936 224 1,157 320 975 224

ちなみに Microsoft Windows 7 上で実行した CrystalDiskMark 3.0.1 でのST2000DL003単体の結果は以下のとおり。CrystalDiskMarkがどのような設定でベンチマークを行なっているのかの詳細が分からないので、上記fioの結果と差が出るのは仕方がない。言えることは、ベンチマーク・ツールが違う場合は単位がたとえ同じでも結果を比較してはいけないといことだ。

Crystal Disk Mark

The featured image is taken by Beer Coaster. Thanks.

2 thoughts on “Linuxでストレージ・ベンチマーク”

コメントを残す