(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0010】
(実施形態に適用可能な構成)
以下、実施形態に係る記憶装置について説明する。
図1は、実施形態に係る記憶装置10の一例の構成を示す。記憶装置10は、記憶機能およびデータ転送機能を有する複数のメモリノード11を相互に接続した構成を備え、データ転送機能は、各メモリノード11が効率的にデータパケットを転送する転送方式を備える。
【0011】
図1において、記憶装置10は、複数のメモリノード11に対してデータが分散して格納される。
図1の例では、各メモリノード11は、矩形格子の格子点に配置される。格子点の座標を座標(x,y)で示し、格子点に配置されるメモリノード11の物理アドレスは、当該格子点の座標と対応して物理アドレス(x
D,y
D)で示されるものとする。また、
図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の個数を値N
X、Y方向に並ぶメモリノード11の個数を値N
Yとする。さらに、RAIDを構成するメモリノード11の数を値(N
R+1)として、選択されたメモリノード11に、分散ノード番号[N
D0〜N
DNR]を定義する。以下、分散ノード番号N
Dnが定義されたメモリノード11を、選択メモリノードN
Dxのように記述する。
【0030】
この選択メモリノードN
Dnにおいて、インデクス「n」が、選択された各メモリノード11に一意に付された番号であって、例えば、格子の左上隅からX方向に増加し、さらに、格子の上から下に向けて増加するものとする。
【0031】
なお、RAIDを構成するメモリノード11とは、所定量のデータと、当該所定量のデータから生成されるパリティとがそれぞれ格納される各メモリノード11をいう。例えば、1の論理アドレス(LA:Logical Address)で示されるデータが2以上に分割され、分割されたデータそれぞれを用いて1のパリティが生成される。この分割された各データと、当該データから生成されたパリティとが、それぞれ異なるメモリノード11に格納される。
【0032】
以下では、説明のため、1の論理アドレスLAで示されるデータが、それぞれメモリノード11の書き込み単位(例えばページ)のサイズを有する3のデータに分割され、この3のデータから、当該書き込み単位のサイズを有するパリティが生成されるものとする。すなわち、値N
R=3であり、RAIDを構成するメモリノード11の数は4個となる。また、1のRAIDを構成するメモリノード11の集合を、メモリノードグループと呼ぶ。
【0033】
図3および
図4は、値N
R=3の場合におけるメモリノード11の選択の例である。
図3は、複数のメモリノード11を互いに異なる方向に分割して4のグループを形成した例である。より具体的には、正方格子上に配列された複数のメモリノード11を、X方向およびY方向にそれぞれ2分割し(以下、十字分割と呼ぶ)、4のグループ10
10、10
11、10
12および10
13を形成した例である。
【0034】
また、
図4は、複数のメモリノード11を同一の方向に分割して4のグループを形成した例である。より具体的には、正方格子状に配列された複数のメモリノード11を、X方向に向けて4分割し、Y方向に4のグループ10
20、10
21、10
22および10
23を形成した例である。
【0035】
図3および
図4に示されるように各メモリノード11を分割した配列から、それぞれ1つずつメモリノード11を選択することで、RAIDを構成するメモリノード11を物理的に分散させることができる。
【0036】
図3の例において、選択メモリノードN
D0の物理アドレスをアドレス(x
D,y
D)とすると、このアドレス(x
D,y
D)が示す位置のメモリノード11を十字分割された配列の左上のグループ10
10から選択する場合、次式(1)の条件式を満たすことになる。
【数1】
【0037】
また、これにより、選択メモリノードN
D1〜N
D3の物理アドレスは、それぞれ下記の式(2)、式(3)および式(4)として表される。
【数2】
【数3】
【数4】
【0038】
十字分割の場合、このように選択メモリノードN
D0を選択することで、RAIDを構成するメモリノードグループを一意に決定することができる。
【0039】
例えば、選択メモリノードN
D0としてメモリノード11a
0を選択した場合、上述の式(2)〜式(4)に従い、メモリノード11a
0と、メモリノード11a
1、11a
2および11a
3とによりRAIDを構成するメモリノード11のグループが決定される。選択メモリノードN
D0としてメモリノード11bやメモリノード11cを選択した場合も同様にして、上述の式(2)〜式(4)に従い、RAIDを構成するメモリノードグループが決定される。
【0040】
図4の例において、選択メモリノードN
D0をY方向に4分割された配列の最上部のグループ10
20から選択する場合、次式(5)の条件式を満たすことになる。
【数5】
【0041】
これにより、選択メモリノードN
D1〜N
D3の物理アドレスは、それぞれ下記の式(6)、式(7)および式(8)として表される。
【数6】
【数7】
【数8】
【0042】
すなわち、これは固定数での分割と考えられるので、それぞれ下記の式(9)、式(10)および式(11)を計算することで求められる。なお、演算子「Integer」は、整数部分を抽出することを示し、演算子「%」は、余剰演算子を示す。
【数9】
【数10】
【数11】
【0043】
図3および
図4は、値N
Xおよび値N
Yが等しい値の偶数であり、メモリノード11の配列がX方向およびY方向にそれぞれ対称である場合を示している。これに対して、値N
Xと値N
Yとが異なる場合は、例えば
図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を有し、値N
X=値N
Y=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のグループ10
30、10
31、10
32および10
33に分割される。この例では、各グループ10
30〜10
33において、左上のメモリノード11の各ページに対して、論理アドレスLA=0〜3のデータおよび当該データに対応するパリティP0〜P3が書き込まれている。
【0052】
このシーケンシャル書き込みでは、例えばHDD(Hard Disk Drive)で構成されたストレージ装置の連続した論理アドレスLAのデータ読み出し(シーケンシャル読み出し)において、ヘッドのシークタイム短縮による読み出し時間の高速化が期待できる。
【0053】
図8は、各グループ10
30〜10
33において、1のページにデータまたはパリティを書き込む毎に、メモリノードグループを変更する。すなわち、
図8に示される方法では、データまたはパリティを1のページに書き込む毎に、グループ10
30〜10
33を順次変更している。また、各グループ10
30〜10
33内において、データまたはパリティをページに書き込むメモリノード11を順次変更している。この
図8に示される書き込み方法を、サイクリック書き込みと呼ぶ。
【0054】
図8に例示されるサイクリック書き込みでは、論理アドレスLA=0のデータについて、分割した各データとパリティとを、各グループ10
30〜10
33の左上のメモリノード11のページPage#0に順次書き込む。次に、論理アドレスLA=1のデータについて、分割した各データとパリティとを、各グループ10
30〜10
33内で書き込み先のメモリノード11を右上のメモリノード11に切り替えて、ページPage#0に順次書き込む。そして、論理アドレスLA=2、論理アドレスLA=3の各分割データおよびパリティが、グループ10
30〜10
33を順次変更されると共に、各グループ10
30〜10
33内で書き込み先のメモリノード11を順次変更されて、ページPage#0に順次書き込む。以下、各メモリノード11の同一ページが全て書き込まれたら、ページアドレスが切り替えられる。つまり、論理アドレスLA=4の各分割データおよびパリティを、各グループ10
30〜10
33の左上のメモリノード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が、選択メモリノードN
D0の分散ノード番号に従いグループ10
30に書き込まれる。次のパリティP1を含むメモリノードグループについて、パリティP1が、選択メモリノードN
D1の分散ノード番号に従いグループ10
31に書き込まれる。次のパリティP2を含むメモリノードグループについて、パリティP2が、選択メモリノードN
D2の分散ノード番号に従いグループ10
32に書き込まれる。さらに次のパリティP3を含むメモリノードグループについて、パリティP3が、選択メモリノードN
D3の分散ノード番号に従いグループ10
33に書き込まれる。
【0059】
この方式では、メモリノードグループ内でパリティを格納するメモリノード11が常に同じになる。ただし、同じメモリノード11に全てのパリティを書き込むわけではないので、RAIDレベル4のような性能劣化の問題は起こりにくい。一方で、データ更新が多い場合は、パリティ更新のためにパリティを格納するメモリノード11への書き込みが頻発する。そのため、アクセスの集中により処理性能が劣化する可能性がある。さらに、書き込み回数が制限されるNANDフラッシュのようなメモリで構成された場合、パリティを格納しているメモリノード11が先に寿命を迎え、システムとしてメモリノード11の交換までの運用期間が短いといった問題が起こりうる。
【0060】
パリティを格納するメモリノード11の分散ノード番号を「N
Dγ」とすると、インデクスγは、γ=LA%(N
R+1)=LA%4として選択することができる。
【0061】
上述した
図8は、全てのメモリノードグループが各メモリノード11の同一ページに書き込まれ、ページアドレスが切り替えられた場合に、パリティを格納するメモリノード11の分散ノード番号を変更する例を示す。換言すれば、
図8に示す方法では、各メモリノード11の同一ページ、すなわち、互いに位置が対応する記憶領域に対する全てのメモリノードグループのデータの割り当てが一巡した場合に、パリティの書き込み先のグループを切り替える。
【0062】
図8の例では、パリティP0、P1、P2およびP3をそれぞれ含む各メモリノードグループの各パリティP0、P1、P2およびP3が、選択メモリノードN
D0の分散ノード番号に従いグループ10
30に書き込まれる。当該メモリノードグループの書き込みが完了すると、各メモリノード11のページアドレスPage#0のページ全てに書き込みがなされたので、次からの書き込みは、ページアドレスを切り替えて行われる。次のパリティP4、P5、P6およびP7を含む各メモリノードグループの各パリティP4、P5、P6およびP7が、選択メモリノードN
D1の分散ノード番号に従いグループ10
31に書き込まれる。このように、各メモリノード11の同一ページアドレスのページ全てに書き込みがなされ、ページアドレスの切り替えがなされた場合に、パリティを書き込むメモリノード11の分散ノード番号を切り替える。
【0063】
この方式では、シーケンシャル読み出しにおいて、ページアドレスが変わるまで、パリティを格納するメモリノード11以外の領域にアクセスが偏る。一方で、この方式では、パリティを格納するメモリノード11が分散される。つまり、更新が多い場合でも、パリティの書き込み作業がメモリノード全体に分散されることになる。したがって、この
図8に示す方式ならば、寿命のあるメモリで構成されたシステムであっても、
図9の方式と比較して有利である。
【0064】
パリティを格納するための選択メモリノードN
Dγは、下記の式(12)により決められる。
【数12】
【0065】
図8および
図9で示したパリティを格納するメモリノード11の選択手法は、記憶装置10を含むストレージ装置の構成や、データの読み出し方式を考慮して選択するのが好ましい。
【0066】
以下では、
図8に示した、サイクリック書き込みによりパリティを格納するメモリノードが分散されている場合について述べる。
【0067】
図10は、サイクリック書き込み方式において、論理アドレスLAからメモリノード11の物理アドレス(x,y)とページアドレスPとを決定する例を示す。
図11は、
図10に示される物理アドレス(x,y)の増加方向を示す。
図11の例では、値N
X=12、値N
Y=12として配置された各メモリノード11が十字分割され、グループ10
40、10
41、10
42および10
43が形成されている。例えばグループ10
40において、物理アドレス(x,y)は、X方向にメモリノード11毎に増加し、さらに、Y方向にメモリノード11毎に増加する。
【0068】
RAIDを構成するメモリノードグループを決定する選択メモリノードN
D0〜N
D3は、選択メモリノードN
D0の物理アドレス(x
D,y
D)から一意に決める事ができるので、選択メモリノードN
D0についてのみの議論で十分である。なお、各選択メモリノードN
D0〜N
D3は、それぞれ各グループ10
40、10
41、10
42および10
43に含まれる。
【0069】
図10より、物理アドレス(x
D,y
D)における値x
Dは、[0,1,2,…,(N
X/2)−1]を繰り返すので、x
D=LA%(N
X/2)として求められる。値y
Dは、[0,1,2,…,(N
X/2)−1]をそれぞれ(N
X/2)回繰り返すので、次式(13)により求められる。また、ページアドレスPは、論理アドレスLAが値(N
XN
Y/4)増えるごとに1増えるので、次式(14)により求められる。
【数13】
【数14】
【0070】
図12は、値N
Xおよび値N
Yが2の冪乗、値(N
R+1)が4の冪乗と仮定した場合のメモリノードグループの位置関係を示す。このとき、選択メモリノードN
D0の物理アドレスは、次式(15)に示される範囲内に存在する。なお、
図12において、分散ノード番号を「Num」、物理アドレスを「PA」として示している。
【数15】
【0071】
なお、
図12における各値を一般化すると、値αおよび値βをそれぞれ式(16)および式(17)で示される範囲の整数値とすると、分散ノード番号「N
Dn」のインデクス「n」がn=(α+1)(β+1)−1となり、物理アドレスは、次式(18)で表される。
【数16】
【数17】
【数18】
【0072】
論理アドレスLAに従いメモリノードグループの中からパリティ格納用のメモリノード11の分散ノード番号「N
Dγ」を選択するための一般式は、式(19)として求められる。また、論理アドレスLAからメモリノードの物理アドレス(x
D,y
D)とページアドレスPとを決定する一般式は、それぞれ式(20)、式(21)および式(22)として示される。
【数19】
【数20】
【数21】
【数22】
【0073】
次に、値N
R=3の場合において、ある論理アドレスLAにデータDを書き込む場合の書き込み命令の例を示す。データDは、書き込まれる単位(例えばページ)のサイズに分割される。ここでは、データDは、値N
Rに従いデータd1、d2およびd3に3分割される。また、これらデータd1、d2およびd3の排他的論理和から、パリティpを生成する。
【0074】
図13は、パリティpを格納するメモリノード11の分散ノード番号「N
Dn」を判定するための値γと、データd1〜d3およびパリティpとの対応例を示す。ここで、変数a、b、cおよびdは、各データを格納するための変数である。
【0075】
以上の結果を用いて、論理アドレスLAのデータDを記憶装置10の各メモリノード11に書き込むための書き込み命令Writeは、例えば次式(23)〜(26)のように示される。
Write[x
D(LA),y
D(LA),N
D0,γ(LA),P(LA),a] …(23)
Write[x
D(LA),y
D(LA),N
D1,γ(LA),P(LA),b] …(24)
Write[x
D(LA),y
D(LA),N
D2,γ(LA),P(LA),c] …(25)
Write[x
D(LA),y
D(LA),N
D3,γ(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[x
D(LA),y
D(LA),N
D0,γ(LA),P(LA),a] …(27)
Read[x
D(LA),y
D(LA),N
D1,γ(LA),P(LA),b] …(28)
Read[x
D(LA),y
D(LA),N
D2,γ(LA),P(LA),c] …(29)
Read[x
D(LA),y
D(LA),N
D3,γ(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】
なお、本発明は上述した各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、各実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、各実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。