ハードウェアRAIDとLinuxカーネルによるソフトウェアRAIDのベンチマーク比較

 新しいサーバに高価なハードウェアRAIDカードを付けることで、ディスクアクセスの速度はどれほど向上するのだろうか。LinuxカーネルによるソフトウェアRAIDとハードウェアRAIDカードのパフォーマンスの違いはベンチマークで評価できる。私の環境でこの2つの条件を評価したところ、いくつか興味深い結果が得られた。

 ソフトウェアRAIDとハードウェアRAIDの双方について、750GBのSamsung SATAドライブ6台を使ってRAIDレベル5610の各構成を評価した。パフォーマンスの測定にはBonnie++IOzoneの各ベンチマークを用いた。また、チャンクサイズがハードウェアまたはソフトウェアのRAID構成に与える影響を確かめるために、チャンクの大きさを変えてベンチマークを実行した。

 ハードウェアRAIDの評価には、12ポートのAdaptec製SAS-31205 PCI Express RAIDカード(市価800ドル)を用いた。ソフトウェアRAIDのほうは、64ビット版Fedora 9システムのLinuxカーネルによるソフトウェアRAID機能を対象とした。評価用マシンにはAMD Athlon X2(2.2HGz)プロセッサと2GBのRAMが載っている。ソフトウェアRAIDを使ったファイルサーバなら、クアッドコアCPUや8GBか16GBのRAMを搭載していてもよさそうだが、上記マシンで得られたハードウェアRAIDとソフトウェアRAIDのパフォーマンスの相対的差異は、他のマシンにおける両者のパフォーマンスの違いを知るうえでも参考になるはずだ。評価は、各パーティションのサイズが同じ6台のハードディスクに分散させた100GBほどの領域に対して行った。RAID作成の時間を短縮するために、空きディスクスペース全体を使うことはしなかった。

 テストマシンのマザーボードにはSATAコネクタが4つしかなかったので、6台のSATAドライブで評価を行うにはある部分で妥協が必要だった。そこで、1台のドライブをマザーボードのSATAコントローラで評価したうえで、AdaptecのRAIDカード経由でシングルディスクとしてエクスポートし、AdaptecのRAIDカードが単独ディスクへのアクセスに与える影響を確認した。その後、6台のHDDをAdaptecのRAIDカードに接続し、それぞれを単独の非RAIDボリュームとしてLinuxカーネルにエクスポートした。ソフトウェアRAIDの評価は、Adaptecカード経由でアクセスされる、これら6つの単独ボリューム上にRAIDを作成することによって行った。6つのディスクボリュームをAdaptecカード経由で用いる利点は、RAIDの実行にハードウェアRAIDチップを使った場合とLinuxカーネルを使った場合を直接比較できることにある。どちらの場合も、各ドライブが接続しているSATAコントローラは同じものだからだ。マザーボードのSATAコントローラを使用する場合とAdaptecカードのものを使用する場合のそれぞれでシングルディスクアクセスのベンチマークを取れば、SATAコントローラの違いによる影響がわかる。幸いなことに、単独ディスクへのアクセスに関しては、どちらのコントローラにも特に大きな利点はない。よって、6台のディスクに個別にアクセスし、その上でソフトウェアRAIDを実行した場合の数値は、ほかのSATAコントローラを使った場合と大きく異なることはなさそうだ。Adaptecカードを使って単独のボリュームにアクセスした場合とオンボードのSATAコントローラを利用した場合のパフォーマンスの違いがわかったので、以降ではハードウェアRAIDとソフトウェアRAIDのベンチマークの差に注目することができる。

 今回の評価には、ext3とXFSの両方のファイルシステムを使った。これらのファイルシステムの作成は、可能な場合にはRAIDのチャンクとストライドを指定して行った。また、マウント時のオプションとしてext3にはwritebackとnobh、XFSにnobarrierをそれぞれ使用した。書き込みバリアを使うとAdaptecカードの時間的ペナルティが非常に大きくなりそうなので、AdaptecカードでXFSを使用するなら、書き込みバリアは使わずに、UPSとバッテリバックアップを使ってメタデータを保護するのが賢明だ。こうした割り当てオプションに加えて、XFSファイルシステムの作成では「lazy-count=1」を指定した。これにより、ファイルシステムのスーパーブロックに対する書き込み競合が減少する。

 以下に示すグラフの凡例を理解するには、各ファイルシステムの作成条件について知っておく必要がある。“hard”で始まっているものはすべてハードウェアRAID構成である。たとえば、“hardext3aligndef”は「-E stride」を使って作成され、特別なオプションを使わずにマウントされたext3ファイルシステムであり、“hardext3alignwb”は「data=writeback,nobh」オプションを使った点だけが“hardext3aligndef”と異なる。また、“xfsdefaultnb”というXFSファイルシステムは「lazy-count=1」で作成され、「nobarrier」オプションでマウントされたもの、“hardxfsalign”は特定のRAID構成に対してストライドとチャンクサイズを指定した点以外は“xfsdefaultnb”と同じもの、“xfsdlalign”はXFSジャーナルにストライプ割り当てを使用した点が“hardxfsalign”とは異なる。ソフトウェアRAIDの場合は、“ext3”がハードウェアRAIDの“ext3alignwb”の構成に相当し、“xfs”、“xfslogalign”はそれぞれハードウェアRAIDの“hardxfsalign”、“hardxfsdlalign”にあたる。

 各グラフからわかるように、XFSファイルシステムをストライプ境界に割り当てると、作成や削除といったファイルシステムのメタデータ操作の速度がかなり違ってくる。構成のバリエーションをブロック転送のグラフでも示したのは、こうしたファイルシステムのパラメータの影響がメタデータ操作だけでなくブロック転送速度にも現れるからだ。なお、グラフは載せてあるが、本稿ではメタデータ操作のベンチマークについては詳しく取り上げない。明らかにわかるのは、ハードウェアRAIDの場合はext3でのランダム生成および削除の操作がかなり高速なことだ。

シングルディスクでのパフォーマンス

graph1_thumb.jpg
グラフ1:シングルディスク条件での比較

 シングルディスクへのブロックアクセスでは、AdaptecカードのSATAコントローラとオンボードのものの優劣ははっきりしない(グラフ1)。ファイルのメタデータ操作では、Adaptecカードのほうが明らかに優れている。これは、このカードが256MBのキャッシュメモリを搭載しているためだろう。興味深いのは、ブロック入力ではAdaptecカードよりもオンボードのSATAコントローラのほうが優れている点だ。もちろん、AdaptecカードはそもそもハードウェアRAID構成とはならないシングルディスクアクセス用に設計されてはいないため、こうした数値はカードのSATAポートが劣っていることを示すものではない。このAdaptecカードにはシングルディスクアクセスにおける明確な利点がないことから、今回の評価のソフトウェアRAID構成で同カードのコントローラを使って6台のディスクをエクスポートしても、その他のソフトウェアRAID環境と比べて不当に有利な条件になることはないだろう。

RAID5のパフォーマンス評価

graph2_thumb.jpg
グラフ2:RAID5、256KBチャンクでの比較

 最初に評価したRAID5のパフォーマンスで特に驚いたのは、ブロック入力(読み出し)でのソフトウェアRAIDの結果がかなり良かったことだ(グラフ2)。ext3ファイルシステムの場合、データ転送速度はハードウェアRAIDの330MB/秒に対し、ソフトウェアRAIDは385MB/秒だった。ブロック出力(書き込み)ではハードウェアRAIDが圧倒的に優れており、割り当てを調整したXFSファイルシステムにおけるソフトウェアRAIDの174MB/秒に対してハードウェアRAIDは322MB/秒と、ソフトウェアRAIDに比べて185%もアクセスが高速である。ただし、ext3ファイルシステムでのブロック出力では、ここまで大きな違いは出ていない。ブロック単位の再書き込みについては、ext3の場合はハードウェアRAIDもソフトウェアRAIDもほぼ同じだが、XFSの場合はハードウェアRAIDで128MB/秒、ソフトウェアRAIDで109MB/秒と差が出ている。

 RAID5でブロック出力の速度をブロック入力と同じくらい重視するのであれば、ハードウェアRAIDでXFSファイルシステムを選ぶとよいだろう。また、データベースサーバの実行など、データの書き直しが頻発する状況では、ハードウェアRAIDの利用によってソフトウェアRAIDよりも速度が15%以上向上する可能性がある。

RAID6のパフォーマンス評価

 Adaptec製SAS-31205カードは、ハードウェアとして1024KBまでのチャンクサイズをサポートしている。RAID6の評価では、64KB、256KB、1024KBの3とおりのチャンクサイズでハードウェアRAIDとソフトウェアRAIDのパフォーマンスを比較した。

 次のグラフ(グラフ3)は、チャンクサイズを256KBにした場合のRAID6の評価結果である。ソフトウェアRAIDには速度面でのメリットがなくなり、ブロック入力だけがハードウェアRAIDに匹敵する結果になっている。ブロック単位の出力と再書き込みの各グラフも総じて同じような結果だが、全体的にブロック入力よりも速度が低い。RAID6におけるXFSのブロック出力は、ハードウェアRAIDで255MB/秒、ソフトウェアRAIDで153MB/秒である。

graph3_thumb.jpg
グラフ3:RAID6、256KBチャンクでの比較

 RAID5ではディスク1台の障害にしか対応できないため、データ損失の可能性がそれなりにある。1台が故障して別のディスクに置き換えると、RAID5は新しいディスクのRAIDアレイへの取り込みを開始する。これはディスク性能が非常に大きく影響する作業で、5~6時間かかることも多い。その間、RAIDの残りのディスクにアクセスが集中するため、今度はそれらのディスクに障害が起こる可能性が高くなるのだ。RAID6では、データの損失なしに2台のディスクの障害に対応可能なため、故障した1台目のディスクを置き換えている間に2台目のディスクが故障してもシステムは維持される。

 RAID6の出力値がRAID5よりも低いのは、RAID5の場合は1ブロック分で済むパリティの計算が2ブロック分必要になるからである。ハードウェアによるRAID6構成でXFSを利用したときのブロック出力では、目ざましい結果が出ている。データベースサーバのように再書き込みが多く発生するアプリケーションの場合はやはり、RAID6をハードウェアで実現したほうが高速になる。

graph4_thumb.jpg
グラフ4:RAID6、IOzoneによる比較

 書き込みパフォーマンスの違いが目立つのが、XFSで256KBチャンクという条件におけるIOzoneの結果を示したグラフである(グラフ4)。また、メインメモリのキャッシュに収まらないほど大きなファイルでは、全体的にハードウェアRAIDの書き込みパフォーマンスが高くなる。なお、ファイルのサイズが小さい場合にハードウェアRAIDのパフォーマンスが芳しくない点は、RAID10でのIOzoneによる書き込みベンチマークの結果にも現れている。

graph5_thumb.jpg
グラフ5:RAID6、64KBチャンクでの比較

 グラフ5は、チャンクサイズを64KBにした場合のRAID6の評価結果である。ソフトウェアRAIDの場合は、チャンクサイズが小さいほどブロック出力は高速になり、そのパフォーマンスはブロック入力よりも高くなっている。ただし、ブロック転送の結果を見る限りは、チャンクサイズを64KBにしてRAID6を実行する理由は見当たらない。

graph6_thumb.jpg
グラフ6:RAID6、1024KBチャンクでの比較

 グラフ6は、チャンクサイズ1024KBでのRAID6の評価結果である。再書き込みにおけるハードウェアRAIDのパフォーマンスは、ソフトウェアRAIDの55~60MB/秒よりも10~15MB/秒ほど高い。しかし、それ以外の部分については、RAID6でチャンクサイズを1024KBすることで、チャンクサイズ256KBの場合に見られたハードウェアRAIDのメリットが失われてしまっている。

RAID10のパフォーマンス評価

 RAID10のパフォーマンス評価は、256KBと1024KBのチャンクサイズ、それにソフトウェアRAIDではデフォルトのn2レイアウトを使って実施した。RAID10で標準的なn2レイアウトを利用することにより、ベンチマーク結果の違いが明確になる。

 次のグラフは、チャンクを256KBとした場合の評価結果である(グラフ7)。ブロック入力については、XFS使用時でハードウェアRAIDが312MB/秒でソフトウェアRAIDの240MB/秒を上回り、ext3使用時ではハードウェアRAIDが294MB/秒、ソフトウェアRAIDが232MB/秒となっている。ブロック出力ではあまり差が出なかったこと、またRAID10ではパリティ計算が不要なことから、ブロック再書き込みでの両者の差はもっと縮まるだろうと予想していた。しかし、少し意外なことに、パリティ計算の負荷がなくてもハードウェアRAIDのほうがソフトウェアRAIDよりもかなり高速だった。RAID10でもやはり、リレーショナルデータベースサーバなど再書き込みのパフォーマンスが重視されるアプリケーションを実行するなら、ハードウェアRAIDカードの購入を検討したほうがよさそうだ。

graph7_thumb.jpg
グラフ7:RAID10、256KBチャンクでの比較

 ブロックサイズを1024KBにすると、ハードウェアRAIDとソフトウェアRAIDでのブロック転送速度の違いがあまり出なくなった(グラフ8)。また、ハードウェアRAID10におけるXFSのストライド割り当てには難があるらしく、ブロック入力のパフォーマンスが(デフォルトのXFSよりも)50MB/秒ほど低下している。

graph8_thumb.jpg
グラフ8:RAID10、1024KBチャンクの比較

 チャンクサイズ1024KBでのRAID10の再書き込みパフォーマンスは、ハードウェアでもソフトウェアでもほとんど同じで最高値が99.5MB/秒だが、チャンクサイズが256KBでXFS使用時のハードウェアRAID10では116MB/秒のパフォーマンスが得られている。データベースサーバ向けには、やはりハードウェアRAIDでチャンクを256KBとするのが最善である。主な関心がファイルサーバの実行にあるなら、ブロック入出力におけるソフトウェアRAID10(チャンクサイズが1024KBの場合、入力:288MB/秒、出力:219MB/秒)とハードウェアRAID10(チャンクサイズが256KBの場合、入力:312MB/秒、出力:243MB/秒)の速度の違いは、ハードウェアRAIDカードのコストからすると不十分といえそうだ。なお、両者のチャンクサイズが違うのは、ソフトウェアRAID(1024KB)とハードウェアRAID(256KB)でそれぞれ最善のパフォーマンスが得られる条件どうしを比較したためである。

まとめ

 RAID10で256KBといった小さなブロックサイズを使う場合、再書き込みのパフォーマンスはハードウェアRAIDとソフトウェアRAIDで大きな違いが出る。パリティを用いるRAIDの出力ではハードウェアRAIDのほうが圧倒的に高速であり、たとえばRAID6でチャンクサイズ256KBの条件の場合、ソフトウェアRAIDよりもブロック出力で66%、再書き込みで20%高速になる。そのため、パフォーマンスを求めると共に複数のドライブの同時故障に対応できるようにするには、ハードウェアRAIDによるソリューションを検討するとよい。ベンチマーク結果とは関係ないが、評価に用いたハードウェアRAIDカードは、故障したドライブの交換に伴うダウン時間を短縮できるホットプラグリプレースメントにも対応している。これらのテスト結果から、ハードウェアRAIDカードを購入する代わりに同じ予算で、より安価なSATAポートをいくつか揃え、2つのソフトウェアRAID6アレイの構成にしてもよいだろう。

 今回のテストでは、ファイルシステムの選択がパフォーマンスに多大な影響を与えることもわかった。パリティを用いるRAIDの出力ではXFSのほうがかなり高速だが、RAID10でチャンクサイズを256KBとした場合のブロック入力など、一部の条件ではext3よりも遅くなることもある。

 テストの条件を拡げてその他のファイルシステムの条件も追加し、読み取りや書き込みのパフォーマンスでどのファイルシステムが最も優れているかを確かめると面白いだろう。評価に用いたAdaptec製RAIDカードでは、RAID-50やRAID-60の実行が可能だ。そうしたハイエンドな構成(4つのRAID5アレイを基本形として16ポートのカードでRAID50を実行するなど)にソフトウェアRAIDがどこまで対抗できるかを調べるのも興味深い。

Ben Martinは10年以上もファイルシステムに携わっている。博士号を持ち、現在はlibferris、各種ファイルシステム、検索ソリューションを中心としたコンサルティングサービスを手がけている。

Linux.com 原文