特許第5961746号(P5961746)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ディ・エス・エス・ディ・インコーポレイテッドの特許一覧

特許5961746多次元RAIDのための方法およびシステム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5961746
(24)【登録日】2016年7月1日
(45)【発行日】2016年8月2日
(54)【発明の名称】多次元RAIDのための方法およびシステム
(51)【国際特許分類】
   G06F 3/06 20060101AFI20160719BHJP
   G06F 12/16 20060101ALI20160719BHJP
【FI】
   G06F3/06 305C
   G06F3/06 540
   G06F3/06 301Z
   G06F12/16 320L
   G06F12/16 320H
【請求項の数】29
【全頁数】26
(21)【出願番号】特願2015-501902(P2015-501902)
(86)(22)【出願日】2013年3月21日
(65)【公表番号】特表2015-516630(P2015-516630A)
(43)【公表日】2015年6月11日
(86)【国際出願番号】US2013033224
(87)【国際公開番号】WO2013142646
(87)【国際公開日】20130926
【審査請求日】2014年11月13日
(31)【優先権主張番号】13/428,536
(32)【優先日】2012年3月23日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】514240747
【氏名又は名称】ディ・エス・エス・ディ・インコーポレイテッド
【氏名又は名称原語表記】DSSD, INC.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】ボンウィック,ジェフリー・エス
【審査官】 寺谷 大亮
(56)【参考文献】
【文献】 特開2004−326759(JP,A)
【文献】 特表2010−508604(JP,A)
【文献】 米国特許出願公開第2008/0126912(US,A1)
【文献】 上原 稔,大規模仮想ディスクにおける複数パリティ直交RAID,情報処理学会研究報告 2011(平成23)年度▲4▼ [CD-ROM],日本,一般社団法人情報処理学会,2011年12月15日,pp.1-8
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06
G06F 12/16
(57)【特許請求の範囲】
【請求項1】
実行されるとデータを格納するための方法を行なう命令を含むプログラムであって、前記方法は、
データを書き込む要求を受け取るステップと、
前記要求に応答して、前記データを書き込むようRAIDグリッドにおける独立ディスク冗長アレイ(RAID)グリッド位置を選択するステップと、
前記データをメモリに書き込むステップとを含み、前記データは、前記メモリに一時的に格納されており、前記方法はさらに、
前記RAIDグリッド位置が充填されていることを示すようデータ構造を更新するステップと、
前記データ構造を使用して、前記RAIDグリッドにおけるデータグリッドが充填されているかどうかを決定するステップとを含み、前記RAIDグリッド位置は前記データグリッドに存在しており、前記方法はさらに、
前記データグリッドが充填されているという決定に基づいて、
前記データを使用して前記RAIDグリッドについてのパリティ値を計算するステップを含み、前記RAIDグリッドは、ロウQパリティグループ、ロウPパリティグループ、カラムQパリティグループ、カラムPパリティグループおよびインターセクションパリティグループを含んでおり、前記パリティ値の各々は、前記ロウQパリティグループ、前記ロウPパリティグループ、前記カラムQパリティグループ、前記カラムPパリティグループおよび前記インターセクションパリティグループからなるグループから選択されるものに関連付けられており、前記インターセクションパリティグループに関連付けられるパリティ値は、前記ロウQパリティグループ、前記ロウPパリティグループ、前記カラムQパリティグループおよび前記カラムPパリティグループからなるグループから選択される少なくとも1つからの前記パリティ値を使用して計算され、前記方法はさらに、
前記RAIDグリッド位置に対応する持続性ストレージにおける物理アドレスを決定するステップと、
前記物理アドレスに対応する持続性ストレージにおける物理的位置に前記データを書き込むステップと、
前記持続性ストレージに前記パリティ値を書き込むステップとを含む、プログラム。
【請求項2】
前記方法はさらに、
RAIDキューブのデータ部分が充填されているかどうかを決定するステップを含み、前記データ部分は複数のRAIDグリッドを含んでおり、前記RAIDグリッドは前記複数のRAIDグリッドのうちの1つであり、前記方法はさらに、
前記データ部分が充填されているという決定に基づき、
前記データ部分における値を使用して前記RAIDキューブのパリティ部分についてのパリティ値を計算するステップと、
前記パリティ部分についての前記パリティ値を持続性ストレージに書き込むステップとを含む、請求項1に記載のプログラム。
【請求項3】
前記パリティ部分はPパリティRAIDグリッドおよびQパリティRAIDグリッドを含む、請求項2に記載のプログラム。
【請求項4】
前記RAIDキューブは、第1の次元、第2の次元および第3の次元を含んでおり、前記第1の次元は第1の独立した障害ドメインに関連付けられ、前記第2の次元は第2の独立した障害ドメインに関連付けられ、前記第3の次元は第3の独立した障害ドメインに関連付けられる、請求項2に記載のプログラム。
【請求項5】
前記持続性ストレージにおける前記物理的位置は、前記第1の独立した障害ドメイン、前記第2の独立した障害ドメインおよび前記第3の独立した障害ドメインを少なくとも部分的に使用して特定される、請求項4に記載のプログラム。
【請求項6】
前記持続性ストレージは複数のストレージモジュールを含んでおり、前記複数のストレージモジュールの各々はソリッドステートメモリを含んでおり、前記第1の独立した障害ドメインは前記複数のストレージモジュールであり、前記第2の独立した障害ドメインは前記複数のストレージモジュールの各々における複数のチャンネルであり、前記第3の独立した障害ドメインは前記複数のストレージモジュールの各々における複数のNANDダイである、請求項4に記載のプログラム。
【請求項7】
前記パリティ値は、Pパリティ値、Qパリティ値およびインターセクションパリティ値からなるグループから選択される少なくとも1つを含む、請求項1に記載のプログラム。
【請求項8】
前記RAIDグリッドは第1の次元および第2の次元を含んでおり、前記第1の次元は第1の独立した障害ドメインに関連付けられており、前記第2の次元は第2の独立した障害ドメインに関連付けられている、請求項1に記載のプログラム。
【請求項9】
前記持続性ストレージにおける前記物理的位置は、前記第1の独立した障害ドメインおよび前記第2の独立した障害ドメインを少なくとも部分的に使用して特定される、請求項8に記載のプログラム。
【請求項10】
前記持続性ストレージは複数のストレージモジュールを含んでおり、前記複数のストレージモジュールの各々はソリッドステートメモリを含んでおり、前記第1の独立した障害ドメインは前記複数のストレージモジュールであり、前記第2の独立した障害ドメインは、前記複数のストレージモジュールの各々における複数のチャンネルである、請求項9に記載のプログラム。
【請求項11】
前記持続性ストレージは複数のストレージモジュールを含んでおり、前記複数のストレージモジュールの各々はソリッドステートメモリを含んでおり、前記第1の独立した障害ドメインは、前記複数のストレージモジュールの各々における複数のチャンネルであり、前記第2の独立した障害ドメインは、前記複数のストレージモジュールの各々における複数のNANDダイである、請求項9に記載のプログラム。
【請求項12】
実行されるとデータを再構築するための方法を行なう命令を含むプログラムであって、前記方法は、
第1のデータについての要求を受け取るステップと、
前記第1のデータを取得するステップとを含み、前記第1のデータは持続性ストレージにおける第1の物理的位置から取得され、前記第1の物理的位置は第1の物理アドレスに関連付けられており、前記方法はさらに、
前記第1のデータは破損および未取得からなるグループから選択されるものであるという第1の決定を行うステップを含み、
前記第1の決定に基づいて、
前記第1の物理アドレスに対応する第1の独立ディスク冗長アレイ(RAID)グリッド位置を識別するステップと、
第1のRAIDグリッドが前記第1のRAIDグリッド位置に関連付けられることを識別するステップと、
前記第1のRAIDグリッドに関連付けられる、前記第1のRAIDグリッドおよび第2のRAIDグリッドを含むRAIDキューブを識別するステップと、
前記第1のRAIDグリッドにおいて少なくとも1つの値を使用して前記第1のデータを再構築する第1の試みを行うステップとを含み、前記第1の試みは失敗し、前記方法はさらに、
前記第1の試みが失敗した後、前記第2のRAIDグリッドにおいて少なくとも1つの値を使用して前記第1のデータを再構築する第2の試みを行うステップを含み、前記第2の試みは成功し、前記方法はさらに、
再構築された前記第1のデータをクライアントに提供するステップを含む、プログラム。
【請求項13】
前記方法は、
第2のデータについての要求を受け取るステップと、
前記第2のデータを取得するステップとをさらに含み、前記第2のデータは持続性ストレージにおける第2の物理的位置から取得され、前記第2の物理的位置は、第2の物理アドレスに関連付けられており、前記方法はさらに、
前記第2のデータが破損しているという第3の決定を行うステップを含み、
前記第3の決定に基づいて、
前記第2の物理アドレスに対応する第2のRAIDグリッド位置を識別するステップと、
前記第1のRAIDグリッドが前記第2のRAIDグリッド位置に関連付けられることを識別するステップと、
前記第1のRAIDグリッドにおける少なくとも1つの値を使用して前記第2のデータを再構築する第3の試みを行うステップとを含み、前記第3の試みは失敗し、前記方法はさらに、
前記第3の試みが失敗した後、前記第2のRAIDグリッドにおいて少なくとも1つの値を使用して前記第2のデータを再構築する第4の試みを行うステップを含み、前記第4の試みは失敗し、前記方法はさらに、
前記第4の試みが失敗した後、前記RAIDキューブのパリティ部分からの少なくとも1つの値を使用して前記第2のデータを再構築する第5の試みを行うステップを含み、前記第5の試みは成功し、前記方法はさらに、
再構築された前記第2のデータを前記クライアントに提供するステップを含む、請求項12に記載のプログラム。
【請求項14】
前記パリティ部分はPパリティ値およびQパリティ値を含む、請求項13に記載のプログラム。
【請求項15】
前記Pパリティ値は、前記第1のRAIDグリッドに関連付けられる少なくとも1つの値と前記第2のRAIDグリッドに関連付けられる少なくとも1つの値とを使用して計算される、請求項14に記載のプログラム。
【請求項16】
前記第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に記載のプログラム。
【請求項17】
前記第1のRAIDグリッドにおける前記少なくとも1つの値は、データグリッドにおけるRAIDグリッド位置に対応する値、前記第1のRAIDグリッドについてのロウQパリティグループに関連付けられるRAIDグリッド位置に対応する値、前記第1のRAIDグリッドについてのロウPパリティグループに関連付けられるRAIDグリッド位置に対応する値、前記第1のRAIDグリッドについてのカラムQパリティグループに関連付けられるRAIDグリッド位置に対応する値、および前記第1のRAIDグリッドについてのカラムPパリティグループに関連付けられるRAIDグリッド位置に対応する値とからなるグループから選択されるものであり、前記第1のRAIDグリッドは前記データグリッドを含む、請求項12に記載のプログラム。
【請求項18】
前記持続性ストレージはソリッドステートメモリである、請求項12に記載のプログラム。
【請求項19】
実行されるとデータを再構築するための方法を行なう命令を含むプログラムであって、前記方法は、
データについての要求を受け取るステップと、
前記データを取得するステップとを含み、前記データは持続性ストレージにおける物理的位置から取得され、前記物理的位置は物理アドレスに関連付けられており、前記方法はさらに、
前記データは破損および未取得からなるグループから選択されるものであるという第1の決定を行うステップを含み、
前記第1の決定に基づいて、
前記物理アドレスに対応する第1の独立ディスク冗長アレイ(RAID)グリッド位置を識別するステップと、
RAIDグリッドが前記第1のRAIDグリッド位置に関連付けられることを識別するステップと、
第2のRAIDグリッド位置における第1の値を使用して前記データを再構築する第1の試みを行うステップとを含み、前記第2のRAIDグリッド位置は、前記RAIDグリッドにおける第1のロウおよび第1のカラムからなるグループから選択される少なくとも1つに位置しており、前記第1のRAIDグリッド位置は前記第1のロウおよび前記第1のカラムの一部であり、前記第1の試みは失敗し、前記方法はさらに、
前記第1の試みが失敗した後、前記データを再構築する第2の試みを行うステップを含み、前記第2の試みは成功し、前記第2の試みは、
前記RAIDグリッドの再構築された部分を取得するよう、前記RAIDグリッドにおける第2のロウおよび第2のカラムからなるグループから選択される少なくとも1つのものを再構築するステップを含み、前記RAIDグリッドの前記再構築された部分は、前記第1のロウおよび前記第1のカラムからなるグループから選択される少なくとも1つと交差しており、前記第2の試みは、
第3のRAIDグリッド位置における第2の値を使用して、前記データを再構築するステップを含み、前記第3のRAIDグリッド位置は前記RAIDグリッドの前記再構築された部分の一部であり、前記第3のRAIDグリッド位置は、前記第1のロウおよび前記第1のカラムからなるグループから選択されるものに位置しており、前記方法はさらに、
再構築された前記データをクライアントに提供するステップを含む、プログラム。
【請求項20】
実行されるとデータを再構築するための方法を行なう命令を含むプログラムであって、前記方法は、
データについての要求を受け取るステップと、
持続性ストレージにおける物理的位置から前記データを取得することを試みるステップとを含み、前記物理的位置は第1の物理アドレスに関連付けられており、前記方法はさらに、
前記データは、破損および利用不可からなるグループから選択されるものであるという決定を行うステップを含み、
前記決定に基づいて、
第1の値を取得するようパリティ値を使用して、第2の物理アドレスに対応する第1の独立ディスク冗長アレイ(RAID)グリッド位置を再構築するステップと、
第2の値を取得するよう前記パリティ値を使用して、第3の物理アドレスに対応する第2のRAIDグリッド位置の再構築するステップと、
第3の値を取得するよう前記第1の値を使用して、第4の物理アドレスに対応する第3のRAIDグリッド位置の再構築するステップと、
前記第2の値および前記第3の値を使用して前記データを再構築するステップとを含み、
前記第1のRAIDグリッド位置はRAIDグリッドにおける第1のストライプに存在しており、
前記第2のRAIDグリッド位置は前記RAIDグリッドにおける第2のストライプに存在しており、
前記パリティ値は前記RAIDグリッドにおける第4のRAIDグリッド位置に位置しており、
前記第4のRAIDグリッド位置は、前記第1のストライプおよび前記第2のストライプの一部であり、前記方法はさらに、
再構築された前記データをクライアントに提供するステップを含む、プログラム。
【請求項21】
前記第1のストライプは前記RAIDグリッドにおけるロウであり、前記第2のストライプは前記RAIDグリッドにおけるカラムである、請求項20に記載のプログラム。
【請求項22】
前記第1のストライプは前記RAIDグリッドにおけるカラムであり、前記第2のストライプは前記RAIDグリッドにおけるロウである、請求項20に記載のプログラム。
【請求項23】
前記第4のRAIDグリッド位置は、前記RAIDグリッドにおけるインターセクションパリティグループの一部である、請求項20に記載のプログラム。
【請求項24】
前記パリティ値はインターセクションパリティ値である、請求項20に記載のプログラム。
【請求項25】
前記パリティ値は、前記第1のストライプにおける少なくとも1つの他のパリティ値を使用して計算される、請求項20に記載のプログラム。
【請求項26】
前記少なくとも1つの他のパリティ値は、ロウPパリティグループおよびロウQパリティグループからなるグループから選択されるものの一部である、請求項25に記載のプログラム。
【請求項27】
前記パリティ値は、前記第2のストライプにおける少なくとも1つの他のパリティ値を使用して計算される、請求項20に記載のプログラム。
【請求項28】
前記少なくとも1つの他のパリティ値は、カラムPパリティグループおよびカラムQパリティグループからなるグループから選択されるものの部分である、請求項27に記載のプログラム。
【請求項29】
前記データは第5のRAIDグリッド位置に関連付けられており、前記第5のRAIDグリッド位置は前記第1のストライプの部分ではなく、前記第2のストライプの部分ではない、請求項20に記載のプログラム。
【発明の詳細な説明】
【背景技術】
【0001】
背景
ストレージシステムにおけるデータの潜在的な損失に対する保護のために、複製スキームを実施することはしばしば有利である。現在の複製スキームは、ストレージシステム内のデータを読み出すことができなくなる前に、限られた量のエラーに耐えることができるだけである。
【発明の概要】
【課題を解決するための手段】
【0002】
概要
一般に、1つの局面において、本発明はデータを格納するための方法に関する。当該方法は、データを書き込む要求を受け取るステップと、上記要求に応答して、上記データを書き込むようRAIDグリッドにおけるRAIDグリッド位置を選択するステップと、上記データをメモリに書き込むステップとを含み、上記データは、上記メモリに一時的に格納されており、上記方法はさらに、上記RAIDグリッド位置が充填されていることを示すようデータ構造を更新するステップと、上記データ構造を使用して、上記RAIDグリッドにおけるデータグリッドが充填されているかどうかを決定するステップとを含み、上記RAIDグリッド位置は上記データグリッドに存在しており、上記方法はさらに、上記データグリッドが充填されているという決定に基づいて、上記データを使用して上記RAIDグリッドについてのパリティ値を計算するステップと、上記RAIDグリッド位置に対応する持続性ストレージにおける物理アドレスを決定するステップと、上記物理アドレスに対応する持続性ストレージにおける物理的位置に上記データを書き込むステップと、上記持続性ストレージに上記パリティ値を書き込むステップとを含む。
【0003】
一般に、1つの局面において、本発明は、データを再構築するための方法に関する。上記方法は、第1のデータについての要求を受け取るステップと、上記第1のデータを取得するステップとを含み、上記第1のデータは持続性ストレージにおける第1の物理的位置から取得され、上記第1の物理的位置は第1の物理アドレスに関連付けられており、上記方法はさらに、上記第1のデータは破損および未取得からなるグループから選択されるものであるという第1の決定を行うステップを含み、上記第1の決定に基づいて、上記第1の物理アドレスに対応する第1のRAIDグリッド位置を識別するステップと、第1のRAIDグリッドが上記第1のRAIDグリッド位置に関連付けられることを識別するステップと、上記第1のRAIDグリッドに関連付けられる、上記第1のRAIDグリッドおよび第2のRAIDグリッドを含むRAIDキューブを識別するステップと、上記第1のRAIDグリッドにおいて少なくとも1つの値を使用して上記第1のデータを再構築する第1の試みを行うステップとを含み、上記第1の試みは失敗し、上記方法はさらに、上記第1の試みが失敗した後、上記第2のRAIDグリッドにおいて少なくとも1つの値を使用して上記第1のデータを再構築する第2の試みを行うステップを含み、上記第2の試みは成功し、上記方法はさらに、再構築された上記第1のデータを上記クライアントに提供するステップを含む。
【0004】
一般に、1つの局面において、本発明は、データを再構築するための方法に関する。上記方法は、データについての要求を受け取るステップと、上記データを取得するステップとを含み、上記データは持続性ストレージにおける物理的位置から取得され、上記物理的位置は物理アドレスに関連付けられており、上記方法はさらに、上記第1のデータは破損および未取得からなるグループから選択されるものであるという第1の決定を行うステップを含み、上記第1の決定に基づいて、上記物理アドレスに対応する第1のRAIDグリッド位置を識別するステップと、RAIDグリッドが上記第1のRAIDグリッド位置に関連付けられることを識別するステップと、第2のRAIDグリッド位置における第1の値を使用して上記データを再構築する第1の試みを行うステップとを含み、上記第2のRAIDグリッド位置は、上記RAIDグリッドにおける第1のロウおよび第1のカラムからなるグループから選択される少なくとも1つに位置しており、上記第1のRAIDグリッド位置は上記第1のロウおよび上記第1のカラムの一部であり、上記第1の試みは失敗し、上記方法はさらに、上記第1の試みが失敗した後、上記データを再構築する第2の試みを行うステップを含み、上記第2の試みは成功し、上記第2の試みは、上記RAIDグリッドの再構築された部分を取得するよう、上記RAIDグリッドにおける第2のロウおよび第2のカラムからなるグループから選択される少なくとも1つのものを再構築するステップを含み、上記RAIDグリッドの上記再構築された部分は、上記第1のロウおよび上記第1のカラムからなるグループから選択される少なくとも1つと交差しており、上記第2の試みは、第3のRAIDグリッド位置における第2の値を使用して上記データを再構築するステップを含み、上記第3のRAIDグリッド位置は上記RAIDグリッドの上記再構築された部分の一部であり、上記第3のRAIDグリッド位置は、上記第1のロウおよび上記第1のカラムからなるグループから選択されるものに位置しており、上記方法はさらに、再構築された上記データを上記クライアントに提供するステップを含む。
【0005】
本発明の他の局面は、以下の記載および添付の特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0006】
図1】本発明の一実施形態に従ったシステムを示す図である。
図2】本発明の一実施形態に従ったRAIDグリッドを示す図である。
図3】本発明の一実施形態に従った、RAIDキューブおよびRAIDキューブのさまざまな図を示す図である。
図4】本発明の一実施形態に従ったデータ構造を示す図である。
図5A】本発明の一実施形態に従ったフローチャートを示す図である。
図5B】本発明の一実施形態に従ったフローチャートを示す図である。
図5C】本発明の一実施形態に従ったフローチャートを示す図である。
図6A】本発明の1つ以上の実施形態に従った例を示す図である。
図6B】本発明の1つ以上の実施形態に従った例を示す図である。
図6C】本発明の1つ以上の実施形態に従った例を示す図である。
図7A】本発明の1つ以上の実施形態に従った例を示す図である。
図7B】本発明の1つ以上の実施形態に従った例を示す図である。
図7C】本発明の1つ以上の実施形態に従った例を示す図である。
図7D】本発明の1つ以上の実施形態に従った例を示す図である。
図8】本発明の1つ以上の実施形態に従ったフローチャートを示す図である。
図9A】本発明の1つ以上の実施形態に従った例を示す図である。
図9B】本発明の1つ以上の実施形態に従った例を示す図である。
図9C】本発明の1つ以上の実施形態に従った例を示す図である。
図9D】本発明の1つ以上の実施形態に従った例を示す図である。
【発明を実施するための形態】
【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として示されるRAIDグリッド位置に格納されるデータは、データを含むロウ(214)中のすべてのRAIDグリッド位置にPパリティ関数を適用することによって計算される(たとえばP=f(D,D,D,D)。同様に、本発明の一実施形態において、ロウ(214)中のQとして示されるRAIDグリッド位置に格納されるデータは、データを含むロウ(214)中のすべてのRAIDグリッド位置にQパリティ関数を適用することにより計算される(たとえばQ=f(D,D,D,D)。
【0020】
カラム(216)を参照して、本発明の一実施形態において、カラム(216)のPとして示されるRAIDグリッド位置に格納されるデータは、データを含むカラム(216)中のすべてのRAIDグリッド位置にPパリティ関数を適用することにより計算される(たとえばP=f(D,D,D,D)。同様に、本発明の一実施形態において、カラム(216)のQによって示されるRAIDグリッド位置に格納されるデータは、データを含むカラム(216)中のすべてのRAIDグリッド位置にQパリティ関数を適用することにより計算される(たとえばQ=f(D,D,D,D)。
【0021】
インターセクションパリティグループ(212)を参照して、本発明の一実施形態において、Ir1として示されるRAIDグリッド位置に格納されるデータは、ロウPパリティグループ(204)中のすべてのRAIDグリッド位置にPパリティ関数を適用することによってか、またはカラムPパリティグループ(208)中のすべてのRAIDグリッド位置にPパリティ関数を適用することによって計算され得る。たとえば、Ir1=f(Pr1,Pr2,Pr3,Pr4)またはIr1=f(Pc5,Pc6,Pc7,Pc8)である。
【0022】
本発明の一実施形態において、Ir2として示されるRAIDグリッド位置に格納されたデータは、ロウQパリティグループ(204)中のすべてのRAIDグリッド位置にPパリティ関数を適用することによって、またはカラムPパリティグループ(208)中のすべてのRAIDグリッド位置にQパリティ関数を適用することによって計算され得る。たとえば、Ir2=f(Qr1,Qr2,Qr3,Qr4)またはIr2=f(Pc5,Pc6,Pc7,Pc8)である。
【0023】
本発明の一実施形態において、Ir3として示されるRAIDグリッド位置に格納されたデータは、カラムPパリティグループ(210)中のすべてのRAIDグリッド位置にPパリティ関数を適用することによってか、またはロウPパリティグループ(204)中のすべてのRAIDグリッド位置にQパリティ関数を適用することによって計算され得る。たとえば、Ir3=f(Qc5,Qc6,Qc7,Qc8)またはIr3=f(Pc1,Pc2,Pc3,Pc4)である。
【0024】
本発明の一実施形態において、Ir4として表示されるRAIDグリッド位置に格納されたデータは、カラムQパリティグループ(210)中のすべてのRAIDグリッド位置にQパリティ関数を適用することによってか、またはロウQパリティグループ(206)中のすべてのRAIDグリッド位置にQパリティ関数を適用することによって計算され得る。たとえば、Ir4=f(Qc1,Qc2,Qc3,Qc4)またはIr4=f(Qc5,Qc6,Qc7,Qc8)である。
【0025】
本発明の一実施形態において、パリティグループのすべてについての値を計算するために使用されるPおよびQパリティ関数は、RAID6を実施するために使用される任意のPおよびQパリティ関数に対応し得る。
【0026】
上で論じたように、図2に示されるRAIDグリッド(200)は、RAIDグリッドの概念的なレイアウトを示す。しかしながら、個々のRAIDグリッド位置がストレージアレイに書き込まれると、さまざまなRAIDグリッド位置の相対位置は、ロウまたはカラムに亘って変動し得る。たとえば、ロウ(214)を参照して、ロウ(214)内のRAIDグリッド位置がストレージアレイに書き込まれると、(「D」によって示される)データを含むRAIDグリッド位置と、パリティデータを含むRAIDグリッド位置(すなわち「P」および「Q」として示されるRAIDグリッド位置)との相対位置は、<D,Dr2,Dr2,D>、<Pr2,Qr2,D,D,D,D>、またはロウ(214)内の任意の他の構成であり得る。同様に、カラム(216)を参照して、データ(「D」によって示される)を含むRAIDグリッド位置と、パリティデータを含むRAIDグリッド位置(すなわち「P」および「Q」として示されるRAIDグリッド位置)との相対位置は、<D,D,D,Pc6,D,Qc6>、<Pc6,D,D,Qc6,D,D>、またはカラム(216)内の任意の他の構成であり得る。
【0027】
RAIDコントローラ(またはシステムにおける別のエンティティ)は、ストレージアレイにおけるどの物理アドレスにRAIDグリッド位置の各々が書き込まれるかを決定し得る。この決定は、クライアントから特定のRAIDグリッドについて(「D」として示される)データのいずれも受け取る前になされ得る。代替的には、この決定は、ストレージアレイにRAIDグリッド位置を書き込む前になされ得る。
【0028】
当業者であれば、図2は6×6であるRAIDグリッドを示すが、RAIDグリッドは、本発明から逸脱することがなければ任意の他の次元を使用して実施されてもよいということを理解するであろう。
【0029】
本発明の一実施形態において、Pパリティ値は、リードソロモンシンドロームであり、したがって、Pパリティ関数は、リードソロモンシンドロームを生成し得る任意の関数に対応し得る。本発明の一実施形態では、Pパリティ関数はXOR関数である。
【0030】
本発明の一実施形態において、Qパリティ値はリードソロモンシンドロームであり、したがって、Qパリティ関数は、リードソロモンシンドロームを生成し得る任意の関数に対応し得る。本発明の一実施形態では、Qパリティ値はリードソロモン符号である。本発明の一実施形態において、Q=g・D+g・D+g・D+…+gn−1・Dn−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】
本発明を限られた数の実施形態に関して記載したが、この開示の利益を有する当業者であれば、本願明細書において開示される本発明の範囲から逸脱しない他の実施形態が作り出され得るということを理解するであろう。したがって、本発明の範囲は、添付の請求の範囲によってのみ限定されるべきである。
図1
図2
図3
図4
図5A
図5B
図5C
図6A
図6B
図6C
図7A
図7B
図7C
図7D
図8
図9A
図9B
図9C
図9D