(本記事は2021年2月時点での情報を元に作成しています。)
こんにちは、SB C&SにてPure Storage製品販売の技術を担当している中田です。
4月に入り、新たにPure Storage製品に触れることになった方もいるのではないでしょうか?今回は、FlashArrayの基本的な差別化ポイントである「RAID-3D」について、ご紹介いたします。
もともとRAIDという技術は、複数のHDDを束ねることで冗長性およびパフォーマンスを高めることを目的とし、30年以上前に開発された技術です。HDDでの利用を前提として作られており、フラッシュでの利用を考えて作られたものではありません。そこでPure Storageが開発した、フラッシュでの利用に最適化されたRAIDが「RAID-3D」です。
本記事では、RAID-3Dは従来のRAIDとどう違うのかに焦点を当て、その特長について解説いたします!
なお、もっとライトに短時間で要点だけ押さえたい方には以下の動画がおすすめです!
RAID-3Dを理解するためには、前提としてFlashArrayの容量構成パターン、FlashArray上でPurityが扱うデータ単位、およびデータレイアウトについて理解する必要があります。本章では、その前提知識に関してご紹介します。
1. 1. FlashArrayの容量構成パターン
FlashArrayの容量構成には、Direct Flash Module(以降DFM)が用いられます。
DFMの詳細については以前の記事にまとめてありますので、合わせて下記の記事をご参照ください。
このDFMをベースシャーシでは10本、拡張シャーシ(Direct Flash Shelf)では14本単位で購入し、容量の構成を行います。この基本単位のことを「Data Pack」(データパック)と呼び、Data Packの組み合わせで容量を構成します。ただし例外として、パフォーマンス向上を目的としてDirectMemoryを搭載する場合には、例外的な本数での構成が可能です。
ベースシャーシに搭載可能なDFMは20本です。そのため、Data Pack 2つまでの搭載が可能です。
次の図では、ベースシャーシでのData Packの構成パターンを表しています。ただし、図中のDFM1本あたりの容量はあくまでも一例です。

1.2. Write Unit
フラッシュデバイスでは、データの読み書きは「ページ」という単位で行われています。FlashArrayのOSであるPurityはページへのデータの書き込み前に、ページサイズのデータに対して冗長性を持たせるためのパリティを作成し、付与しています。このページサイズのデータとパリティの集合が、書き込み単位である「Write Unit」です。
しかしデータの書き込みはページ単位で実施される一方、消去はブロック(ページの集まり)単位で行われます。この処理単位が違うことで問題となるのが、データの上書き処理です。
他社の製品では、図のように1つのページサイズのデータの上書きであっても、NANDフラッシュ上ではブロックのデータをDRAM上にコピー後、上書きするデータを挿入、ブロックサイズでNANDフラッシュ上のデータを削除したのち、ブロックサイズのデータの書き戻しを行う、という手順を踏みます。
「ページサイズのデータの書き込みでも、ブロックサイズの書き込みを行う」という非効率的なアーキテクチャとなっており、フラッシュデバイスの書き込み回数的寿命、およびパフォーマンスを大きく損なっています。
そこでFlashArrayでは、あらかじめ書き込みデータをOS側でデータを整理、つまりWrite Unitを作成し、空き領域に対して書き込みを行います。
このように、フラッシュデバイス専用のアーキテクチャによってなるべく無駄な書き込みを減らすことで、従来の書き込み方法に比べてフラッシュデバイスの寿命およびパフォーマンスを大きく向上しています。
なお、図ではWrite Unitとブロックサイズは同等となっておりますが、これはあくまで一例であり、デバイス側の技術に合わせWrite Unitのサイズも変化しております。ご承知おきください。
1.3. Write Segment
1.4. データレイアウト
スペアドライブを含む、従来のRAID方式とRAID-3Dのデータレイアウトの比較が次の図です。
図中のBlankのスペースには何かが書き込まれるわけではなく、リビルドに必要な容量として各DFMで確保されているだけです。
従来のRAID方式では、RAIDコントローラーがパリティを作成し冗長性を持たせていますが、FlashArrayではそのOSであるPurity上であらかじめWrite Segmentを作成し、書き込みを行っています。
ただし、先ほどのWrite Segmentの図からパリティの位置が変わっています。この理由は「2.3. スペアドライブの分散によりパフォーマンスを向上!」にて解説いたします。
また、RAID-3Dでは従来のRAID方式におけるスペアドライブのように、スペア専用のドライブがあるわけではありません。スペアドライブにあたるスペース(Blank)を、各DFMが分散して保持しています。
2.1. ビットエラー障害でもRAIDの再構築が不要!
Write Unit内のパリティは、ページに書き込まれたデータ対して冗長性を持たせるために作成され、付与されています。
このページ単位のパリティが付与されていることで、フラッシュデバイス特有の障害である「ビットエラー障害」が起こった際のデータの修復によるパフォーマンス劣化を最小限に抑えることができます。
ビットエラーとは、フラッシュにたくさんの読み書きが行われた結果、一部のセルが寿命を迎え、データの読み書きができなくなってしまうフラッシュデバイス特有の現象です。
ビットエラー障害によりデータが破損した場合の、従来のRAID方式とRAID-3Dでの修復方法の違いを表したものが次の図です。
従来のRAID方式は元々HDDでの利用を前提として確立された技術であり、このようにフラッシュ特有の現象に対して利用することは想定されていませんでした。そのため、ビットエラー障害時にはドライブ障害と同様の扱いとなってしまい、障害の起きていないドライブ全てにアクセスしての復旧が必要となります。結果、リビルドのために大きなパフォーマンス劣化が起こってしまいます。
一方、RAID-3DではWrite Unit内のパリティを用いたデータの復旧が可能です。ビットエラー障害が起こったとしても復旧はそのドライブのみで完結するため、パフォーマンス劣化を最小限に抑えたデータの復旧が可能です。
また、Write Unit内のパリティの容量は元からDFMの容量に組み込まれて計算されています。そのため、購入時の容量計算にこのパリティ分の容量を組み込む必要はありません。
2.2. 2つのパリティでRAID6相当の冗長性を担保!
Write Segment内のパリティの役割は、RAID6相当の冗長性、つまりDFMの2本同時障害にまで耐えうる冗長性の確保です。横一列のWrite Unit + パリティ(図内青枠)をみると、常に2つのパリティが含まれています。これにより、DFM2本同時障害に耐えうる冗長性を確保しています。
2.3. スペアドライブの分散によりパフォーマンスを向上!
Write Segmentとして整理されたデータは、スペアドライブにあたる空き容量およびパリティがそれぞれ図のB(Blank)およびP,Q(パリティ)として各ドライブに分散するように書き込まれています。パリティの分散は、ドライブの負荷を分散させるための仕組みです。
またスペアドライブ分の空き容量がBlankとして分散されている、ということは従来のRAID方式と比較するとスペアドライブ分のパフォーマンスを有効活用できます。つまり、通常時およびリビルド時のIO負荷を分散させる効率的なアーキテクチャとなっています。
2.4. 同一容量のDFM20本で構成すると容量効率アップ!
各パターンでの容量効率を見てみると、左のパターン①では2本分の容量をパリティに、2本分の容量をBlankに利用しているため、6/10本分の容量がデータの書き込みに利用できます。
一方右のパターン②では、2本分の容量をパリティに、4本分の容量をBlankに利用しているため14/20本分の容量がデータの書き込みに利用できます。
つまり、同一容量のDFM20本での容量構成の方が容量効率が高くなっています。
フラッシュでの利用を前提として作られたRAID-3Dは、上記の特長により障害時であっても極力サービスレベルを落とさない設計となっています。オールフラッシュに特化したベンダーだからこそできる、フラッシュに最適化された作り込みの深さが伝わっていれば幸いです。
ここまで目を通していただき、ありがとうございました!