【文献】
上原 稔,大規模仮想ディスクにおける複数パリティ直交RAID,情報処理学会研究報告 2011(平成23)年度▲4▼ [CD-ROM],日本,一般社団法人情報処理学会,2011年12月15日,pp.1-8
(58)【調査した分野】(Int.Cl.,DB名)
前記RAIDキューブは、第1の次元、第2の次元および第3の次元を含んでおり、前記第1の次元は第1の独立した障害ドメインに関連付けられ、前記第2の次元は第2の独立した障害ドメインに関連付けられ、前記第3の次元は第3の独立した障害ドメインに関連付けられる、請求項2に記載のプログラム。
前記持続性ストレージにおける前記物理的位置は、前記第1の独立した障害ドメイン、前記第2の独立した障害ドメインおよび前記第3の独立した障害ドメインを少なくとも部分的に使用して特定される、請求項4に記載のプログラム。
前記持続性ストレージは複数のストレージモジュールを含んでおり、前記複数のストレージモジュールの各々はソリッドステートメモリを含んでおり、前記第1の独立した障害ドメインは前記複数のストレージモジュールであり、前記第2の独立した障害ドメインは前記複数のストレージモジュールの各々における複数のチャンネルであり、前記第3の独立した障害ドメインは前記複数のストレージモジュールの各々における複数のNANDダイである、請求項4に記載のプログラム。
前記パリティ値は、Pパリティ値、Qパリティ値およびインターセクションパリティ値からなるグループから選択される少なくとも1つを含む、請求項1に記載のプログラム。
前記RAIDグリッドは第1の次元および第2の次元を含んでおり、前記第1の次元は第1の独立した障害ドメインに関連付けられており、前記第2の次元は第2の独立した障害ドメインに関連付けられている、請求項1に記載のプログラム。
前記持続性ストレージにおける前記物理的位置は、前記第1の独立した障害ドメインおよび前記第2の独立した障害ドメインを少なくとも部分的に使用して特定される、請求項8に記載のプログラム。
前記持続性ストレージは複数のストレージモジュールを含んでおり、前記複数のストレージモジュールの各々はソリッドステートメモリを含んでおり、前記第1の独立した障害ドメインは前記複数のストレージモジュールであり、前記第2の独立した障害ドメインは、前記複数のストレージモジュールの各々における複数のチャンネルである、請求項9に記載のプログラム。
前記持続性ストレージは複数のストレージモジュールを含んでおり、前記複数のストレージモジュールの各々はソリッドステートメモリを含んでおり、前記第1の独立した障害ドメインは、前記複数のストレージモジュールの各々における複数のチャンネルであり、前記第2の独立した障害ドメインは、前記複数のストレージモジュールの各々における複数のNANDダイである、請求項9に記載のプログラム。
前記Pパリティ値は、前記第1のRAIDグリッドに関連付けられる少なくとも1つの値と前記第2のRAIDグリッドに関連付けられる少なくとも1つの値とを使用して計算される、請求項14に記載のプログラム。
前記第1のRAIDグリッドは、前記第1のRAIDグリッドについてのロウQパリティグループ、前記第1のRAIDグリッドについてのロウPパリティグループ、前記第1のRAIDグリッドについてのカラムQパリティグループ、および前記第1のRAIDグリッドについてのカラムPパリティグループからなるグループから選択される少なくとも1つを含み、
前記第2のRAIDグリッドは、前記第2のRAIDグリッドについてのロウQパリティグループ、前記第2のRAIDグリッドについてのロウPパリティグループ、前記第2のRAIDグリッドについてのカラムQパリティグループ、および前記第2のRAIDグリッドについてのカラムPパリティグループからなるグループから選択される少なくとも1つを含む、請求項12に記載のプログラム。
前記第1のRAIDグリッドにおける前記少なくとも1つの値は、データグリッドにおけるRAIDグリッド位置に対応する値、前記第1のRAIDグリッドについてのロウQパリティグループに関連付けられるRAIDグリッド位置に対応する値、前記第1のRAIDグリッドについてのロウPパリティグループに関連付けられるRAIDグリッド位置に対応する値、前記第1のRAIDグリッドについてのカラムQパリティグループに関連付けられるRAIDグリッド位置に対応する値、および前記第1のRAIDグリッドについてのカラムPパリティグループに関連付けられるRAIDグリッド位置に対応する値とからなるグループから選択されるものであり、前記第1のRAIDグリッドは前記データグリッドを含む、請求項12に記載のプログラム。
前記第1のストライプは前記RAIDグリッドにおけるロウであり、前記第2のストライプは前記RAIDグリッドにおけるカラムである、請求項20に記載のプログラム。
前記第1のストライプは前記RAIDグリッドにおけるカラムであり、前記第2のストライプは前記RAIDグリッドにおけるロウである、請求項20に記載のプログラム。
前記少なくとも1つの他のパリティ値は、ロウPパリティグループおよびロウQパリティグループからなるグループから選択されるものの一部である、請求項25に記載のプログラム。
前記少なくとも1つの他のパリティ値は、カラムPパリティグループおよびカラムQパリティグループからなるグループから選択されるものの部分である、請求項27に記載のプログラム。
前記データは第5のRAIDグリッド位置に関連付けられており、前記第5のRAIDグリッド位置は前記第1のストライプの部分ではなく、前記第2のストライプの部分ではない、請求項20に記載のプログラム。
【発明を実施するための形態】
【0007】
詳細な説明
ここで、本発明の特定の実施形態を添付の図面を参照して詳細に記載する。本発明の実施形態の以下の詳細な説明において、本発明のより完全な理解を提供するために多くの特定の詳細が記載される。しかしながら、本発明がこれらの特定の詳細がなくても実施されてもよいことは当業者には明らかであろう。他の例では、説明を不必要に複雑にすることを回避するよう周知の機構は詳細に記載されない。
【0008】
図1〜
図9Dの以下の説明では、本発明のさまざまな実施形態において図に関して記載される任意の構成要素は、任意の他の図に関して記載された同様の名称を有する1つ以上の構成要素と同等であり得る。簡潔さのために、これらの構成要素の説明は、各図に関して繰り返されない。したがって、各図の構成要素の各実施形態は、参照により援用され、同様の名称を有する1つ以上の構成要素を有する他のすべての図内に随意に存在すると想定される。さらに、本発明のさまざまな実施形態に従うと、ある図の構成要素の如何なる記載も、任意の他の図中の対応する同様の名称を有する構成要素に関して記載された実施形態に加えて、当該実施形態に関連して、または当該実施形態の代わりに実施されてもよい随意の実施形態として解釈されるべきである。
【0009】
一般に、本発明の実施形態は、多次元RAIDスキームを使用してデータを複製するための方法およびシステムに関する。より具体的には、本発明の実施形態は、2D RAIDスキームおよび3D RAIDスキームを実施するための方法およびシステムを提供する。
【0010】
2D RAIDスキームを使用すると、所与のRAIDストライプにおいて2つより多いエラーが存在する場合、このようなRAIDスキームを実施するRAIDグリッド内に格納されたデータが回復され得る。同様に、3D RAIDスキームを使用すると、所与のRAIDストライプにおいて2つより多いエラーが存在する場合、このようなRAIDスキームを実施するRAIDキューブ内に格納されたデータが回復され得る。さらに、本発明のさまざまな実施形態において、1つより多い独立した障害ドメイン(independent fault domain(IFD))に故障がある場合、すべてのデータが回復されることになる。
【0011】
本発明の1つ以上の実施形態において、IFDは、所与の位置のデータがアクセス不能になる故障モードに対応する。各IFDは、ストレージアレイにおける故障の独立したモードに対応する。たとえば、(複数のNANDダイを含む)ストレージモジュールの一部であるNANDフラッシュにデータが格納される場合、IFDは、(i)ストレージモジュール、(ii)チャンネル(すなわちストレージモジュールにおけるストレージモジュールコントローラ(図示せず)によって、NANDフラッシュにデータを書き込むよう使用されるチャンネル)、および(iii)NANDダイであり得る。
【0012】
この発明の目的のために、本願明細書において使用される「RAID」という用語は、「独立ディスク冗長アレイ(Redundant Array of Independent Disks)」を指す。「RAID」は独立したディスクの任意のアレイを指しているが、本発明の実施形態は、本発明の実現例に基づいて、RAIDグリッド位置(たとえば
図2参照)が1つ以上の持続性ストレージデバイスに亘って分散され得る任意のタイプの持続的ストレージデバイスを使用して実施されてもよい(たとえば
図3および
図4参照)。
【0013】
図1は、本発明の一実施形態に従ったシステムを示す。
図1に示されるように、このシステムは、1つ以上のクライアント(100A,100M)と、RAIDコントローラ(104)と、メモリ(106)と、随意にFPGA(102)と、ストレージアレイ(108)とを含む。
【0014】
本発明の一実施形態において、クライアント(100A,100M)は、読出要求または書込要求をRAIDコントローラ(104)に発行する機能を含む任意のシステムまたはシステム上で実行するプロセスである。本発明の一実施形態において、クライアント(100A,100M)は各々、プロセッサ(図示せず)と、メモリ(図示せず)と、持続性ストレージ(図示せず)とを含んでもよい。本発明の一実施形態において、RAIDコントローラ(104)は、多次元RAIDスキームに一致する態様でストレージアレイにデータを書き込むこと(
図5A〜
図5C参照)と、多次元RAIDスキームに一致する態様でストレージアレイからデータを読み出すこと(データを再構成することを含む)とを含む多次元RAIDスキームを実施するように構成される(
図8参照)。本発明の一実施形態において、RAIDコントローラ(104)は、本発明の1つ以上の実施形態を実施するよう命令を実行するように構成されるプロセッサを含む。当該命令は、RAIDコントローラ(104)内に位置するかまたはRAIDコントローラ(104)に動作可能に接続される一時的でないコンピュータ読取可能媒体(図示せず)上に格納される。代替的には、RAIDコントローラ(104)は、ハードウェアを使用して実施されてもよい。当業者であれば、RAIDコントローラ(104)がソフトウェアおよび/またはハードウェアの任意の組合せを使用して実施されてもよいことを理解するであろう。
【0015】
本発明の一実施形態では、RAIDコントローラ(104)は、メモリ(106)に動作可能に接続される。メモリ(106)は、任意の揮発性メモリであってもよい。当該揮発性メモリは、ダイナミックランダムアクセスメモリ(DRAM)、シンクロナスDRAM、SDR SDRAMおよびDDR SDRAMを含むが、これらに限定されない。本発明の一実施形態において、メモリ(106)は、(パリティデータを含む)さまざまなデータがストレージアレイに格納される前にこのようなデータを一時的に格納するように構成される。
【0016】
本発明の一実施形態において、FPGA(102)(存在する場合)は、ストレージアレイ(108)にデータを格納するためにPおよび/もしくはQパリティ情報を計算する機能、ならびに/または多次元RAIDスキームを使用して格納された破損データを回復するのに必要なさまざまな計算を行なう機能を含む。RAIDコントローラ(104)は、本発明の1つ以上の実施形態に従って、さまざまなデータの処理をオフロードするようFPGA(102)を使用し得る。本発明の一実施形態において、ストレージアレイ(108)は、多くの個々の持続性ストレージデバイスを含む。当該持続性ストレージデバイスは、磁気メモリデバイス、光学メモリデバイス、ソリッドステートメモリデバイス、相変化メモリデバイス、任意の他の好適なタイプの持続メモリデバイス、またはその任意の組合せを含むがこれらに限定されない。
【0017】
図1はFPGAを示しているが、当業者であれば、本発明はFPGAがなくても実施され得るということを理解するであろう。さらに当業者であれば、本発明から逸脱することなく、FPGAの代わりに他の構成要素が使用されてもよいことを理解するであろう。たとえば本発明は、ストレージアレイにデータを格納する目的のためにPおよび/もしくはQパリティ情報を計算することができならびに/または格納された破損データを多次元RAIDスキームを使用して回復するのに必要なさまざまな計算を行うことができるASIC,グラフィックス・プロセッシング・ユニット(GPU),汎用プロセッサ,任意の他のハードウェアデバイス、ストレージアレイ(108)にデータを格納するためにPおよび/もしくはQパリティ情報を計算しならびに/または格納された破損データを多次元RAIDスキームを使用して回復するのに必要なさまざまな計算を行なうよう構成されるハードウェア,ファームウェアおよび/もしくはソフトウェアの組み合わせを含む任意のデバイス、またはその任意の組合せを使用して実施されてもよい。
【0018】
図2は、本発明の一実施形態に従ったRAIDグリッドを示す。本発明の一実施形態において、RAIDコントローラが2D RAIDスキームまたは3D RAIDスキームを実施する場合(
図3を参照)、RAIDコントローラはRAIDグリッド(200)にデータを格納する。
図2は、本発明の1つ以上の実施形態に従ったRAIDグリッドの概念部分を示す。RAIDグリッド(200)は、多くのRAIDグリッド位置を含んでおり、各RAIDグリッド位置は、ストレージアレイにおけるユニークな物理アドレスに最終的に書き込まれる。RAIDグリッド(200)は、(i)クライアントから受け取られたデータ(すなわち、クライアントがRAIDコントローラにストレージアレイに書き込みを行うよう命令したデータ)を格納するRAIDグリッド位置を含むデータグリッド(202)と、(ii)RAIDグリッド位置におけるデータを使用して計算されるPパリティ値をロウ(row)(以下に記載)に格納する、RAIDグリッド位置を含むロウPパリティグループ(204)と、(iii)RAIDグリッド位置におけるデータを使用して計算されるQパリティ値をロウ(以下に記載)に格納する、RAIDグリッド位置を含むロウQパリティグループ(206)と、(iv)RAIDグリッド位置におけるデータを使用して計算されるPパリティ値をカラム(column)(以下に記載)に格納する、RAIDグリッド位置を含むカラムPパリティグループ(208)と、(v)RAIDグリッド位置におけるデータを使用して計算されるQパリティ値をカラム(以下に記載)に格納する、RAIDグリッド位置を含むカラムQパリティグループ(210)と、(vi)(a)ロウPパリティグループ(204)中のRAIDグリッド位置からのデータ、(b)ロウQパリティグループ(206)中のRAIDグリッド位置からのデータ、(c)カラムPパリティグループ(208)中のRAIDグリッド位置からのデータ、および(d)カラムQパリティグループ(210)中のRAIDグリッド位置からのデータを使用して計算されたパリティ値を含むインターセクションパリティグループ(212)(以下に記載)とを含む。
【0019】
ロウ(214)を参照して、本発明の一実施形態において、ロウ(214)においてP
rとして示されるRAIDグリッド位置に格納されるデータは、データを含むロウ(214)中のすべてのRAIDグリッド位置にPパリティ関数を適用することによって計算される(たとえばP
r=f
P(D
1,D
2,D
3,D
4)。同様に、本発明の一実施形態において、ロウ(214)中のQ
rとして示されるRAIDグリッド位置に格納されるデータは、データを含むロウ(214)中のすべてのRAIDグリッド位置にQパリティ関数を適用することにより計算される(たとえばQ
r=f
Q(D
1,D
2,D
3,D
4)。
【0020】
カラム(216)を参照して、本発明の一実施形態において、カラム(216)のP
cとして示されるRAIDグリッド位置に格納されるデータは、データを含むカラム(216)中のすべてのRAIDグリッド位置にPパリティ関数を適用することにより計算される(たとえばP
C=f
P(D
5,D
2,D
6,D
7)。同様に、本発明の一実施形態において、カラム(216)のQ
Cによって示されるRAIDグリッド位置に格納されるデータは、データを含むカラム(216)中のすべてのRAIDグリッド位置にQパリティ関数を適用することにより計算される(たとえばQ
C=f
Q(D
5,D
2,D
6,D
7)。
【0021】
インターセクションパリティグループ(212)を参照して、本発明の一実施形態において、I
r1として示されるRAIDグリッド位置に格納されるデータは、ロウPパリティグループ(204)中のすべてのRAIDグリッド位置にPパリティ関数を適用することによってか、またはカラムPパリティグループ(208)中のすべてのRAIDグリッド位置にPパリティ関数を適用することによって計算され得る。たとえば、I
r1=f
P(P
r1,P
r2,P
r3,P
r4)またはI
r1=f
P(P
c5,P
c6,P
c7,P
c8)である。
【0022】
本発明の一実施形態において、I
r2として示されるRAIDグリッド位置に格納されたデータは、ロウQパリティグループ(204)中のすべてのRAIDグリッド位置にPパリティ関数を適用することによって、またはカラムPパリティグループ(208)中のすべてのRAIDグリッド位置にQパリティ関数を適用することによって計算され得る。たとえば、I
r2=f
P(Q
r1,Q
r2,Q
r3,Q
r4)またはI
r2=f
Q(P
c5,P
c6,P
c7,P
c8)である。
【0023】
本発明の一実施形態において、I
r3として示されるRAIDグリッド位置に格納されたデータは、カラムPパリティグループ(210)中のすべてのRAIDグリッド位置にPパリティ関数を適用することによってか、またはロウPパリティグループ(204)中のすべてのRAIDグリッド位置にQパリティ関数を適用することによって計算され得る。たとえば、I
r3=f
P(Q
c5,Q
c6,Q
c7,Q
c8)またはI
r3=f
Q(P
c1,P
c2,P
c3,P
c4)である。
【0024】
本発明の一実施形態において、I
r4として表示されるRAIDグリッド位置に格納されたデータは、カラムQパリティグループ(210)中のすべてのRAIDグリッド位置にQパリティ関数を適用することによってか、またはロウQパリティグループ(206)中のすべてのRAIDグリッド位置にQパリティ関数を適用することによって計算され得る。たとえば、I
r4=f
Q(Q
c1,Q
c2,Q
c3,Q
c4)またはI
r4=f
Q(Q
c5,Q
c6,Q
c7,Q
c8)である。
【0025】
本発明の一実施形態において、パリティグループのすべてについての値を計算するために使用されるPおよびQパリティ関数は、RAID6を実施するために使用される任意のPおよびQパリティ関数に対応し得る。
【0026】
上で論じたように、
図2に示されるRAIDグリッド(200)は、RAIDグリッドの概念的なレイアウトを示す。しかしながら、個々のRAIDグリッド位置がストレージアレイに書き込まれると、さまざまなRAIDグリッド位置の相対位置は、ロウまたはカラムに亘って変動し得る。たとえば、ロウ(214)を参照して、ロウ(214)内のRAIDグリッド位置がストレージアレイに書き込まれると、(「D」によって示される)データを含むRAIDグリッド位置と、パリティデータを含むRAIDグリッド位置(すなわち「P
r」および「Q
r」として示されるRAIDグリッド位置)との相対位置は、<D
1,D
2 P
r2,D
3 Q
r2,D
4>、<P
r2,Q
r2,D
1,D
2,D
3,D
4>、またはロウ(214)内の任意の他の構成であり得る。同様に、カラム(216)を参照して、データ(「D」によって示される)を含むRAIDグリッド位置と、パリティデータを含むRAIDグリッド位置(すなわち「P
c」および「Q
c」として示されるRAIDグリッド位置)との相対位置は、<D
5,D
2,D
6,P
c6,D
6,Q
c6>、<P
c6,D
5,D
2,Q
c6,D
6,D
7>、またはカラム(216)内の任意の他の構成であり得る。
【0027】
RAIDコントローラ(またはシステムにおける別のエンティティ)は、ストレージアレイにおけるどの物理アドレスにRAIDグリッド位置の各々が書き込まれるかを決定し得る。この決定は、クライアントから特定のRAIDグリッドについて(「D」として示される)データのいずれも受け取る前になされ得る。代替的には、この決定は、ストレージアレイにRAIDグリッド位置を書き込む前になされ得る。
【0028】
当業者であれば、
図2は6×6であるRAIDグリッドを示すが、RAIDグリッドは、本発明から逸脱することがなければ任意の他の次元を使用して実施されてもよいということを理解するであろう。
【0029】
本発明の一実施形態において、Pパリティ値は、リードソロモンシンドロームであり、したがって、Pパリティ関数は、リードソロモンシンドロームを生成し得る任意の関数に対応し得る。本発明の一実施形態では、Pパリティ関数はXOR関数である。
【0030】
本発明の一実施形態において、Qパリティ値はリードソロモンシンドロームであり、したがって、Qパリティ関数は、リードソロモンシンドロームを生成し得る任意の関数に対応し得る。本発明の一実施形態では、Qパリティ値はリードソロモン符号である。本発明の一実施形態において、Q=g
0・D
0+g
1・D
1+g
2・D
2+…+g
n−1・D
n−1であり、式中、Qは、
図2に関して規定されたQパリティ値のうちのいずれか1つに対応し、gはフィールドのジェネレータであり、Dの値は(データグリッドからの値および/またはPもしくはQパリティ値の両方を含む1つ以上のロウまたはカラムからの値を含み得る)データに対応する。
【0031】
当業者であれば、
図2におけるRAIDグリッドは各ロウおよびカラムごとにPおよびQパリティを含むが、本発明の実施形態は、本発明から逸脱することがなければ、より多いまたはより少ないパリティ値を使用して実施され得るということを理解するであろう。たとえば、各ロウおよびカラムはPパリティ値のみを含んでもよい。別の例では、各ロウおよびカラムは3つのパリティ値を含んでもよい。上記の例は、本発明を限定するようには意図されない。本発明の一実施形態において、本発明の実現例において使用されるパリティ値の数に関わらず、パリティ値の各々はリードソロモンシンドロームである。
【0032】
図3は、本発明の一実施形態に従った、RAIDキューブおよびRAIDキューブのさまざまな図を示す。
図3に示されるように、RAIDキューブ(300)は、RAIDグリッド(302)の概念的なスタックに対応する。上で論じたように、RAIDコントローラ(またはシステムにおける別のエンティティ)は、RAIDグリッド位置の各々についてデータを格納するべきストレージアレイ内の物理アドレスを選択する。本発明の一実施形態において、物理アドレスの選択は、それに対してRAIDグリッド(またはRAIDキューブ)が保護するよう設計されるIFDに従って決定され得る。換言すると、物理アドレスは、1つ以上のIFDにおける故障から保護する態様で選択され得る。たとえば、
図3に示されるように、所与のRAIDグリッド(302,304)についての各RAIDグリッド位置(図示せず)は、IFD1およびIFD2からの値のユニークな対を使用して選択されるがIFD3については同じ値を有する、ストレージアレイ(図示せず)における物理アドレスに書き込まれる(または物理アドレスに書き込まれることになる)。たとえば、(複数のNANDダイを含む)ストレージモジュールの一部であるストレージアレイ中のデータがNANDフラッシュに格納される場合、IFDは、(i)IFD1=ストレージモジュール、(ii)IFD[[1]]2=チャンネル、および(iii)IFD3=NANDダイ、であり得る。したがって、所与のRAIDグリッドにおいて、各RAIDグリッド位置におけるデータがストレージモジュール(IFD1)およびチャンネル(IFD2)のユニークな組合せに書き込まれるが、(ストレージモジュールの各々上の)同じNANDダイに書き込まれる。当業者であれば、本発明が上記の3つの独立した障害ドメインに限定されないことを理解するであろう。さらに、当業者であれば、本発明がNANDフラッシュを含むストレージアレイに限定されないことを理解するであろう。
【0033】
図3を引き続き参照して、上で論じたように、RAIDキューブ(300)はRAIDグリッドの概念的なスタックである。より具体的には、本発明の一実施形態において、RAIDキューブ(300)は、(i)2つ以上のRAIDグリッド(304,306,308,310)(
図2参照)を含むデータ部分(316)と、PパリティRAIDグリッド(312)およびQパリティRAIDグリッド(314)を含むパリティ部分(318)とを含み得る。
【0034】
本発明の一実施形態において、データ部分(316)中のRAIDグリッド(304,306,308,310)は、RAIDグリッド内のデータ(パリティデータを含む)のみを使用してRAIDグリッド内のデータが回復されることを可能にするパリティデータ(
図2参照)を含む。本発明の一実施形態において、RAIDキューブは、(データ部分(316)およびパリティ部分(318)の両方において)他のRAIDグリッドからのデータ(パリティデータを含む)を用いて、所与のRAIDグリッド(304,306,308,310)における所与のRAIDグリッド位置についてのデータが回復され得るように構成される。本発明の一実施形態では、RAIDキューブのパリティ部分(318)は、このような回復メカニズムを可能にする。
【0035】
本発明の一実施形態において、PパリティRAIDグリッド(312)は、存在するRAIDグリッド(304,306,308,310)と同じ次元である。データ部分(316)中のRAIDグリッドからのデータ(パリティデータを含む)にPパリティ関数(たとえばXOR関数)を適用することによって、PパリティRAIDグリッド内のすべてのRAIDグリッド位置におけるデータが計算される(
図7参照)。同様に、QパリティRAIDグリッド(314)は、存在するRAIDグリッド(304,306,308,310)と同じ次元である。データ部分(316)中のRAIDグリッドからのデータ(パリティデータを含む)にQパリティ関数を適用することによって、QパリティRAIDグリッド内のすべてのRAIDグリッド位置におけるデータが計算される(
図7参照)。
【0036】
図4は、本発明の一実施形態に従ったデータ構造を示す。本発明の一実施形態において、RAIDコントローラは、多次元RAIDスキームを実施するよう1つ以上のデータ構造を含む。
【0037】
本発明の一実施形態において、RAIDコントローラは、クライアントによって提供されるデータとストレージアレイにおけるこのようなデータの物理アドレスとの間のマッピングをトラッキングするデータ構造を含む。本発明の一実施形態において、RAIDコントローラは、クライアントの視点からデータを識別するたとえば<オブジェクト,オフセット>(400)といった論理アドレスと、ストレージアレイ内のデータの位置を識別する物理アドレス(402)との間のマッピングを使用して、上記の情報をトラッキングする。本発明の一実施形態において、当該マッピングは、ハッシュ関数(たとえばMD5,SHA1)を<オブジェクト,オフセット>に適用することによって導出されるハッシュ値との間であり得る。当業者であれば、本発明から逸脱することがなければ、如何なる形態の論理アドレスも使用されてもよいということを理解するであろう。
【0038】
本発明の一実施形態において、RAIDコントローラは、各RAIDグリッド位置(404)(
図2参照)がどのようにストレージアレイにおける特定の物理アドレス(402)にマッピングされるかをトラッキングするデータ構造を含む。
【0039】
本発明の一実施形態において、RAIDコントローラは、(RAIDコントローラが3D RAIDスキームを実施していると仮定して)どのRAIDグリッド(データ部分およびパリティ部分におけるRAIDグリッドを含む)(408)がどのRAIDキューブ(406)に関連付けられるかと、さらにどのRAIDグリッド位置(404)が各RAIDグリッド(408)に関連付けられるかとをトラッキングするデータ構造を含む。
【0040】
本発明の一実施形態において、RAIDコントローラは、各RAIDグリッド位置(404)の状態(410)をトラッキングするデータ構造を含む。本発明の一実施形態において、RAIDグリッド位置の状態(410)は、充填(データ(もしくはパリティデータ)がRAIDグリッド位置に書き込まれていることを示す)か、または空(データ(もしくはパリティデータ)がRAIDグリッド位置に書き込まれていないことを示す)としてセットされ得る。本発明の一実施形態において、RAIDコントローラはまた、RAIDコントローラがRAIDコントローラにおいてRAIDグリッド位置に書き込むべきデータを識別した場合、RAIDグリッド位置の状態を充填にセットし得る(
図5のステップ506を参照)。
【0041】
本発明の一実施形態において、RAIDコントローラは、RAIDグリッドジオメトリをトラッキングするデータ構造を含む。本発明の一実施形態において、RAIDグリッドジオメトリは、RAIDグリッドのサイズと、RAIDグリッドの各次元に関連付けられるIFDとを含んでもよいがこれらに限定されない。このデータ構造(または別のデータ構造)はさらに、RAIDキューブのサイズと、RAIDキューブの各次元に関連付けられるIFDとをトラッキングし得る。
【0042】
本発明の一実施形態において、RAIDコントローラは、各RAIDグリッド内の各ロウおよび/またはカラム内において、(インターセクションパリティグループ内のパリティ値を含む(
図2を参照))各PおよびQパリティ値の位置をトラッキングするデータ構造を含む。
【0043】
本発明の一実施形態において、RAIDコントローラは、RAIDキューブのデータ部分中のどのRAIDグリッド位置が、PパリティRAIDグリッドおよびQパリティRAIDグリッド中のPおよびQパリティ値の各々を計算するよう使用されるかをそれぞれトラッキングするデータ構造を含む。
【0044】
図5A〜
図5Cは、本発明の1つ以上の実施形態に従ったフローチャートを示す。より具体的には、
図5A〜
図5Cは、本発明の1つ以上の実施形態に従った、ストレージアレイにデータを格納するための方法を示す。フローチャートにおけるさまざまなステップが順次、提示および記載されるが、当業者であれば、ステップのうちのいくつかまたはすべてが、異なる順番で実行されてもよいこと、ステップのうちのいくつかまたはすべてが組み合わせられてもよくまたは省略されてもよいこと、およびステップのうちのいくつかまたはすべてが並行に実行されてもよいことを理解するであろう。本発明の一実施形態において、
図5A、
図5Bおよび
図5Cに示される方法は並行において行なわれてもよい。
【0045】
図5Aを参照して、ステップ502において、データを書き込む要求がクライアントから受け取られる。本発明の一実施形態において、要求は、クライアントの視点からデータを識別する<オブジェクト,オフセット>を含む。ステップ504において、RAIDコントローラは、当該要求に応答して、RAIDコントローラメモリにおける位置にデータを書き込む。
【0046】
ステップ506において、RAIDコントローラは、データ構造の1つ以上を更新する(
図4参照)。より具体的には、本発明の一実施形態において、RAIDコントローラは、(i)クライアントから受け取られたデータを書き込むべきストレージアレイにおける物理アドレスを選択し、(ii)データについての<オブジェクト,オフセット>と選択された物理アドレスとの間のマッピングを作成し得る。本発明の一実施形態において、データを書き込むべき物理アドレスを選択する前のある点で、RAIDコントローラは、(i)少なくとも1つのRAIDグリッドと、(ii)当該RAIDグリッドについてのRAIDグリッド位置と、(iii)各RAIDグリッド位置に関連付けられるストレージアレイにおける物理アドレスとを特定する。さらに、RAIDコントローラは、各RAIDグリッド位置の状態を空に初期化してもよい。
【0047】
本発明の一実施形態において、
図5Bは、本発明の1つ以上の実施形態に従った、ストレージアレイにRAIDグリッドを書き込むための方法を示す。
図5Bを参照して、ステップ508において、所与のRAIDグリッド内のデータグリッド(たとえば
図2における202)が充填されているかどうかについて決定がなされる。本発明の一実施形態において、この決定は、
図4に関して記載されるデータ構造の1つ以上を使用してなされる。所与のRAIDグリッド内のデータグリッドが充填されている場合、当該プロセスはステップ510に進み、そうでなければプロセスは終了する。
【0048】
ステップ510において、Pパリティが、データグリッドにおけるRAIDグリッド位置からの適切な値を使用してロウPパリティグループ(たとえば
図2における204)中の各RAIDグリッド位置について計算される。ステップ512において、Qパリティが、データグリッドにおけるRAIDグリッド位置からの適切な値を使用してロウQパリティグループ(たとえば
図2における206)中の各RAIDグリッド位置について計算される。ステップ514において、Pパリティが、データグリッドにおけるRAIDグリッド位置からの適切な値を使用してカラムPパリティグループ(たとえば
図2における208)中の各RAIDグリッド位置について計算される。ステップ516において、Qパリティが、データグリッドにおけるRAIDグリッド位置からの適切な値を使用してカラムQパリティグループ(たとえば
図2における210)中の各RAIDグリッド位置について計算される。
【0049】
ステップ518において、インターセクションパリティグループ(たとえば
図2における212)中のすべてのRAIDグリッド位置についてのパリティ値が、ロウPパリティグループ(たとえば
図2における204)、ロウQパリティグループ(たとえば
図2における206)、ロウQパリティグループ(たとえば
図2における206)、およびカラムQパリティグループ(たとえば
図2における210)の1つ以上において、RAIDグリッド位置からの適切な値を使用して計算される。
【0050】
ステップ520において、RAIDグリッドについての各RAIDグリッド位置に関連付けられるデータは、ストレージアレイにおいて適切な物理アドレスに書き込まれる。本発明の一実施形態において、RAIDグリッド位置の各々についてデータを書き込むべき物理アドレスは、
図4に関して記載されたデータ構造の1つ以上から得られる。ステップ522において、
図4に関して記載された1つ以上のデータ構造は、RAIDグリッドがストレージアレイに書き込まれたことを反映するよう更新される。
【0051】
本発明の一実施形態において、RAIDコントローラが3D RAIDスキームを実施している場合、RAIDコントローラは、
図5Cに示される方法を行なってもよい。
図5Cを参照して、ステップ524において、RAIDキューブのデータ部分が充填されているかどうかに関して決定がなされる。RAIDキューブのデータ部分が充填されていれば、プロセスはステップ526に進み、そうでなければプロセスは終了する。本発明の一実施形態において、この決定は、
図4に関して記載されたデータ構造の1つ以上を使用してなされる。
【0052】
ステップ526において、PパリティRAIDグリッド中の各RAIDグリッド位置についてのPパリティ値(たとえば
図3における312)が計算される。本発明の一実施形態において、RAIDグリッド位置の各々についての値が、RAIDキューブのデータ部分(たとえば
図3における316)におけるRAIDグリッドの各々から得られる1つの値を使用して計算される。
【0053】
ステップ528において、QパリティRAIDグリッド(たとえば
図3における314)中の各RAIDグリッド位置についてのQパリティ値が計算される。本発明の一実施形態において、RAIDグリッド位置の各々についての値が、RAIDキューブのデータ部分(たとえば
図3における316)におけるRAIDグリッドの各々から得られる1つの値を使用して計算される。
【0054】
ステップ530において、パリティRAIDグリッド(たとえばPパリティRAIDグリッドおよびQパリティRAIDグリッド)における各RAIDグリッド位置に関連付けられるデータは、ストレージアレイにおいて適切な物理アドレスに書き込まれる。本発明の一実施形態において、RAIDグリッド位置の各々についてデータを書き込むべき物理アドレスは、
図4に関して記載されたデータ構造の1つ以上から得られる。ステップ532において、
図4に関して記載された1つ以上のデータ構造は、RAIDキューブがストレージアレイに書き込まれたことを反映するよう更新される。
【0055】
図6A〜
図6Cは、本発明の1つ以上の実施形態に従った、RAIDグリッドをポピュレートする例を示す。当該例は、本発明の範囲を限定するようには意図されない。
【0056】
図6Aを参照して、クライアントからのデータ(「D」として示される)が、RAIDグリッド内のデータグリッド(600)に書き込まれる。データグリッド(600)が(
図6Aに示されるように)充填されると、RAIDコントローラ(図示せず)は、ロウPパリティグループ(602)、ロウQパリティグループ(604)、ロウQパリティグループ(606)、およびカラムQパリティグループ(608)といったグループにおいてRAIDグリッド位置についての値を計算する。
図6Bは、上記のRAIDグリッド位置についての値のすべてが計算された後のRAIDグリッドを示す。この段階では、計算すべき残存する値は、インターセクションRAIDグループ(610)におけるRAIDグリッド位置についての値だけである。
図6Cは、インターセクションRAIDグループ(610)における値のすべてが計算された後のRAIDグリッドを示す。
【0057】
本発明の一実施形態において、所与のRAIDグリッドに対するすべてのRAIDグリッド位置についてのすべての値は、RAIDコントローラがRAIDグリッドをストレージアレイに書き込む前に、RAIDコントローラメモリに格納される。
【0058】
図7A〜
図7Dは、本発明の1つ以上の実施形態に従った、RAIDキューブをポピュレートする例を示す。この例は、本発明の範囲を限定するようには意図されない。
【0059】
図7Dに示されるRAIDキューブを考えると、当該RAIDキューブは、RAIDグリッドA(700)と、RAIDグリッドB(702)と、RAIDグリッドC(704)と、PパリティRAIDグリッド(706)と、QパリティRAIDグリッド(708)とを含む。さらに、RAIDキューブにおける各RAIDグリッド(700,702,704,706,708)は、IFD1およびIFD2に亘って書き込まれるが一定の値のIFD3を有するRAIDグリッド位置を含む。したがって、本発明の一実施形態において、RAIDグリッドにおけるRAIDグリッド位置(「ターゲットRAIDグリッド位置」)の値は、(i)ターゲットRAIDグリッド位置が位置するロウまたはカラムにおけるRAIDグリッド位置の値のみか、(ii)ターゲットRAIDグリッド位置が位置するRAIDグリッド内の任意のRAIDグリッド位置の値か、または(iii)ターゲットRAIDグリッド位置が位置するRAIDキューブ内の任意のRAIDグリッド位置の値を使用して回復され得る。換言すると、本発明の一実施形態においては、ターゲットRAIDグリッド位置が位置するロウおよびカラムの各々において2つより多いエラーが存在する場合、RAIDグリッドおよび/またはRAIDキューブ内におけるデータおよびパリティ値の構成によってターゲットRAIDグリッド位置における値が回復されることが可能になる。
【0060】
図7Aを参照して、
図7Aは、RAIDキューブのデータ部分を構成する3つのRAIDグリッド(700,702,704)を含む。RAIDグリッド(700,702,704)の各々におけるRAIDグリッド位置の各々は、RAIDグリッド位置におけるデータが書き込まれるストレージアレイにおける位置を規定する3タプルを含む。この例において、3タプルにおける要素は、<IFD1,IFD2,IFD3>というIFDに対応する。この3タプルは、ストレージアレイにおける位置がどのようにさまざまなIFDに亘って選択されるかを示す。特に、RAIDグリッドAにおけるRAIDグリッド位置の各々は、IFD1およびIFD2のユニークな組合せを含むがIFD3については同じ値を含む。たとえば、IFD1がストレージモジュールである場合、IFD2はチャンネルであり、IFD3はNANDダイであり、3タプル<4,2,1>は、特定のRAIDグリッド位置におけるデータが、チャンネル2を使用して、ストレージモジュール4中のNANDダイ1における物理アドレスに書き込まれることになるということを示す。同様に、3タプル<2,3,1>は、特定のRAIDグリッド位置におけるデータが、チャンネル3を使用して、ストレージモジュール2中のNAND1における物理アドレスに書き込まれることになるということを示す。
【0061】
RAIDグリッドB(702)およびRAIDグリッドC(704)は、RAIDグリッドA(700)と同様の態様で構成される。しかしながら、RAIDグリッドB(702)におけるRAIDグリッド位置についての3タプル中のIFD3についての値は、RAIDグリッドA(700)についてのRAIDグリッド位置についての3タプル中のIFD3の値と異なる。さらに、RAIDグリッドC(704)についてのRAIDグリッド位置についての3タプル中のIFD3についての値は、RAIDグリッドA(700)およびRAIDグリッドB(702)についてのRAIDグリッド位置についての3タプル中のIFD3の値と異なる。
【0062】
図7Bを参照して、PパリティRAIDグリッド(706)におけるRAIDグリッド位置の各々中のデータは、RAIDグリッドA(700)、RAIDグリッドB(702)およびRAIDグリッドC(704)と同様の態様で構成される。さらに上述したように、PパリティRAIDグリッド(706)におけるRAIDグリッド位置の各々中のデータの値は、RAIDキューブ(すなわちRAIDグリッドA(700)、RAIDグリッドB(702)、RAIDグリッドC(704))におけるデータグリッド各々中の1つのRAIDグリッド位置からのデータを使用して計算される。たとえば、PパリティRAIDグリッド(706)におけるRAIDグリッド位置<1,1,4>のデータの値は、Pパリティ関数(たとえばXOR関数)を、(i)RAIDグリッドA(700)<1,1,1>からのデータ、(ii)RAIDグリッドB(702)<1,1,2>からのデータ、および(iii)RAIDグリッドC(704)<1,1,3>からのデータ、といったRAIDグリッド位置からのデータに適用することにより決定される。PパリティRAIDグリッド(706)における他のRAIDグリッド位置中のデータついての値は、同様の態様で計算される。
【0063】
図7Cを参照して、QパリティRAIDグリッド(708)におけるRAIDグリッド位置の各々中のデータは、RAIDグリッドA(700)、RAIDグリッドB(702)およびRAIDグリッドC(704)と同様の態様で構成される。さらに上述したように、QパリティRAIDグリッド(708)におけるRAIDグリッド位置の各々中のデータの値は、RAIDキューブ(すなわちRAIDグリッドA(700)、RAIDグリッドB(702)、RAIDグリッドC(704))におけるデータグリッド各々中の1つのRAIDグリッド位置からのデータを使用して計算される。たとえば、QパリティRAIDグリッド(708)におけるRAIDグリッド位置<1,1,5>でのデータの値は、(上述したように)Qパリティ関数を、(i)RAIDグリッドA(700)<1,1,1>からのデータ、(ii)RAIDグリッドB(702)<1,1,2>からのデータ、および(iii)RAIDグリッドC(704)<1,1,3>からのデータ、といったRAIDグリッド位置からのデータに適用することにより決定される。QパリティRAIDグリッド(708)における他のRAIDグリッド位置中のデータついての値は、同様の態様で計算される。
【0064】
図8は、本発明の1つ以上の実施形態に従ったフローチャートを示す。より具体的には、
図8は、本発明の1つ以上の実施形態に従った、ストレージアレイからデータを取得するための方法を示す。
【0065】
ステップ800において、データはRAIDグリッド位置から取得される。本発明の一実施形態では、データはクライアントからの要求に応答して取得される。本発明の一実施形態において、要求は<オブジェクト,オフセット>を特定し得、また、RAIDコントローラは、
図4に関して記載されたデータ構造の1つ以上を使用して、要求されたデータが格納されるストレージアレイにおける物理アドレスを決定し得る。RAIDコントローラはその後、ストレージアレイから上記要求されたデータを取得し得る。
【0066】
ステップ802において、ステップ800で取得されたデータが破損しているかどうかに関して決定がなされる。本発明の一実施形態では、RAIDコントローラは、データが破損しているかどうかを判断するための任意の公知の方法(たとえばチェックサム)を実施し得る。当該データが破損されていなければ、プロセスはステップ804に進み、そうでなければ、プロセスはステップ806に進む。ステップ804において、当該データはクライアントに返され、プロセスが終了する。本発明の別の実施形態において、たとえば持続性ストレージが破損もしくはプラグが抜かれるかまたは読出コマンドが失敗したためデータが取得され得ない場合、プロセスはステップ806に進み得る。
【0067】
ステップ806において、RAIDコントローラは、どのRAIDグリッドからデータが取得されたのかを決定する。ステップ808において、RAIDコントローラは、データを含んでいたRAIDグリッド位置が位置するロウおよび/またはカラム内の他のRAIDグリッド位置を使用して、データを再構築するよう試みる。
【0068】
ステップ810において、ステップ808における再構築の試みが成功したかどうかに関して決定がなされる。本発明の一実施形態では、RAIDコントローラは、再構築の試みが成功したかどうかを判断するための任意の公知の方法(たとえばチェックサム)を実施し得る。ステップ808における再構築の試みが成功した場合、プロセスはステップ812に進み、そうでなければ、プロセスはステップ814に進む。ステップ812において、再構築されたデータがクライアントに返され、プロセスが終了する。
【0069】
ステップ814において、RAIDコントローラは、RAIDグリッドの他のロウおよび/またはカラムにおける他のRAIDグリッド位置を使用して、データを再構築することを試みる。ステップ816において、ステップ814における再構築の試みが成功したかどうかに関して決定がなされる。本発明の一実施形態では、RAIDコントローラは、再構築の試みが成功したかどうか判断するための任意の公知の方法(たとえばチェックサム)を実施し得る。ステップ814における再構築の試みが成功した場合、プロセスはステップ812に進み、そうでなければ、プロセスはステップ818に進む。
【0070】
ステップ818において、RAIDコントローラは、RAIDキューブにおける他のRAIDグリッドを使用してデータを再構築することを試みる。ステップ820において、ステップ818における再構築の試みが成功したかどうかに関して決定がなされる。本発明の一実施形態では、RAIDコントローラは、再構築の試みが成功したかどうか判断するための任意の公知の方法(たとえばチェックサム)を実施し得る。ステップ818における再構築の試みが成功した場合、プロセスはステップ822に進み、そうでなければ、プロセスはステップ824に進む。ステップ822において、再構築されたデータがクライアントに返され、プロセスが終了する。ステップ824において、RAIDコントローラは、要求されたデータがストレージアレイからRAIDコントローラによって抽出され得ないということを示すエラーをクライアントに返す。
【0071】
当業者であれば、RAIDキューブにおける他のRAIDグリッドを使用してデータを再構築することは、RAIDコントローラが3D RAIDスキームを実施している場合のみ行われるということを理解するであろう。
【0072】
図9A〜
図9Dは、本発明の1つ以上の実施形態に従った例を示す。この例は、本発明の範囲を限定するようには意図されない。
図9Aを参照して、クライアントがRAIDグリッド位置(900)からのデータを要求したシナリオを考える。しかしながら、RAIDグリッド位置(900)からのデータは(シェーディングによって示されたように)破損している。RAIDコントローラはまず、ロウ(904)および/またはカラム(902)におけるRAIDグリッド位置からのデータを用いてRAIDグリッド位置(900)中のデータを再構築することを(
図8のステップ808によって)試みる。しかしながら、ロウ(904)およびカラム(902)の各々が、破損データを含む3つのRAIDグリッド位置を含んでいるので、RAIDグリッド位置(900)におけるデータは、ロウ(904)および/またはカラム(902)からのデータのみを使用して回復され得ない。
【0073】
図9Bを参照して、RAIDコントローラは、RAIDグリッドにおける他のRAIDグリッド位置からのデータを使用して、RAIDグリッド位置(900)におけるデータを再構築することを(
図8のステップ814によって)試みる。この例において、RAIDコントローラは、ロウ(906)におけるすべての破損データを再構築する。
図9Cを参照して、ロウ(906)における破損したデータの再構築に基づき、RAIDコントローラは、カラム(908)におけるすべての破損データを再構築することができる。最後に、
図9Dを参照して、カラム(908)における破損データの再構築に基づき、RAIDコントローラは、ロウ(910)における他の非破損データを使用して、RAIDグリッド位置(900)におけるデータを再構築することができる。本発明の一実施形態において、
図9B〜
図9Dに示されるようなさまざまな破損データの再構築は、
図8におけるステップ814の一部として行われる。
【0074】
図9A〜
図9Dに示されていないが、RAIDグリッドにおけるデータのみを使用してRAIDグリッド位置(900)におけるデータが構築され得なかった場合、RAIDコントローラが3D RAIDスキームを実施していれば、RAIDコントローラは、RAIDキューブ(図示せず)内の他のRAIDグリッドにおけるデータを用いて、RAIDグリッド位置(900)におけるデータを再構築することを(
図8におけるステップ818によって)試みる。
【0075】
当業者であれば、IFDに沿ってストレージアレイにデータを格納することおよび/またはNANDフラッシュにデータを格納することに関して本発明のさまざまな例が記載されているが、本発明の実施形態は、本発明から逸脱することがなければ、任意の多次元ディスクアレイ上で実施されてもよいということを理解するであろう。たとえば、RAIDグリッドにおける各RAIDグリッド位置についてのデータが別個のディスク上に格納される2次元アレイのディスク(磁気、光学、ソリッドステート、または任意の他のタイプのストレージデバイス)を使用して本発明の1つ以上の実施形態が実施され得る。
【0076】
さらに、本発明の一実施形態において、RAIDコントローラが、2次元アレイのディスクを使用して3D RAIDスキームを実施している場合、RAIDコントローラは、<ディスクx,ディスクy,論理ブロックアドレス(LBA)z>(xおよびyはディスクアレイの次元)といったnタプルを使用してRAIDグリッド位置の各々についてのデータを格納し得る。さらに、所与のRAIDグリッドについて、LBAは、単一のRAIDグリッドについての各RAIDグリッド位置について一定であるが、LBAはRAIDキューブにおけるRAIDグリッドに亘って異なる。
【0077】
2次元のディスクアレイを使用して本発明の実施形態を実施するための上記の例は、本発明の範囲を限定するようには意図されない。
【0078】
当業者であれば、本発明は2D RAIDスキームおよび3D RAIDスキームに関して記載されているが、本発明の実施形態は任意の多次元のRAIDスキームまで拡張されてもよいということを理解するであろう。
【0079】
本発明の1つ以上の実施形態は、当該システムにおける1つ以上のプロセッサによって実行される命令を使用して実施されてもよい。さらに、このような命令は、1つ以上の一時的でないコンピュータ読取可能媒体上に格納されるコンピュータ読取可能命令に対応してもよい。
【0080】
本発明を限られた数の実施形態に関して記載したが、この開示の利益を有する当業者であれば、本願明細書において開示される本発明の範囲から逸脱しない他の実施形態が作り出され得るということを理解するであろう。したがって、本発明の範囲は、添付の請求の範囲によってのみ限定されるべきである。