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

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

▶ 株式会社東芝の特許一覧

<>
  • 特許6005533-記憶装置および記憶方法 図000024
  • 特許6005533-記憶装置および記憶方法 図000025
  • 特許6005533-記憶装置および記憶方法 図000026
  • 特許6005533-記憶装置および記憶方法 図000027
  • 特許6005533-記憶装置および記憶方法 図000028
  • 特許6005533-記憶装置および記憶方法 図000029
  • 特許6005533-記憶装置および記憶方法 図000030
  • 特許6005533-記憶装置および記憶方法 図000031
  • 特許6005533-記憶装置および記憶方法 図000032
  • 特許6005533-記憶装置および記憶方法 図000033
  • 特許6005533-記憶装置および記憶方法 図000034
  • 特許6005533-記憶装置および記憶方法 図000035
  • 特許6005533-記憶装置および記憶方法 図000036
  • 特許6005533-記憶装置および記憶方法 図000037
  • 特許6005533-記憶装置および記憶方法 図000038
  • 特許6005533-記憶装置および記憶方法 図000039
  • 特許6005533-記憶装置および記憶方法 図000040
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6005533
(24)【登録日】2016年9月16日
(45)【発行日】2016年10月12日
(54)【発明の名称】記憶装置および記憶方法
(51)【国際特許分類】
   G06F 3/06 20060101AFI20160929BHJP
【FI】
   G06F3/06 302D
   G06F3/06 540
   G06F3/06 301J
【請求項の数】10
【全頁数】26
(21)【出願番号】特願2013-6754(P2013-6754)
(22)【出願日】2013年1月17日
(65)【公開番号】特開2014-137758(P2014-137758A)
(43)【公開日】2014年7月28日
【審査請求日】2015年2月10日
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(74)【代理人】
【識別番号】110002147
【氏名又は名称】特許業務法人酒井国際特許事務所
(72)【発明者】
【氏名】佐々木 勇輝
(72)【発明者】
【氏名】栗田 貴宏
(72)【発明者】
【氏名】木下 敦寛
【審査官】 古河 雅輝
(56)【参考文献】
【文献】 特開2012−103926(JP,A)
【文献】 特開2007−293726(JP,A)
【文献】 特開2007−156582(JP,A)
【文献】 特開平07−110776(JP,A)
【文献】 特開2011−170589(JP,A)
【文献】 特開平06−348516(JP,A)
【文献】 特開2007−087062(JP,A)
【文献】 特開2007−156583(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06− 3/08
G06F 11/08−11/10
G06F 12/00−12/06
G06F 13/10−13/18
(57)【特許請求の範囲】
【請求項1】
予め定められたサイズの記憶領域を複数含む記憶部を備え、2以上の異なる方向に通信路を介して相互に接続される複数のメモリノードであって、各メモリノードは自身宛てのパケットの処理と他のメモリノード宛てのパケットの前記通信路を介した転送とを実行する、前記複数のメモリノードと、
前記複数のメモリノードは、2以上のメモリノードを備える複数の第1グループを構成し、前記複数の第1グループは、同一の第1グループに属する2以上のメモリノードのうちの任意の2のメモリノードは相互に接続されているかまたは同一の第1グループに属する他のメモリノードを介して接続されている、第2グループを含み、前記記憶部へのデータの書き込み先を、前記記憶領域毎に異なる前記第1グループに順次割り当てて、前記書き込み先に宛てた前記記憶部へのデータを含むパケットを発行する制御部と
を有する記憶装置。
【請求項2】
前記制御部は、さらに、
前記第1グループ内での前記書き込み先を、前記第1グループ内の複数の前記メモリノードが含む複数の前記記憶領域に順次割り当てる請求項1に記載の記憶装置。
【請求項3】
所定サイズのデータからパリティを生成するパリティ生成部をさらに有し、
前記制御部は、
記所定サイズのデータから生成された各パリティの書き込み先を、異なる前記メモリノードに割り当てる請求項1または請求項2に記載の記憶装置。
【請求項4】
前記制御部は、
前記複数のメモリノードについて互いに対応する前記記憶領域に対する前記書き込み先の割り当てが一巡した場合に、前記パリティの書き込み先の前記第1グループを切り替える請求項3に記載の記憶装置。
【請求項5】
前記制御部は、
前記パリティの前記書き込み先を、前記複数の第1グループに順次割り当てる請求項3に記載の記憶装置。
【請求項6】
前記制御部は、
前記複数のメモリノードを、2以上の方向に分割して前記複数の第1グループを生成する請求項1乃至請求項5の何れか1項に記載の記憶装置。
【請求項7】
前記複数のメモリノードのうちの第1のメモリノードは、
前記第1のメモリノードと接続され、かつ前記複数のメモリノードのうちの他のメモリノードの故障状態を検知して、検知結果を前記制御部に送信する検知部をさらに備える請求項1乃至請求項6の何れか1項に記載の記憶装置。
【請求項8】
前記メモリノードは、
前記記憶部から読み出されるデータに含まれる誤ビットを検出し、検出結果を、前記制御部から送信される読み出し命令および書き込み命令のうち少なくとも一方に対する結果に付加して前記制御部に送信する検出部をさらに備える請求項1乃至請求項7の何れか1項に記載の記憶装置。
【請求項9】
前記制御部は、一のアドレスにより指定されたデータから前記記憶領域に対応するサイズの1以上の単位データを生成し、前記記憶部への前記単位データの書き込み先を、前記記憶領域毎に異なる前記第1グループに順次割り当てる、
ことを特徴とする請求項1に記載の記憶装置。
【請求項10】
予め定められたサイズの記憶領域を複数含む記憶部を備え、2以上の異なる方向に通信路を介して相互に接続される複数のメモリノードであって、各メモリノードは自身宛てのパケットの処理と他のメモリノード宛てのパケットの前記通信路を介した転送とを実行する、前記複数のメモリノードが、2以上のメモリノードを備える複数の第1グループを構成し、前記複数の第1グループは、同一の第1グループに属する2以上のメモリノードのうちの任意の2のメモリノードは相互に接続されているかまたは同一の第1グループに属する他のメモリノードを介して接続されている、第2グループを含み、前記記憶部へのデータの書き込み先を、前記記憶領域毎に異なる前記第1グループに順次割り当てて、前記書き込み先に宛てた前記記憶部へのデータを含むパケットを発行する制御ステップを有する記憶方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、記憶装置および記憶方法に関する。
【背景技術】
【0002】
複数のハードディスク装置を備え、当該複数のハードディスク装置を1の記憶装置として扱って、データを当該複数のハードディスク装置に分散して格納するディスクアレイ装置が知られている。ハードディスク装置は、記憶媒体であるハードディスク上でヘッドを移動させて読み書きを行うため、シーケンシャルな書き込みを行うことで、ヘッドのシークタイムの短縮による読み出し時間の高速化が期待できる。
【0003】
一方、それぞれ記憶素子およびデータ転送機能を有する複数のメモリノードを相互に接続することで、容量の拡張を容易としたストレージ装置が開発されている。各メモリノードは、自身のメモリノード宛のデータを受信した場合は、読み出しまたは書き込みなどの所定の処理を行う。また、各メモリノードは、自身のメモリノード宛ではないデータを受信した場合は、受信パケットを適切な他のメモリノードに転送する。各メモリノードによって適切な転送が繰り返されることにより、データは目的のメモリノードに到達できる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開平7−234763号公報
【特許文献2】特開2012−103926号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
従来技術によるディスクアレイ装置では、ハードディスク装置同士の物理的な配列が考慮されていなかった。そのため、従来技術によるディスクアレイ装置におけるアクセス制御をメモリノードを相互に接続して構成するストレージ装置にそのまま適用した場合、メモリノードに対するアクセスの集中によりデータの転送待機時間が延長され、スループットの低下を招くおそれがあるという問題点があった。
【0006】
すなわち、メモリノードを相互に接続して構成するストレージ装置に対してハードディスク装置のシーケンシャルな書き込みをそのまま適用すると、1のメモリノードにアクセスが集中してデータの転送待機時間が発生し、読み出し効率が低下してしまう可能性がある。
【0007】
本発明が解決しようとする課題は、メモリノードを相互に接続した構成において、効率的なデータ転送が可能な記憶装置および記憶方法を提供することにある。
【課題を解決するための手段】
【0008】
実施形態の記憶装置は、予め定められたサイズの記憶領域を複数含む記憶部を備え、2以上の異なる方向に通信路を介して相互に接続される複数のメモリノードを有する。各メモリノードは自身宛てのパケットの処理と他のメモリノード宛てのパケットの通信路を介した転送とを実行する。複数のメモリノードは、それぞれ2以上のメモリノードを備える複数の第1グループを構成する。複数の第1グループは、同一の第1グループに属する2以上のメモリノードのうちの任意の2のメモリノードは相互に接続されているかまたは同一の第1グループに属する他のメモリノードを介して接続されている、第2グループを含む。記憶装置は、制御部を備える。制御部は、記憶部へのデータの書き込み先を、記憶領域毎に異なる第1グループに順次割り当てる。そして、前記制御部は、書き込み先に宛てた前記記憶部へのデータを含むパケットを発行する。
【図面の簡単な説明】
【0009】
図1図1は、実施形態に係る記憶装置の一例の構成を示すブロック図である。
図2図2は、実施形態に係るメモリノードの一例の構成を示すブロック図である。
図3図3は、実施形態に係る、複数のメモリノードを互いに異なる方向に分割して4のグループを形成した例を示す図である。
図4図4は、実施形態に係る、複数のメモリノードを同一の方向に分割して4のグループを形成した例を示す図である。
図5図5は、実施形態に係るメモリノードの構成を概略的に示す図である。
図6図6は、実施形態に係るメモリノードに書き込まれるデータの構成例を概略的に示す図である。
図7図7は、実施形態に係るシーケンシャル書き込みの例を示す図である。
図8図8は、実施形態による、各グループにおいて、1のページに書き込みを行う毎にメモリノードグループを変更する例を示す図である。
図9図9は、実施形態に係る、メモリノードグループ内でパリティを格納するメモリノードを選択する方法について説明するための図である。
図10図10は、実施形態に係る、サイクリック書き込み方式において、論理アドレスからメモリノードの物理アドレスとページアドレスとを決定する例を示す図である。
図11図11は、実施形態に係る、グループにおいて物理アドレスの増加方向を示す図である。
図12図12は、実施形態に係るメモリノードグループの位置関係を示す図である。
図13図13は、実施形態に係る、値γとデータおよびパリティとの対応例を示す図である。
図14図14は、実施形態に係る第1のデータ復元処理を説明するための概念図である。
図15図15は、実施形態に係る第1のデータ復元処理の一例を示すフローチャートである。
図16図16は、実施形態に係る第2のデータ復元処理を説明するための概念図である。
図17図17は、実施形態に係る第2のデータ復元処理の一例を示すフローチャートである。
【発明を実施するための形態】
【0010】
(実施形態に適用可能な構成)
以下、実施形態に係る記憶装置について説明する。図1は、実施形態に係る記憶装置10の一例の構成を示す。記憶装置10は、記憶機能およびデータ転送機能を有する複数のメモリノード11を相互に接続した構成を備え、データ転送機能は、各メモリノード11が効率的にデータパケットを転送する転送方式を備える。
【0011】
図1において、記憶装置10は、複数のメモリノード11に対してデータが分散して格納される。図1の例では、各メモリノード11は、矩形格子の格子点に配置される。格子点の座標を座標(x,y)で示し、格子点に配置されるメモリノード11の物理アドレスは、当該格子点の座標と対応して物理アドレス(xD,yD)で示されるものとする。また、図1の例では、左上隅に位置するメモリノード11が原点の物理アドレス(0,0)を有し、各メモリノード11を横方向(X方向)および縦方向(Y方向)に移動することで、物理アドレスが整数値で増減する。
【0012】
各メモリノード11は、それぞれ4の入力ポート12および出力ポート13を備え、隣接するメモリノード11と、これら4の入力ポート12および出力ポート13を介して接続される。より具体的には、対向する2の隣接するメモリノード11は、互いの入力ポート12および出力ポート13とを介して接続される。
【0013】
また、各メモリノード11は、2以上の異なる方向に隣接するメモリノード11と接続される。例えば、図1において左上隅の物理アドレス(0,0)で示されるメモリノード11は、X方向に隣接する物理アドレス(1,0)で表されるメモリノード11と、X方向とは異なる方向であるY方向に隣接する物理アドレス(0,1)で表されるメモリノード11と、それぞれ接続される。また、図1において物理アドレス(1,1)で表されるメモリノード11は、互いに異なる4の方向に隣接する、物理アドレス(1,0)、(0,1)、(2,1)および(1,2)でそれぞれ示される4のメモリノード11に接続される。
【0014】
記憶装置10は、パリティの計算とデータ読み書き命令の発行とを行う、少なくとも1のデータコントローラ14を備える。データコントローラ14は、入力ポート12および出力ポート13を介してメモリノード11に接続される。このとき、メモリノード11同士の通信規格とデータコントローラ14の通信規格とが異なる場合は、両者の間にアダプタを設けてもよい。図1の例では、データコントローラ14は、各メモリノード11が配置される正方格子のx方向およびy方向それぞれの一方向の各端に、それぞれ接続されている。
【0015】
各メモリノード11に格納するためのデータは、例えば外部のホストコンピュータからこの記憶装置10に供給され、図示されない選択回路に入力される。選択回路は、各データコントローラ14の状態を調べ、処理に余裕があるデータコントローラ14を選択して、当該データを転送する。
【0016】
このように、実施形態に係る記憶装置10は、複数のデータコントローラ14と複数のメモリノード11とから構成されているため、データの入り口とその間のデータ転送経路が複数存在することになり、故障耐性に対して有利である。すなわち、記憶装置10は、メンテナンスの際や障害が発生した場合であっても、メンテナンスや障害箇所以外の転送経路を用いることが可能となり、動作の完全な停止が不要なシステムが実現される。さらに、記憶装置10は、メモリノード11やデータコントローラ14といったモジュールを増やすだけでスケールアウト特性を達成でき、サーバを増やすという従来の方法と比較しても、手間が少なく低コストで実装可能である。
【0017】
なお、各メモリノード11は、記憶領域として複数のブロックを含み、各ブロックは、複数のページを含む。メモリノード11に対するデータの書き込みは、ページ単位で行われる。また、メモリノード11に対するデータの消去は、ブロック単位で行われる。以下では、説明のため、1のメモリノード11が1のブロックを含み、1のブロックが4のページを含むものとする。
【0018】
なお、図1では、各メモリノード11が矩形格子の格子点に配置されるように示したが、各メモリノード11の配置は、この例に限定されない。すなわち、格子の形状は、格子点に配置される各メモリノード11が2以上の異なる方向に隣接するメモリノード11と接続されればよく、例えば三角形、六角形などでもよい。また、図1では各メモリノード11が2次元的に配置されているが、各メモリノード11を3次元的に配置しても構わない。
【0019】
図2は、実施形態に係るメモリノード11の一例の構成を示す。メモリノード11は、入力ポート12および出力ポート13に対応し、それぞれ4の入力ポートバッファ12Aおよび出力ポートバッファ13Aと、4のセレクタ15とを有すると共に、パケットコントローラ16と、メモリ17と、メモリコントローラ18と、MPU(Micro-Processing Unit)19とを有する。
【0020】
パケットコントローラ16と、メモリコントローラ18と、MPU19と、各入力ポートバッファ12Aとがローカルバス20により互いに通信可能に接続される。また、メモリ17は、メモリコントローラ18を介してローカルバス20に接続される。
【0021】
各入力ポートバッファ12Aは、各入力ポート12が接続される。なお、データは、所定サイズのパケットを単位として、各メモリノード11間を転送される。パケットは、送信先アドレスおよび送信元アドレスを少なくとも含むヘッダ部と、データ部とを有する転送データの単位である。各出力ポートバッファ13Aは、各出力ポート13が接続される。セレクタ15は、それぞれ、パケットコントローラ16からの制御信号に従い、各入力ポートバッファ12Aおよび各出力ポートバッファ13A間の接続を制御する。
【0022】
このような構成において、入力ポート12に入力されたパケットは、入力ポートバッファ12Aに一時的に記憶される。セレクタ15は、入力ポートバッファ12Aからパケットが入力されると共に、パケットコントローラ16から制御信号が入力される。セレクタ15は、制御信号に従い、入力されたパケットから何れかのパケットを選択して出力ポートバッファ13Aに出力する。出力ポートバッファ13Aは、セレクタ15から出力されたパケットを一時的に記憶すると共に、出力ポート13に出力する。パケットコントローラ16は、セレクタ15の出力を制御する。
【0023】
メモリ17は、データを記憶する複数のメモリセルを有する記憶素子である。メモリ17は、例えばNAND型フラッシュメモリや、ビットコストスケーラブルメモリ(BiCS)、磁気抵抗メモリ(MRAM)、相変化メモリ(PcRAM)、抵抗変化型メモリ(RRAM(登録商標))等が挙げられる。メモリコントローラ18は、メモリ17への書き込み、読み出しおよび消去の動作を制御する。MPU19は、メモリノード11内で必要な演算処理を行う。また、MPUは汎用的な演算処理にも利用可能だが、MPUの代わりに、特定の処理に特化した専用ハードウェアで構成しても構わない。
【0024】
メモリノード11が受信したパケットは、入力ポート12を介して入力ポートバッファ12Aに格納される。パケットコントローラ16は、パケットが含む送信先(宛先)アドレスと、そのメモリノード11自身のアドレスの2つの情報に基づいて、受信したパケットが自メモリノード11宛であるか否かを判定する。
【0025】
若し、自メモリノード11宛であると判定した場合、パケットコントローラ16は、自メモリノード11のメモリ17に対する書き込み、読み出しおよびその他の処理のうち、指定された処理を行う。一方、受信したパケットが自メモリノード11宛ではないと判定した場合、パケットコントローラ16は、パケットの送信先アドレスの情報と自メモリノード11のアドレスの情報とに基づいて、受信したパケットを転送する隣接するメモリノード11を決定し、セレクタ15に対して制御信号を送信する。セレクタ15は、この制御信号に従い、対応する出力ポートバッファ13Aに当該パケットを出力する。
【0026】
(実施形態に係るアドレス割当処理)
次に、実施形態についてより詳細に説明する。先ず、実施形態に適用可能な既存技術について、概略的に説明する。複数のハードディスク装置を備えるディスクアレイ装置におけるデータの分散格納方法の一つとして、複数のハードディスク装置を1の記憶装置として扱うことにより、アクセス処理のパフォーマンスや信頼性の向上を実現するRAID(Redundant Array of Independent Disks)と呼ばれる技術が知られている。
【0027】
RAIDは、レベル0〜6のレベルに分類され、レベル3〜6では、ディスク故障時にデータを回復するための冗長情報としてパリティを保持する。RAIDは、ディスクアレイ装置において、論理アドレスに対応する物理アドレスと物理ページアドレスとを、複数のハードディスク装置の中からマッピングすることで実現される。
【0028】
本実施形態では、上述した、相互に接続された複数のメモリノードを備える記憶装置10において、RAID(例えばRAIDレベル5)を適用する。すなわち、記憶装置10は、所定量の入力データからパリティを生成し、入力データとパリティとを複数のメモリノード11に対して分散して格納する。このとき、記憶装置10は、複数のメモリノード11を仮想的に複数のグループに分割し、分割した各グループに対して入力データとパリティとを分散させて格納する。すなわち、記憶装置10が備える複数のメモリノード11は、それぞれ所定数のメモリノード11を備える2以上のグループを構成する。
【0029】
図3および図4は、複数のメモリノード11を相互に接続した記憶装置10において、RAIDを構成するメモリノード11を選択する例を示す。以下、メモリノード11の配列において、図中でX方向に並ぶメモリノード11の個数を値NX、Y方向に並ぶメモリノード11の個数を値NYとする。さらに、RAIDを構成するメモリノード11の数を値(NR+1)として、選択されたメモリノード11に、分散ノード番号[ND0〜NDNR]を定義する。以下、分散ノード番号NDnが定義されたメモリノード11を、選択メモリノードNDxのように記述する。
【0030】
この選択メモリノードNDnにおいて、インデクス「n」が、選択された各メモリノード11に一意に付された番号であって、例えば、格子の左上隅からX方向に増加し、さらに、格子の上から下に向けて増加するものとする。
【0031】
なお、RAIDを構成するメモリノード11とは、所定量のデータと、当該所定量のデータから生成されるパリティとがそれぞれ格納される各メモリノード11をいう。例えば、1の論理アドレス(LA:Logical Address)で示されるデータが2以上に分割され、分割されたデータそれぞれを用いて1のパリティが生成される。この分割された各データと、当該データから生成されたパリティとが、それぞれ異なるメモリノード11に格納される。
【0032】
以下では、説明のため、1の論理アドレスLAで示されるデータが、それぞれメモリノード11の書き込み単位(例えばページ)のサイズを有する3のデータに分割され、この3のデータから、当該書き込み単位のサイズを有するパリティが生成されるものとする。すなわち、値NR=3であり、RAIDを構成するメモリノード11の数は4個となる。また、1のRAIDを構成するメモリノード11の集合を、メモリノードグループと呼ぶ。
【0033】
図3および図4は、値NR=3の場合におけるメモリノード11の選択の例である。図3は、複数のメモリノード11を互いに異なる方向に分割して4のグループを形成した例である。より具体的には、正方格子上に配列された複数のメモリノード11を、X方向およびY方向にそれぞれ2分割し(以下、十字分割と呼ぶ)、4のグループ1010、1011、1012および1013を形成した例である。
【0034】
また、図4は、複数のメモリノード11を同一の方向に分割して4のグループを形成した例である。より具体的には、正方格子状に配列された複数のメモリノード11を、X方向に向けて4分割し、Y方向に4のグループ1020、1021、1022および1023を形成した例である。
【0035】
図3および図4に示されるように各メモリノード11を分割した配列から、それぞれ1つずつメモリノード11を選択することで、RAIDを構成するメモリノード11を物理的に分散させることができる。
【0036】
図3の例において、選択メモリノードND0の物理アドレスをアドレス(xD,yD)とすると、このアドレス(xD,yD)が示す位置のメモリノード11を十字分割された配列の左上のグループ1010から選択する場合、次式(1)の条件式を満たすことになる。
【数1】
【0037】
また、これにより、選択メモリノードND1〜ND3の物理アドレスは、それぞれ下記の式(2)、式(3)および式(4)として表される。
【数2】
【数3】
【数4】
【0038】
十字分割の場合、このように選択メモリノードND0を選択することで、RAIDを構成するメモリノードグループを一意に決定することができる。
【0039】
例えば、選択メモリノードND0としてメモリノード11a0を選択した場合、上述の式(2)〜式(4)に従い、メモリノード11a0と、メモリノード11a1、11a2および11a3とによりRAIDを構成するメモリノード11のグループが決定される。選択メモリノードND0としてメモリノード11bやメモリノード11cを選択した場合も同様にして、上述の式(2)〜式(4)に従い、RAIDを構成するメモリノードグループが決定される。
【0040】
図4の例において、選択メモリノードND0をY方向に4分割された配列の最上部のグループ1020から選択する場合、次式(5)の条件式を満たすことになる。
【数5】
【0041】
これにより、選択メモリノードND1〜ND3の物理アドレスは、それぞれ下記の式(6)、式(7)および式(8)として表される。
【数6】
【数7】
【数8】
【0042】
すなわち、これは固定数での分割と考えられるので、それぞれ下記の式(9)、式(10)および式(11)を計算することで求められる。なお、演算子「Integer」は、整数部分を抽出することを示し、演算子「%」は、余剰演算子を示す。
【数9】
【数10】
【数11】
【0043】
図3および図4は、値NXおよび値NYが等しい値の偶数であり、メモリノード11の配列がX方向およびY方向にそれぞれ対称である場合を示している。これに対して、値NXと値NYとが異なる場合は、例えば図3の十字分割の例では、十字に等しく4分割できない可能性がある。このような場合は、メモリノード11の1または複数の行または列をスペアディスクとして用いることで、情報を書き込むメモリノード11の対称性を確保できるが、容量効率低下のおそれがあり、適用の可能性に制限が生じる。
【0044】
一方、複数のメモリノード11の一方向への分割(図4参照)または固定数での分割は、メモリノード11の配列が非対称である場合に、柔軟な対応が可能である。しかしながら、配列規模とRAIDを構成するメモリノード11の数との組み合わせによっては、図4に例示されるように、1のメモリノードグループに属する各メモリノード11が特定の列に偏ってしまう場合が発生する。メモリノードグループのように、一連のデータの読み出しまたは書き込みを行う複数のメモリノード11が1列または1行に多く配置されるほど、データ転送の際に転送データが渋滞を起こす可能性が高くなる。
【0045】
各メモリノード11に対する物理アドレスマッピングの方法としては、図3のように異なる方向に分割する方法と、図4のように一方向に分割する方法との何れの方法も考えられる。何れの方法を選択するかは、上述したような、容量効率低下や渋滞発生可能性などの影響を考慮して決定することが好ましい。以下では、図3に示す、各メモリノード11の物理アドレスマッピングを、配列の十字分割による行うものとして説明する。
【0046】
次に、実施形態に係る、各メモリノード11に対する物理アドレスマッピング方法について、より詳細に説明する。図5および図6は、以下の説明で用いるメモリノード11の構成とデータ構成を概略的に示す。
【0047】
図5は、メモリノード11の構成を概略的に示す。上述したように、メモリノード11は、データの消去単位であるブロックを複数含み、ブロックは、データの書き込み単位に対応する記憶領域であるページを複数含む。以下では、図5に例示されるように、メモリノード11は、それぞれページアドレス#0、#1、#2および#3で示されるページPage#0、#1、#2および#3を有する1のブロックを含むものとする。また、記憶装置10は、X方向に4、Y方向に4の計16のメモリノード11を有し、値NX=値NY=4で配列を形成し、16のメモリノード11がそれぞれ4のメモリモード11を含む4のグループに仮想的に分割されるものとする。このような構成において、各メモリノード11に対して、各データと、データから生成されたパリティとを分散して格納する場合を考える。
【0048】
図6は、メモリノード11に書き込まれるデータの構成例を概略的に示す。データ30は、ホストコンピュータ装置などの上位装置から記憶装置10に転送されるデータの例を示す。各データは、論理アドレスLAを指定されて、上位装置から記憶装置10に転送される。各データは、記憶装置10に転送されると、図示されない選択回路を介して何れかのデータコントローラ14に入力される。データコントローラ14は、入力されたデータに基づきパリティ31を生成する。
【0049】
この例では、データコントローラ14は、1の論理アドレスLAで示されるデータ30をそれぞれページのサイズに等しいサイズの3のデータに分割し、この3分割されたデータから、同様にページのサイズに等しい1のパリティ31を生成している。1の論理アドレスLAが示すデータ30と、当該データ30に対応するパリティ31とで、メモリノードグループが形成される。
【0050】
図7は、1のメモリノードグループのページが埋まるまで書き込みを続ける、シーケンシャル書き込みの例を示す。すなわち、シーケンシャル書き込みにおいては、1のメモリノードグループのデータまたはパリティが書き込まれたメモリノード11のページに対して、当該ページが埋まるまで、他のメモリノードグループのデータおよびパリティを書き込む。
【0051】
図7において、複数のメモリノード11が4のグループ1030、1031、1032および1033に分割される。この例では、各グループ1030〜1033において、左上のメモリノード11の各ページに対して、論理アドレスLA=0〜3のデータおよび当該データに対応するパリティP0〜P3が書き込まれている。
【0052】
このシーケンシャル書き込みでは、例えばHDD(Hard Disk Drive)で構成されたストレージ装置の連続した論理アドレスLAのデータ読み出し(シーケンシャル読み出し)において、ヘッドのシークタイム短縮による読み出し時間の高速化が期待できる。
【0053】
図8は、各グループ1030〜1033において、1のページにデータまたはパリティを書き込む毎に、メモリノードグループを変更する。すなわち、図8に示される方法では、データまたはパリティを1のページに書き込む毎に、グループ1030〜1033を順次変更している。また、各グループ1030〜1033内において、データまたはパリティをページに書き込むメモリノード11を順次変更している。この図8に示される書き込み方法を、サイクリック書き込みと呼ぶ。
【0054】
図8に例示されるサイクリック書き込みでは、論理アドレスLA=0のデータについて、分割した各データとパリティとを、各グループ1030〜1033の左上のメモリノード11のページPage#0に順次書き込む。次に、論理アドレスLA=1のデータについて、分割した各データとパリティとを、各グループ1030〜1033内で書き込み先のメモリノード11を右上のメモリノード11に切り替えて、ページPage#0に順次書き込む。そして、論理アドレスLA=2、論理アドレスLA=3の各分割データおよびパリティが、グループ1030〜1033を順次変更されると共に、各グループ1030〜1033内で書き込み先のメモリノード11を順次変更されて、ページPage#0に順次書き込む。以下、各メモリノード11の同一ページが全て書き込まれたら、ページアドレスが切り替えられる。つまり、論理アドレスLA=4の各分割データおよびパリティを、各グループ1030〜1033の左上のメモリノード11のページPage#1に順次書き込む。
【0055】
このサイクリック書き込みでは、例えばSSD(Solid State Drive)で構成されたストレージ装置において、シーケンシャル読み出しの際でも、各メモリノード11への並列アクセスによりアクセス集中が抑制され、読み出しの高効率化が期待できる。
【0056】
各メモリノード11に対する物理アドレスマッピングの方法は、上述に限られない。例えば、1のメモリノード11の全ページではない複数ページを書き込む毎に、メモリノードグループを変更する方法が考えられる。この方法は、上述したシーケンシャル書き込みとサイクリック書き込みとを融合させた方法となる。何れの方法を用いて物理アドレスマッピングを行うかは、記憶装置10の構成や使用環境などを考慮して選択するのが好ましい。以下では、サイクリック書き込みを採用した場合について述べる。
【0057】
図9および上述した図8を用いて、RAIDを構成するメモリノードグループ内でパリティP0〜P15を格納するメモリノード11を選択する方法について説明する。実施形態では、論理アドレスLAが互いに隣接するデータから生成された各パリティの書き込み先を、異なるメモリノード11に割り当てるようにしている。
【0058】
図9は、メモリノードグループが変更された際に、パリティを格納するメモリノード11の分散ノード番号を変更する例を示す。図9において、同一のメモリノードグループの書き込みがなされるページに同一の斜線を付して示す。図9の例では、パリティP0を含むメモリノードグループについて、パリティP0が、選択メモリノードND0の分散ノード番号に従いグループ1030に書き込まれる。次のパリティP1を含むメモリノードグループについて、パリティP1が、選択メモリノードND1の分散ノード番号に従いグループ1031に書き込まれる。次のパリティP2を含むメモリノードグループについて、パリティP2が、選択メモリノードND2の分散ノード番号に従いグループ1032に書き込まれる。さらに次のパリティP3を含むメモリノードグループについて、パリティP3が、選択メモリノードND3の分散ノード番号に従いグループ1033に書き込まれる。
【0059】
この方式では、メモリノードグループ内でパリティを格納するメモリノード11が常に同じになる。ただし、同じメモリノード11に全てのパリティを書き込むわけではないので、RAIDレベル4のような性能劣化の問題は起こりにくい。一方で、データ更新が多い場合は、パリティ更新のためにパリティを格納するメモリノード11への書き込みが頻発する。そのため、アクセスの集中により処理性能が劣化する可能性がある。さらに、書き込み回数が制限されるNANDフラッシュのようなメモリで構成された場合、パリティを格納しているメモリノード11が先に寿命を迎え、システムとしてメモリノード11の交換までの運用期間が短いといった問題が起こりうる。
【0060】
パリティを格納するメモリノード11の分散ノード番号を「N」とすると、インデクスγは、γ=LA%(NR+1)=LA%4として選択することができる。
【0061】
上述した図8は、全てのメモリノードグループが各メモリノード11の同一ページに書き込まれ、ページアドレスが切り替えられた場合に、パリティを格納するメモリノード11の分散ノード番号を変更する例を示す。換言すれば、図8に示す方法では、各メモリノード11の同一ページ、すなわち、互いに位置が対応する記憶領域に対する全てのメモリノードグループのデータの割り当てが一巡した場合に、パリティの書き込み先のグループを切り替える。
【0062】
図8の例では、パリティP0、P1、P2およびP3をそれぞれ含む各メモリノードグループの各パリティP0、P1、P2およびP3が、選択メモリノードND0の分散ノード番号に従いグループ1030に書き込まれる。当該メモリノードグループの書き込みが完了すると、各メモリノード11のページアドレスPage#0のページ全てに書き込みがなされたので、次からの書き込みは、ページアドレスを切り替えて行われる。次のパリティP4、P5、P6およびP7を含む各メモリノードグループの各パリティP4、P5、P6およびP7が、選択メモリノードND1の分散ノード番号に従いグループ1031に書き込まれる。このように、各メモリノード11の同一ページアドレスのページ全てに書き込みがなされ、ページアドレスの切り替えがなされた場合に、パリティを書き込むメモリノード11の分散ノード番号を切り替える。
【0063】
この方式では、シーケンシャル読み出しにおいて、ページアドレスが変わるまで、パリティを格納するメモリノード11以外の領域にアクセスが偏る。一方で、この方式では、パリティを格納するメモリノード11が分散される。つまり、更新が多い場合でも、パリティの書き込み作業がメモリノード全体に分散されることになる。したがって、この図8に示す方式ならば、寿命のあるメモリで構成されたシステムであっても、図9の方式と比較して有利である。
【0064】
パリティを格納するための選択メモリノードNは、下記の式(12)により決められる。
【数12】
【0065】
図8および図9で示したパリティを格納するメモリノード11の選択手法は、記憶装置10を含むストレージ装置の構成や、データの読み出し方式を考慮して選択するのが好ましい。
【0066】
以下では、図8に示した、サイクリック書き込みによりパリティを格納するメモリノードが分散されている場合について述べる。
【0067】
図10は、サイクリック書き込み方式において、論理アドレスLAからメモリノード11の物理アドレス(x,y)とページアドレスPとを決定する例を示す。図11は、図10に示される物理アドレス(x,y)の増加方向を示す。図11の例では、値NX=12、値NY=12として配置された各メモリノード11が十字分割され、グループ1040、1041、1042および1043が形成されている。例えばグループ1040において、物理アドレス(x,y)は、X方向にメモリノード11毎に増加し、さらに、Y方向にメモリノード11毎に増加する。
【0068】
RAIDを構成するメモリノードグループを決定する選択メモリノードND0〜ND3は、選択メモリノードND0の物理アドレス(xD,yD)から一意に決める事ができるので、選択メモリノードND0についてのみの議論で十分である。なお、各選択メモリノードND0〜ND3は、それぞれ各グループ1040、1041、1042および1043に含まれる。
【0069】
図10より、物理アドレス(xD,yD)における値xDは、[0,1,2,…,(NX/2)−1]を繰り返すので、xD=LA%(NX/2)として求められる。値yDは、[0,1,2,…,(NX/2)−1]をそれぞれ(NX/2)回繰り返すので、次式(13)により求められる。また、ページアドレスPは、論理アドレスLAが値(NXY/4)増えるごとに1増えるので、次式(14)により求められる。
【数13】
【数14】
【0070】
図12は、値NXおよび値NYが2の冪乗、値(NR+1)が4の冪乗と仮定した場合のメモリノードグループの位置関係を示す。このとき、選択メモリノードND0の物理アドレスは、次式(15)に示される範囲内に存在する。なお、図12において、分散ノード番号を「Num」、物理アドレスを「PA」として示している。
【数15】
【0071】
なお、図12における各値を一般化すると、値αおよび値βをそれぞれ式(16)および式(17)で示される範囲の整数値とすると、分散ノード番号「NDn」のインデクス「n」がn=(α+1)(β+1)−1となり、物理アドレスは、次式(18)で表される。
【数16】
【数17】
【数18】
【0072】
論理アドレスLAに従いメモリノードグループの中からパリティ格納用のメモリノード11の分散ノード番号「N」を選択するための一般式は、式(19)として求められる。また、論理アドレスLAからメモリノードの物理アドレス(xD,yD)とページアドレスPとを決定する一般式は、それぞれ式(20)、式(21)および式(22)として示される。
【数19】
【数20】
【数21】
【数22】
【0073】
次に、値NR=3の場合において、ある論理アドレスLAにデータDを書き込む場合の書き込み命令の例を示す。データDは、書き込まれる単位(例えばページ)のサイズに分割される。ここでは、データDは、値NRに従いデータd1、d2およびd3に3分割される。また、これらデータd1、d2およびd3の排他的論理和から、パリティpを生成する。
【0074】
図13は、パリティpを格納するメモリノード11の分散ノード番号「NDn」を判定するための値γと、データd1〜d3およびパリティpとの対応例を示す。ここで、変数a、b、cおよびdは、各データを格納するための変数である。
【0075】
以上の結果を用いて、論理アドレスLAのデータDを記憶装置10の各メモリノード11に書き込むための書き込み命令Writeは、例えば次式(23)〜(26)のように示される。
Write[xD(LA),yD(LA),ND0,γ(LA),P(LA),a] …(23)
Write[xD(LA),yD(LA),ND1,γ(LA),P(LA),b] …(24)
Write[xD(LA),yD(LA),ND2,γ(LA),P(LA),c] …(25)
Write[xD(LA),yD(LA),ND3,γ(LA),P(LA),d] …(26)
【0076】
なお、式(23)〜式(26)において、値γは、パリティ担当を判定するために導出した値であるので、パケットとして送信しなくてもよい。
【0077】
書き込み時には、書き込み時の書き込み命令Writeに対するメモリノード11からの応答であるメッセージReplyをデータコントローラ14が受信した回数のカウントと、タイムアウト監視とによる故障判定を行うことが好ましい。
【0078】
例えば、上述のようにRAIDが3のデータd1〜d3と、1のパリティpの4のデータから構成される場合、1の書き込み命令Writeに対するメッセージReplyの、タイムアウト期間内における受信回数のカウント値が4の場合は、書き込みが正常に行われたと判定できる。
【0079】
一方、タイムアウト時にメッセージReplyの受信回数のカウント値が3の場合は、RAIDを構成する4のデータのうち1のデータの書き込みが正常に行われていないと判定できる。書き込みが正常に行われない要因としては、先ず、書き込みたいメモリノード11の物理的な位置関係や、渋滞による寿命切れなどが考えられる。
【0080】
これらの要因の場合は、同じメモリノード11に対して各データの再書き込みを試み、当該メモリノード11からのメッセージReplyを受信するか否かを確認する。このとき、書き込み命令Writeを発行したデータコントローラ14と当該メモリノード11との経路途中に物理的断線やノード異常が存在する場合も考えられる。そのため、データの再書き込みでは、書き込み命令Writeを発行するデータコントローラ14の位置や、当該メモリノード11に対するデータ経路の方向を変えることが望ましい。
【0081】
若し、データの再書き込みに対して1のメッセージReplyが帰ってこない場合は、RAIDによる回復でデータの読み出しは可能である。この場合は、エラー通知を行い、どのメモリノード11が故障可能性があるかを出力することで早急なリビルドに繋がるシステムが望ましい。さらに、スペアのメモリノード11を設けていれば、データをその領域に書き込んで退避させておくことでより信頼性を高められる。これに限らず、新たな論理アドレスLAに対して再度書き込み命令Writeを発行することも有効である。
【0082】
また、論理アドレスLAのデータDを記憶装置10の各メモリノード11から読み出すための読み出し命令Readは、例えば次式(27)〜(30)のように示される。なお、読み出し命令Readにおいては、データ格納用の変数a〜dを省略することができる。
Read[xD(LA),yD(LA),ND0,γ(LA),P(LA),a] …(27)
Read[xD(LA),yD(LA),ND1,γ(LA),P(LA),b] …(28)
Read[xD(LA),yD(LA),ND2,γ(LA),P(LA),c] …(29)
Read[xD(LA),yD(LA),ND3,γ(LA),P(LA),d] …(30)
【0083】
なお、式(27)〜式(30)において、値γはパリティ担当を判定するために導出した値であるので、パケットとして送信しなくてもよい。また、変数a、b、cおよびdは、読み出したデータやパリティを格納するものなので、パケットとして送信しなくてもよい。
【0084】
読み出しにおいても、書き込み時と同様に、タイムアウト監視による故障判定があると望ましい。
【0085】
なお、読み出しは、データd1、d2およびd3だけを読み出す第1の読み出し方法と、データd1、d2およびd3とパリティpとを読み出す第2の読み出し方法とが考えられる。
【0086】
第1の読み出し方法では、パリティ読み出し用のパケット転送が不要となるため、渋滞発生率が下がりスループットが向上する可能性が考えられる。しかし、1のデータが読み出されないと分かった時点で初めてパリティの読み出し命令を実行するため、故障時の読み出しには余計に時間がかかってしまう可能性も考えられる。
【0087】
一方で、第2の読み出し方法では、パリティpを読み出すパケットが第1の読み出し方法に対して追加されることになるため、第1の読み出し方法よりもデータの渋滞発生率が高くなるおそれがある。また、1のデータが読み出されないことがわかった時点で、既にパリティpの読み出し命令が並列に実行されており、RAIDによるデータ回復を迅速に実行することが可能になることも考えられる。さらに、パリティpを、同じメモリノードグループの他のデータd1〜d3の何れか1よりも先に読み出せた場合には、メモリノードグループ内で読み出し済みの他の2つのデータを用いて、未だ読み出されていないデータを計算して当該データを読み出したと見做すことも考えられる。さらにまた、メモリノードグループの全てのデータd1〜d3およびパリティpがデータコントローラ14に到着するまで待ち、パリティpを用いてデータ整合性のチェックを行ってから、読み出されたデータd1〜d3を出力することで信頼性を高めることも可能である。
【0088】
これらの手法は、ユーザーが速度を重視するのか、安全を重視するのかに基づき選択することが望ましい。
【0089】
(実施形態に適用可能な故障処理)
次に、実施形態による記憶装置10に適用可能な故障検知およびデータ復元について説明する。記憶装置10におけるメモリノード11の故障判定は、データコントローラ14が、メモリノード11にアクセスした際のメッセージReplyの受信回数のカウントと、データ誤りによる反転ビットの訂正回数のカウントとを行うことで実現できる。例えば、これらの各カウント値にそれぞれ閾値を設定し、少なくとも一方のカウント値が対応する閾値を超えた場合に、そのメモリノード11に係るデータ転送が異常であると判定する。
【0090】
図1に例示した記憶装置10は、各メモリノード11が4方向の経路を持つため、目的のメモリノード11の1つの経路が断線していても、他の経路を通って目的のメモリノード11にアクセスできる。そして処理完了すると、その合図としてメッセージReplyを返答する。RAIDで分割したデータに対する読み書き処理を行った場合は、RAIDを構成するメモリノード11からメッセージReplyが戻ってくれば、全ての処理が成功したことを確認できる。ただし、アクセス渋滞が起こっている場合や4方向の経路が全て断線した場合は、寿命切れによりパケットが消えてしまうので、メッセージReplyを受け取ることができない。このような場合は、メッセージReplyの回数を数えることでシステムの状態が確認できるため、故障などの問題に即座に対応することができる。
【0091】
また、メモリノード11は、図示されないビジー(busy)伝送線路とエラー(error)伝送線路を有していてもかまわない。これにより隣接するメモリノード11の状態を検知することができる。
【0092】
入力ポートバッファ12Aが使用中の場合、使用中の入力ポートバッファ12Aに接続されているメモリノード11は、パケットを送信することができない。そこで、使用中の入力ポートバッファ12Aに接続されているメモリノード11対してビジー伝送線路を介してビジー信号を送り、パケット受信できない状態(ビジー状態)であることを通知する。
【0093】
さらに、経路異常や物理アドレス不整合、メモリ17へのアクセス不能な状態(エラー状態)になった場合には、隣接する全てのメモリノード11に対してエラー伝送線路を介してエラー信号を送り、エラー状態を通知することができる。ただし、断線などの経路異常の場合は、経路異常を起こしている線路にのみ、エラー状態を通知してもよい。
【0094】
例えば、ルーティングにおいて、経路途中のメモリノード11がパケットを受信した際に、ビジー状態もしくはエラー状態を発信しているメモリノード11に対してパケットを送信しないようにすることで、そのノードを迂回して目的のメモリノード11に到達できる。
【0095】
もし、目的のメモリノード11のビジー状態を検知していた場合は、ビジー信号が消えるまでパケットを保持しておくことが可能である。一方で、目的のメモリノード11のエラー信号を検知していた場合は、クライアント装置にエラー状態を通知することで早急に対応することができる。
【0096】
ところで、読み出されたデータに含まれる誤ビット数が多いほど、メモリノード11がデータを正確に保持できていないことになるため、誤ビット数の多さは、当該メモリノード11が故障していると判定するに十分な理由と考えられる。
【0097】
また、一般的に、記憶媒体に対するデータ書き込みの際には、書き込まれるデータに基づき生成されたエラー訂正符号が、当該データと共に記憶媒体に書き込まれる。そして、読み出しの際に、読み出されたデータに対してエラー訂正符号を用いてエラー訂正を行う。このとき、エラー訂正を行った訂正ビットの数を検出して出力できる。この訂正ビット数が誤ビット数に相当する。なお、読み出されたデータに、エラー訂正符号によるエラー訂正能力を超えたエラーが含まれる場合、エラー訂正が行われない。記録装置10においては、各メモリノード11内のMPU19、もしくは専用ハードウェアがエラー訂正処理を行う。
【0098】
読み出されたデータの誤ビット数をカウントする方法として、データコントローラ14がメモリノード11から受け取ったデータの訂正ビット数をカウントする第1のカウント方法と、メモリノード11が、エラー訂正結果に基づく不良ビット情報(訂正ビット数情報)を、読み出したデータに付加してデータコントローラ14に応答する第2のカウント方法とが考えられる。
【0099】
何れのカウント方法においても、データコントローラ14による処理が必要となる。ここで、第2のカウント方法は、複数のメモリノード11において分散処理がなされることになり、データコントローラ14の処理が軽減される。したがって、データコントローラ14自体がボトルネックとなるおそれを低減できる。
【0100】
具体的な故障検知方法としては、例えば、訂正するビット数に閾値を設けておき、データコントローラ14は、あるメモリノード11における訂正ビット数が閾値に到達または超える場合に、当該メモリノード11が故障の可能性があるとしてエラー通知すればよい。この場合は、データ自体は読み出せるので、当該メモリノード11の故障が確定しているわけではないが、故障する可能性の高いメモリノード11を把握することができるので、故障時には迅速な対応ができる可能性が高まる。
【0101】
また、訂正ビット数に対する閾値を複数設定することで、故障可能性に優先度を付加できるため、より効率的な運用が可能になると考えられる。この場合、このシステムを管理するためのデータも増えるため、処理負荷が大きくなる可能性がある。また、故障予知された時点でメモリノード11を交換することで、記憶装置10に対して、より信頼性を確保できると考えられるが、コストも増大する。ユーザーの要求によってこれらを考慮したうえで、訂正ビット数に対する閾値や閾値数を設定するのが望ましい。
【0102】
次に、メモリノード11に格納されるデータを復元するデータ復元処理について、より具体的に説明する。なお、メモリノード11に対するデータ復元処理が必要な場合とは、例えば、あるメモリノード11が故障検知された場合や、メンテナンスなどでメモリノード11を交換する場合である。ここでいうメモリノード11の交換は、記憶装置10に組み込まれたメモリノード11を、ユーザが取り外し、取り外した場所に新たなメモリノード11を取り付けることをいう。交換前と交換後とで、メモリノード11の物理アドレスは変化しない。
【0103】
図14は、第1のデータ復元処理を説明するための概念図である。第1のデータ復元処理では、それぞれメモリノード11に相当する3のメモリノードA、BおよびCでRAIDを構成する。図14において、コントローラ100は、図1におけるデータコントローラ14に対応するもので、各メモリノードA、BおよびCに対するデータの読み書きや各種コマンドの発行、パリティ演算などを行う。バッファ101は、コントローラ100がデータを一時的に記憶するために用いられる。また、図15は、第1のデータ復元処理の一例を示すフローチャートである。メモリノードA、BおよびCは、それぞれデータa、bおよびcが格納されており、何れか(例えばデータc)がパリティであるものとする。
【0104】
以下では、メモリノードBについて故障の検知または交換が行われ、メモリノードBに格納されるデータbを復元する場合を例にとって説明する(図14(a)参照)。図15のフローチャートにおいて、ステップS100でメモリノードBの故障検知またはメモリノードBの交換合図が通知された場合、当該メモリノードBは、交換への待機状態に移行する。次のステップS101で、当該メモリノードBが新たなメモリノードB’に交換される。この時点では、メモリノードB’は空であり、何もデータが格納されていない(図14(b)参照)。
【0105】
メモリノードBがメモリノードB’に交換されたことが確認されると、コントローラ100からメモリノードB’に対してコマンドInfoが送信される(ステップS102)。このコマンドInfoは、目的メモリノードの情報を返すコマンドであり、コントローラ100から送信先までデータが到達するか否かを確認することができる。ステップS102によるコマンドInfoの送信は、例えば、ユーザにより記憶装置10の図示されない操作部や、記憶装置10に接続される上位装置が操作されることにより実行される。
【0106】
次のステップS103で、コントローラ100は、ステップS102で送信したコマンドInfoに対するメッセージReplyが受信されたか否かを判定する。若し、メッセージReplyを受信したと判定した場合、経路異常が無く、メモリノードBからメモリノードB’への交換が正常に完了したと判定できる。この場合、処理がステップS104に移行され、コントローラ100は、交換前のメモリノードBに対してRAIDが構成される他のメモリノードAおよびCに格納されるデータaおよびcを読み出す。
【0107】
次のステップS105で、コントローラ100は、ステップS104でメモリノードAおよびCから読み出されたデータaおよびcを用いて演算を行い、データbを復元する(図14(c)参照)。復元されたデータbは、一時的にバッファ101に格納される。
【0108】
次のステップS106で、コントローラ100は、復元されたデータbをバッファ101から読み出し、交換後のメモリノードB’に書き込む(図14(d)参照)。交換後のメモリノードB’の物理アドレスは、交換前のメモリノードBの物理アドレスと等しいので、交換後のメモリノードB’に対するアクセスは、交換前のメモリノードBへのアクセスと同様にして行われる。これにより、メモリノードBの交換に伴うデータbの復元が完了し、図15のフローチャートによる一連の処理が終了される。
【0109】
一方、ステップS103で、メッセージReplyが受信されないと判定された場合、処理がステップS107に移行され、コントローラ100とメモリノードB’との間の経路に、断線などの経路異常が発生している可能性があるとされる。この場合、経路異常ではなく、交換されたメモリノードB’が故障している可能性もある。コントローラ100は、例えば、経路異常などが発生している旨の通知を出力し、図15のフローチャートによる一連の処理が終了される。
【0110】
メッセージReplyが受信されない原因が経路異常の場合、この位置の物理アドレスが使用できないことになる。ここで、記憶装置10は、ある物理アドレスに対する経路を複数持つため、経路異常に対する耐性は高い。
【0111】
図16は、第2のデータ復元処理を説明するための概念図である。第2のデータ復元処理では、RAIDを構成する3のメモリノードA、BおよびCに対して、スペアのメモリノードSを追加して設ける。なお、図16において、上述した図14と対応する部分には同一の符号を付して、詳細な説明を省略する。また、図17は、第2のデータ復元処理の一例を示すフローチャートである。メモリノードA、BおよびCは、それぞれデータa、bおよびcが格納されており、何れか(例えばデータc)がパリティであるものとする。
【0112】
スペアメモリノードSは、記憶装置10の通常使用時には、データの格納先としては用いられず空のまま保持される。また、スペアメモリノードSは、上述したようにして、他のメモリノードと同様にして分散させて物理アドレスがマッピングされていると好ましい。また、コントローラ100は、スペアメモリノードSの物理アドレスを、予め知っているものとする。
【0113】
以下では、上述と同様に、メモリノードBについて故障の検知または交換が行われ、メモリノードBに格納されるデータbを復元する場合を例にとって説明する(図16(a)参照)。図17のフローチャートにおいて、ステップS200でメモリノードBの故障検知またはメモリノードBの交換合図が通知された場合、当該メモリノードBは、交換への待機状態に移行する。
【0114】
次のステップS201で、コントローラ100は、交換前のメモリノードBに対してRAIDが構成される他のメモリノードAおよびCに格納されるデータaおよびcを読み出す。次のステップS202で、コントローラ100は、ステップS201でメモリノードAおよびCから読み出されたデータaおよびcを用いて演算を行い、データbを復元する(図16(b)参照)。復元されたデータbは、一時的にバッファ101に格納される(図16(c)参照)。
【0115】
次のステップS203で、コントローラ100は、ステップS202で復元されたデータbをバッファ101から読み出して、スペアメモリノードSに格納する(図16(d)参照)。
【0116】
次のステップS204で、当該メモリノードBが新たなメモリノードB’に交換される。この時点では、メモリノードB’は空であり、何もデータが格納されていない(図16(d)参照)。メモリノードBがメモリノードB’に交換されたことが確認されると、コントローラ100は、メモリノードB’に対してコマンドInfoを送信する(ステップS205)。
【0117】
次のステップS206で、コントローラ100は、ステップS205で送信したコマンドInfoに対するメッセージReplyが受信されたか否かを判定する。若し、メッセージReplyを受信したと判定した場合、経路異常が無く、メモリノードBからメモリノードB’への交換が正常に完了したと判定できる。この場合、処理がステップS207に移行され、コントローラ100は、スペアメモリノードSからデータbを読み出して、読み出したデータbを交換後のメモリノードB’に格納する(図16(e)参照)。
【0118】
そして、次のステップS208で、コントローラ100は、スペアメモリノードSからデータbを消去してスペアメモリノードSを空として、スペアのメモリノードとしての機能を回復し、高信頼性を保持する。これにより、メモリノードBの交換に伴うデータbの復元が完了し、図17のフローチャートによる一連の処理が終了される。
【0119】
一方、ステップS206で、メッセージReplyが受信されないと判定された場合、処理がステップS209に移行され、コントローラ100とメモリノードB’との間の経路に、断線などの経路異常が発生している可能性があるとされる。この場合、経路異常ではなく、交換されたメモリノードB’が故障している可能性もある。コントローラ100は、例えば、経路異常などが発生している旨の通知を出力し、図15のフローチャートによる一連の処理が終了される。
【0120】
このように、スペアメモリノードSを用意した場合、データbの計算結果をスペアメモリノードSに格納することを優先するべきである。これにより、最初にメモリノードA、CおよびSでRAIDを再構成させていることになるので、より信頼性が高いシステムを構築可能になる。
【0121】
なお、上述では、スペアメモリノードSを通常のデータ格納には使用しないメモリノードとして別途、設けたが、これはこの例に限定されない。例えば、記憶装置10の複数のメモリノードのうちデータが格納されていないメモリノードを、スペアメモリノードSとして割り当てることもできる。
【0122】
このように、実施形態に係る記憶装置10は、複数のメモリノードに対して複数のデータコントローラを備えることにより、複数の経路を介しての並列処理が可能である。そのため、あるデータコントローラでデータの復元処理を実行しながら、別のデータコントローラで交換中のメモリノードのデータにアクセスすることが可能になる。この場合、実際は、交換中のメモリノードがロックされているので、データコントローラ間の処理により、データ復元とアクセスとの同時進行が実現する。この場合、スループットが落ちる可能性があるが、従来技術よりも格段に高い性能を維持できる。
【0123】
なお、データ復元処理においては、故障検知の条件設定が重要であり、信頼性やランニングコストなどユーザの要求によって条件変更が可能であることが望ましい。
【0124】
なお、本発明は上述した各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、各実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、各実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【0125】
10 記憶装置
1010,1011,1012,1013,1020,1021,1022,1023,1030,1031,1032,1033,1040,1041,1042,1043 グループ
11,11a0,11a1,11a2,11a3 メモリノード
14 データコントローラ
15 セレクタ
17 メモリ
19 MPU
30 データ
31 パリティ
100 コントローラ
101 バッファ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17