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

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

▶ エスケーハイニックス株式会社の特許一覧

特許5945285ストレージ・アレイにデータを保管するための方法、システム、およびコンピュータ・プログラム、ならびにストレージ・アレイ内の消去を訂正するための方法およびコンピュータ・プログラム
<>
  • 特許5945285-ストレージ・アレイにデータを保管するための方法、システム、およびコンピュータ・プログラム、ならびにストレージ・アレイ内の消去を訂正するための方法およびコンピュータ・プログラム 図000082
  • 特許5945285-ストレージ・アレイにデータを保管するための方法、システム、およびコンピュータ・プログラム、ならびにストレージ・アレイ内の消去を訂正するための方法およびコンピュータ・プログラム 図000083
  • 特許5945285-ストレージ・アレイにデータを保管するための方法、システム、およびコンピュータ・プログラム、ならびにストレージ・アレイ内の消去を訂正するための方法およびコンピュータ・プログラム 図000084
  • 特許5945285-ストレージ・アレイにデータを保管するための方法、システム、およびコンピュータ・プログラム、ならびにストレージ・アレイ内の消去を訂正するための方法およびコンピュータ・プログラム 図000085
  • 特許5945285-ストレージ・アレイにデータを保管するための方法、システム、およびコンピュータ・プログラム、ならびにストレージ・アレイ内の消去を訂正するための方法およびコンピュータ・プログラム 図000086
  • 特許5945285-ストレージ・アレイにデータを保管するための方法、システム、およびコンピュータ・プログラム、ならびにストレージ・アレイ内の消去を訂正するための方法およびコンピュータ・プログラム 図000087
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5945285
(24)【登録日】2016年6月3日
(45)【発行日】2016年7月5日
(54)【発明の名称】ストレージ・アレイにデータを保管するための方法、システム、およびコンピュータ・プログラム、ならびにストレージ・アレイ内の消去を訂正するための方法およびコンピュータ・プログラム
(51)【国際特許分類】
   G06F 3/06 20060101AFI20160621BHJP
   G06F 12/16 20060101ALI20160621BHJP
【FI】
   G06F3/06 305C
   G06F3/06 540
   G06F3/06 301J
   G06F12/16 320F
   G06F12/16 320L
【請求項の数】16
【全頁数】38
(21)【出願番号】特願2013-555955(P2013-555955)
(86)(22)【出願日】2012年2月10日
(65)【公表番号】特表2014-511158(P2014-511158A)
(43)【公表日】2014年5月12日
(86)【国際出願番号】IB2012050605
(87)【国際公開番号】WO2012117309
(87)【国際公開日】20120907
【審査請求日】2014年12月2日
(31)【優先権主張番号】13/036,845
(32)【優先日】2011年2月28日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】310024033
【氏名又は名称】エスケーハイニックス株式会社
【氏名又は名称原語表記】SK hynix Inc.
(74)【代理人】
【識別番号】110000796
【氏名又は名称】特許業務法人三枝国際特許事務所
(72)【発明者】
【氏名】ヘツラー、スティーヴン、ロバート
(72)【発明者】
【氏名】ブラウム、マリオ
(72)【発明者】
【氏名】ハフナー、ジェイムズ、リー
【審査官】 宮久保 博幸
(56)【参考文献】
【文献】 特開平10−240453(JP,A)
【文献】 特表2007−524930(JP,A)
【文献】 米国特許出願公開第2005/0114727(US,A1)
【文献】 特開平07−028710(JP,A)
【文献】 欧州特許出願公開第00632376(EP,A1)
【文献】 米国特許出願公開第2006/0129873(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06
G06F 12/16
(57)【特許請求の範囲】
【請求項1】
データを保管するための方法であって、
書き込みデータを受信することと、
前記書き込みデータをr行×n列のページに配列し、それぞれのページが複数のセクタを含むことと、
前記ページ上で複数の水平および垂直消去訂正コードを使用して前記書き込みデータをコード化することであって、第1の行はt個のパリティ・ページを含み、t≧1であり、第2の行はt個のパリティ・ページを含み、t≧tであり、第3の行はt個のパリティ・ページを含み、t≧tであり、t個のパリティ・ページを含み、t≧tr−1およびn>t>tであるr番目の行まで以下同様であり、前記コード化により、前記r行のうちの任意の1行でt個までの消去からの回復が可能になり、残りのr−k(k=1〜r−2の整数)行のうちの任意の1行でtr−個までの消去からの回復が可能になり、最後の残りの行でt個までの消去からの回復が可能になるようになっており、前記コード化からの出力がコード化された書き込みデータを含むことと、
前記コード化された書き込みデータを、ストレージ・アレイ内のn個のストレージ・デバイス全域にわたって書き込みストライプとして書き込むこと
を含む、方法。
【請求項2】
前記書き込みストライプ内の任意の行のt個の前記パリティ・ページが、そのデータ・ページが前記行の残りのn−t個のページになる、t消去訂正コードに対応する、請求項1記載の方法。
【請求項3】
前記水平および垂直消去訂正コードのうちの少なくとも1つが最大距離分離可能(MDS)コードである、請求項1または請求項2記載の方法。
【請求項4】
前記MDSコードにより2つまでの消去からの回復が可能になり、前記MDSコードがぞれぞれのページをz−1個のセグメントに分割し、zが素数であり、前記MDSコードの長さnが多くてもz+1であり、
第1のパリティ・ページが、第1のデータ・ページと、第2のデータ・ページにαを掛けたものと、第3のデータ・ページにαを掛けたものと、第4のデータ・ページにαを掛けたものと、以下同様で、n−2のデータ・ページにαn−3を掛けたものとの排他的論理和(XOR)として計算され、αは次数z−1の多項式の根であり、
第2のパリティ・ページが、最初のn−2のデータ・ページと、前記第1のパリティ・ページとのXORとして計算される、請求項3記載の方法。
【請求項5】
前記多項式が1+x+x+・・・xz−1である、請求項4記載の方法。
【請求項6】
前記MDSコードにより3つまでの消去からの回復が可能になり、前記MDSコードがぞれぞれのページをz−1個のセグメントに分割し、zが素数であり、前記コードの長さnが多くてもz+1であり、
第1のパリティ・ページが、第1のデータ・ページと、第2のデータ・ページにαを掛けたものと、第3のデータ・ページにαを掛けたものと、第4のデータ・ページにαを掛けたものと、以下同様で、n−3のデータ・ページにα2(n−4)を掛けたものとのXORとして計算され、αは次数z−1の多項式の根であり、
第2のパリティ・ページが、第1のデータ・ページと、第2のデータ・ページにαを掛けたものと、第3のデータ・ページにαを掛けたものと、第4のデータ・ページにαを掛けたものと、以下同様で、n−3のデータ・ページにαn−4を掛けたものと、前記第1のパリティ・ページにαn−3を掛けたものとのXORとして計算され、
第3のパリティ・ページが、前記n−3のデータ・ページと、前記第1および第2のパリティ・ページとのXORとして計算される、請求項3記載の方法。
【請求項7】
前記多項式が1+x+x+・・・xz−1である、請求項6記載の方法。
【請求項8】
が2に等しい、請求項1記載の方法。
【請求項9】
が3に等しい、請求項1記載の方法。
【請求項10】
前記ストレージ・デバイスが、ハードディスク・ドライブおよびフラッシュ・ドライブのうちの1つである、請求項1記載の方法。
【請求項11】
ストレージ・アレイにデータを保管するためのシステムであって、前記システムが、
複数のストレージ・デバイスを含むストレージ・アレイと、
請求項1ないし10のいずれかに記載のステップを実行するために構成されたアレイ・コントローラと
を含む、システム。
【請求項12】
ストレージ・アレイにデータを保管するためのコンピュータ・プログラムであって、
請求項1ないし10のいずれかに記載のステップをコンピュータに実行させる、コンピュータ・プログラム。
【請求項13】
ストレージ・アレイ内の消去を訂正するための方法であって、前記方法が、
複数のn個のストレージ・デバイスから読み取りストライプを受信することであって、前記読み取りストライプがr行×n列に配列された複数ページのブロックを含み、それぞれの列が前記ストレージ・デバイスの1つに対応し、前記ページがデータ・ページとパリティ・ページとを含み、前記パリティ・ページが複数の水平および垂直消去訂正コードを使用して生成され、第1の行はt個のパリティ・ページを含み、t≧1であり、第2の行はt個のパリティ・ページを含み、t≧tであり、第3の行はt個のパリティ・ページを含み、t≧tであり、t個のパリティ・ページを含み、t≧tr−1およびn>t>tであるr番目の行まで以下同様になるようになっていることと、
前記読み取りストライプが少なくとも1つの消去されたページを含み、前記行のうちの1行が多くてもt個の消去を含み、r−k(k=1〜r−2の整数)個の残りの行のうちの1行が多くてもtr−個の消去を含み、最後の残りの行がt個の消去を含むと決定するまで、決定することと、
前記ページのブロックならびに前記水平および垂直消去コードに応答して前記消去されたページを再構築することであって、前記再構築の結果、回復された読み取りストライプが得られること
を含む、方法。
【請求項14】
前記水平および垂直消去訂正コードのうちの少なくとも1つが最大距離分離可能コードである、請求項13記載の方法。
【請求項15】
が2に等しいかまたはtが3に等しい、請求項14記載の方法。
【請求項16】
ストレージ・アレイ内の消去を訂正するためのコンピュータ・プログラムであって、
請求項13ないし15のいずれかに記載のステップをコンピュータに実行させる、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、ストレージ・システムに関し、より具体的には、ストレージ・アレイ(storage array)のためのネストされた複数消去訂正コード(nestedmultiple erasure correcting code)に関する。
【背景技術】
【0002】
コンピュータ・システムは、ストレージ・デバイス上のデータの損失から保護するためにパリティ計算などのデータ冗長性方式を使用する。冗長ディスク・アレイ(RAID)システムでは、データ値および関連パリティ値がディスク・ドライブ全域にわたってストライピングされる。RAIDシステムは、典型的に、ハードディス・ドライブ(HDD)アレイに保管された情報を破局的ディスク障害から保護するために使用される。普及している2つのRAID方式は、単一の破局的ディスク障害から保護するRAID5と、二重の破局的ディスク障害から保護するRAID6である。
【0003】
フラッシュ・デバイスは、不揮発性ストレージ・デバイスの1つのタイプであって、大きいブロック単位で電気的に消去し再プログラムすることができるものである。HDDのように、フラッシュ・デバイスは、典型的に512バイトのセクタに媒体を分割する。フラッシュ・デバイスはさらに複数のセクタを集めてページを形成し、典型的に1ページあたり8つのセクタであり、それぞれのページが4000または4キロ(k)バイトを収容する。それぞれのセクタは、いくつかの誤り(典型的に単一ビット誤りであるが、バイト誤りなどのその他の可能性もあり得る)を訂正する誤り訂正コード(ECC)によって保護される。普及している選択肢の1つは、8ビット訂正または15ビット訂正BCHコードのようなBose−Chaudhuri−Hocquenghem(BCH)コードであるが、多くの変形例も可能である。HDDのように、フラッシュ・デバイス内のページではハード誤り(HE)が発生する可能性がある。これは、たとえば、ページの1つのセクにおけるBCHコードの誤り訂正能力を超えたときに発生する。HDDと比較すると、あるページがその書き込み持続存続期間の終わりに近づくにつれてまたはあるページがそのデータ保持存続期間の終わりに近づくにつれて、いずれの場合も、フラッシュ・デバイスの方がBCHコードの能力を超える可能性が高い。したがって、フラッシュ・デバイス内のHEの数は、時間の経過につれて増加すると予想することができ、デバイス上に潜在的HEが残る。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】1997年9月、Software, Practice& Experience、999〜1012、J.S.Plankによる「A Tutorial on Reed-Solomon Coding for Fault-Tolerance in RAID-likeSystems」
【非特許文献2】1993年、IEEE Transactions onInformation Theory、第39巻、66〜77ページ、M.Blaum他による「New Array Codes for Multiple Phased Burst Correction」
【発明の概要】
【発明が解決しようとする課題】
【0005】
フラッシュ・デバイスで構成されるアレイは、破局的デバイス障害とおそらくより優勢なHEとが結合した混合状態に遭遇する可能性がある。たとえば、フラッシュ・デバイスに保管された情報を保護するためにRAID5を使用すると、その結果、潜在的HEが存在するときにデバイス障害が発生する可能性がある。したがって、RAID5システム内のデバイスが破局的デバイス障害を経験し、他の何らかのデバイスのページにHEがある場合、このような事象が発生している行は情報を取り出すことができなくなる。RAID6は第2のデバイス全体をパリティに専念させる必要があり、支配的障害がHEであるときに費用がかかる。
【課題を解決するための手段】
【0006】
一実施形態はデータを保管するための方法である。この方法は書き込みデータを受信することを含む。書き込みデータは「r」行×「n」列のページに配列され、それぞれのページは複数のセクタを含む。書き込みデータは、そのページ上で複数の水平および垂直消去訂正コードを使用してコード化される。このコード化の結果、第1の行はt個のパリティ・ページを含み、t≧1であり、第2の行はt個のパリティ・ページを含み、t≧tであり、第3の行はt個のパリティ・ページを含み、t≧tであり、t個のパリティ・ページを含み、t≧tr−1およびn>t>tであるr番目の行まで以下同様になる。このコード化により、r行のうちの任意の1行でt個までの消去からの回復が可能になり、残りのr−1行のうちの任意の1行でtr−1個までの消去からの回復が可能になり、残りのr−2行のうちの任意の1行でtr−2個までの消去からの回復が可能になるなど、このコード化により、最後の残りの行でt個までの消去からの回復が可能になるようになっている。コード化された書き込みデータはこのコード化から出力される。コード化された書き込みデータは、ストレージ・アレイ内のn個のストレージ・デバイス全域にわたって書き込みストライプとして書き込まれる。
【0007】
他の実施形態はストレージ・アレイにデータを保管するためのシステムである。このシステムはストレージ・アレイとアレイ・コントローラとを含む。ストレージ・アレイは複数のストレージ・デバイスを含む。アレイ・コントローラは、書き込みデータを受信し、書き込みデータをr行×n列のページに配列するために構成される。アレイ・コントローラは、そのページ上で複数の水平および垂直消去訂正コードを使用して、書き込みデータをコード化する。このコード化の結果、第1の行はt個のパリティ・ページを含み、t≧1であり、第2の行はt個のパリティ・ページを含み、t≧tであり、第3の行はt個のパリティ・ページを含み、t≧tであり、t個のパリティ・ページを含み、t≧tr−1およびn>t>tであるr番目の行まで以下同様になる。このコード化により、r行のうちの任意の1行でt個までの消去からの回復が可能になり、残りのr−1行のうちの任意の1行でtr−1個までの消去からの回復が可能になり、残りのr−2行のうちの任意の1行でtr−2個までの消去からの回復が可能になるなど、このコード化により、最後の残りの行でt個までの消去からの回復が可能になるようになっている。コード化からの出力はコード化された書き込みデータを含む。アレイ・コントローラは、コード化された書き込みデータをストレージ・アレイ内のn個のストレージ・デバイス全域にわたって書き込みストライプとして書き込む。
【0008】
他の実施形態はストレージ・アレイにデータを保管するためのコンピュータ・プログラム製品(computer program product)である。このコンピュータ・プログラム製品は、それによりコンピュータ可読プログラム・コードが実施されているコンピュータ可読記憶媒体を含む。このコンピュータ可読プログラム・コードは、書き込みデータを受信し、書き込みデータをr行×n列のページに配列するために構成されたコンピュータ可読プログラム・コードを含む。このプログラム・コードは、そのページ上で複数の水平および垂直消去訂正コードを使用して、書き込みデータをコード化するためにさらに構成される。第1の行はt個のパリティ・ページを含み、t≧1であり、第2の行はt個のパリティ・ページを含み、t≧tであり、第3の行はt個のパリティ・ページを含み、t≧tであり、t個のパリティ・ページを含み、t≧tr−1およびn>t>tであるr番目の行まで以下同様であり、このコード化により、r行のうちの任意の1行でt個までの消去からの回復が可能になり、残りのr−1行のうちの任意の1行でtr−1個までの消去からの回復が可能になり、残りのr−2行のうちの任意の1行でtr−2個までの消去からの回復が可能になるなど、このコード化により、最後の残りの行でt個までの消去からの回復が可能になるようになっている。このプログラム・コードは、書き込みデータをストレージ・アレイ内のn個のストレージ・デバイス全域にわたって書き込みストライプとして書き込むためにさらに構成される。
【0009】
他の一実施形態はストレージ・アレイ内の消去を訂正するための方法である。この方法は複数のn個のストレージ・デバイスから読み取りストライプを受信することを含む。読み取りストライプはr行×n列に配列された複数ページのブロックを含み、それぞれの列はストレージ・デバイスの1つに対応する。ページはデータ・ページとパリティ・ページとを含む。パリティ・ページは複数の水平および垂直消去訂正コードを使用して生成され、第1の行はt個のパリティ・ページを含み、t≧1であり、第2の行はt個のパリティ・ページを含み、t≧tであり、第3の行はt個のパリティ・ページを含み、t≧tであり、t個のパリティ・ページを含み、t≧tr−1およびn>t>tであるr番目の行まで以下同様になるようになっている。この方法は、読み取りストライプが少なくとも1つの消去されたページを含み、その行のうちの1行が多くてもt個の消去を含み、r−1個の残りの行のうちの1行が多くてもtr−1個の消去を含み、r−2個の残りの行のうちの1行が多くてもtr−2個の消去を含むなど、最後の残りの行がt個の消去を含むと決定するまで、決定することも含む。消去されたページは、そのページのブロックならびに水平および垂直消去コードに応答して再構築される。再構築の結果、回復された読み取りストライプが得られる。
【0010】
他の一実施形態はストレージ・アレイ内の消去を訂正するためのコンピュータ・プログラム製品である。このコンピュータ・プログラム製品は、それによりコンピュータ可読プログラム・コードが実施されているコンピュータ可読記憶媒体を含む。このコンピュータ可読プログラム・コードは、複数のn個のストレージ・デバイスから読み取りストライプを受信するために構成されたコンピュータ可読プログラム・コードを含む。読み取りストライプはr行×n列に配列された複数ページのブロックを含み、それぞれの列はストレージ・デバイスの1つに対応する。ページはデータ・ページとパリティ・ページとを含む。パリティ・ページは複数の水平および垂直消去訂正コードを使用して生成され、第1の行はt個のパリティ・ページを含み、t≧1であり、第2の行はt個のパリティ・ページを含み、t≧tであり、第3の行はt個のパリティ・ページを含み、t≧tであり、t個のパリティ・ページを含み、t≧tr−1およびn>t>tであるr番目の行まで以下同様になるようになっている。この方法は、読み取りストライプが少なくとも1つの消去されたページを含み、その行のうちの1行が多くてもt個の消去を含み、r−1個の残りの行のうちの1行が多くてもtr−1個の消去を含み、r−2個の残りの行のうちの1行が多くてもtr−2個の消去を含むなど、最後の残りの行がt個の消去を含むと決定するまで、決定することも含む。消去されたページは、そのページのブロックならびに水平および垂直消去コードに応答して再構築される。再構築の結果、回復された読み取りストライプが得られる。
【0011】
追加の特徴および利点は本発明の技法により実現される。本発明のその他の諸実施形態および諸態様は、本明細書に詳細に記載され、請求された本発明の一部と見なされる。その利点および特徴とともに本発明をより適切に理解するために、以下の説明および図面を参照されたい。
【0012】
次に、例としてのみ、添付図面に関連して、本発明の諸実施形態について説明する。
【図面の簡単な説明】
【0013】
図1】一実施形態により複数消去訂正コードを提供するためのシステムのブロック図である。
図2】一実施形態によるストレージ・システムを示す図である。
図3】一実施形態によりコード化されたブロックの内容を示す図である。
図4】一実施形態により消去訂正を実行するためのプロセス・フローである。
図5】一実施形態により書き込みストライプをコード化するためのプロセス・フローである。
図6】一実施形態により読み取りストライプをデコードするためのプロセス・フローである。
【発明を実施するための形態】
【0014】
一実施形態では、ストレージ・システム内のデバイス障害とブロック障害の組み合わせとして発生するデータ損失から保護するために複数消去訂正コードを使用する。複数消去に耐えられるネストされた消去コードであって、1つの消去に耐えられる全体的な外部パリティを有するものが一実施形態によって使用される。ネストされたプロパティは、そのデータについて計算されるそれぞれの冗長性記号と、前に計算されたすべての冗長性記号によって特徴付けられる。単一のデバイスが故障した場合、本明細書に記載されている一実施形態はRAID6に匹敵する保護を提供するが、保管効率はRAID5に近くなる。
【0015】
本明細書で使用する「消去訂正」という用語は、その位置が分かっている誤りを訂正することを指している。消去訂正は「誤り訂正」とは異なり、本明細書で使用する「誤り訂正」はその位置が分かっていない誤りを訂正することを指している。消去を訂正するには、誤りを訂正するのに必要な冗長性の量の約半分を必要とする。本明細書で使用する「ハード誤り」または「HE」という用語は消去(すなわち、位置が分かっている誤り)を指している。
【0016】
Bose−Chaudhuri−Hocquenghem(BCH)コードなどの誤り訂正コード(ECC)は、フラッシュ・デバイスにおける生ビット誤り率(raw bit error rate)を訂正後により低いレベルに低減するのに役立つが、最終レベルは依然としてストレージ・システムに関するターゲット生ビット誤り率より高い可能性がある。たとえば、15ビット訂正BCHコードは、512バイト(B)セクタをデコードした後に、「.001」の生ビット誤り率を2.7e−9の生ビット誤り率に低下させることができる。しかし、この生ビット誤り率は、フラッシュ・デバイスにおけるHEの確率を表し、8e−14から8e−16に及ぶ可能性がある典型的なハードディスク・ドライブ(HDD)のものよりかなり高い。高い誤り率は、フラッシュ・デバイスにおいて書き込み持続の終わり近くならびにデータ保持存続期間の終わり近くに発生する可能性がある。
【0017】
ECCの誤り訂正能力を超えると、この事象は非常に高い確率で検出される。たとえば、15ビット訂正BCHコードが実現され、15個を超える誤りが発生した場合、BCHコード自体がこのような事象を検出する可能性が非常に高くなる。いずれの場合も、誤訂正(miscorrection)の確率が1e−26程度になることを保証するために、一般に巡回冗長コード(CRC)が追加される。BCHコードが誤訂正を検出し損なうことは、徴候的にHDDの書き込み脱落またはオフトラック書き込みと同等である。
【0018】
当技術分野で知られているものであれば、どのような複数消去訂正コードでも一実施形態によって使用することができる。一実施形態によって使用される複数消去コードの一例はリード−ソロモン(RS)コードである。RSコードは当技術分野で周知のものであり、複数の消去を訂正するために使用することができる。RSコードは記号に基づくものであり、その記号のサイズは適用例次第である。RAIDアーキテクチャに関連するRSコードに関するチュートリアルについては、1997年9月、Software, Practice & Experience、999〜1012、J.S.Plankによる「A Tutorial on Reed-SolomonCoding for Fault-Tolerance in RAID-like Systems」を参照されたい。
【0019】
複数の消去の訂正のための効率的なコードのもう1つの系列は、1993年、IEEETransactions on Information Theory、第39巻、66〜77ページ、M.Blaum他による「New Array Codes for Multiple Phased Burst Correction」に記載されている、Blaum−Roth 93(BR93)コードによって示される。BR93コードは、ガロア域演算を回避し、その代わりに排他的論理和(XOR)演算のみを実行することにより、RSコードより複雑ではなくなる傾向があるアレイ・コードである。
【0020】
RSおよびBR93コードはいずれも最大距離分離可能(MDS)コードであり、消去を訂正するために冗長性を最適利用することを意味する。RSおよびBR93コードは、本明細書に記載されている諸実施形態によって使用できる2つのタイプの複数消去訂正コードの例である。汎用型EVENODDコードまたは汎用型行対角コード(RDC:row diagonal code)など、他の系列のコードも実現できるので、諸実施形態はこの2つのコードに限定されない。
【0021】
図1は、一実施形態により複数消去訂正コードを使用して保護されるシステム100のブロック図を示している。図1に示されているように、ホスト・コンピュータ102は、ストレージ・システム110内のアレイ・コントローラ104と通信状態にある。ストレージ・システム110は、ストレージ・デバイス0 106a、ストレージ・デバイス1 106b、ストレージ・デバイス2 106c、・・・ストレージ・デバイスN−1 106dというN個のストレージ・デバイス106(ここでNは1より大きい)で構成されるストレージ・アレイ108にデータを保管する。一実施形態では、ホスト・データ(たとえば、データ・ビットとして表される)とともにパリティ・ビットがストレージ・デバイス106に保管される。一実施形態では、ストレージ・アレイ108内のストレージ・デバイス106がフラッシュ・デバイスによって実現される。一実施形態では、アレイは5個のフラッシュ・デバイスで構成され、それぞれのデバイスは32ギガバイト(G)の記憶容量を有する。
【0022】
図1に示されているように、アレイ・コントローラ104はストレージ・システム110の一部であり、他の実施形態では、アレイ・コントローラ104はホスト・コンピュータ102の一部である。
【0023】
図2は、一実施形態による図1のストレージ・システム110を示している。ストレージ・システム110は、当業者によって知られている受信機、送信機、およびクロックなど、多数のその他の要素を含むことができるが、明瞭にするためにこれらは示されていない。図2に示されているように、アレイ・コントローラ104はエンコーダ202とデコーダ204とを含む。エンコーダ202は、1つまたは複数の書き込みデータ・ページを(たとえば、ホスト・コンピュータ102から)受信し、データ・ページとパリティ・ページの両方を含む書き込みストライプを生成するための書き込みプロセス中に使用される。一実施形態では、書き込みストライプはストレージ・アレイ108に書き込まれ、ストレージ・アレイ108内の複数の行にわたる。デコーダ204は、1つまたは複数のデータ・ページをストレージ・アレイ108から読み取るための読み取りプロセス中に使用される。1つのページ内の1つまたは複数のHEが検出されると、デコーダは、ストレージ・アレイ108からHE(複数も可)が検出されているストライプ全体を読み取る。デコーダ204およびエンコーダ202はどちらも共用データ(たとえば、書き込みストライプを生成するためにエンコーダ202によって書き込みページに適用されたコード化のタイプを識別するためのデータ)にアクセスすることができる。読み取りストライプは、読み取りデータ・ページを生成するためにデコーダ204によって除去されるパリティ・ビットを含む。デコーダ204は、少なくとも1つのページの読み取り障害が発生したときに使用されるリコンストラクタ(reconstructor)206を含む。たとえば、1つのページの内部ECCの誤り訂正能力を超えたときに、読み取り障害が発生する。典型的に、誤っているページの位置は分かっており、したがって、誤り位置(たとえば、消去されたページ位置(複数も可))および読み取りストライプはリコンストラクタ206に送信され、これは消去されたページを取り出そうと試みる。
【0024】
図3は、複数のストレージ・デバイス106の全域で保管されるアレイの一部分(本明細書では「ストライプ」ともいう)であって、複数消去訂正コードを使用してエンコーダ202によってコード化することができるものの内容を描写している。本明細書で使用する「ページ」という用語はメモリ・セルのグループを指している。一実施形態では、1つのページは4Kバイトであるが、他の諸実施形態では他のページ・サイズも実現することができる。本明細書で使用する「コード化ストライプ」という用語は、まとまって書き込みストライプを構成するページのグループであって、1つの単位として複数消去訂正コードでコード化されるものを指している。本明細書で使用する「デコーディング・ストライプ」という用語は、まとまって読み取りストライプを構成するページのグループであって、1つの単位として複数消去訂正コードでデコードされるものを指している。
【0025】
図3に描写されているストライプは、3行×5列に配列されたページのブロックを含む。一実施形態では、それぞれの列はストレージ・デバイスの一部分を表している。図3に描写されているストライプでは、それぞれの位置はフラッシュ・メモリ・デバイス内の1つのページを表している。図3に示されているように、4つのページはパリティ・ビットを含むパリティ・ページ(p04、p14、p24、およびp23と表示されているページ)であり、残りのページはデータ・ビットを含むデータ・ページ(a00、a10、a20、a01、a11、a21、a02、a12、a22、a03、およびa13と表示されているページ)である。ページ読み取り障害が発生していることを検出し、任意の消去位置を識別するために、ECC(たとえば、BCH)またはCRCが使用されると想定する。本明細書に記載されている諸実施形態では、このような読み取り障害を識別するために使用される方法にかかわらず、読み取り障害が報告されていると想定している。
【0026】
以下に記述する図3のストライプにおけるデータ・ページおよびパリティ・ページの配列は、残りの1行の2つのHEとともに、任意の2行の最高1つのHEの回復を可能にする。ストライプ内の任意の4つのHEの回復を可能にする4消去訂正コードを使用することもできるが、ここでは例のためにのみ3行ストライプが示されているので、複雑さが増すことになる。適用例における典型的なストライプは16行または32行を必要とする。
【0027】
パリティ・ページの配置は訂正ストライプごとに様々になる可能性がある。パリティ・ページはストライプ内のどこにでも配置することができるが、一般に、ボトルネック効果を回避するためにストライプごとに異なるデバイスに配置することが好ましい。1つのストライプ内の行および列の数は任意のものにすることができるので、図3に描写されているストライプはストライプ例の例示に過ぎない。加えて、パリティ・ページの配置は任意のものであり、図3に示されているもの以外の位置に配置することもできる。さらに、パリティ・ページの数は必要な回復次第で様々になる可能性がある。図3のストライプは、ストレージ・デバイスのサイズ次第で、垂直に非限定的に繰り返すことができる。たとえば、ストレージ・デバイスが32Gのフラッシュ・デバイスであり、行数が16に等しい場合、コード化ストライプは500,000回繰り返される。
【0028】
一実施形態では、デコーダ204は、図3に示されているようにコード化されているストレージ・アレイ108からページHEを経験している読み取りストライプを受信する。一例として、ページa01、a11、およびa21に対応する第2のストレージ・デバイスに破局的障害が発生しており、追加のHEがページa13で発生していると想定する。これら4つのページ消去は、以下に記述するデコード方式とともに図3に示されているストライプ構成を使用して回復することができる。一実施形態では、デコーダ204に位置するリコンストラクタ206によって回復が実行される。
【0029】
図4は、一実施形態によりデコーダ204によって実現されるプロセス・フローを描写している。ブロック402では、ECCあるいはCRCまたはその両方が、ページ読み取りが失敗したことを検出する。ブロック404では、読み取りページが失敗したページを含むストライプ内のすべてのページを読み取るための要求が送信される。ブロック406では、読み取りが失敗したページ(複数も可)の位置(複数も可)(すなわち、消去されたページ位置(複数も可))とともに読み取りストライプがリコンストラクタ206に送信される。ブロック408では、読み取りストライプ内の消去されたページ位置の数がこの方式の消去訂正能力を超えるかどうかが判断される。たとえば、1行が3つの消去を含む場合、この方式の消去訂正能力を超える。図3の例では、これは、2つの行がそれぞれ2つの消去を含む場合にも発生する。ブロック408で、読み取りストライプ内の消去されたページ位置の数がこの方式の能力を超えると判断された場合、誤り状態をデコーダ204に返すためのブロック414が実行される。ブロック408で、消去されたページ位置の数がこの方式の能力の範囲内であると判断された場合、ブロック410が実行される。ブロック410では、本明細書で後述するように、消去訂正コードを伴う方式を使用して、読み取りストライプが再構築される。ブロック412では、リコンストラクタ206は、回復された読み取りページを含む、回復された読み取りストライプをデコーダ204に出力する。
【0030】
図5は、一実施形態により書き込みストライプをコード化するためのプロセス・フローである。一実施形態では、図5に描写されているプロセス・フローがエンコーダ202によって実行される。図3の1つ(アレイは3行を有し、2行は1つの消去について訂正することができ、1行は2つの消去について訂正することができる)として(1,1,2)消去訂正方式に関連して説明するが、その他の消去訂正方式を対象として含むように拡張することもできる。ブロック502では、「n」列(たとえば、フラッシュ・デバイス)、「r」行が存在し、「L」行が最高2つの消去について訂正される能力を有すると想定する。加えて、最初の「n−2」列および(n−1)番目の列の最初の「r−L」ページがデータを含むと想定する。このアレイ内のページの残りはブランクであり、パリティ・ページを含むことになる。
【0031】
図3の例では、5列(n=5)、3行(r=3)、およびL=1が存在する。データ・ページは「a」、パリティ・ページは「p」、未使用ページは「b」、一時ページは「q」または「c」として表される。それぞれのページ・タイプの隣の下付き文字はアレイ内のページの位置を表している(たとえば、「a00」は行列内の行0、列0にあるデータ・ページである)。記号「+」はXOR演算を表している。この実施形態のコード化により、これらの行のうちの任意の2行の1つの障害と残りの1行の2つの障害からの回復が可能になる。以下に示す説明では、一実施形態によりデータ・ページからパリティ・ページを入手する1つの方法を示している。以下のアレイは11個のデータ・ページの位置を示している。
【表1】
【0032】
ブロック504では、単一パリティを使用して、最初の「r−L」行がコード化される。その結果は、最後の列の最初の「r−L」ページに書き込まれる。
【0033】
この実施形態では、単一パリティを使用して、最初の2行のパリティが得られる。一実施形態では、第1の行のデータ・ページのXORを取ってp04を入手し、第2の行のデータ・ページのXORを取ってp14を入手することにより、そのパリティが得られる。
【表2】
【0034】
ブロック506では、2つの補助列(auxiliary column)qを入手するために、グローバル・パリティ(global parity)を有する2消去訂正コードを使用して、R行がコード化される。グローバル・パリティを有する消去訂正コードを構築する方法の一実施形態については本明細書で後述する。
【0035】
最初の2(一般に、r−L)行では、前述の2消去訂正コードの第1のパリティ記号を計算することで十分である。このような2消去訂正コードの第1のパリティ記号は、第1の行のq03、第2の行のq13、および第3の行のq23によって示される。
【表3】
【0036】
ブロック508では、「(n−1)番目」の列の「r−L」個のデータ・ページと第1の補助列qの最初の「r−L」個のページとのXORが取られる。本明細書に記載されているケースでは、r−L=2であり、そのXORはa03+q03およびa13+q13である。
【0037】
補助列を使用してa03+q03およびa13+q13を計算するが、ここでa03およびa13は前のアレイに示されているデータ・ページである。
【表4】
【0038】
ブロック510では、L消去訂正コードを使用して、これらの「r−L」個のページがコード化される。
【0039】
したがって、この実施形態では、1消去訂正垂直コード(すなわち、単一パリティ)を使用して、補助列の最初の2つの要素のXORとしてc23が計算される。
【表5】
【0040】
ブロック512では、ブロック510からのL個のパリティ・ページと、ブロック506で得られた両方の列の最後のL個のページとのXORが取られる。そのXORの結果は、ブロック502の元のアレイの最後の2列の最後の「L」個のページに書き込まれる。
【0041】
したがって、この実施形態では、一番下の行のパリティが以下に示すように得られる。
【表6】
【0042】
これでコード化を完了し、結果として得られるアレイは以下に示す通りである。
【表7】
【0043】
結果として得られるコードはそれぞれの行が単一パリティを有するという点でRAID5と同様であり、それぞれの行の多くても1つの項目が消去される場合にRAID5を使用することができる。上記の実施形態では、3行および5列によるコード化の方法の1つを例示している。最初の2行は1つのパリティ・ページのみを伝達し、第3の行は2つのパリティ・ページを伝達し、したがって、指定1(第1の行は1パリティ)、1(第2の行は1パリティ)、2(第3の行は2パリティ)になる。
【0044】
要約すると、上記のアレイは、「r」行(r=3)×「n」列(n=5)のページを含む。それぞれの行は「t」個のパリティ・ページを有し、ここでt>=1である。第1の行は1つのパリティ・ページを含み(t=1)、第2の行は1つのパリティ・ページを含み(t=1)、第3の行は2つのパリティ・ページを含む(t=2)。このコード化により、3行のうちの任意の1行から2(t)個までの消去を回復することができ、残りの2行のそれぞれから1(t,t)個までの消去を回復することができる。
【0045】
一般に、諸実施形態は(1,1,...,1,2,2,...2)方式を有することサポートし、行数は2の数と同様に任意のものである。最後の行の最後の列を計算するときに垂直L消去訂正コードを使用してパリティを入手することを除いては、この一般的なケース(L個の2を有する)のコード化は(1,1,2)のケースの1と同様である。このようなコードは独立しており、水平コードとは異なる可能性があり、その選択肢は選択された特定の適用例によって決まる。以下の一実施形態は(1,1,2,2)コードの一実施形態を示している。
【0046】
また、以下の一実施形態に示されているように、この構造は、1つの消去を含む1行、2つの消去を含む1行、および3つの消去を含む第3の行をサポートする(1,2,3)などの他のパラメータに拡張することができる。
【0047】
図6は、一実施形態により書き込みストライプをデコードするためのプロセス・フローである。一実施形態では、図6に描写されているプロセスがデコーダ204によって実行される。図6のプロセス・フローは(1,1,2)消去訂正コードに関連して説明するが、その他の消去訂正コードを対象として含むように拡張することもできる。ブロック602では、2つの消去を含む多くても「L」行が存在し、残りの行は多くても1つの消去を含むと想定する。
【0048】
以下のアレイ実施形態に示されているように、第1および第3の行では1つの消去が行われ(すなわち、そのページ上のデータが脱落している)、第2の行では2つの消去が行われている。i番目の行およびj番目の列の消去はeijによって示される。
【表8】
【0049】
ブロック604では、RAID5のように単一パリティを使用して、多くても1つの消去を含む行が訂正され、すなわち、対応する行の残りのページのXORを取ることにより、消去されたページが回復される。
【0050】
したがって、このアレイ例を参照すると、第1の行のデータ脱落は第1の行の残存ページのXORを取ることによって回復され、第3の行のデータ脱落は第3の行の残存ページのXORを取ることによって回復される。これが可能であるのは、p04がa00、a01、a02、およびa03のXORであるという特性を有し、p24がa20、a21、a22、およびa23のXORであるという特性を有するからである。この結果、以下のアレイが得られる。
【表9】
【0051】
ブロック606では、この時点で消去なしである少なくとも「r−L」行のq個のパリティは、二重消去訂正コードを使用して計算される。
【0052】
したがって、この実施形態を参照すると、第1および第3の行の2消去訂正コードの第1のパリティ・ページが得られる(q03およびq23)。
【表10】
【0053】
ブロック608では、少なくとも「r−L」の消去なし行の「(n−1)番目」の列のページと、ブロック606で得られた第1の列qとのXORが取られる。
【0054】
したがって、この実施形態を参照すると、a03+q03およびp23+q23が得られる。前述の通り、p23+q23=c23である。
【表11】
【0055】
ブロック610では、垂直L消去訂正コードを使用して、ブロック608の列で脱落している多くてもL個のページが取り出される。
【0056】
この実施形態では、以下に示すように、垂直1消去訂正コードを使用して、第2の垂直記号が得られる。
【表12】
【0057】
ブロック612では、二重消去訂正コードに対応するq個の項目を入手するために、ブロック610からのページと、2つの消去を有する行の最後の2列のページとのXORが取られる。
【0058】
したがって、この実施形態では、q14がq14=(a13+q13)+p14として得られる。
【表13】
【0059】
ブロック614では、二重消去訂正コードを使用して、2つの消去を含む多くてもL行が訂正される。
【0060】
この実施形態では、以下の右側に示されている行を使用する2消去訂正コードを使用して、第2の行の消去されたページが回復される。
【表14】
【0061】
2消去訂正コードを適用した結果は以下に示す通りである。
【表15】
【0062】
ブロック616では、ブロック610で得られたページとともに2つの消去を含む少なくともL行のデコードで得られた第1の列qと、ブロック614で生成されたページとのXORが取られる。
【0063】
この実施形態を参照すると、a13+q13とq13とのXORを取ることにより、a13が得られる。
【表16】
【0064】
以下のアレイに示されているように、デコードが完了する。
【表17】
【0065】
(1,1,2,2)コード化プロセスの実施形態
この実施形態では、5列(n=5)および4行(r=4)が存在する。データ・ページは「a」、パリティ・ページは「p」、未使用ページは「b」、一時ページは「q」または「c」として表される。それぞれのページ・タイプの隣の下付き文字はアレイ内のページの位置を表している(たとえば、「a00」は行列内の行0、列0にあるデータ・ページである)。以下のアレイは14個のデータ・ページの位置を示している。
【表18】
【0066】
単一パリティを使用して、最初の2行のパリティが得られる。一実施形態では、第1の行のデータ・ページのXORを取ってp04を入手し、第2の行のデータ・ページのXORを取ってp14を入手することにより、そのパリティが得られる。
【表19】
【0067】
次に、このアレイの最初の3(一般に、n−2)列について考慮する。その行のページのXORを取ることによりゼロ・ページが得られるように、全体的なパリティ・チェックを有する2消去訂正コードを使用して、最後の2行がコード化される(たとえば、後述するDiREコード)。最初の2行では、前述の2消去訂正コードの第1のパリティ記号を計算することで十分である。
【表20】
【0068】
補助列を使用してa03+q03およびa13+q13を計算するが、ここでa03およびa13は前のアレイに示されているデータ・ページである。
【表21】
【0069】
次に、2消去訂正垂直コードを使用して、補助列の最初の2つの項目からc23およびc33が計算される。
【表22】
【0070】
一番下から2行分のパリティが以下に示すように得られる。
【表23】
【0071】
これでコード化を完了し、結果として得られるアレイは以下に示す通りである。
【表24】
【0072】
要約すると、上記のアレイは、r行(r=4)×n列(n=5)のページを含む。それぞれの行はt個のパリティ・ページを有し、ここでt>=1である。第1の行はt個のパリティ・ページを含み(t=1)、第2の行はt個のパリティ・ページを含み(t=1)、第3の行はt個のパリティ・ページを含み(t=2)、第4の行はt個のパリティ・ページを含む(t=2)。このコード化により、4行のうちの任意の2行から2個までの消去を回復することができ、残りの2行から1個までの消去を回復することができる。
【0073】
(1,1,2,2)デコード・プロセスの実施形態
この実施形態では、5列(n=5)および4行(r=4)が存在する。データ・ページは「a」、パリティ・ページは「p」、消去されたページは「e」、未使用ページは「b」、一時ページは「q」または「c」として表される。以下のアレイに示されているように、第1および第3の行では1つの消去が行われ(すなわち、そのページ上のデータが脱落している)、第2および第4の行では2つの消去が行われている。
【表25】
【0074】
まず、第1の行の残存ページのXORを取ることにより、第1の行の脱落ページが回復され、第3の行の残存ページのXORを取ることにより、第3の行の脱落ページが回復される。この結果、以下のアレイが得られる。
【表26】
【0075】
次に、第1および第3の行の2消去訂正コードの第1のパリティ・ページが得られる(q03およびq23)。
【表27】
【0076】
次に、a03+q03およびp23+q23が得られる。前述の通り、p23+q23=c23である。
【表28】
【0077】
以下に示すように、垂直2消去訂正コードを使用して、第2および第4の垂直記号が得られる。
【表29】
【0078】
次に、q14がq14=(a13+q13)+p14として得られ、q34がq34=c33+p34として得られる。
【表30】
【0079】
以下の右側に示されている行を使用する2消去訂正コードを使用して、それぞれの行の2つの消去されたページが回復され、ここで、q33がq33=p33+c33として得られる。
【表31】
【0080】
2消去訂正コードを適用した結果は以下に示す通りである。
【表32】
【0081】
次に、q13とa13+q13とのXORを取ることにより、a13が得られる。
【表33】
【0082】
以下のアレイに示されているように、デコードが完了する。
【表34】
【0083】
(1,2,3)コード化プロセスの実施形態
この実施形態では、5列(n=5)および3行(r=3)が存在する。データ・ページは「a」、パリティ・ページは「p」、未使用ページは「b」、一時ページは「q」または「c」として表される。それぞれのページ・タイプの隣の下付き文字はアレイ内のページの位置を表している(たとえば、「a00」は行列内の行0、列0にあるデータ・ページである)。以下のアレイは9個のデータ・ページの位置を示している。
【表35】
【0084】
まず、水平3消去訂正コードを使用して、それぞれの行の最初の2つの項目がコード化され、次に、a02とp02とのXORが取られ、a12とp12とのXORが取られる。最終的に、q22は、a02+p02およびa12+p12について1つの消去を訂正する垂直コードのパリティになる。この結果、以下の第2のアレイが得られる。
【表36】
【0085】
次に、上記の水平3消去訂正コードを含む水平二重消去訂正コードを使用して、以下の第2のアレイ内のそれぞれの行に示されているqが得られる。この時点でそれぞれの行は2つまでの消去を訂正することができ、第2のアレイ内のそれぞれの列は1つの消去を訂正することができる。
【表37】
【0086】
上記のこの2つのアレイについてXORが取られ、以下の結果のアレイが得られるが、その行は2つの消去を訂正できるコードに含まれる。以下のアレイ内のそれぞれの行は、その線形性により、2つまでの消去を訂正することができ、cij=pij+qijと示す。
【表38】
【0087】
次に、以下の第2のアレイに示されているように、a03とr03とのXORが取られる。
【表39】
03+c03は二重消去訂正垂直コードを使用して垂直にコード化され、s13およびs23というラベルはこのような垂直コードに対応するパリティ・ページを示す。
【表40】
【0088】
次に、第1のアレイ内に2消去訂正コードを含む1消去訂正コードを使用して、第2のアレイ内のそれぞれの行がコード化される。したがって、第2のアレイ内のそれぞれの列は2つの消去を訂正することができ、それぞれの行は1つの消去を訂正することができる。
【表41】
【0089】
次に、これらのアレイについてXORが取られる。その結果の行は以下のアレイに示されるように1消去訂正コードにコード化され、ここで、tij=cij+sijになる。このアレイでは、それぞれの行は、線形性のために、1つの消去を訂正することができる。これでコード化を完了する。
【表42】
【0090】
(1,2,3)デコード・プロセスの実施形態
この実施形態では、第1の行に3つの消去、第2の行に1つの消去、第3の行に2つの消去が存在する。
【表43】
【0091】
まず、単一パリティを使用して、1つの消去のみを含む行(すなわち、第2の行)が訂正される。
【表44】
【0092】
次に、2消去訂正コードにより、第2の行の最初の3つの項目がコード化される。
【表45】
【0093】
これらのアレイの両方の中間行についてXORが取られる。したがって、tij+cij=sijになり、ここで、sijはコード化において上記で示された垂直2消去訂正コードの一部である。以下の第2のアレイに示されているように、このような2消去訂正コードを使用して、最後の2列が取り出される。
【表46】
【0094】
次に、これらのアレイのXORが取られ、その結果、以下のアレイが得られる。
【表47】
【0095】
この時点ですべての行は2つの消去を訂正することができる。したがって、最後の行を訂正することができ、その結果、以下に示すアレイが得られる。
【表48】
【0096】
以下の一番下のアレイに示されているように3つのパリティにより、アレイの最後の2行の最初の2つの項目がコード化される。
【表49】
【0097】
両方のアレイの最後の2行のXORが取られ、その結果、一番下にある以下のアレイが得られ、qij=cij+pijになる。
【表50】
【0098】
それぞれの列は1つの消去を訂正することができ、垂直コードを使用して、第2のアレイ内の一番上から3つの項目が取り出され、その結果、以下のアレイが得られる。
【表51】
【0099】
これらのアレイのXORが取られ、その結果、以下のアレイが得られ、そのそれぞれの行はこの時点で3消去訂正コードに含まれる。
【表52】
【0100】
次に、第1の行の3つの消去が訂正され、その結果、以下のアレイが得られる。
【表53】
【0101】
次に、すべての記号が回復される。第1のステップはこのアレイと上記のアレイとのXORを取ることである。両方のアレイは以下に示す通りである。
【表54】
【0102】
この結果、以下の第1のアレイが得られ、次に、そのアレイと上記のアレイから得られる一番下のアレイとのXORが取られる。
【表55】
【0103】
以下のアレイに示されるように、これでデコードを完了する。
【表56】
【0104】
上記の方式と同様の結果を得るためのもう1つの方法は、同じ量の冗長性を有するRSコードを使用することである。たとえば、上記の(1,1,2)方式の実施形態では、冗長性の総量は4ページである。アレイ内の任意の4つの消去されたページを訂正できる4つの冗長ページを含むリード−ソロモン(RS)コードを実現することは可能である。この観点から見ると、RSコードは本明細書に記載されているコードの諸実施形態より強力である。しかし、特に、この方式で比較的多数の行が存在する場合、典型的な実施形態では16行または32行が存在する場合に、RSコードの複雑さは本明細書に記載されている方式の諸実施形態よりかなり増している。通常使用では、本明細書に記載されている方式は非常にRAID5に類似した動作を行い、それぞれの行の1つの消去から回復する。1行に2つの消去という珍しい事象が発生した場合のみ、本明細書に記載されたコードの能力全体が呼び出される。これに対して、RSは、それぞれの障害ごとにコードの全長を使用する必要がある。このため、その実現例はあまり実用的ではなく、コード化およびデコード・プロセスが非常に複雑なものになる。
【0105】
技術的な効果および恩恵としては、冗長ディスク・アレイRAID6と同じ保護を提供できるが、保管効率はRAID5に近いものになることである。したがって、一実施形態を使用して、所与の量の冗長性についてストライプ障害に対する保護を最大限にすることができる。
【0106】
2つの消去を訂正し、全体的なパリティ・チェックを有する対角行コード化(DiRE:Diagonal-Row Encoding)コードのコード化の実施形態
(1,1,2)方式など、本明細書に記載されている方式は、最も長いコードがパリティ・チェック・コードである、ネストされたコードのシステムを含む。したがって、本明細書に記載されているコードは、全体的なパリティ・チェックを有し、より一般的には、ネスティング・プロパティを有する。特に、任意のコードワードのすべての要素のXORはゼロである。EVENODDまたはRDPなどの周知のアレイ・コードには全体的なパリティ・チェック記号がない。RDPはネストされるが、長い方のコード(対角パリティに基づく)はMDSではなく、したがって、本明細書に記載されているコードでは使用できない。
【0107】
後述する実施形態コードは、(Z−1)行×多くても(Z+1)列のアレイを含み、ここでzは素数である。以下の実施形態では、z=5である場合、アレイは4行×6列を含み、位置は以下のように指定される。一実施形態では、L00、L01、L02、L03、L04、およびL05は、6つの異なるストレージ・デバイス上に位置する6つの異なるページからのセグメントである。この実施形態に示されているように、L00、L10、L20、L30は同じページからのセグメントである。したがって、以下のアレイは6つのストレージ・デバイスのそれぞれからの1ページを表しており、それぞれのページは4つのセグメントに分割されている。最後の行(L4x)は、仮想行(imaginary row)であり、計算のみに使用される。
【表57】
【0108】
このアレイの以下の内容を想定するが、ここで値「b」は、その位置に現在、値がないことを示している。
【表58】
【0109】
まず、それぞれの対角線のパリティを計算すると、以下のアレイの値が得られる。L04は「1」に等しく、これはL40、L31、L22、およびL13によって形成される対角線のパリティである。L14は「0」に等しく、これはL41、L32、L23、およびL00によって形成される対角線のパリティである。L24は「1」に等しく、これはL42、L33、L10、およびL01によって形成される対角線のパリティである。L34は「0」に等しく、これはL43、L20、L11、およびL02によって形成される対角線のパリティである。L44は「1」に等しく、これはL30、L21、L12、およびL03によって形成される対角線のパリティである。
【表59】
【0110】
次に、パリティ列(列4)のそれぞれの要素と、列4の最後の位置の保管ビット、すなわち、L44=1とのXORが取られる。列4のそれぞれの要素と「1」とのXORを取ることにより、それぞれの対角線が奇数パリティを有する、以下のアレイが得られる。
【表60】
【0111】
次に、行のパリティ(この実施形態では常に偶数)を見つけることにより、以下のアレイに示されているように、コード化が完了する。
【表61】
【0112】
2消去DiREコードのパリティ・チェック行列の実施形態
BR93に教示されているように、f(x)=1+x+x+・・・+xz−1によって生成される環(ring)について考慮するが、ここでzは素数であり、αは回転モジュロ(rotationmodulo)f(x)とする。この場合、DiREコードに関するパリティ・チェック行列は以下のように示される。
【表62】
【0113】
f(x)によって生成された環においてパリティ・チェック行列Hによって定義されるコードは、z=5の場合に上記の実施形態に示されている記述と同等である。
【0114】
2消去のデコード: 第1のケース、最後の列の消去
このケースはコード化に類似しており、この実施形態は脱落している仮想項目に充填することから始まる。
【表63】
【0115】
その結果、以下のアレイが得られる。
【表64】
【0116】
次に、対角パリティ・コード化の逆を使用して、第3の列のデコードが実行される。この結果、以下のアレイが得られる。
【表65】
【0117】
回復された列(第3の列)の項目と、以下に示されているような第3の列の最後の項目とのXORが取られる。
【表66】
【0118】
この結果、以下のアレイが得られる。
【表67】
【0119】
以下のアレイに示されているように、水平パリティを計算することにより、デコードが完了する。
【表68】
【0120】
デコードされた値は、仮想行なしで、以下のアレイに示す通りである。
【表69】
【0121】
2消去のデコード: 第2のケース、最初のz列における2つの消去
この実施形態は脱落している仮想項目を0で充填することから始まる。
【表70】
【0122】
この結果、以下のアレイが得られる。
【表71】
【0123】
次に、最後の列のパリティが計算され、すなわち、最後の列の1の数が奇数である場合、パリティは1になり、このような数が偶数である場合、パリティは0になる。この場合、最後の列は3つの1を含み、したがって、最後の列のパリティは1になる。このパリティ値1は、以下に示されているようにアレイの最後の行に書き込まれる。
【表72】
【0124】
次に、対角パリティ・コード化の逆を使用して、第3の列のデコードが実行される。再帰は、消去された列の1つの最後の項目を通る対角線から始まり、水平に継続される。この結果、以下のアレイが得られる。
【表73】
【0125】
デコードされた値は、仮想行なしで、以下のアレイに示す通りである。
【表74】
【0126】
z=5の場合に3つの消去を訂正するDiREコードのコード化の実施形態
z=5である場合、アレイは4行×6列を含み、位置は以下のように指定される。最後の行(L4x)は、仮想行であり、計算のみに使用される。
【表75】
【0127】
このアレイの以下の内容を想定するが、ここで値「b」は、その位置に現在、値がないことを示している。
【表76】
【0128】
この実施形態では、第4の列を入手するために、傾斜2の線を使用する。まず、傾斜2の線のそれぞれのパリティを計算すると、以下のアレイの値が得られる。L03は「0」に等しく、これはL10、L41、およびL22によって形成される線のパリティである。L13は「0」に等しく、これはL20、L01、およびL32によって形成される線のパリティである。L23は「1」に等しく、これはL30、L11、およびL42によって形成される線のパリティである。L33は「1」に等しく、これはL40、L21、およびL02によって形成される線のパリティである。L43は「0」に等しく、これはL00、L31、およびL12によって形成される線のパリティである。結果のアレイは以下に示す通りである。
【表77】
【0129】
次に、第4の列のそれぞれの要素と、このような列の最後の位置の保管ビットとのXORが取られる。このようなビットは0であるので、その列は元のままである。以下のアレイは傾斜2の線による計算されたコード化を反映している。この実施形態では、傾斜2のそれぞれの線は偶数パリティを有する。
【表78】
【0130】
これで傾斜2の線のコード化を完了する。上記の前の実施形態のように最後の2列が得られるが、これはコードのネスト性を反映している。デコードされた値は、仮想行なしで、以下のアレイに示す通りである。
【表79】
【0131】
3つの消去をデコードするために、BR93で開発された再帰法を使用することができる。4つ以上の消去の場合、パリティ・チェック行列のネストされた表現が拡張される。しかし、4つ以上の消去の場合、コードは必ずしもすべての素数zについてMDSではない。いくつかの素数は、4つのパリティを含むMDSであるコードを提供する(すなわち、4つの消去を訂正することができる)が、いくつかの素数はそうではない。しかし、ほとんどの適用例では、3つのパリティで十分である。最終的に、ネストされた構造は、ガロア域GF(2)内の根であるαによって実施することができる。この場合、この構造は、有限体に関するRSコードのものと非常に似ている。コード化およびデコードは正規のRSコードのケースと同様であり、当業者であれば、ネストされたケースにおいてRS手順を容易に適用できるはずである。
【0132】
z=5の場合、DiREコードは6以下の長さを有する。それぞれのページは1キロバイト(K)のセグメントに分割することができ、それぞれの1Kセグメントはコードの細分性を規定する。しかし、適用例によっては、6つのデバイスでは少なすぎる場合があり、より長いコードを使用する必要がある可能性がある。典型的なページ・サイズは4Kであるので、細分性が2の累乗であることは都合のよいことであり、したがって、1に2の累乗が加えられると素数が得られると判断される。このような累乗の1つは素数z=17に対応する16である。この場合、18以下の長さのDiREコードが使用され、細分性は256バイト(B)のブロックによって示される。
【0133】
3消去DiREコードのパリティ・チェック行列の実施形態
3つの消去を訂正するDiREコードに関するパリティ・チェック行列は以下のように示される。
【表80】
【0134】
この行列を2消去コードのパリティ・チェック行列の上記の実施形態と比較すると、DiREコードのネストされた構造を理解することができる。実際に、そのパリティ・チェック行列の最後の2行は2つの消去を訂正するコードのパリティ・チェック行列に対応し、したがって、3消去訂正コードが2消去訂正コードにネストされる。同様に、2つの消去を訂正するDiREコードは単一パリティ・コードにネストされる。
【0135】
コード化式の実施形態
一実施形態は、(z−1)行×最大(z+1)列の寸法を有するアレイに適用され、zは素数である。この実施形態のコードは、最初のz−1列を最後の2列にコード化し、以下の特徴を有する。1.このコードはMDSであり、すなわち、消去された任意の2列を回復することができ、2.このコードはグローバル・パリティ・チェックを有し、すなわち、コード化された任意の行のXORは0であり、3.1および2の特徴の場合、コード化においてXORの数を最小限にし、4.デコードおよびコード化は簡単明瞭である(コード化はデコードの特別なケースである)。
【0136】
情報ページをai,j、0≦i、j≦z−2で示し、2つのパリティ列をpおよびq、0≦i≦z−2で示す。パリティ列を入手する方法を記述する際に以下の規則を使用する。すなわち、<m>=nはm≡n(mod z)を意味し、0≦n<zである(たとえば、<8>=3)。ここで、
S=az−2−j,jのXOR、j=0〜z−2
とする。
次に、0≦i≦z−2の場合、
=Sとa<i−j−1>z,jのXORとのXOR、j=0〜z−2およびj≠i
=pとai,jのXORとのXOR、j=0〜z−2
である。
【0137】
q列が全体的なパリティ列であることは注目に値する。
【0138】
したがって、上記のように、2つまでの消去からの回復を可能にするMDSコードを実現するために上記の計算が使用される。このMDSコードはそれぞれのページをz−1個のセグメント(zは素数である)に分割し、このコードの長さは多くてもz+1である。第1のパリティ・ページpは、(第1のデータ・ページ)XOR(第2のデータ・ページにαを掛けたもの)XOR(第3のデータ・ページにαを掛けたもの)XOR・・・(n−2のデータ・ページにαn−3を掛けたもの)として計算される。この実施形態では、αは次数z−1の上記の多項式の根である。第2のパリティ・ページqは、p XOR(第1のデータ・ページ)XOR(第2のデータ・ページ)XOR(第3のデータ・ページ)XOR・・・(n−2のデータ・ページ)として計算される。
【0139】
このコードは複数消去に拡張することができる。3つの消去の場合、このコードは引き続きMDSである。その他の場合、選択された素数によって決まる。たとえば、このコードが3つの消去を訂正できる場合、情報は最初のz−2列によって示され、ai,j、0≦i≦z−2、0≦j≦z−3であり、r、0≦i≦z−2とし、パリティ列z−2のページを示す。次に、rは以下のように得られる。ここで、
=a<−5−2j>z,jのXOR、j=0〜z−3
とする。
次に、0≦i≦z−2の場合、
=Sとa<i−4−2j>z,jのXORとのXOR、j=0〜z−3およびi≠<2j+3>
である。
【0140】
次の2列、pおよびq列は、c列が入手されると、以前のように入手される。
【0141】
したがって、上記のように、3つまでの消去からの回復を可能にするMDSコードを実現するために上記の計算が使用される。このMDSコードはそれぞれのページをz−1個のセグメント(zは素数である)に分割し、このコードの長さは多くてもz+1である。第1のパリティ・ページcは、(第1のデータ・ページ)XOR(第2のデータ・ページにαを掛けたもの)XOR(第3のデータ・ページにαを掛けたもの)XOR・・・(n−3のデータ・ページにα2(n−4)を掛けたもの)として計算される。この実施形態では、αは次数z−1の上記の多項式の根である。第2のパリティ・ページpは、(第1のデータ・ページ)XOR(第2のデータ・ページにαを掛けたもの)XOR(第3のデータ・ページにαを掛けたもの)XOR・・・(n−3のデータ・ページにαn−4を掛けたもの)XOR(第1のパリティ・ページにαn−3を掛けたもの)として計算される。第3のパリティ・ページqは、(第1のデータ・ページ)XOR(第2のデータ・ページ)XOR・・・(n−3のデータ・ページ)XOR(第1のパリティ・ページc)XOR(第2のパリティ・ページp)として計算される。
【0142】
デコード式の実施形態
この実施形態は2つの消去を処理するが、3つ以上の消去に拡張することもできる。この実施形態では、消去は列iおよびjで行われ、0≦i<j≦zである。0≦t≦z−2である場合、at,z−1=pおよびat,z=qとする。j=zおよびj<zという2つのケースを区別する。最初のケースj=zについて考慮する。ここで、
S=a<i−1−j>z,jのXOR、j=0〜z−2およびj≠i
とする。
次に、0≦t≦z−2の場合、
t,i=Sとa<t+i−j>z,jのXORとのXOR、j=0〜z−2、j≠i、およびj≠<t+i+1>
t,z=q=at,jのXOR、j=0〜z−1
である。
次に、j<zのケースについて考慮する。ここで、
S=at,zのXOR、t=0〜z−2
とする。
さらに、az−1,m=0、0≦m≦zとする。
次に、0≦L≦z−2の場合、以下の式を計算する。
<−(j−1)(L+1)−1>z,j=Sとa<−(j−1)(L+1)+j−t>z,tのXORとのXOR、t=0〜z−1およびt≠j
<−(j−1)(L+1)−1>z,j=a<−(j−1)(L+1)−1>z,tのXOR、t=0〜zおよびt≠j
【0143】
本明細書で使用する用語は、特定の実施形態のみを記述するためのものであって、本発明を限定するためのものではない。本明細書で使用する「a」、「an」、および「the」という単数形は、文脈が明らかにそうではない場合を示さない限り、複数形も含むためのものである。「comprises」あるいは「comprising」またはその両方の用語は、本明細書で使用する場合、所定の特徴、整数、ステップ、動作、要素、あるいはコンポーネント、またはこれらの組み合わせの存在を指定するが、1つまたは複数のその他の特徴、整数、ステップ、動作、要素、コンポーネント、あるいはそのグループ、またはこれらの組み合わせの存在または追加を排除しないことがさらに理解されるであろう。
【0144】
以下の特許請求の範囲内のすべての手段またはステップならびに機能要素に対応する構造、材料、行為、およびそれと同等のものは、具体的に請求されている他の請求要素と組み合わせてその機能を実行するための任意の構造、材料、または行為を含むためのものである。本発明の説明は、例示および解説のために提示されたものであり、網羅するためまたは開示された形式に本発明を限定するためのものではない。多くの変更および変形は、本発明の範囲および精神を逸脱せずに当業者にとって明白なものになる。この実施形態は、本発明の原理および実用的な適用例を最も良く説明するため、ならびにその他の当業者が企図された特定の用途に適した様々な変更を含む様々な実施形態について本発明を理解できるようにするために、選択され記載されたものである。
【0145】
さらに、当業者によって認識されるように、本発明の諸態様は、システム、方法、またはコンピュータ・プログラム製品として実施することができる。したがって、本発明の諸態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、またはソフトウェアとハードウェアの諸態様を組み合わせる実施形態の形を取ることができ、いずれも本明細書では一般に「回路」、「モジュール」、または「システム」と呼ぶことができる。さらに、本発明の諸態様は、そこにコンピュータ可読プログラム・コードが実施されている1つまたは複数のコンピュータ可読媒体に実施されたコンピュータ・プログラム製品の形を取ることができる。
【0146】
1つまたは複数のコンピュータ可読媒体の任意の組み合わせを使用することができる。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体にすることができる。コンピュータ可読記憶媒体は、たとえば、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、またはデバイス、あるいは上記のものの任意の適切な組み合わせにすることができるが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例(非網羅的リスト)としては、1つまたは複数のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラム可能読み取り専用メモリ(EPROMまたはフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD−ROM)、光学記憶装置、磁気記憶装置、あるいは上記のものの任意の適切な組み合わせを含むであろう。本明細書の文脈では、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを収容または保管することができる任意の有形媒体にすることができる。
【0147】
コンピュータ可読信号媒体は、たとえば、ベースバンド内でまたは搬送波の一部として、そこにコンピュータ可読プログラム・コードが実施されている伝搬データ信号を含むことができる。このような伝搬信号は、電磁、光、またはそれらの任意の適切な組み合わせを含むがこれらに限定されない様々な形のうちのいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体ではなく、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを通信、伝搬、または輸送することができる任意のコンピュータ可読媒体にすることができる。
【0148】
コンピュータ可読媒体上に実施されたプログラム・コードは、無線、有線、光ファイバ・ケーブル、RFなど、あるいは上記のものの任意の適切な組み合わせを含むがこれらに限定されない任意の適切な媒体を使用して伝送することができる。
【0149】
本発明の諸態様に関する動作を実行するためのコンピュータ・プログラム・コードは、Java、Smalltalk、C++などのオブジェクト指向プログラミング言語ならびに「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組み合わせで作成することができる。プログラム・コードは、完全にユーザのコンピュータ上で、一部分はユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして、一部分はユーザのコンピュータ上でしかも一部分はリモート・コンピュータ上で、あるいは完全にリモート・コンピュータまたはサーバ上で実行することができる。後者のシナリオでは、ローカル・エリア・ネットワーク(LAN)または広域ネットワーク(WAN)を含む任意のタイプのネットワークを介してリモート・コンピュータがユーザのコンピュータに接続される場合もあれば、(たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに接続が行われる場合もある。
【0150】
本発明の諸態様は、本発明の諸実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品の流れ図あるいはブロック図またはその両方に関連して上記で記載されている。流れ図あるいはブロック図またはその両方の各ブロックおよび流れ図あるいはブロック図またはその両方内の複数ブロックの組み合わせは、コンピュータ・プログラム命令によって実現可能であることが理解されるであろう。これらのコンピュータ・プログラム命令は、汎用コンピュータ、特殊目的コンピュータ、またはその他のプログラマブル・データ処理装置のプロセッサに提供し、コンピュータまたはその他のプログラマブル・データ処理装置のプロセッサにより実行された命令が流れ図あるいはブロック図またはその両方の1つまたは複数のブロックに指定された機能/行為を実現するための手段を作成するようなマシンを生産することができる。
【0151】
また、これらのコンピュータ・プログラム命令は、コンピュータ可読媒体に保管された命令が流れ図あるいはブロック図またはその両方の1つまたは複数のブロックに指定された機能/行為を実現する命令を含む装置(article of manufacture)を生産するような特定の方法で機能するよう、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイスに指示することができるコンピュータ可読媒体に保管することもできる。
【0152】
また、コンピュータ・プログラム命令は、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイス上にロードし、コンピュータまたはその他のプログラマブル装置上で実行された命令が流れ図あるいはブロック図またはその両方の1つまたは複数のブロックに指定された機能/行為を実現するためのプロセスを提供するようなコンピュータで実行されるプロセスを生産するように、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイス上で一連の動作ステップを実行させることもできる。
【0153】
図面内の流れ図およびブロック図は、本発明の様々な諸実施形態によるシステム、方法、およびコンピュータ・プログラム製品について可能な実現例のアーキテクチャ、機能、および動作を例示している。この点に関しては、流れ図またはブロック図内の各ブロックは、指定の論理機能(複数も可)を実現するための1つまたは複数の実行可能命令を含む、コードのモジュール、セグメント、または一部分を表すことができる。また、いくつかの代替実現例では、ブロック内に示された機能は図面内に示された順序から外れて行われる可能性があることにも留意されたい。たとえば、連続して示されている2つのブロックは、関係する機能次第で、実際にはほぼ同時に実行される場合もあれば、ときには逆の順序で実行される場合もある。また、ブロック図あるいは流れ図またはその両方の各ブロックおよびブロック図あるいは流れ図またはその両方内の複数ブロックの組み合わせは、指定の機能または行為を実行する特殊目的ハードウェアベースのシステムあるいは特殊目的ハードウェアとコンピュータ命令との組み合わせによって実現可能であることも留意されるであろう。
図1
図2
図3
図4
図5
図6