(57)【要約】【課題】メモリノードを相互に接続した構成において、効率的なデータ転送を可能とする。【解決手段】実施形態の記憶装置は、予め定められたサイズの記憶領域を複数含む記憶部を備え、２以上の異なる方向に相互に接続される複数のメモリノードを有する。複数のメモリノードは、２以上のメモリノードを備える２以上のグループを構成し、制御部は、記憶部へのデータの書き込み先を、記憶領域毎に異なるグループに順次割り当てる。【選択図】図８
2014137758.tif 000002
【特許請求の範囲】
【請求項１】
予め定められたサイズの記憶領域を複数含む記憶部を備え、２以上の異なる方向に相互に接続される複数のメモリノードと、
前記複数のメモリノードは、２以上のメモリノードを備える２以上のグループを構成し、前記記憶部へのデータの書き込み先を、前記記憶領域毎に異なる前記グループに順次割り当てる制御部と
を有する記憶装置。
【請求項２】
前記制御部は、さらに、
前記グループ内での前記書き込み先を、前記グループ内の複数の前記メモリノードが含む複数の前記記憶領域に順次割り当てる請求項１に記載の記憶装置。
【請求項３】
所定サイズのデータからパリティを生成するパリティ生成部をさらに有し、
前記制御部は、
論理アドレスが前記所定サイズのデータから生成された各パリティの書き込み先を、異なる前記メモリノードに割り当てる請求項１または請求項２に記載の記憶装置。
【請求項４】
前記制御部は、
前記複数のメモリノードについて互いに対応する前記記憶領域に対する前記書き込み先の割り当てが一巡した場合に、前記パリティの書き込み先の前記グループを切り替える請求項３に記載の記憶装置。
【請求項５】
前記制御部は、
前記パリティの前記書き込み先を、前記複数のグループに順次割り当てる請求項３に記載の記憶装置。
【請求項６】
前記制御部は、
前記複数のメモリノードを、２以上の方向に分割して前記複数のグループを生成する請求項１乃至請求項５の何れか１項に記載の記憶装置。
【請求項７】
前記複数のメモリノードのうちの第１のメモリノードは、
前記第１のメモリノードと接続され、かつ前記複数のメモリノードのうちの他のメモリノードの故障状態を検知して、検知結果を前記制御部に送信する検知部をさらに備える請求項１乃至請求項６の何れか１項に記載の記憶装置。
【請求項８】
前記メモリノードは、
前記記憶部から読み出されるデータに含まれる誤ビットを検出し、検出結果を、前記制御部から送信される読み出し命令および書き込み命令のうち少なくとも一方に対する結果に付加して前記制御部に送信する検出部をさらに備える請求項１乃至請求項７の何れか１項に記載の記憶装置。
【請求項９】
予め定められたサイズの記憶領域を複数含む記憶部を備え、２以上の異なる方向に相互に接続される複数のメモリノードが、２以上のメモリノードを備える２以上のグループを構成し、前記記憶部へのデータの書き込み先を、前記記憶領域毎に異なる前記グループに順次割り当てる制御ステップを有する記憶方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、記憶装置および記憶方法に関する。
【背景技術】
【０００２】
複数のハードディスク装置を備え、当該複数のハードディスク装置を１の記憶装置として扱って、データを当該複数のハードディスク装置に分散して格納するディスクアレイ装置が知られている。ハードディスク装置は、記憶媒体であるハードディスク上でヘッドを移動させて読み書きを行うため、シーケンシャルな書き込みを行うことで、ヘッドのシークタイムの短縮による読み出し時間の高速化が期待できる。
【０００３】
一方、それぞれ記憶素子およびデータ転送機能を有する複数のメモリノードを相互に接続することで、容量の拡張を容易としたストレージ装置が開発されている。各メモリノードは、自身のメモリノード宛のデータを受信した場合は、読み出しまたは書き込みなどの所定の処理を行う。また、各メモリノードは、自身のメモリノード宛ではないデータを受信した場合は、受信パケットを適切な他のメモリノードに転送する。各メモリノードによって適切な転送が繰り返されることにより、データは目的のメモリノードに到達できる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平７−２３４７６３号公報
【特許文献２】特開２０１２−１０３９２６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来技術によるディスクアレイ装置では、ハードディスク装置同士の物理的な配列が考慮されていなかった。そのため、従来技術によるディスクアレイ装置におけるアクセス制御をメモリノードを相互に接続して構成するストレージ装置にそのまま適用した場合、メモリノードに対するアクセスの集中によりデータの転送待機時間が延長され、スループットの低下を招くおそれがあるという問題点があった。
【０００６】
すなわち、メモリノードを相互に接続して構成するストレージ装置に対してハードディスク装置のシーケンシャルな書き込みをそのまま適用すると、１のメモリノードにアクセスが集中してデータの転送待機時間が発生し、読み出し効率が低下してしまう可能性がある。
【０００７】
本発明が解決しようとする課題は、メモリノードを相互に接続した構成において、効率的なデータ転送が可能な記憶装置および記憶方法を提供することにある。
【課題を解決するための手段】
【０００８】
実施形態の記憶装置は、予め定められたサイズの記憶領域を複数含む記憶部を備え、２以上の異なる方向に相互に接続される複数のメモリノードを有する。複数のメモリノードは、それぞれ２以上のメモリノードを備える２以上のグループを構成し、制御部は、記憶部へのデータの書き込み先を、記憶領域毎に異なるグループに順次割り当てる。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施形態に係る記憶装置の一例の構成を示すブロック図である。
【図２】図２は、実施形態に係るメモリノードの一例の構成を示すブロック図である。
【図３】図３は、実施形態に係る、複数のメモリノードを互いに異なる方向に分割して４のグループを形成した例を示す図である。
【図４】図４は、実施形態に係る、複数のメモリノードを同一の方向に分割して４のグループを形成した例を示す図である。
【図５】図５は、実施形態に係るメモリノードの構成を概略的に示す図である。
【図６】図６は、実施形態に係るメモリノードに書き込まれるデータの構成例を概略的に示す図である。
【図７】図７は、実施形態に係るシーケンシャル書き込みの例を示す図である。
【図８】図８は、実施形態による、各グループにおいて、１のページに書き込みを行う毎にメモリノードグループを変更する例を示す図である。
【図９】図９は、実施形態に係る、メモリノードグループ内でパリティを格納するメモリノードを選択する方法について説明するための図である。
【図１０】図１０は、実施形態に係る、サイクリック書き込み方式において、論理アドレスからメモリノードの物理アドレスとページアドレスとを決定する例を示す図である。
【図１１】図１１は、実施形態に係る、グループにおいて物理アドレスの増加方向を示す図である。
【図１２】図１２は、実施形態に係るメモリノードグループの位置関係を示す図である。
【図１３】図１３は、実施形態に係る、値γとデータおよびパリティとの対応例を示す図である。
【図１４】図１４は、実施形態に係る第１のデータ復元処理を説明するための概念図である。
【図１５】図１５は、実施形態に係る第１のデータ復元処理の一例を示すフローチャートである。
【図１６】図１６は、実施形態に係る第２のデータ復元処理を説明するための概念図である。
【図１７】図１７は、実施形態に係る第２のデータ復元処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
（実施形態に適用可能な構成）
以下、実施形態に係る記憶装置について説明する。図１は、実施形態に係る記憶装置１０の一例の構成を示す。記憶装置１０は、記憶機能およびデータ転送機能を有する複数のメモリノード１１を相互に接続した構成を備え、データ転送機能は、各メモリノード１１が効率的にデータパケットを転送する転送方式を備える。
【００１１】
図１において、記憶装置１０は、複数のメモリノード１１に対してデータが分散して格納される。図１の例では、各メモリノード１１は、矩形格子の格子点に配置される。格子点の座標を座標（ｘ，ｙ）で示し、格子点に配置されるメモリノード１１の物理アドレスは、当該格子点の座標と対応して物理アドレス（ｘD，ｙD）で示されるものとする。また、図１の例では、左上隅に位置するメモリノード１１が原点の物理アドレス（０，０）を有し、各メモリノード１１を横方向（Ｘ方向）および縦方向（Ｙ方向）に移動することで、物理アドレスが整数値で増減する。
【００１２】
各メモリノード１１は、それぞれ４の入力ポート１２および出力ポート１３を備え、隣接するメモリノード１１と、これら４の入力ポート１２および出力ポート１３を介して接続される。より具体的には、対向する２の隣接するメモリノード１１は、互いの入力ポート１２および出力ポート１３とを介して接続される。
【００１３】
また、各メモリノード１１は、２以上の異なる方向に隣接するメモリノード１１と接続される。例えば、図１において左上隅の物理アドレス（０，０）で示されるメモリノード１１は、Ｘ方向に隣接する物理アドレス（１，０）で表されるメモリノード１１と、Ｘ方向とは異なる方向であるＹ方向に隣接する物理アドレス（０，１）で表されるメモリノード１１と、それぞれ接続される。また、図１において物理アドレス（１，１）で表されるメモリノード１１は、互いに異なる４の方向に隣接する、物理アドレス（１，０）、（０，１）、（２，１）および（１，２）でそれぞれ示される４のメモリノード１１に接続される。
【００１４】
記憶装置１０は、パリティの計算とデータ読み書き命令の発行とを行う、少なくとも１のデータコントローラ１４を備える。データコントローラ１４は、入力ポート１２および出力ポート１３を介してメモリノード１１に接続される。このとき、メモリノード１１同士の通信規格とデータコントローラ１４の通信規格とが異なる場合は、両者の間にアダプタを設けてもよい。図１の例では、データコントローラ１４は、各メモリノード１１が配置される正方格子のｘ方向およびｙ方向それぞれの一方向の各端に、それぞれ接続されている。
【００１５】
各メモリノード１１に格納するためのデータは、例えば外部のホストコンピュータからこの記憶装置１０に供給され、図示されない選択回路に入力される。選択回路は、各データコントローラ１４の状態を調べ、処理に余裕があるデータコントローラ１４を選択して、当該データを転送する。
【００１６】
このように、実施形態に係る記憶装置１０は、複数のデータコントローラ１４と複数のメモリノード１１とから構成されているため、データの入り口とその間のデータ転送経路が複数存在することになり、故障耐性に対して有利である。すなわち、記憶装置１０は、メンテナンスの際や障害が発生した場合であっても、メンテナンスや障害箇所以外の転送経路を用いることが可能となり、動作の完全な停止が不要なシステムが実現される。さらに、記憶装置１０は、メモリノード１１やデータコントローラ１４といったモジュールを増やすだけでスケールアウト特性を達成でき、サーバを増やすという従来の方法と比較しても、手間が少なく低コストで実装可能である。
【００１７】
なお、各メモリノード１１は、記憶領域として複数のブロックを含み、各ブロックは、複数のページを含む。メモリノード１１に対するデータの書き込みは、ページ単位で行われる。また、メモリノード１１に対するデータの消去は、ブロック単位で行われる。以下では、説明のため、１のメモリノード１１が１のブロックを含み、１のブロックが４のページを含むものとする。
【００１８】
なお、図１では、各メモリノード１１が矩形格子の格子点に配置されるように示したが、各メモリノード１１の配置は、この例に限定されない。すなわち、格子の形状は、格子点に配置される各メモリノード１１が２以上の異なる方向に隣接するメモリノード１１と接続されればよく、例えば三角形、六角形などでもよい。また、図１では各メモリノード１１が２次元的に配置されているが、各メモリノード１１を３次元的に配置しても構わない。
【００１９】
図２は、実施形態に係るメモリノード１１の一例の構成を示す。メモリノード１１は、入力ポート１２および出力ポート１３に対応し、それぞれ４の入力ポートバッファ１２Ａおよび出力ポートバッファ１３Ａと、４のセレクタ１５とを有すると共に、パケットコントローラ１６と、メモリ１７と、メモリコントローラ１８と、ＭＰＵ(Micro-Processing  Unit)１９とを有する。
【００２０】
パケットコントローラ１６と、メモリコントローラ１８と、ＭＰＵ１９と、各入力ポートバッファ１２Ａとがローカルバス２０により互いに通信可能に接続される。また、メモリ１７は、メモリコントローラ１８を介してローカルバス２０に接続される。
【００２１】
各入力ポートバッファ１２Ａは、各入力ポート１２が接続される。なお、データは、所定サイズのパケットを単位として、各メモリノード１１間を転送される。パケットは、送信先アドレスおよび送信元アドレスを少なくとも含むヘッダ部と、データ部とを有する転送データの単位である。各出力ポートバッファ１３Ａは、各出力ポート１３が接続される。セレクタ１５は、それぞれ、パケットコントローラ１６からの制御信号に従い、各入力ポートバッファ１２Ａおよび各出力ポートバッファ１３Ａ間の接続を制御する。
【００２２】
このような構成において、入力ポート１２に入力されたパケットは、入力ポートバッファ１２Ａに一時的に記憶される。セレクタ１５は、入力ポートバッファ１２Ａからパケットが入力されると共に、パケットコントローラ１６から制御信号が入力される。セレクタ１５は、制御信号に従い、入力されたパケットから何れかのパケットを選択して出力ポートバッファ１３Ａに出力する。出力ポートバッファ１３Ａは、セレクタ１５から出力されたパケットを一時的に記憶すると共に、出力ポート１３に出力する。パケットコントローラ１６は、セレクタ１５の出力を制御する。
【００２３】
メモリ１７は、データを記憶する複数のメモリセルを有する記憶素子である。メモリ１７は、例えばＮＡＮＤ型フラッシュメモリや、ビットコストスケーラブルメモリ（ＢｉＣＳ）、磁気抵抗メモリ（ＭＲＡＭ）、相変化メモリ（ＰｃＲＡＭ）、抵抗変化型メモリ（ＲＲＡＭ（登録商標））等が挙げられる。メモリコントローラ１８は、メモリ１７への書き込み、読み出しおよび消去の動作を制御する。ＭＰＵ１９は、メモリノード１１内で必要な演算処理を行う。また、ＭＰＵは汎用的な演算処理にも利用可能だが、ＭＰＵの代わりに、特定の処理に特化した専用ハードウェアで構成しても構わない。
【００２４】
メモリノード１１が受信したパケットは、入力ポート１２を介して入力ポートバッファ１２Ａに格納される。パケットコントローラ１６は、パケットが含む送信先（宛先）アドレスと、そのメモリノード１１自身のアドレスの２つの情報に基づいて、受信したパケットが自メモリノード１１宛であるか否かを判定する。
【００２５】
若し、自メモリノード１１宛であると判定した場合、パケットコントローラ１６は、自メモリノード１１のメモリ１７に対する書き込み、読み出しおよびその他の処理のうち、指定された処理を行う。一方、受信したパケットが自メモリノード１１宛ではないと判定した場合、パケットコントローラ１６は、パケットの送信先アドレスの情報と自メモリノード１１のアドレスの情報とに基づいて、受信したパケットを転送する隣接するメモリノード１１を決定し、セレクタ１５に対して制御信号を送信する。セレクタ１５は、この制御信号に従い、対応する出力ポートバッファ１３Ａに当該パケットを出力する。
【００２６】
（実施形態に係るアドレス割当処理）
次に、実施形態についてより詳細に説明する。先ず、実施形態に適用可能な既存技術について、概略的に説明する。複数のハードディスク装置を備えるディスクアレイ装置におけるデータの分散格納方法の一つとして、複数のハードディスク装置を１の記憶装置として扱うことにより、アクセス処理のパフォーマンスや信頼性の向上を実現するＲＡＩＤ(Redundant  Array  of  Independent  Disks)と呼ばれる技術が知られている。
【００２７】
ＲＡＩＤは、レベル０〜６のレベルに分類され、レベル３〜６では、ディスク故障時にデータを回復するための冗長情報としてパリティを保持する。ＲＡＩＤは、ディスクアレイ装置において、論理アドレスに対応する物理アドレスと物理ページアドレスとを、複数のハードディスク装置の中からマッピングすることで実現される。
【００２８】
本実施形態では、上述した、相互に接続された複数のメモリノードを備える記憶装置１０において、ＲＡＩＤ（例えばＲＡＩＤレベル５）を適用する。すなわち、記憶装置１０は、所定量の入力データからパリティを生成し、入力データとパリティとを複数のメモリノード１１に対して分散して格納する。このとき、記憶装置１０は、複数のメモリノード１１を仮想的に複数のグループに分割し、分割した各グループに対して入力データとパリティとを分散させて格納する。すなわち、記憶装置１０が備える複数のメモリノード１１は、それぞれ所定数のメモリノード１１を備える２以上のグループを構成する。
【００２９】
図３および図４は、複数のメモリノード１１を相互に接続した記憶装置１０において、ＲＡＩＤを構成するメモリノード１１を選択する例を示す。以下、メモリノード１１の配列において、図中でＸ方向に並ぶメモリノード１１の個数を値ＮX、Ｙ方向に並ぶメモリノード１１の個数を値ＮYとする。さらに、ＲＡＩＤを構成するメモリノード１１の数を値（ＮR＋１）として、選択されたメモリノード１１に、分散ノード番号［ＮD0〜ＮDNR］を定義する。以下、分散ノード番号ＮDnが定義されたメモリノード１１を、選択メモリノードＮDxのように記述する。
【００３０】
この選択メモリノードＮDnにおいて、インデクス「ｎ」が、選択された各メモリノード１１に一意に付された番号であって、例えば、格子の左上隅からＸ方向に増加し、さらに、格子の上から下に向けて増加するものとする。
【００３１】
なお、ＲＡＩＤを構成するメモリノード１１とは、所定量のデータと、当該所定量のデータから生成されるパリティとがそれぞれ格納される各メモリノード１１をいう。例えば、１の論理アドレス（ＬＡ：Logical  Address）で示されるデータが２以上に分割され、分割されたデータそれぞれを用いて１のパリティが生成される。この分割された各データと、当該データから生成されたパリティとが、それぞれ異なるメモリノード１１に格納される。
【００３２】
以下では、説明のため、１の論理アドレスＬＡで示されるデータが、それぞれメモリノード１１の書き込み単位（例えばページ）のサイズを有する３のデータに分割され、この３のデータから、当該書き込み単位のサイズを有するパリティが生成されるものとする。すなわち、値ＮR＝３であり、ＲＡＩＤを構成するメモリノード１１の数は４個となる。また、１のＲＡＩＤを構成するメモリノード１１の集合を、メモリノードグループと呼ぶ。
【００３３】
図３および図４は、値ＮR＝３の場合におけるメモリノード１１の選択の例である。図３は、複数のメモリノード１１を互いに異なる方向に分割して４のグループを形成した例である。より具体的には、正方格子上に配列された複数のメモリノード１１を、Ｘ方向およびＹ方向にそれぞれ２分割し（以下、十字分割と呼ぶ）、４のグループ１０10、１０11、１０12および１０13を形成した例である。
【００３４】
また、図４は、複数のメモリノード１１を同一の方向に分割して４のグループを形成した例である。より具体的には、正方格子状に配列された複数のメモリノード１１を、Ｘ方向に向けて４分割し、Ｙ方向に４のグループ１０20、１０21、１０22および１０23を形成した例である。
【００３５】
図３および図４に示されるように各メモリノード１１を分割した配列から、それぞれ１つずつメモリノード１１を選択することで、ＲＡＩＤを構成するメモリノード１１を物理的に分散させることができる。
【００３６】
図３の例において、選択メモリノードＮD0の物理アドレスをアドレス（ｘD，ｙD）とすると、このアドレス（ｘD，ｙD）が示す位置のメモリノード１１を十字分割された配列の左上のグループ１０10から選択する場合、次式（１）の条件式を満たすことになる。
【数１】
2014137758.tif 000003
【００３７】
また、これにより、選択メモリノードＮD1〜ＮD3の物理アドレスは、それぞれ下記の式（２）、式（３）および式（４）として表される。
【数２】
2014137758.tif 000004
【数３】
2014137758.tif 000005
【数４】
2014137758.tif 000006
【００３８】
十字分割の場合、このように選択メモリノードＮD0を選択することで、ＲＡＩＤを構成するメモリノードグループを一意に決定することができる。
【００３９】
例えば、選択メモリノードＮD0としてメモリノード１１ａ0を選択した場合、上述の式（２）〜式（４）に従い、メモリノード１１ａ0と、メモリノード１１ａ1、１１ａ2および１１ａ3とによりＲＡＩＤを構成するメモリノード１１のグループが決定される。選択メモリノードＮD0としてメモリノード１１ｂやメモリノード１１ｃを選択した場合も同様にして、上述の式（２）〜式（４）に従い、ＲＡＩＤを構成するメモリノードグループが決定される。
【００４０】
図４の例において、選択メモリノードＮD0をＹ方向に４分割された配列の最上部のグループ１０20から選択する場合、次式（５）の条件式を満たすことになる。
【数５】
2014137758.tif 000007
【００４１】
これにより、選択メモリノードＮD1〜ＮD3の物理アドレスは、それぞれ下記の式（６）、式（７）および式（８）として表される。
【数６】
2014137758.tif 000008
【数７】
2014137758.tif 000009
【数８】
2014137758.tif 000010
【００４２】
すなわち、これは固定数での分割と考えられるので、それぞれ下記の式（９）、式（１０）および式（１１）を計算することで求められる。なお、演算子「Ｉｎｔｅｇｅｒ」は、整数部分を抽出することを示し、演算子「％」は、余剰演算子を示す。
【数９】
2014137758.tif 000011
【数１０】
2014137758.tif 000012
【数１１】
2014137758.tif 000013
【００４３】
図３および図４は、値ＮXおよび値ＮYが等しい値の偶数であり、メモリノード１１の配列がＸ方向およびＹ方向にそれぞれ対称である場合を示している。これに対して、値ＮXと値ＮYとが異なる場合は、例えば図３の十字分割の例では、十字に等しく４分割できない可能性がある。このような場合は、メモリノード１１の１または複数の行または列をスペアディスクとして用いることで、情報を書き込むメモリノード１１の対称性を確保できるが、容量効率低下のおそれがあり、適用の可能性に制限が生じる。
【００４４】
一方、複数のメモリノード１１の一方向への分割（図４参照）または固定数での分割は、メモリノード１１の配列が非対称である場合に、柔軟な対応が可能である。しかしながら、配列規模とＲＡＩＤを構成するメモリノード１１の数との組み合わせによっては、図４に例示されるように、１のメモリノードグループに属する各メモリノード１１が特定の列に偏ってしまう場合が発生する。メモリノードグループのように、一連のデータの読み出しまたは書き込みを行う複数のメモリノード１１が１列または１行に多く配置されるほど、データ転送の際に転送データが渋滞を起こす可能性が高くなる。
【００４５】
各メモリノード１１に対する物理アドレスマッピングの方法としては、図３のように異なる方向に分割する方法と、図４のように一方向に分割する方法との何れの方法も考えられる。何れの方法を選択するかは、上述したような、容量効率低下や渋滞発生可能性などの影響を考慮して決定することが好ましい。以下では、図３に示す、各メモリノード１１の物理アドレスマッピングを、配列の十字分割による行うものとして説明する。
【００４６】
次に、実施形態に係る、各メモリノード１１に対する物理アドレスマッピング方法について、より詳細に説明する。図５および図６は、以下の説明で用いるメモリノード１１の構成とデータ構成を概略的に示す。
【００４７】
図５は、メモリノード１１の構成を概略的に示す。上述したように、メモリノード１１は、データの消去単位であるブロックを複数含み、ブロックは、データの書き込み単位に対応する記憶領域であるページを複数含む。以下では、図５に例示されるように、メモリノード１１は、それぞれページアドレス＃０、＃１、＃２および＃３で示されるページＰａｇｅ＃０、＃１、＃２および＃３を有する１のブロックを含むものとする。また、記憶装置１０は、Ｘ方向に４、Ｙ方向に４の計１６のメモリノード１１を有し、値ＮX＝値ＮY＝４で配列を形成し、１６のメモリノード１１がそれぞれ４のメモリモード１１を含む４のグループに仮想的に分割されるものとする。このような構成において、各メモリノード１１に対して、各データと、データから生成されたパリティとを分散して格納する場合を考える。
【００４８】
図６は、メモリノード１１に書き込まれるデータの構成例を概略的に示す。データ３０は、ホストコンピュータ装置などの上位装置から記憶装置１０に転送されるデータの例を示す。各データは、論理アドレスＬＡを指定されて、上位装置から記憶装置１０に転送される。各データは、記憶装置１０に転送されると、図示されない選択回路を介して何れかのデータコントローラ１４に入力される。データコントローラ１４は、入力されたデータに基づきパリティ３１を生成する。
【００４９】
この例では、データコントローラ１４は、１の論理アドレスＬＡで示されるデータ３０をそれぞれページのサイズに等しいサイズの３のデータに分割し、この３分割されたデータから、同様にページのサイズに等しい１のパリティ３１を生成している。１の論理アドレスＬＡが示すデータ３０と、当該データ３０に対応するパリティ３１とで、メモリノードグループが形成される。
【００５０】
図７は、１のメモリノードグループのページが埋まるまで書き込みを続ける、シーケンシャル書き込みの例を示す。すなわち、シーケンシャル書き込みにおいては、１のメモリノードグループのデータまたはパリティが書き込まれたメモリノード１１のページに対して、当該ページが埋まるまで、他のメモリノードグループのデータおよびパリティを書き込む。
【００５１】
図７において、複数のメモリノード１１が４のグループ１０30、１０31、１０32および１０33に分割される。この例では、各グループ１０30〜１０33において、左上のメモリノード１１の各ページに対して、論理アドレスＬＡ＝０〜３のデータおよび当該データに対応するパリティＰ０〜Ｐ３が書き込まれている。
【００５２】
このシーケンシャル書き込みでは、例えばＨＤＤ(Hard  Disk  Drive)で構成されたストレージ装置の連続した論理アドレスＬＡのデータ読み出し（シーケンシャル読み出し）において、ヘッドのシークタイム短縮による読み出し時間の高速化が期待できる。
【００５３】
図８は、各グループ１０30〜１０33において、１のページにデータまたはパリティを書き込む毎に、メモリノードグループを変更する。すなわち、図８に示される方法では、データまたはパリティを１のページに書き込む毎に、グループ１０30〜１０33を順次変更している。また、各グループ１０30〜１０33内において、データまたはパリティをページに書き込むメモリノード１１を順次変更している。この図８に示される書き込み方法を、サイクリック書き込みと呼ぶ。
【００５４】
図８に例示されるサイクリック書き込みでは、論理アドレスＬＡ＝０のデータについて、分割した各データとパリティとを、各グループ１０30〜１０33の左上のメモリノード１１のページＰａｇｅ＃０に順次書き込む。次に、論理アドレスＬＡ＝１のデータについて、分割した各データとパリティとを、各グループ１０30〜１０33内で書き込み先のメモリノード１１を右上のメモリノード１１に切り替えて、ページＰａｇｅ＃０に順次書き込む。そして、論理アドレスＬＡ＝２、論理アドレスＬＡ＝３の各分割データおよびパリティが、グループ１０30〜１０33を順次変更されると共に、各グループ１０30〜１０33内で書き込み先のメモリノード１１を順次変更されて、ページＰａｇｅ＃０に順次書き込む。以下、各メモリノード１１の同一ページが全て書き込まれたら、ページアドレスが切り替えられる。つまり、論理アドレスＬＡ＝４の各分割データおよびパリティを、各グループ１０30〜１０33の左上のメモリノード１１のページＰａｇｅ＃１に順次書き込む。
【００５５】
このサイクリック書き込みでは、例えばＳＳＤ(Solid  State  Drive)で構成されたストレージ装置において、シーケンシャル読み出しの際でも、各メモリノード１１への並列アクセスによりアクセス集中が抑制され、読み出しの高効率化が期待できる。
【００５６】
各メモリノード１１に対する物理アドレスマッピングの方法は、上述に限られない。例えば、１のメモリノード１１の全ページではない複数ページを書き込む毎に、メモリノードグループを変更する方法が考えられる。この方法は、上述したシーケンシャル書き込みとサイクリック書き込みとを融合させた方法となる。何れの方法を用いて物理アドレスマッピングを行うかは、記憶装置１０の構成や使用環境などを考慮して選択するのが好ましい。以下では、サイクリック書き込みを採用した場合について述べる。
【００５７】
図９および上述した図８を用いて、ＲＡＩＤを構成するメモリノードグループ内でパリティＰ０〜Ｐ１５を格納するメモリノード１１を選択する方法について説明する。実施形態では、論理アドレスＬＡが互いに隣接するデータから生成された各パリティの書き込み先を、異なるメモリノード１１に割り当てるようにしている。
【００５８】
図９は、メモリノードグループが変更された際に、パリティを格納するメモリノード１１の分散ノード番号を変更する例を示す。図９において、同一のメモリノードグループの書き込みがなされるページに同一の斜線を付して示す。図９の例では、パリティＰ０を含むメモリノードグループについて、パリティＰ０が、選択メモリノードＮD0の分散ノード番号に従いグループ１０30に書き込まれる。次のパリティＰ１を含むメモリノードグループについて、パリティＰ１が、選択メモリノードＮD1の分散ノード番号に従いグループ１０31に書き込まれる。次のパリティＰ２を含むメモリノードグループについて、パリティＰ２が、選択メモリノードＮD2の分散ノード番号に従いグループ１０32に書き込まれる。さらに次のパリティＰ３を含むメモリノードグループについて、パリティＰ３が、選択メモリノードＮD3の分散ノード番号に従いグループ１０33に書き込まれる。
【００５９】
この方式では、メモリノードグループ内でパリティを格納するメモリノード１１が常に同じになる。ただし、同じメモリノード１１に全てのパリティを書き込むわけではないので、ＲＡＩＤレベル４のような性能劣化の問題は起こりにくい。一方で、データ更新が多い場合は、パリティ更新のためにパリティを格納するメモリノード１１への書き込みが頻発する。そのため、アクセスの集中により処理性能が劣化する可能性がある。さらに、書き込み回数が制限されるＮＡＮＤフラッシュのようなメモリで構成された場合、パリティを格納しているメモリノード１１が先に寿命を迎え、システムとしてメモリノード１１の交換までの運用期間が短いといった問題が起こりうる。
【００６０】
パリティを格納するメモリノード１１の分散ノード番号を「ＮDγ」とすると、インデクスγは、γ＝ＬＡ％(ＮR＋１)＝ＬＡ％４として選択することができる。
【００６１】
上述した図８は、全てのメモリノードグループが各メモリノード１１の同一ページに書き込まれ、ページアドレスが切り替えられた場合に、パリティを格納するメモリノード１１の分散ノード番号を変更する例を示す。換言すれば、図８に示す方法では、各メモリノード１１の同一ページ、すなわち、互いに位置が対応する記憶領域に対する全てのメモリノードグループのデータの割り当てが一巡した場合に、パリティの書き込み先のグループを切り替える。
【００６２】
図８の例では、パリティＰ０、Ｐ１、Ｐ２およびＰ３をそれぞれ含む各メモリノードグループの各パリティＰ０、Ｐ１、Ｐ２およびＰ３が、選択メモリノードＮD0の分散ノード番号に従いグループ１０30に書き込まれる。当該メモリノードグループの書き込みが完了すると、各メモリノード１１のページアドレスＰａｇｅ＃０のページ全てに書き込みがなされたので、次からの書き込みは、ページアドレスを切り替えて行われる。次のパリティＰ４、Ｐ５、Ｐ６およびＰ７を含む各メモリノードグループの各パリティＰ４、Ｐ５、Ｐ６およびＰ７が、選択メモリノードＮD1の分散ノード番号に従いグループ１０31に書き込まれる。このように、各メモリノード１１の同一ページアドレスのページ全てに書き込みがなされ、ページアドレスの切り替えがなされた場合に、パリティを書き込むメモリノード１１の分散ノード番号を切り替える。
【００６３】
この方式では、シーケンシャル読み出しにおいて、ページアドレスが変わるまで、パリティを格納するメモリノード１１以外の領域にアクセスが偏る。一方で、この方式では、パリティを格納するメモリノード１１が分散される。つまり、更新が多い場合でも、パリティの書き込み作業がメモリノード全体に分散されることになる。したがって、この図８に示す方式ならば、寿命のあるメモリで構成されたシステムであっても、図９の方式と比較して有利である。
【００６４】
パリティを格納するための選択メモリノードＮDγは、下記の式（１２）により決められる。
【数１２】
2014137758.tif 000014
【００６５】
図８および図９で示したパリティを格納するメモリノード１１の選択手法は、記憶装置１０を含むストレージ装置の構成や、データの読み出し方式を考慮して選択するのが好ましい。
【００６６】
以下では、図８に示した、サイクリック書き込みによりパリティを格納するメモリノードが分散されている場合について述べる。
【００６７】
図１０は、サイクリック書き込み方式において、論理アドレスＬＡからメモリノード１１の物理アドレス（ｘ，ｙ）とページアドレスＰとを決定する例を示す。図１１は、図１０に示される物理アドレス（ｘ，ｙ）の増加方向を示す。図１１の例では、値ＮX＝１２、値ＮY＝１２として配置された各メモリノード１１が十字分割され、グループ１０40、１０41、１０42および１０43が形成されている。例えばグループ１０40において、物理アドレス（ｘ，ｙ）は、Ｘ方向にメモリノード１１毎に増加し、さらに、Ｙ方向にメモリノード１１毎に増加する。
【００６８】
ＲＡＩＤを構成するメモリノードグループを決定する選択メモリノードＮD0〜ＮD3は、選択メモリノードＮD0の物理アドレス（ｘD，ｙD）から一意に決める事ができるので、選択メモリノードＮD0についてのみの議論で十分である。なお、各選択メモリノードＮD0〜ＮD3は、それぞれ各グループ１０40、１０41、１０42および１０43に含まれる。
【００６９】
図１０より、物理アドレス（ｘD，ｙD）における値ｘDは、［０，１，２，…，(ＮX／２)−１］を繰り返すので、ｘD＝ＬＡ％(ＮX／２)として求められる。値ｙDは、［０，１，２，…，(ＮX／２)−１］をそれぞれ(ＮX／２)回繰り返すので、次式（１３）により求められる。また、ページアドレスＰは、論理アドレスＬＡが値(ＮXＮY／４)増えるごとに１増えるので、次式（１４）により求められる。
【数１３】
2014137758.tif 000015
【数１４】
2014137758.tif 000016
【００７０】
図１２は、値ＮXおよび値ＮYが２の冪乗、値(ＮR＋１)が４の冪乗と仮定した場合のメモリノードグループの位置関係を示す。このとき、選択メモリノードＮD0の物理アドレスは、次式（１５）に示される範囲内に存在する。なお、図１２において、分散ノード番号を「Ｎｕｍ」、物理アドレスを「ＰＡ」として示している。
【数１５】
2014137758.tif 000017
【００７１】
なお、図１２における各値を一般化すると、値αおよび値βをそれぞれ式（１６）および式（１７）で示される範囲の整数値とすると、分散ノード番号「ＮDn」のインデクス「ｎ」がｎ＝(α＋１)(β＋１)−１となり、物理アドレスは、次式（１８）で表される。
【数１６】
2014137758.tif 000018
【数１７】
2014137758.tif 000019
【数１８】
2014137758.tif 000020
【００７２】
論理アドレスＬＡに従いメモリノードグループの中からパリティ格納用のメモリノード１１の分散ノード番号「ＮDγ」を選択するための一般式は、式（１９）として求められる。また、論理アドレスＬＡからメモリノードの物理アドレス(ｘD，ｙD)とページアドレスＰとを決定する一般式は、それぞれ式（２０）、式（２１）および式（２２）として示される。
【数１９】
2014137758.tif 000021
【数２０】
2014137758.tif 000022
【数２１】
2014137758.tif 000023
【数２２】
2014137758.tif 000024
【００７３】
次に、値ＮR＝３の場合において、ある論理アドレスＬＡにデータＤを書き込む場合の書き込み命令の例を示す。データＤは、書き込まれる単位（例えばページ）のサイズに分割される。ここでは、データＤは、値ＮRに従いデータｄ１、ｄ２およびｄ３に３分割される。また、これらデータｄ１、ｄ２およびｄ３の排他的論理和から、パリティｐを生成する。
【００７４】
図１３は、パリティｐを格納するメモリノード１１の分散ノード番号「ＮDn」を判定するための値γと、データｄ１〜ｄ３およびパリティｐとの対応例を示す。ここで、変数ａ、ｂ、ｃおよびｄは、各データを格納するための変数である。
【００７５】
以上の結果を用いて、論理アドレスＬＡのデータＤを記憶装置１０の各メモリノード１１に書き込むための書き込み命令Ｗｒｉｔｅは、例えば次式（２３）〜（２６）のように示される。
Ｗｒｉｔｅ［ｘD(ＬＡ)，ｙD(ＬＡ)，ＮD0，γ(ＬＡ)，Ｐ(ＬＡ)，ａ］    …（２３）
Ｗｒｉｔｅ［ｘD(ＬＡ)，ｙD(ＬＡ)，ＮD1，γ(ＬＡ)，Ｐ(ＬＡ)，ｂ］    …（２４）
Ｗｒｉｔｅ［ｘD(ＬＡ)，ｙD(ＬＡ)，ＮD2，γ(ＬＡ)，Ｐ(ＬＡ)，ｃ］    …（２５）
Ｗｒｉｔｅ［ｘD(ＬＡ)，ｙD(ＬＡ)，ＮD3，γ(ＬＡ)，Ｐ(ＬＡ)，ｄ］    …（２６）
【００７６】
なお、式（２３）〜式（２６）において、値γは、パリティ担当を判定するために導出した値であるので、パケットとして送信しなくてもよい。
【００７７】
書き込み時には、書き込み時の書き込み命令Ｗｒｉｔｅに対するメモリノード１１からの応答であるメッセージＲｅｐｌｙをデータコントローラ１４が受信した回数のカウントと、タイムアウト監視とによる故障判定を行うことが好ましい。
【００７８】
例えば、上述のようにＲＡＩＤが３のデータｄ１〜ｄ３と、１のパリティｐの４のデータから構成される場合、１の書き込み命令Ｗｒｉｔｅに対するメッセージＲｅｐｌｙの、タイムアウト期間内における受信回数のカウント値が４の場合は、書き込みが正常に行われたと判定できる。
【００７９】
一方、タイムアウト時にメッセージＲｅｐｌｙの受信回数のカウント値が３の場合は、ＲＡＩＤを構成する４のデータのうち１のデータの書き込みが正常に行われていないと判定できる。書き込みが正常に行われない要因としては、先ず、書き込みたいメモリノード１１の物理的な位置関係や、渋滞による寿命切れなどが考えられる。
【００８０】
これらの要因の場合は、同じメモリノード１１に対して各データの再書き込みを試み、当該メモリノード１１からのメッセージＲｅｐｌｙを受信するか否かを確認する。このとき、書き込み命令Ｗｒｉｔｅを発行したデータコントローラ１４と当該メモリノード１１との経路途中に物理的断線やノード異常が存在する場合も考えられる。そのため、データの再書き込みでは、書き込み命令Ｗｒｉｔｅを発行するデータコントローラ１４の位置や、当該メモリノード１１に対するデータ経路の方向を変えることが望ましい。
【００８１】
若し、データの再書き込みに対して１のメッセージＲｅｐｌｙが帰ってこない場合は、ＲＡＩＤによる回復でデータの読み出しは可能である。この場合は、エラー通知を行い、どのメモリノード１１が故障可能性があるかを出力することで早急なリビルドに繋がるシステムが望ましい。さらに、スペアのメモリノード１１を設けていれば、データをその領域に書き込んで退避させておくことでより信頼性を高められる。これに限らず、新たな論理アドレスＬＡに対して再度書き込み命令Ｗｒｉｔｅを発行することも有効である。
【００８２】
また、論理アドレスＬＡのデータＤを記憶装置１０の各メモリノード１１から読み出すための読み出し命令Ｒｅａｄは、例えば次式（２７）〜（３０）のように示される。なお、読み出し命令Ｒｅａｄにおいては、データ格納用の変数ａ〜ｄを省略することができる。
Ｒｅａｄ［ｘD(ＬＡ)，ｙD(ＬＡ)，ＮD0，γ(ＬＡ)，Ｐ(ＬＡ)，ａ］    …（２７）
Ｒｅａｄ［ｘD(ＬＡ)，ｙD(ＬＡ)，ＮD1，γ(ＬＡ)，Ｐ(ＬＡ)，ｂ］    …（２８）
Ｒｅａｄ［ｘD(ＬＡ)，ｙD(ＬＡ)，ＮD2，γ(ＬＡ)，Ｐ(ＬＡ)，ｃ］    …（２９）
Ｒｅａｄ［ｘD(ＬＡ)，ｙD(ＬＡ)，ＮD3，γ(ＬＡ)，Ｐ(ＬＡ)，ｄ］    …（３０）
【００８３】
なお、式（２７）〜式（３０）において、値γはパリティ担当を判定するために導出した値であるので、パケットとして送信しなくてもよい。また、変数ａ、ｂ、ｃおよびｄは、読み出したデータやパリティを格納するものなので、パケットとして送信しなくてもよい。
【００８４】
読み出しにおいても、書き込み時と同様に、タイムアウト監視による故障判定があると望ましい。
【００８５】
なお、読み出しは、データｄ１、ｄ２およびｄ３だけを読み出す第１の読み出し方法と、データｄ１、ｄ２およびｄ３とパリティｐとを読み出す第２の読み出し方法とが考えられる。
【００８６】
第１の読み出し方法では、パリティ読み出し用のパケット転送が不要となるため、渋滞発生率が下がりスループットが向上する可能性が考えられる。しかし、１のデータが読み出されないと分かった時点で初めてパリティの読み出し命令を実行するため、故障時の読み出しには余計に時間がかかってしまう可能性も考えられる。
【００８７】
一方で、第２の読み出し方法では、パリティｐを読み出すパケットが第１の読み出し方法に対して追加されることになるため、第１の読み出し方法よりもデータの渋滞発生率が高くなるおそれがある。また、１のデータが読み出されないことがわかった時点で、既にパリティｐの読み出し命令が並列に実行されており、ＲＡＩＤによるデータ回復を迅速に実行することが可能になることも考えられる。さらに、パリティｐを、同じメモリノードグループの他のデータｄ１〜ｄ３の何れか１よりも先に読み出せた場合には、メモリノードグループ内で読み出し済みの他の２つのデータを用いて、未だ読み出されていないデータを計算して当該データを読み出したと見做すことも考えられる。さらにまた、メモリノードグループの全てのデータｄ１〜ｄ３およびパリティｐがデータコントローラ１４に到着するまで待ち、パリティｐを用いてデータ整合性のチェックを行ってから、読み出されたデータｄ１〜ｄ３を出力することで信頼性を高めることも可能である。
【００８８】
これらの手法は、ユーザーが速度を重視するのか、安全を重視するのかに基づき選択することが望ましい。
【００８９】
（実施形態に適用可能な故障処理）
次に、実施形態による記憶装置１０に適用可能な故障検知およびデータ復元について説明する。記憶装置１０におけるメモリノード１１の故障判定は、データコントローラ１４が、メモリノード１１にアクセスした際のメッセージＲｅｐｌｙの受信回数のカウントと、データ誤りによる反転ビットの訂正回数のカウントとを行うことで実現できる。例えば、これらの各カウント値にそれぞれ閾値を設定し、少なくとも一方のカウント値が対応する閾値を超えた場合に、そのメモリノード１１に係るデータ転送が異常であると判定する。
【００９０】
図１に例示した記憶装置１０は、各メモリノード１１が４方向の経路を持つため、目的のメモリノード１１の１つの経路が断線していても、他の経路を通って目的のメモリノード１１にアクセスできる。そして処理完了すると、その合図としてメッセージＲｅｐｌｙを返答する。ＲＡＩＤで分割したデータに対する読み書き処理を行った場合は、ＲＡＩＤを構成するメモリノード１１からメッセージＲｅｐｌｙが戻ってくれば、全ての処理が成功したことを確認できる。ただし、アクセス渋滞が起こっている場合や４方向の経路が全て断線した場合は、寿命切れによりパケットが消えてしまうので、メッセージＲｅｐｌｙを受け取ることができない。このような場合は、メッセージＲｅｐｌｙの回数を数えることでシステムの状態が確認できるため、故障などの問題に即座に対応することができる。
【００９１】
また、メモリノード１１は、図示されないビジー(busy)伝送線路とエラー(error)伝送線路を有していてもかまわない。これにより隣接するメモリノード１１の状態を検知することができる。
【００９２】
入力ポートバッファ１２Ａが使用中の場合、使用中の入力ポートバッファ１２Ａに接続されているメモリノード１１は、パケットを送信することができない。そこで、使用中の入力ポートバッファ１２Ａに接続されているメモリノード１１対してビジー伝送線路を介してビジー信号を送り、パケット受信できない状態（ビジー状態）であることを通知する。
【００９３】
さらに、経路異常や物理アドレス不整合、メモリ１７へのアクセス不能な状態（エラー状態）になった場合には、隣接する全てのメモリノード１１に対してエラー伝送線路を介してエラー信号を送り、エラー状態を通知することができる。ただし、断線などの経路異常の場合は、経路異常を起こしている線路にのみ、エラー状態を通知してもよい。
【００９４】
例えば、ルーティングにおいて、経路途中のメモリノード１１がパケットを受信した際に、ビジー状態もしくはエラー状態を発信しているメモリノード１１に対してパケットを送信しないようにすることで、そのノードを迂回して目的のメモリノード１１に到達できる。
【００９５】
もし、目的のメモリノード１１のビジー状態を検知していた場合は、ビジー信号が消えるまでパケットを保持しておくことが可能である。一方で、目的のメモリノード１１のエラー信号を検知していた場合は、クライアント装置にエラー状態を通知することで早急に対応することができる。
【００９６】
ところで、読み出されたデータに含まれる誤ビット数が多いほど、メモリノード１１がデータを正確に保持できていないことになるため、誤ビット数の多さは、当該メモリノード１１が故障していると判定するに十分な理由と考えられる。
【００９７】
また、一般的に、記憶媒体に対するデータ書き込みの際には、書き込まれるデータに基づき生成されたエラー訂正符号が、当該データと共に記憶媒体に書き込まれる。そして、読み出しの際に、読み出されたデータに対してエラー訂正符号を用いてエラー訂正を行う。このとき、エラー訂正を行った訂正ビットの数を検出して出力できる。この訂正ビット数が誤ビット数に相当する。なお、読み出されたデータに、エラー訂正符号によるエラー訂正能力を超えたエラーが含まれる場合、エラー訂正が行われない。記録装置１０においては、各メモリノード１１内のＭＰＵ１９、もしくは専用ハードウェアがエラー訂正処理を行う。
【００９８】
読み出されたデータの誤ビット数をカウントする方法として、データコントローラ１４がメモリノード１１から受け取ったデータの訂正ビット数をカウントする第１のカウント方法と、メモリノード１１が、エラー訂正結果に基づく不良ビット情報（訂正ビット数情報）を、読み出したデータに付加してデータコントローラ１４に応答する第２のカウント方法とが考えられる。
【００９９】
何れのカウント方法においても、データコントローラ１４による処理が必要となる。ここで、第２のカウント方法は、複数のメモリノード１１において分散処理がなされることになり、データコントローラ１４の処理が軽減される。したがって、データコントローラ１４自体がボトルネックとなるおそれを低減できる。
【０１００】
具体的な故障検知方法としては、例えば、訂正するビット数に閾値を設けておき、データコントローラ１４は、あるメモリノード１１における訂正ビット数が閾値に到達または超える場合に、当該メモリノード１１が故障の可能性があるとしてエラー通知すればよい。この場合は、データ自体は読み出せるので、当該メモリノード１１の故障が確定しているわけではないが、故障する可能性の高いメモリノード１１を把握することができるので、故障時には迅速な対応ができる可能性が高まる。
【０１０１】
また、訂正ビット数に対する閾値を複数設定することで、故障可能性に優先度を付加できるため、より効率的な運用が可能になると考えられる。この場合、このシステムを管理するためのデータも増えるため、処理負荷が大きくなる可能性がある。また、故障予知された時点でメモリノード１１を交換することで、記憶装置１０に対して、より信頼性を確保できると考えられるが、コストも増大する。ユーザーの要求によってこれらを考慮したうえで、訂正ビット数に対する閾値や閾値数を設定するのが望ましい。
【０１０２】
次に、メモリノード１１に格納されるデータを復元するデータ復元処理について、より具体的に説明する。なお、メモリノード１１に対するデータ復元処理が必要な場合とは、例えば、あるメモリノード１１が故障検知された場合や、メンテナンスなどでメモリノード１１を交換する場合である。ここでいうメモリノード１１の交換は、記憶装置１０に組み込まれたメモリノード１１を、ユーザが取り外し、取り外した場所に新たなメモリノード１１を取り付けることをいう。交換前と交換後とで、メモリノード１１の物理アドレスは変化しない。
【０１０３】
図１４は、第１のデータ復元処理を説明するための概念図である。第１のデータ復元処理では、それぞれメモリノード１１に相当する３のメモリノードＡ、ＢおよびＣでＲＡＩＤを構成する。図１４において、コントローラ１００は、図１におけるデータコントローラ１４に対応するもので、各メモリノードＡ、ＢおよびＣに対するデータの読み書きや各種コマンドの発行、パリティ演算などを行う。バッファ１０１は、コントローラ１００がデータを一時的に記憶するために用いられる。また、図１５は、第１のデータ復元処理の一例を示すフローチャートである。メモリノードＡ、ＢおよびＣは、それぞれデータａ、ｂおよびｃが格納されており、何れか（例えばデータｃ）がパリティであるものとする。
【０１０４】
以下では、メモリノードＢについて故障の検知または交換が行われ、メモリノードＢに格納されるデータｂを復元する場合を例にとって説明する（図１４（ａ）参照）。図１５のフローチャートにおいて、ステップＳ１００でメモリノードＢの故障検知またはメモリノードＢの交換合図が通知された場合、当該メモリノードＢは、交換への待機状態に移行する。次のステップＳ１０１で、当該メモリノードＢが新たなメモリノードＢ’に交換される。この時点では、メモリノードＢ’は空であり、何もデータが格納されていない（図１４（ｂ）参照）。
【０１０５】
メモリノードＢがメモリノードＢ’に交換されたことが確認されると、コントローラ１００からメモリノードＢ’に対してコマンドＩｎｆｏが送信される（ステップＳ１０２）。このコマンドＩｎｆｏは、目的メモリノードの情報を返すコマンドであり、コントローラ１００から送信先までデータが到達するか否かを確認することができる。ステップＳ１０２によるコマンドＩｎｆｏの送信は、例えば、ユーザにより記憶装置１０の図示されない操作部や、記憶装置１０に接続される上位装置が操作されることにより実行される。
【０１０６】
次のステップＳ１０３で、コントローラ１００は、ステップＳ１０２で送信したコマンドＩｎｆｏに対するメッセージＲｅｐｌｙが受信されたか否かを判定する。若し、メッセージＲｅｐｌｙを受信したと判定した場合、経路異常が無く、メモリノードＢからメモリノードＢ’への交換が正常に完了したと判定できる。この場合、処理がステップＳ１０４に移行され、コントローラ１００は、交換前のメモリノードＢに対してＲＡＩＤが構成される他のメモリノードＡおよびＣに格納されるデータａおよびｃを読み出す。
【０１０７】
次のステップＳ１０５で、コントローラ１００は、ステップＳ１０４でメモリノードＡおよびＣから読み出されたデータａおよびｃを用いて演算を行い、データｂを復元する（図１４（ｃ）参照）。復元されたデータｂは、一時的にバッファ１０１に格納される。
【０１０８】
次のステップＳ１０６で、コントローラ１００は、復元されたデータｂをバッファ１０１から読み出し、交換後のメモリノードＢ’に書き込む（図１４（ｄ）参照）。交換後のメモリノードＢ’の物理アドレスは、交換前のメモリノードＢの物理アドレスと等しいので、交換後のメモリノードＢ’に対するアクセスは、交換前のメモリノードＢへのアクセスと同様にして行われる。これにより、メモリノードＢの交換に伴うデータｂの復元が完了し、図１５のフローチャートによる一連の処理が終了される。
【０１０９】
一方、ステップＳ１０３で、メッセージＲｅｐｌｙが受信されないと判定された場合、処理がステップＳ１０７に移行され、コントローラ１００とメモリノードＢ’との間の経路に、断線などの経路異常が発生している可能性があるとされる。この場合、経路異常ではなく、交換されたメモリノードＢ’が故障している可能性もある。コントローラ１００は、例えば、経路異常などが発生している旨の通知を出力し、図１５のフローチャートによる一連の処理が終了される。
【０１１０】
メッセージＲｅｐｌｙが受信されない原因が経路異常の場合、この位置の物理アドレスが使用できないことになる。ここで、記憶装置１０は、ある物理アドレスに対する経路を複数持つため、経路異常に対する耐性は高い。
【０１１１】
図１６は、第２のデータ復元処理を説明するための概念図である。第２のデータ復元処理では、ＲＡＩＤを構成する３のメモリノードＡ、ＢおよびＣに対して、スペアのメモリノードＳを追加して設ける。なお、図１６において、上述した図１４と対応する部分には同一の符号を付して、詳細な説明を省略する。また、図１７は、第２のデータ復元処理の一例を示すフローチャートである。メモリノードＡ、ＢおよびＣは、それぞれデータａ、ｂおよびｃが格納されており、何れか（例えばデータｃ）がパリティであるものとする。
【０１１２】
スペアメモリノードＳは、記憶装置１０の通常使用時には、データの格納先としては用いられず空のまま保持される。また、スペアメモリノードＳは、上述したようにして、他のメモリノードと同様にして分散させて物理アドレスがマッピングされていると好ましい。また、コントローラ１００は、スペアメモリノードＳの物理アドレスを、予め知っているものとする。
【０１１３】
以下では、上述と同様に、メモリノードＢについて故障の検知または交換が行われ、メモリノードＢに格納されるデータｂを復元する場合を例にとって説明する（図１６（ａ）参照）。図１７のフローチャートにおいて、ステップＳ２００でメモリノードＢの故障検知またはメモリノードＢの交換合図が通知された場合、当該メモリノードＢは、交換への待機状態に移行する。
【０１１４】
次のステップＳ２０１で、コントローラ１００は、交換前のメモリノードＢに対してＲＡＩＤが構成される他のメモリノードＡおよびＣに格納されるデータａおよびｃを読み出す。次のステップＳ２０２で、コントローラ１００は、ステップＳ２０１でメモリノードＡおよびＣから読み出されたデータａおよびｃを用いて演算を行い、データｂを復元する（図１６（ｂ）参照）。復元されたデータｂは、一時的にバッファ１０１に格納される（図１６（ｃ）参照）。
【０１１５】
次のステップＳ２０３で、コントローラ１００は、ステップＳ２０２で復元されたデータｂをバッファ１０１から読み出して、スペアメモリノードＳに格納する（図１６（ｄ）参照）。
【０１１６】
次のステップＳ２０４で、当該メモリノードＢが新たなメモリノードＢ’に交換される。この時点では、メモリノードＢ’は空であり、何もデータが格納されていない（図１６（ｄ）参照）。メモリノードＢがメモリノードＢ’に交換されたことが確認されると、コントローラ１００は、メモリノードＢ’に対してコマンドＩｎｆｏを送信する（ステップＳ２０５）。
【０１１７】
次のステップＳ２０６で、コントローラ１００は、ステップＳ２０５で送信したコマンドＩｎｆｏに対するメッセージＲｅｐｌｙが受信されたか否かを判定する。若し、メッセージＲｅｐｌｙを受信したと判定した場合、経路異常が無く、メモリノードＢからメモリノードＢ’への交換が正常に完了したと判定できる。この場合、処理がステップＳ２０７に移行され、コントローラ１００は、スペアメモリノードＳからデータｂを読み出して、読み出したデータｂを交換後のメモリノードＢ’に格納する（図１６（ｅ）参照）。
【０１１８】
そして、次のステップＳ２０８で、コントローラ１００は、スペアメモリノードＳからデータｂを消去してスペアメモリノードＳを空として、スペアのメモリノードとしての機能を回復し、高信頼性を保持する。これにより、メモリノードＢの交換に伴うデータｂの復元が完了し、図１７のフローチャートによる一連の処理が終了される。
【０１１９】
一方、ステップＳ２０６で、メッセージＲｅｐｌｙが受信されないと判定された場合、処理がステップＳ２０９に移行され、コントローラ１００とメモリノードＢ’との間の経路に、断線などの経路異常が発生している可能性があるとされる。この場合、経路異常ではなく、交換されたメモリノードＢ’が故障している可能性もある。コントローラ１００は、例えば、経路異常などが発生している旨の通知を出力し、図１５のフローチャートによる一連の処理が終了される。
【０１２０】
このように、スペアメモリノードＳを用意した場合、データｂの計算結果をスペアメモリノードＳに格納することを優先するべきである。これにより、最初にメモリノードＡ、ＣおよびＳでＲＡＩＤを再構成させていることになるので、より信頼性が高いシステムを構築可能になる。
【０１２１】
なお、上述では、スペアメモリノードＳを通常のデータ格納には使用しないメモリノードとして別途、設けたが、これはこの例に限定されない。例えば、記憶装置１０の複数のメモリノードのうちデータが格納されていないメモリノードを、スペアメモリノードＳとして割り当てることもできる。
【０１２２】
このように、実施形態に係る記憶装置１０は、複数のメモリノードに対して複数のデータコントローラを備えることにより、複数の経路を介しての並列処理が可能である。そのため、あるデータコントローラでデータの復元処理を実行しながら、別のデータコントローラで交換中のメモリノードのデータにアクセスすることが可能になる。この場合、実際は、交換中のメモリノードがロックされているので、データコントローラ間の処理により、データ復元とアクセスとの同時進行が実現する。この場合、スループットが落ちる可能性があるが、従来技術よりも格段に高い性能を維持できる。
【０１２３】
なお、データ復元処理においては、故障検知の条件設定が重要であり、信頼性やランニングコストなどユーザの要求によって条件変更が可能であることが望ましい。
【０１２４】
なお、本発明は上述した各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、各実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、各実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【０１２５】
１０  記憶装置
１０10，１０11，１０12，１０13，１０20，１０21，１０22，１０23，１０30，１０31，１０32，１０33，１０40，１０41，１０42，１０43  グループ
１１，１１a0，１１a1，１１a2，１１a3  メモリノード
１４  データコントローラ
１５  セレクタ
１７  メモリ
１９  ＭＰＵ
３０  データ
３１  パリティ
１００  コントローラ
１０１  バッファ
【図１】
2014137758.tif 000025
【図２】
2014137758.tif 000026
【図３】
2014137758.tif 000027
【図４】
2014137758.tif 000028
【図５】
2014137758.tif 000029
【図６】
2014137758.tif 000030
【図７】
2014137758.tif 000031
【図８】
2014137758.tif 000032
【図９】
2014137758.tif 000033
【図１０】
2014137758.tif 000034
【図１１】
2014137758.tif 000035
【図１２】
2014137758.tif 000036
【図１３】
2014137758.tif 000037
【図１４】
2014137758.tif 000038
【図１５】
2014137758.tif 000039
【図１６】
2014137758.tif 000040
【図１７】
2014137758.tif 000041