はじめに
最近はハードディスクおよびSSD(以下、ハードディスクに略記)の価格低下と動画などの大容量データの普及に伴って業務以外でも使われることが多くなったのがRAIDです。一般には、複数のハードディスクにデータを分割して読み書きすることで速度向上と容量の増加を狙うRAID 0※1、2つあるいはそれ以上のハードディスクに同じ内容を同時に記録することで耐障害性を高めるRAID 1、3台以上のハードディスクに分散してデータとパリティをストライピングして読み書きすることで耐障害性(RAIDグループ内に1台までの故障に耐える)と読み出し高速化を狙うRAID 5が使われることが多いのではないかと思います。
これらのRAIDの処理を行う分類において「ソフトウェアRAID」と「ハードウェアRAID」がありますが、これらの分類はかなり曖昧なものです。分類の仕方や文脈によって大きくグループ分けが変わることがあります。それについてちょっと書いてみたいと思います。
ソフトウェアRAIDとハードウェアRAIDの距離
ソフトウェアRAIDとハードウェアRAIDの特徴を挙げながら、その距離を見ていきます。
ソフトウェアRAID
「ソフトウェアRAID」とは、文字通りソフトウェアでRAID処理を行うものです。ソフトウェアRAIDに分類されることがあるRAIDの特徴を挙げていきます。
- OSが認識した通常のドライブ(ハードディスク)を、OSの標準機能で束ねてRAIDを実現するもの。
- BIOSやUEFI用のブートファームウェアおよびOSが呼び出すデバイスドライバーのレイヤーで、RAIDのすべての処理を行うことでOSから透過的にRAIDを実現するもの。
まず、この2つについてはソフトウェアRAIDの特徴として異論がないのではないでしょうか? ここで挙げた2つの特徴を継承したうえでの要素を加えていきます。
純粋なソフトウェアRAIDと完全なハードウェアRAIDの間にあるもの
- RAID処理をオフロードするプロセッサーを搭載してはいないが、RAID 5などのXOR演算を高速化するロジックを搭載するもの。
さて、これはどうでしょうか? 処理の一部をメインプロセッサーから肩代わりしています。ハードディスクのハンドリングは依然としてメインプロセッサーが行いますが、演算はロジックチップ側で行う形です。純粋なソフトウェアRAIDの分類からは外す人も出てくるでしょう。しかし、ハードウェアRAIDに分類する人は少ないのではないでしょうか?
- RAID処理をオフロードするプロセッサーを搭載し、RAID処理をメインプロセッサーに代わって処理するが、専用のドライバーソフトウェアを必要とするもの。
- 上記にRAID 5などのXOR演算を高速化するロジックも搭載したもの。
- 上記にバッファ用のメモリを追加で搭載したもの。
- 上記にバッファ用のメモリを保護するためのバッテリーを追加で搭載したもの。
ここまで来ると、そろそろハードウェアRAIDに分類する人が出てくるのではないでしょうか? 一方で、OS標準のドライバーではなく、専用のドライバーを必要とする点では、切り分け上のRAIDはソフトウェア側のドライバーのレイヤーにあることになります。
完全なハードウェアRAID
最後に完全なハードウェアRAIDを挙げておきます。
- SASやSATAなどのインターフェースを持ち、標準のコマンドを解釈してRAID処理を実行する、OSやマザーボード(メインボード)からハードディスクにしか見えないRAID。
ただし、このタイプのRAIDでもRAIDを外部から管理するアプリケーション・ソフトウェアは別途必要となるのが一般的です。一部のものはRAIDそのものが(ソフトウェアの設定ではなく、ハードウェアの物理的な)コントロールパネルを持っており、本体やOSとは別に管理を行えるものもあります。
ソフトウェアRAIDとハードウェアRAIDの分け方
このように、完全なソフトウェアRAIDから完全なハードウェアRAIDまではいくつもの段階があり、簡単に2分割できるものではありません。それでもいくつかの分け方があるかと思いますので、分類してみます。
いわゆる自作における分類
XOR演算ロジックを搭載するHighPoint Technologies, IncのRocketRAID 2720※2などがソフトウェアRAID扱いをされていることを考慮に入れると、
- RAID処理をオフロードするプロセッサーを搭載してはいないが、RAID 5などのXOR演算を高速化するロジックを搭載するもの。
までは、ソフトウェアRAIDに分類するのが一般的なのだろうと思われます。したがって、
- RAID処理をオフロードするプロセッサーを搭載し、RAID処理をメインプロセッサーに代わって処理するが、専用のドライバーソフトウェアを必要とするもの。
からがハードウェアRAIDに分類されるようです。
ワークステーションおよびサーバー
日本IBM、日本HP (ヒューレット・パッカード)、Dell、LSI Logic、Adaptecのサイトを見る限り、Intelチップセット内蔵のRAIDをソフトウェアRAIDに分類するなどしており、RAID処理をオフロードするプロセッサーを搭載したものをハードウェアRAIDに分類していました。したがって、分類は上の「いわゆる自作における分類」と同様です。RAID処理をオフロードするプロセッサーは搭載しないが、XOR演算を高速化するロジックを搭載したものに言及した資料は見当たりませんでした。
なお、AdaptecはOSが提供するRAIDをソフトウェアRAIDに分類し、それ以外でプロセッサーを搭載しないRAIDカードについては「ハイブリッドモデル - ハードウェアがアシストするソフトウェアRAID」に分類しています(参考:ハードウェアRAID vs. ソフトウェアRAID : 私のアプリケーションにはどちらが最適?)。
完全なハードウェアRAIDの適応分野
大手の提供するワークステーションおよびサーバー関連ソリューションに、完全なハードウェアRAIDを搭載したものは見当たりません。これは、オンボードや拡張ボード型のRAIDソリューションと比較して、スケーラビリティや効率の面でやや劣る面があるためと思われます。一般に、メインのプロセッサーであるCPUから離れれば離れるほどレイテンシーは増加し転送速度は低下します。それよりもPCI/PCI-X/PCI Expressなど、内部に直接接続していた方がレイテンシー、転送速度の面などで有利です。
このような状態であることから完全なハードウェアRAIDはその手軽さを活かし、いわゆる自作市場やSOHO系のサーバーあるいはワークステーションのカスタマイズ用パーツ、それも簡易に扱えるRAIDボックスの形態で扱われることが多いようです。
性能の傾向
いわゆる自作市場ではRAID処理を専用のプロセッサーにオフロードするタイプのRAIDボードが人気です。そして、これらのRAIDボードと複数台のSSDを組み合わせ、RAID 0によるストライピングで高速なドライブを作り、速度をベンチマークソフトウェアで測り、比較しています。一方で、広く普及しているのはチップセットが対応しているソフトウェアRAIDの方でしょう。
この両者の性能の傾向ですが、HPがLinuxの場合として公表している資料によると、
2. ストレージパフォーマンス:
- Raw ディスクパフォーマンスについては、ソフトウェア RAID の方がハードウェア RAID よりも高いパフォーマンスを発揮します。ソフトウェアRAID は、物理プロセッサが複数搭載されている場合やデュアルコア システムなど、複数のプロセッサが搭載されているシステムで特に高いパフォーマンスを発揮します。一般的には、使用する RAID レベルがストレージパフォーマンスに影響を与えることはありません。
- ソフトウェア RAID は、ハードウェア RAID に比べてピークパフォーマンスが高くなり、高機能ハードウェアを使用するほど効果は上がります。
とあり、メインプロセッサーの負荷を気にしないのであれば、一般にソフトウェアRAIDの方が高いパフォーマンスを得られるようです。これは私の経験と一致します。
ただ、サーバーのように複数のI/Oが並行して発生するような用途ではCPUの有効利用を考えてRAID処理をオフロードできるタイプのRAIDを選択したほうがトータル性能において良い結果が得られることが多いです。
まとめ
RAIDは、ハードウェアRAIDとソフトウェアRAIDの2つに簡単に分けられるものではなく、中間的な存在がいくつかあることを説明したいと思い書き始めたのですが、少しまとまりが悪い説明になってしまったように思います…。
とりあえず、現状においてよく見かける(秋葉原で入手可能と言い換えても構いません)RAIDの種別としては、
- OSがサポートするソフトウェアRAID
- マザーボード上に搭載されたチップ(主にチップセット)をBIOS/UEFIとドライバーがサポートするソフトウェアRAID
- RAIDボードのファームウェアおよびドライバーがサポートするソフトウェアRAID
- RAIDボードのファームウェアおよびドライバーと搭載チップが一部処理をオフロードする広義のソフトウェアRAID(High Point Technologies, Inc.のRocketRAID 2700シリーズなど)
- RAIDボードのファームウェアおよびドライバーと搭載プロセッサーがRAID処理をオフロードする広義のハードウェアRAID(一般的にハードウェアRAIDボードと呼ばれる各種製品)
- SAS/SATAなどのハードディスク・インターフェースに接続できる完全なハードウェアRAID(RAIDボックスなど)
以上、6種類があります。
これらを目的に合わせて適切な選択をすることが大切です。
- RAID 0は当初のRAID論文には存在せず後付けで追加されたもので、この定義自体が非常にあいまいな状況にあります。いわゆる自作系では1台のハードディスクではRAID 0とは言いませんが、そうではない方面では一般にRAID 0に含めます(この場合は冗長性がない構成をRAID 0と表現します)。業務用のRAIDベンダーの資料などを読んでいるとこのあたりに差異があることがわかります。
- このボードが採用しているチップの概要を説明するMarvell 88SE9485/9445 Product Brief(PDF)には、XOR演算用のブロックの存在が記載されています。以下に該当する図を引用します(赤い強調は筆者による):