(57)【要約】【課題】複数ノードの内部メモリを使用したデータ記憶において、データ損失のリスクを低減しつつ、性能の低下を小さくする。【解決手段】第１メモリストレージノードは、第１ユーザデータブロックを格納する第１内部メモリを含み、第２メモリストレージノードは、第１ユーザデータブロックのパリティデータブロックを格納する第２内部メモリを含む。第１メモリストレージノードは、第１ユーザデータブロックの更新ユーザデータブロックと第１内部メモリから読み出した第１ユーザデータブロックとから、パリティデータブロックを更新するための差分パリティデータブロックを生成し、第２ストレージノードに送信する。第２メモリストレージノードは、差分パリティデータブロックと前記第２内部メモリから読み出した前記パリティデータブロックとから、新たなパリティデータブロックを生成し、パリティデータブロックで更新する。【選択図】図１
2014203233.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークにより接続された複数のメモリストレージノードを含む、ストレージシステムであって、
前記複数のメモリストレージノードは、第１メモリストレージノードと、第２メモリストレージノードと、を含み、
前記第１メモリストレージノードは、第１ユーザデータブロックを格納する第１内部メモリを含み、
前記第２メモリストレージノードは、前記第１ユーザデータブロックのパリティデータブロックを格納する第２内部メモリを含み、
前記第１メモリストレージノードは、前記第１ユーザデータブロックの更新ユーザデータブロックをホストから受信し、
前記第１メモリストレージノードは、前記更新ユーザデータブロックと前記第１内部メモリから読み出した前記第１ユーザデータブロックとから、前記パリティデータブロックを更新するための差分パリティデータブロックを生成し、
前記第１メモリストレージノードは、前記差分パリティデータブロックを前記第２ストレージノードに送信し、
前記第１メモリストレージノードは、前記第１内部メモリにおける前記第１ユーザデータブロックを前記更新ユーザデータブロックにより更新し、
前記第２メモリストレージノードは、前記差分パリティデータブロックと前記第２内部メモリから読み出した前記パリティデータブロックとから、新たなパリティデータブロックを生成し、
前記第２メモリストレージノードは、前記第２内部メモリにおける前記パリティデータブロックを、前記新たなパリティデータブロックで更新する、ストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記複数のメモリストレージノードのそれぞれは、ホスト及び他のメモリストレージノードと複数種別のパケットを使用して通信し、
前記複数種別のパケットパは、それぞれ、パケット種別を示すヘッダを含み、
前記複数のメモリストレージノードのそれぞれは、受信したパケットのヘッダを参照して当該パケットの種別を判定し、当該パケットの種別に応じた処理を行う、ストレージシステム。
【請求項３】
請求項２に記載のストレージシステムであって、
前記第１メモリストレージノードは、前記更新ユーザデータブロックを含むデータ書き込み要求パケットを受信し、
前記第１メモリストレージノードは、前記データ書き込み要求パケットのパケット種別により、前記データ書き込み要求パケットが含むデータが前記更新ユーザデータブロックであると判定し、
前記第２メモリストレージノードは、前記差分パリティデータブロックを含む差分パリティパケットを受信し、
前記第２メモリストレージノードは、前記差分パリティパケットのパケット種別により、前記差分パリティパケットが含むデータが前記差分パリティデータブロックであると判定する、ストレージシステム。
【請求項４】
請求項１、２又は３に記載のストレージシステムであって、
前記第１メモリストレージノードは、第１コントローラを含み、
前記第１コントローラは、前記差分パリティデータブロックの生成と、前記差分パリティデータブロックの送信先メモリストレージノードの決定を、並列に実行する、ストレージシステム。
【請求項５】
請求項１、２又は３に記載のストレージシステムであって、
前記第１メモリストレージノードは、前記第１ユーザデータブロックを前記更新ユーザデータブロックにより更新した後に、前記ホストに書き込み完了を通知する、ストレージシステム。
【請求項６】
請求項１、２又は３に記載のストレージシステムであって、
前記第２メモリストレージノードは、
前記差分パリティデータブロックと共に、前記ホストのネットワークアドレスを受信し、
前記パリティデータブロックを、前記新たなパリティデータブロックで更新した後に、前記ホストに書き込み完了を通知する、ストレージシステム。
【請求項７】
請求項１、２又は３に記載のストレージシステムであって、
前記第２メモリストレージノードは第２コントローラを含み、
前記第２内部メモリはフラッシュメモリであり、
前記パリティデータブロックのサイズは、前記第２内部メモリにおける消去単位サイズの整数倍であり、
前記第２コントローラは、前記パリティデータブロックを前記第２内部メモリから読み出した後、前記新たなパリティデータブロックを作成する前に、前記第２内部メモリに対して、前記パリティデータブロックを格納する領域のデータ消去を指示する、ストレージシステム。
【請求項８】
ネットワークにより接続された複数のメモリストレージノードを含むストレージシステムにおいて、データを更新する方法であって、
前記複数のメモリストレージノードにおける第１メモリストレージノードが、第１ユーザデータブロックの更新ユーザデータブロックをホストから受信し、
前記第１メモリストレージノードが、前記第１メモリストレージノードの第１内部メモリから前記第１ユーザデータブロックを読み出し、
前記第１メモリストレージノードが、前記更新ユーザデータブロックと前記第１ユーザデータブロックとから、前記第１ユーザデータブロックのパリティデータブロックを更新するための差分パリティデータブロックを生成し、
前記第１メモリストレージノードが、前記差分パリティデータブロックを、前記複数のメモリストレージノードにおける第２ストレージノードに送信し、
前記第１メモリストレージノードが、前記第１内部メモリにおける前記第１ユーザデータブロックを前記更新ユーザデータブロックにより更新し、
前記第２メモリストレージノードが、前記第２メモリストレージノードの第２内部メモリから前記パリティデータブロックを読み出し、
前記第２メモリストレージノードが、前記差分パリティデータブロックと前記パリティデータブロックとから、新たなパリティデータブロックを生成し、
前記第２メモリストレージノードが、前記第２内部メモリにおける前記パリティデータブロックを、前記新たなパリティデータブロックで更新する、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムに関する。
【背景技術】
【０００２】
近年、大規模なデータを処理することで有意なデータを抽出することを目的として、高速かつ大容量のストレージシステムが求められている。大容量のストレージシステムを構成するために、一般に、ハードディスクドライブやＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等のディスクドライブが用いられてきた。
【０００３】
上述のようなディスクドライブは、安価でドライブ当たりの容量が大きい反面、計算システムの処理能力に対して得られる単位時間当たりのデータ流量（以下、スループット）は限られている。そのため、これらは、大規模データ処理においてボトルネックとなっている。
【０００４】
計算システムの処理能力の向上に対して、ディスクドライブのスループットの向上は遅く、年々性能差は大きくなっている。そのため、ディスクドライブを用いて大規模データ処理を行う場合、ディスクドライブの低スループットが問題となるケースが存在する。
【０００５】
大規模データ処理分野におけるディスクドライブの低スループットの問題を解決するために、ディスクドライブよりも高速な半導体内部メモリを使う方法がある。しかし、一般に一台の計算機に搭載される内部メモリの容量は、大規模データを格納するには小さい。また、格納すべきユーザデータとデータ処理を行うアプリケーションプログラムとが、内部メモリを共用する関係にあるため、一台の計算機に大規模データを配置することは、不適である。
【０００６】
また、揮発性記憶媒体にデータを記憶する内部メモリを用いる場合、計算機の障害によってデータが消失するリスクがある。揮発性媒体に限らず、記憶媒体上のデータ消失リスクに備えるため、同一のデータを冗長に格納する方法や（例えば、特許文献１）、データをいくつかのブロックに分割し、あるブロックの集合について所定のステップに従ってパリティと呼ばれる冗長データを付加する方法が知られている（例えば、特許文献２）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００５−２３４９１９号公報
【特許文献２】特開２００７−５２８０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
外部ホストからのユーザデータの格納に内部メモリを使用することは、高速アクセスという大きな利点がある。しかし、上述のように、内部メモリを有する一台の装置に大規模データを配置することは、困難又は不適ある。さらに、ハードウェア障害の発生時にはユーザデータを消失してしまうリスクがある。データ消失のリスクは、揮発性記憶媒体の内部メモリを使用する場合に、特に、高い。
【０００９】
これら課題を解決するために、ネットワークで接続された複数ノードによりストレージシステムを構成し、複数ノードの内部メモリに冗長化したデータを分散配置することが重要である。これにより、大規模データを格納すると共に、障害が発生して一部のデータが消失した場合でも、残ったデータから消失したデータを復元できる。
【００１０】
しかし、同一のデータを冗長に格納する方法であっても、パリティを付加する方法であっても、データを冗長化して格納する処理は、冗長化しない処理と比べて、より多くのノードのハードウェアリソース及びネットワークリソースを消費する。そのため、少なからず性能を低下させる。特に、データの更新は、冗長化により追加されたデータの更新を必要とするため、それによる性能の低下は無視できない。
【００１１】
ディスクドライブを用いたストレージシステムにおいては、ディスクドライブのアクセス遅延時間が長いため、冗長化のための処理に多少の時間がかかっても、致命的な問題にはなりにくい。しかし、内部メモリをユーザデータの格納に用いる場合には、内部メモリへのアクセス遅延時間に対して冗長化のための処理時間が相対的に大きくなる。そのため、冗長化処理は、ストレージシステムの性能に致命的な影響を与える可能性がある。
【課題を解決するための手段】
【００１２】
本発明の一態様は、ネットワークにより接続された複数のメモリストレージノードを含む、ストレージシステムである。前記複数のメモリストレージノードは、第１メモリストレージノードと、第２メモリストレージノードと、を含む。前記第１メモリストレージノードは、第１ユーザデータブロックを格納する第１内部メモリを含む。前記第２メモリストレージノードは、前記第１ユーザデータブロックのパリティデータブロックを格納する第２内部メモリを含む。前記第１メモリストレージノードは、前記第１ユーザデータブロックの更新ユーザデータブロックをホストから受信する。前記第１メモリストレージノードは、前記更新ユーザデータブロックと前記第１内部メモリから読み出した前記第１ユーザデータブロックとから、前記パリティデータブロックを更新するための差分パリティデータブロックを生成する。前記第１メモリストレージノードは、前記差分パリティデータブロックを前記第２ストレージノードに送信する。前記第１メモリストレージノードは、前記第１内部メモリにおける前記第１ユーザデータブロックを前記更新ユーザデータブロックにより更新する。前記第２メモリストレージノードは、前記差分パリティデータブロックと前記第２内部メモリから読み出した前記パリティデータブロックとから、新たなパリティデータブロックを生成する。前記第２メモリストレージノードは、前記第２内部メモリにおける前記パリティデータブロックを、前記新たなパリティデータブロックで更新する。
【発明の効果】
【００１３】
本発明の一態様によれば、複数ノードの内部メモリを使用したデータ記憶において、データ損失のリスクを低減しつつ、性能の低下を小さくすることができる。
【図面の簡単な説明】
【００１４】
【図１】実施例１に係るクラスタメモリストレージシステムの構成を模式的に示す。
【図２】実施例１のシステムにおいてネットワーク上を流れるパケットの構成を模式的に示す。
【図３】実施例１におけるパケットの構成を模式的に示す。
【図４】実施例１係るストレージシステムにおいて、冗長化処理を担当する機構の構成を模式的に示す。
【図５】アプリケーションノードのアクセス手段提供機構におけるアプリケーションからのアクセス要求に対する動作フローチャートを示す。
【図６】アプリケーションノードのアクセス手段提供機構におけるネットワークからのパケット受信に対する動作フローチャートを示す。
【図７】実施例１係るストレージシステムの動作フローチャート（データ書き込み完了通知をデータ更新完了時点で送信する場合）を示す。
【図８】実施例１係るストレージシステムの動作フローチャート（データ書き込み完了通知をパリティデータ更新完了時点で送信する場合）を示す。
【図９】実施例２におけるクラスタストレージシステムの構成例を模式的に示す。
【図１０】実施例２において、アプリケーションノードにおけるディスクオフセットとユーザデータブロックとの関係例を示す。
【図１１】実施例２において、メモリストレージノードの内部メモリにおけるデータの例を示す。
【図１２】実施例２におけるデータ位置管理テーブルの例を示す。
【図１３】実施例２におけるパリティノード管理テーブルの例を示す。
【図１４】実施例２における冗長化処理機構の構成例を模式的に示す。
【図１５】実施例２において、ソフトウェアによるアクセス手段提供機構におけるアクセス要求対応テーブルの例を示す。
【図１６】実施例３において、アクセス手段提供機構のハードウェアによる構成例を示す。
【図１７】実施例３において、ハードウェアによるアクセス手段提供機構におけるアクセス要求対応テーブルの例を示す。
【発明を実施するための形態】
【００１５】
以下、添付図面を参照して本発明の実施形態を説明する。本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。特に説明のない場合、各図において共通の構成については同一の参照符号が付されている。
【００１６】
本実施形態は、内部メモリに外部ホストからのユーザデータを格納するストレージシステムにおいて、高性能を維持しつつ冗長化を図る技術に関する。本実施形態のストレージシステムは、ネットワークにより通信可能な複数のノードを含む。本明細書において、このノードを、メモリストレージノードと呼ぶ。本ストレージシステムは、クラスタメモリストレージシステムとも呼ばれる。
【００１７】
各メモリストレージノードはコントローラ、内部メモリ及びネットワークインターフェイスを含む。コントローラは、内部メモリに外部ホストから受信したユーザデータを格納する。コントローラは、ソフトウェアに従って動作するプロセッサ及び／又は特定処理を行うハードウェア論理回路で構成される。メモリストレージノードは、一般的な計算機構成を有していてもよい。
【００１８】
本実施形態のストレージシステムは、ユーザデータを冗長化し、ユーザデータ及び冗長データを複数のメモリストレージノードに分散配置する。本明細書において、この冗長データをパリティデータと呼ぶ。具体的には、本実施形態のストレージシステムは、ユーザデータをｎ個のユーザデータブロックに分割し、ｍ個のパリティデータブロックを生成する。ストレージシステムは、（ｎ＋ｍ）個のデータブロックを、（ｎ＋ｍ）のノードに分散配置する。
【００１９】
本実施形態は、複数メモリストレージノードにおけるデータ配置の冗長化処理による性能低下を抑制するために、冗長化に必要な処理を複数メモリストレージノードに分散させて、それらを並列に実行する。本実施形態は、パリティ計算に、部分計算可能で可換な計算方法（例えば排他的論理和）を使用する。
【００２０】
本実施形態のストレージシステムは、冗長化処理において性能低下の原因となるユーザデータ更新時に行わなければならないパリティデータの更新を、旧ユーザデータと更新ユーザデータから差分パリティを生成する処理と、差分パリティデータと旧パリティデータから新パリティデータを生成する動作を、異なるメモリストレージノードにおいて独立に行う。これにより、ユーザデータ更新処理のボトルネックを解消し、スループットを向上させることができる。
【００２１】
本実施形態は、ホストノードからのユーザデータ更新要求からパリティデータの更新まで、いずれのノードも待機状態にならずに、データ更新処理を完了することができる。
【００２２】
本実施形態は、同じパリティデータを更新しなければならない複数のデータ更新においても、前段の差分パリティデータ生成動作を並列に行うことができる。このとき、ネットワークに対してメモリストレージノード内のデータ転送速度は十分に高速であるために、ネットワークの帯域幅と同等のスループットを保ったままパリティデータ更新が可能である。そのため、ユーザデータの更新要求発生からデータの更新及び冗長化処理完了までを高いスループットを維持したまま行うことができる。
【実施例１】
【００２３】
（構成の説明）
本実施形態の構成例を、図１〜図４を参照して説明する。図１は、本実施形態に係るクラスタメモリストレージシステムを含む、計算機システムの全体構成の概要図である。ストレージシステムは、複数のメモリストレージノード（ＭＳノード）を含む。図１において、ＭＳノード２００ａ〜２００ｅが明示されている。以下において、ＭＳノード２００は、ストレージシステムにおける、１又は複数のＭＳノードを意味する。
【００２４】
ＭＳノード２００ａ〜２００ｅは、それぞれ、内部メモリ２１０ａ〜２１０ｅ及びコントローラ２０５ａ〜２０５ｅを含む。他のＭＳノード２００も同様の要素を含む。内部メモリ２１０ａ〜２１０ｅは、ホストノードからのユーザデータ（冗長化データを含む）を格納する。コントローラ２０５ａ〜２０５ｅは、ユーザデータの読み出し、ユーザデータの書き込み（更新）、冗長化等の処理を行う。
【００２５】
ホストノードであるアプリケーションノード（ＡＰノード）は、ネットワーク（不図示）を介して、ＭＳノード２００と通信する。図１において、ＡＰノード１００ａ、１００ｂが明示されている。以下において、ＡＰノード１００は、いずれか一つ又は複数のＡＰノードを示す。ＡＰノード１００とＭＳノード２００を相互接続するネットワークは、ＭＳノード２００を相互接続するネットワークと同一又は異なる。
【００２６】
各ＡＰノード１００はプロセッサ及びメインメモリを含み、アプリケーションプログラムを実行する。ＡＰノード１００ａ、１００ｂはアクセス元ノードであり、それぞれ、アクセス手段提供機構１１０ａ、１１０ｂを含む。アクセス手段提供機構１１０ａ、１１０ｂは、ソフトウェアに従って動作するプロセッサ又はハードウェア論理回路で構成することができる。アクセス手段提供機構１１０ａ、１１０ｂは、それぞれ、データ位置管理テーブル１１１ａ、１１１ｂを含む。他のＡＰノード１００も同様の構成を有する。ＡＰノード１００は、一般的な計算機構成を有していてもよい。
【００２７】
アクセス手段提供機構１１０ａ、１１０ｂは、アプリケーションプログラムからのアクセス要求を受け取る。アクセス要求は、ＭＳノード２００からのデータ読み出し要求又はＭＳノード２００におけるデータ書き込み（データ更新）要求である。
【００２８】
アクセス手段提供機構１１０ａ、１１０ｂは、それぞれ、データ位置管理テーブル１１１ａ、１１１ｂにおいて、複数のＭＳノード２００の中からアクセス対象となるＭＳノード２００を検索する。データ位置管理テーブル１１１ａ、１１１ｂは、複数のＭＳノード２００に分散して格納されているユーザデータ（ユーザデータブロック）の位置を管理する。
【００２９】
ＡＰノード１００及びＭＳノード２００は、パケットを送受信することによって、ユーザデータの読み出し及び書き込み並びにパリティの更新を行う。図２は、本実施形態のストレージシステムへのアクセスに伴いネットワークを流れるパケットの概略構成を示す。本例において、５種類のネットワークパケットが定義されている。
【００３０】
データ書き込み（データ更新）要求パケット３００は、ＡＰノード１００からＭＳノード２００へ送信され、ユーザデータの更新（書き込み）を要求するパケットである。データ書き込み要求パケット３００は、ヘッダ３１０及びボディ３２０を含む。ボディ３２０は、新たに書き込む更新ユーザデータブロックを含む。
【００３１】
データ書き込み（データ更新）完了通知パケット３０１は、ＭＳノード２００からＡＰノード１００へ送信され、ユーザデータの書き込み完了を通知するパケットである。データ書き込み完了通知パケット３０１は、ヘッダ３１１を含む。他の必要なデータはない。
【００３２】
データ読み出し要求パケット３０２は、ＡＰノードからＭＳノードへ送信され、ユーザデータの読み出しを要求するパケットである。データ読み出し要求パケット３０２は、ヘッダ３１２を含む。他の必要なデータはない。
【００３３】
データ読み出し返答パケット３０３は、ＭＳノード２００からＡＰノード１００へ送信され、要求されたユーザデータブロックを転送するパケットである。データ読み出し返答パケット３０３は、ヘッダ３１３及びボディ３２３を含む。ボディ３２３は、ＭＳノード２００のメモリ２１０から読み出されたユーザデータブロックを含む。
【００３４】
差分パリティパケット３０４は、差分パリティデータブロックを転送するパケットである。差分パリティパケット３０４は、データ書き込み要求パケット３００を受信した第１のＭＳノード２００から、データ書き込み要求を受けたユーザデータブロックに関連するパリティデータブロックを保持している第２のＭＳノード２００へ送信される。差分パリティパケット３０４は、ヘッダ３１４及びボディ３２４を含む。ボディ３２４は、差分パリティデータブロックを含む。
【００３５】
図３は、本実施形態のストレージシステムへのアクセスにおいて使用されるパケット３００〜３０４のヘッダ３１０〜３１４が含む情報を示している。なお、ネットワーク上を転送されるパケット３００〜３０４には、図３に示す情報に加え、ネットワークに依存するルーティング用のヘッダが付加される。
【００３６】
図３において、ヘッダ３１０〜３１４は、それぞれ、パケット種別識別子３３０、パケット長３３１、アクセス先メモリアドレス３３２、要求元ＡＰノードネットワークアドレス３３３、要求先ＭＳノードネットワークアドレス３３４、トランザクション識別子３３５を含む。本例において、これらのフィールドが、ヘッダの先頭から、図示されている順で並んでいる。他例において、これらのフィールドは、これと異なる順序で格納されていてもよい。
【００３７】
パケット種別識別子３３０は、５種類のパケットにおける当該パケットの種別を示す。パケット長３３１は、当該パケットのデータ長を示す。アクセス先メモリアドレス３３２は、ＡＰノード１００からＭＳノード２００へのアクセス要求における、当該ＭＳノード２００の内部メモリ２１０内のアクセス領域を示し、例えば、アクセス領域の先頭アドレスを示す。
【００３８】
以下に説明する例において、ＡＰノード１００からＭＳノード２００への一つの要求パケットは、単一のデータブロックへのアクセスを要求する。ＭＳノード２００からＡＰノード１００へのパケット３０１、３０３は、アクセス先メモリアドレス３３２、要求元ＡＰノードネットワークアドレス３３３、要求先ＭＳノードネットワークアドレス３３４を含まなくともよく、又はそれらの値が規定のデフォルト値でもよい。
【００３９】
トランザクション識別子３３５は、ＡＰノード１００からＭＳノード２００に対するアクセスにおける（アクセス要求パケット３００、３０２に起因する）一連のステップからなるトランザクションの識別子を示す。トランザクション識別子３３５は、アプリケーションノード１００が読み出しまたは書き込みの要求を行う際に、送信元アプリケーションの情報と、ネットワークから返ってくるデータ書き込み完了通知３０１、データ読み出し返答パケット３０３のマッチングを可能とする。
【００４０】
具体的には、データ書き込み要求パケット３００、対応するデータ書き込み完了通知パケット３０１、そして、対応する差分パリティパケット３０４が、同一のトランザクション識別子を含む。同様に、データ読み出し要求パケット３０２及びそれに応答するデータ読み出し返答パケット３０３が、同一のトランザクション識別子を含む。
【００４１】
要求元ＡＰノードネットワークアドレス３３３及び要求先ＭＳノードネットワークアドレス３３４は、一つのトランザクションにおいて、最初にＡＰノード１００からＭＳノード２００に送信されたパケットの送信元及び送信先ノードのネットワークアドレスを示す。ネットワークアドレスは、ネットワーク上においてノードを一意に識別する。
【００４２】
ＡＰノード１００からＭＳノード２００に送信されるデータ書き込み要求パケット３００、データ読み出し要求パケット３０２に起因して生成、送信される他のパケット３０１、３０３、３０４は、それぞれ、起因となるパケットと同一の要求元ＡＰノードネットワークアドレス３３３及び要求先ＭＳノードネットワークアドレス３３４を含む。つまり、同一トランザクションに含まれる全てのパケットは、同一の要求元ＡＰノードネットワークアドレス３３３及び要求先ＭＳノードネットワークアドレス３３４を含む。
【００４３】
図１の例において、ＡＰノード１００ａは、データ書き込み要求３００ａをＭＳノード２００ａに送信する。ＭＳノード２００ａは、ユーザデータのデータ更新に伴う差分パリティパケット３０４ａを作成し、ＭＳノード２００ｃに送信する。ＭＳノード２００ａは、受信したデータブロックを指定されたアドレスに書き込む。
【００４４】
ＭＳノード２００ｃは受信した差分パリティデータブロックを使用して、対応するパリティブロックを更新する。ＭＳノード２００ｃは、パリティ更新後、データ書き込み完了通知パケット３０１ａをＡＰノード１００ａに送信する。これらパケットは同一のトランザクション識別子３３５を含む。
【００４５】
ＡＰノード１００ｂは、データ書き込み要求パケット３００ｂをＭＳノード２００ｄに送信する。ＭＳノード２００ｄは、ユーザデータのデータ更新（データ書き込み）に伴う差分パリティパケット３０４ｂを作成し、ＭＳノード２００ｅに送信する。ＭＳノード２００ｄは、ユーザデータの更新後、データ書き込み完了通知パケット３０１ｂをＡＰノード１００ｂに送信する。ＭＳノード２００ｅは、受信した差分パリティデータブロックを使用して、対応するパリティデータブロックを更新する。これらパケットは同一トランザクションに含まれ、同一のトランザクション識別子３３５を含む。
【００４６】
ＡＰノード１００ｂは、データ読み出し要求パケット３０２をＭＳノード２００ａに送信する。ＭＳノード２００ａは、ＡＰノード１００ｂに対して、指定されたアドレスのデータブロックを含むデータ読み出し返答パケット３０３を、送信する。
【００４７】
図４は、ＭＳノード２００の構成を模式的に示している。本例において、ＭＳノード２００ａ〜２００ｅは同様の構成を有する。ＭＳノード２００は、コントローラ２０５、内部メモリ２１０、ネットワークインターフェイス４０１ａ、４０１ｂを含む。コントローラ２０５、内部メモリ２１０、ネットワークインターフェイス４０１ａ、４０１ｂは、内部バスで通信可能に接続されている。ネットワークインターフェイス４０１ａ、４０１ｂが一つのユニットにまとめられていてもよい。
【００４８】
コントローラ２０５は、冗長化処理機構２１１を含む。冗長化処理機構２１１は、パケット受信部４０２、パリティ処理部４０３、パリティノード管理テーブル（変換機能を含む）４０４、パケット送信部４０５を含む。コントローラ２０５の各機能ブロックは、内部メモリ２１０に格納されるプログラムに従って動作するプロセッサ及び／又は特定処理を行うハードウェア論理回路で構成することができる。コントローラ２０５は、図４に示す冗長化処理機構２１１の他、ＭＳノード２００の他の動作を制御する機能を含む。
【００４９】
内部メモリ２１０は、例えば、ＤＲＡＭやＳＲＡＭ等の揮発性半導体メモリデバイス及び／又はＥＥＰＲＯＭのような不揮発性半導体メモリデバイスを使用して構成することができる。内部メモリ２１０は、ＡＰノード１００からのユーザデータ及びパリティを格納する。コントローラ２０５がプロセッサを含む構成において、内部メモリ２１０は、プロセッサが実行するプログラムを格納する。例えば、プロセッサは、パケット受信プログラム、パリティ処理プログラム、パケット送信プログラム、パリティノード管理テーブル（変換プログラムを含む）を実行する。
【００５０】
（動作の説明）
以下において、図１〜図４が示す構成における動作の概要を、図５〜図８のフローチャートを参照して説明する。ＡＰノード１００は、１又は複数のユーザデータブロックのアクセスを要求する。アクセス手段提供機構１１０は、各ユーザデータブロックに対応する要求パケットを生成し、それをＭＳノード２００に送信する。
【００５１】
図５は、ＡＰノード１００の動作を示すフローチャートである。ＡＰノード１００のアクセス手段提供機構１１０は、アプリケーションプログラムからのアクセス要求に応答して、図５に示すフローチャートが示す処理を実行する。アクセス手段提供機構１１０は、プログラムに従って動作するプロセッサ及び／又は特定の処理を行うハードウェア論理回路で構成される。
【００５２】
アクセス手段提供機構１１０は、アプリケーションプログラムからアクセス要求を受け取る。アクセス要求は、１又は複数のユーザデータブロックのＡＰノード内アドレスを示す。アクセス手段提供機構１１０は、データ位置管理テーブル１１１にアクセスし、要求された各ユーザデータブロックを保持しているＭＳノード２００の識別子と、当該ＭＳノード２００の内部メモリ２１０上のデータ位置（アドレス）を取得する（Ａ０１）。
【００５３】
データ位置管理テーブル１１１は、ＡＰノード１００内で定義、使用されているアドレスと、メモリストレージシステム内のアドレスとを対応付ける。例えば、データ位置管理テーブル１１１は、ＡＰノード１００において定義されている論理記憶ドライブ及び論理記憶ドライブ内オフセットに対して、ＭＳノード２００の識別子及び当該ＭＳノードの内部メモリにおけるアドレスを対応づける（一例について図１０及びその説明を参照）。
【００５４】
アクセス手段提供機構１１０は、アプリケーションプログラムからのアクセス要求の種別を判定する（Ａ０２）。アプリケーションプログラムからのアクセス要求がデータ読み出し要求の場合（Ａ０２：読み出し要求）、アクセス手段提供機構１１０は、データ位置管理テーブル１１１から得た情報に基づいて、指定された各ユーザデータブロックのためのデータ読み出し要求パケット３０２を生成する（Ａ０３）。
【００５５】
アクセス手段提供機構１１０は、データ位置管理テーブル１１１から取得したアクセス先ＭＳノード２００のネットワークアドレス及びメモリアドレスを、各データ読み出し要求パケット３０２に含める。アクセス手段提供機構１１０は、各アクセス先ＭＳノード２００へ、各データ読み出し要求パケット３０２を、ネットワークを介して送信する（Ａ０４）。
【００５６】
アクセス要求がデータ書き込み要求の場合（Ａ０２：書き込み要求）、アクセス手段提供機構１１０は、データ位置管理テーブル１１１から得た情報に基づいて、各データ書き込み要求パケット３００を生成する（Ａ０５）。
【００５７】
アクセス手段提供機構１１０は、データ位置管理テーブル１１１から取得したアクセス先ＭＳノード２００のネットワークアドレス及びメモリアドレスを、各パケットのヘッダ３１０に含める。アクセス手段提供機構１１０は、アプリケーションプログラムから取得した各更新ユーザデータブロックを、各パケットのボディ３２０に含める。
【００５８】
アクセス手段提供機構１１０は、アクセス先ＭＳノード２００のそれぞれへ、データ書き込み要求パケット３００を、ネットワークを介して送信する（Ａ０６）。
【００５９】
図６は、ＡＰノード１００の他の動作を示すフローチャートである。ＡＰノード１００におけるアクセス手段提供機構１１０は、ネットワークから受信したパケットに応答して、図６に示すフローチャートに従った処理を実行する。
【００６０】
アクセス手段提供機構１１０は、受信したパケットの種別を、当該パットのヘッダを参照して判定する（Ａ０７）。ネットワークから受信したパケットがデータ読み出し返答パケット３０３である場合（Ａ０７：データ読み出し返答パケット）、アクセス手段提供機構１１０は、受信したデータ読み出し返答パケット３０３のボディ３２３からユーザデータブロックを取得し、当該ＡＰノード１００の内部メモリに書き込む（Ａ０８）。アクセス手段提供機構１１０は、アプリケーションプログラムに対して、読み出し要求が完了したことを通知する（Ａ０９）。
【００６１】
ネットワークから受信したパケットがデータ書き込み完了通知パケット３０１である場合（Ａ０７：データ書き込み完了通知パケット）、アクセス手段提供機構１１０は、アプリケーションプログラムに対して、書き込み要求が完了したことを通知する（Ａ１０）。
【００６２】
図７及び図８は、次に、ＭＳノード２００の動作を示すフローチャートである。図７のフローチャートにおいて、ユーザデータを更新した（書き込んだ）ＭＳノード２００が、データ書き込み完了通知パケット３０１をＡＰノード１００に送信する。一方、図８のフローチャートにおいて、パリティデータを更新したＭＳノード２００が、データ書き込み完了通知パケット３０１をＡＰノード１００に送信する。
【００６３】
まず、図７のフローチャートを説明する。ＭＳノード２００において、パケット受信部４０２は、ネットワークインターフェイス４０１ｂを介して、パケットを受信する。パケット受信部４０２は、受信したパケットにおいて、ヘッダのパケット種別識別子３３０を参照して、当該パケットの種別を判定する（Ｓ０１）。
【００６４】
パケット種別識別子３３０が、データ書き込み要求パケット３００であることを示している場合（Ｓ０１：データ書き込み要求パケット）、冗長化処理機構２１１は、ステップＳ０２〜Ｓ０７を実行してデータ書き込み動作（ユーザデータ更新動作）を行う。
【００６５】
パケット種別識別子３３０が、差分パリティパケット３０４であることを示している場合（Ｓ０１：差分パリティパケット）、冗長化処理機構２１１は、ステップＳ０８〜Ｓ１０を実行してパリティ更新動作を行う。
【００６６】
パケット種別識別子３３０が、データ読み出し要求パケット３０２であることを示している場合（Ｓ０１：データ読み出し要求パケット）、冗長化処理機構２１１は、ステップＳ１１、Ｓ１２、Ｓ０７を実行してデータ読み出し動作を行う。
【００６７】
まず、ステップＳ０２〜Ｓ０７によるユーザデータの書き込み動作（ユーザデータ更新動作）を説明する。図１におけるデータ書き込み要求パケット３００ａに応答したＭＳノード２００ａの動作は、ステップＳ０２〜Ｓ０７の動作の一例である。
【００６８】
パリティ処理部４０３は、パケット受信部４０２から、パケット種別の判定結果、アクセス先メモリアドレス３３２及び更新ユーザデータブロック（新たに書き込むべきユーザデータブロック）を取得する。パリティ処理部４０３は、内部メモリ２１０におけるアクセス先メモリアドレス３３２が示す領域（指定アドレス領域）から、旧ユーザデータブロックを読み出す（Ｓ０２）。
【００６９】
パリティ処理部４０３は、内部メモリ２１０から読み出した旧ユーザデータブロックと、更新ユーザデータブロックとに対して演算処理を行い、差分パリティデータブロックを生成する（Ｓ０３）。差分パリティデータブロックは、パリティデータブロックを更新するためのデータである。パリティ処理部４０３は、例えば、排他的論理和演算を使用して差分パリティデータブロックを算出する。パリティ処理部４０３は、更新ユーザデータブロックを、内部メモリ２１０の上記指定アドレス領域に書き込む（Ｓ０４）。
【００７０】
パリティノード管理テーブル４０４は、パケット受信部４０２から、アクセス先のメモリアドレス３３２を受け取り、当該アドレスに対応するパリティデータブロックの位置を示すデータに変換する。パリティノード管理テーブル４０４は、当該ＭＳノード２００の内部メモリ２１０に格納されているユーザデーブロックのパリティデータブロックが格納されているＭＳノード（パリティノードとも呼ぶ）２００の識別子及び当該ＭＳノード２００における内部メモリ２１０内のアドレス（メモリアドレス）を示す。
【００７１】
具体的には、当該ＭＳノード２００の内部メモリ２１０においてユーザデータブロックが格納されているアドレスと、対応するパリティデータブロックが格納されているＭＳノード２００の識別子及びメモリアドレスと、を対応付ける。上述のように、本例において、パリティノード管理テーブル４０４（パリティノード管理部とも呼ぶ）は、アドレスを対応付ける情報に加え、アドレス変換機能を含む。
【００７２】
一例において、パリティ処理部４０３による差分パリティデータブロックの生成と、パリティノード管理テーブル４０４によるアドレス変換とは、並列に実行される。これにより処理が高速化される。これらの処理が異なるハードウェア回路により実行される場合、同時に実行される。これらの処理が、プログラムに従って動作するプロセッサにより実行される場合、タイムシェリングにより並列に実行される。
【００７３】
パケット送信部４０５は、パケット受信部４０２及びパリティノード管理テーブル４０４から取得した情報並びにパリティ処理部４０３から取得した差分パリティデータブロックを用いて、差分パリティパケット３０４を生成する（Ｓ０５）。
【００７４】
例えば、パケット送信部４０５は、パケット受信部４０２から、データ書き込み要求パケット３００の、要求元ＡＰノードネットワークアドレス３３３、要求先ＭＳノードネットワークアドレス３３４、トランザクション識別子３３５を取得する。
【００７５】
パケット送信部４０５は、パリティノード管理テーブル４０４から、パリティデータブロックを格納しているＭＳノード２００の識別子及びメモリアドレスを取得する。パケット送信部４０５は、ＭＳノード識別子と対応ネットワークアドレスとを関連付ける情報を参照して、当該ＭＳノード２００のネットワークアドレスを特定する。差分パリティパケット３０４において、アクセス先メモリアドレス３３２は、上述のようにパリティノード管理テーブル４０４から取得された情報から得られた値、を格納する。
【００７６】
差分パリティパケット３０４の要求元ＡＰノードネットワークアドレス３３３、要求先ＭＳノードネットワークアドレス３３４、トランザクション識別子３３５は、受信したデータ書き込み要求３００に含まれるそれらの値と同一である。差分パリティパケット３０４のボディ３２４は、パリティ処理部４０３に生成された差分パリティデータを格納する。
【００７７】
パケット送信部４０５は、さらに、データ書き込み完了通知パケット３０１を生成する（Ｓ０６）。例えば、データ書き込み完了通知パケット３０１において、要求元ＡＰノードネットワークアドレス３３３、要求先ＭＳノードネットワークアドレス３３４、トランザクション識別子３３５の値は、受信したデータ書き込み要求パケット３００のヘッダ３１０と同じである。
【００７８】
パケット長３３１、アクセス先メモリアドレス３３２、要求元ＡＰノードネットワークアドレス３３３、要求先ＭＳノードネットワークアドレス３３４は、データ書き込み完了通知パケット３０１において省略又はデフォルト値であってもよい。
【００７９】
パケット送信部４０５は、ステップＳ０５で生成された差分パリティパケット３０４を対応するパリティデータブロックを格納する他のＭＳノード２００に、ネットワークインターフェイス４０１ｃを介して送信する。パケット送信部４０５は、さらに、データ書き込み完了通知パケット３０１を、ネットワークインターフェイス４０１ｃを介して、データ書き込み要求パケット３００の送信元ＡＰノード１００に送信する（Ｓ０７）。
【００８０】
次に、ステップＳ０８〜Ｓ１０のパリティ更新動作を説明する。図１における差分パリティパケット３０４ａに応答したＭＳノード２００ｃの動作は、ステップＳ０８〜Ｓ１０の動作の一例である。
【００８１】
パリティ処理部４０３は、パケット受信部４０２から、差分パリティパケット３０４の、パケット種別の判定結果、アクセス先メモリアドレス３３２、差分パリティデータブロックを取得する。
【００８２】
パリティ処理部４０３は、内部メモリ２１０に存在する旧パリティデータブロックを読みだす（Ｓ０８）。差分パリティパケット３０４のアクセス先メモリアドレス３３２が、旧パリティデータブロックを格納する領域（指定アドレス領域）を示す。
【００８３】
パリティ処理部４０３は、旧パリティデータブロックと受信した差分パリティデータブロックから、新しいパリティデータブロックを生成する（Ｓ０９）。例えば、パリティ処理部４０３は、排他的論理和演算を使用して、旧パリティデータブロックと差分パリティデータブロックから新しいパリティデータブロックを生成する。新パリティデータブロックには、更新ユーザデータブロックが反映されている。パリティ処理部４０３は、内部メモリ２１０において、生成した新しいパリティデータブロックを、差分パリティパケット３０４の指定アドレス領域に書き込む（Ｓ１０）。
【００８４】
次に、ステップＳ１１、Ｓ１２、Ｓ０７のデータ読み出し動作を説明する。図１において、データ読み出し要求パケット３０２に応答したＭＳノード２００ａの動作は、ステップＳ１１、Ｓ１２、Ｓ０７の動作の一例である。
【００８５】
パリティ処理部４０３は、パケット受信部４０２から、データ読み出し要求パケット３０２のパケット種別判定結果及びアクセス先メモリアドレス３３２を取得する。パリティ処理部４０３は、内部メモリ２１０におけるアクセス先メモリアドレス３３２が示す領域からユーザデータを読み出す（Ｓ１１）。
【００８６】
パケット送信部４０５は、パケット受信部４０２から取得した情報及びパリティ処理部４０３から取得した読み出しデータブロックから、データ読み出し返答パケット３０３を生成する（Ｓ１２）。パケット送信部４０５は、データ読み出し返答パケット３０３を、ネットワークインターフェイス４０１ｃを介して、データ読み出し要求元のＡＰノード１００へ送信する（Ｓ０７）。
【００８７】
具体的には、パケット送信部４０５は、パケット受信部４０２から、データ読み出し要求パケット３０２における、アクセス先メモリアドレス３３２、要求元ＡＰノードネットワークアドレス３３３、要求先ＭＳノードネットワークアドレス３３４及びトランザクション識別子３３５を取得する。パケット送信部４０５は、パリティ処理部４０３から、読み出しデータブロックを取得する。パケット送信部４０５は、これらの値をデータ読み出し返答パケット３０３に含める。
【００８８】
データ読み出し返答パケット３０３において、アクセス先メモリアドレス３３２、要求元ＡＰノードネットワークアドレス３３３、要求先ＭＳノードネットワークアドレス３３４省略されている、又はデフォルト値であってもよい。
【００８９】
次に、図８のフローチャートを説明する。図７のフローチャートとの相違点を主に説明する。図８のフローチャートにおけるデータ読み出し動作は、図７のフローチャートと同じである。異なる点は、図８のフローチャートにおいて、パリティデータを更新したＭＳノード２００が、データ書き込み完了をＡＰノード１００に通知することである。これにより、データ損失のリスクが小さくなる。一方、図７のフローチャートに従う方法により、より早いタイミングでＡＰノード１００にデータ書き込みの完了と通知できる。
【００９０】
図７のフローチャートと比較して、データ書き込み完了通知パケットの生成（Ｓ０６）が、図８のフローチャートのデータ書き込み動作において省略されている。図８のフローチャートと図７のフローチャートとの間において、データ書き込み動作の他のステップは同じである。
【００９１】
図８のフローチャートにおいて、パリティ更新動作が、データ書き込み完了通知パケット３０１を生成する（Ｓ０６）。具体的には、パリティデータブロックを更新するＭＳノード２００が、新パリティデータブロックをその内部メモリ２１０に書き込んだ（Ｓ１０）後に、データ書き込み完了通知パケット３０１を生成し、データ書き込み要求元ＡＰノード１００に送信する（Ｓ０７）。
【００９２】
パケット送信部４０５は、パケット受信部４０２から、差分パリティパケット３０４における、アクセス先メモリアドレス３３２、要求元ＡＰノードネットワークアドレス３３３、要求先ＭＳノードネットワークアドレス３３４及びトランザクション識別子３３５を取得する。要求元ＡＰノードネットワークアドレス３３３は、データ書き込み完了通知パケット３０１の送信先である。
【００９３】
図７及び図８のフローチャートにおいて、異なるＭＳノード２００は、上記の、データ書き込み動作（ユーザデータ更新動作）、パリティ更新動作、データ読み出し動作を、並列に行うことができる。これにより、メモリストレージシステムにおける処理効率及び処理速度を高めることができる。
【００９４】
上記例は、差分パリティデータを一つのＭＳノードのみに送信する。一つのパリティグループが複数のパリティデータブロックを含む場合、ＭＳノード２００は、旧ユーザデータブロックと更新ユーザデータブロックとから、複数の差分パリティブロックを生成する。ＭＳノード２００は、複数の差分パリティブロックを、それぞれ、対応するパリティノード２００に送信する。
【実施例２】
【００９５】
本発明の実施例２を、図９〜図１５の図面を参照して説明する。
【００９６】
（構成の説明）
図９に示す構成例において、ＭＳノード２００ａ〜２００ｄは、それぞれ、サーバ計算機である。ＭＳノード２００ａ〜２００ｄは、パケットの送信および受信が可能なネットワーク（当該ネットワークに対応したスイッチを含む）により、通信可能に接続されている。
【００９７】
図９の計算機システムは、ＡＰノード１００ａと、ＭＳノード２００ａ〜２００ｄのそれぞれとを接続する第１のネットワークスイッチ３０５ａと、ＭＳノード２００ａ〜２００ｄ間を接続する第２のネットワーク３０５ｂを含む。ＡＰノード１００ａとＭＳノード２００ａ〜２００ｄの全てが、一つのネットワークで接続されていてもよい。
【００９８】
メモリストレージシステムにおいて、ユーザデータは、データブロック単位で冗長化される。ユーザデータは同一サイズのデータブロックに分割され、複数のユーザデータブロックからパリティデータブロックが生成される。図９の例において、ユーザデータブロックＤ００〜Ｄ０５及びパリティデータブロックＰ００−０２、Ｐ０３−０５が示されている。
【００９９】
ユーザデータブロックＤ００〜Ｄ０２及びパリティデータブロックＰ００−０２は、パリティグループＰＧ０を構成している。ユーザデータブロックＤ０３〜Ｄ０５及びパリティデータブロックＰ０３−０５は、パリティグループＰＧ１を構成している。本例において、パリティデータブロックＰ００−０２およびＰ０３−０５は、異なるＭＳノード２００ａ、２００ｄにそれぞれ格納されている。
【０１００】
一つのパリティグループの全データブロックは、異なるＭＳノード２００に格納される。パリティグループＰＧ０、ＰＧ１において、一つのデータブロックが破損しても、当該パリティグループ内の他のデータブロックとパリティデータブロックから破損したデータブロックを復元することができる。
【０１０１】
パリティグループを構成するデータブロックの数及びパリティグループ内のパリティデータブロックの数は、選択された冗長化の方法に依存する。一つのＭＳノード２００は、ユーザデータブロックのみ、パリティデータブロックのみ又はユーザデータブロックとパリティデータブロックの双方を格納してもよい。
【０１０２】
図９において、ＡＰノード１００ａにおけるアクセス手段提供機構１１０ａは、当該ＡＰノード１００ａにおいて動作するドライバソフトウェア及びそれに従って動作するＣＰＵ（プロセッサ）１３０ａにより構成されている。ドライバソフトウェアはメインメモリ１３１ａにロードされ、プロセッサにより実行される。アクセス手段提供機構１１０ａは、アプリケーションプログラムに対して、クラスタメモリストレージシステムの記憶領域を一つの論理ディスクドライブとして見せる。
【０１０３】
アクセス手段提供機構１１０ａは、アプリケーションプログラムから、ディスクオフセット及び読み出し／書き込むデータサイズ（データブロック数）を指定するアクセス要求を、受け付ける。ディスクオフセットは、論理ディスクドライブの開始アドレスからのオフセットである。
【０１０４】
図１０は、アクセス手段提供機構１１０ａ内で定義されている、ディスクオフセットとユーザデータブロックとの関係を示す。各ユーザデータブロックにディスクオフセット値が割り当てられており、ユーザデータブロックの開始アドレスに相当する。ユーザデータブロックは同一サイズを有しており、連続するユーザデータブロック間のディスクオフセットの差分は一定である。
【０１０５】
アプリケーションプログラムからの要求において、ディスクオフセット値は、アクセス先の先頭ユーザデータブロックを示す。データサイズは、先頭ユーザデータブロックから続くユーザデータブロック数を示す。
【０１０６】
図１１は、ＭＳノード２００ａの内部メモリ２１０ａにおける、データブロックの配置を示す。内部メモリ２１０ａは、ユーザデータブロックＤ０３及びパリティデータブロックＰ００−０２を格納している。内部メモリ２１０ａにおけるメモリアドレスにおいて、ユーザデータブロックＤ０３及びパリティデータブロックＰ００−０２の格納位置、例えば、先頭アドレスが示されている。
【０１０７】
図１２は、アクセス手段提供機構１１０ａにおける、データ位置管理テーブル１１１ａの構成例を示す。データ位置管理テーブル１１１ａは、ディスクオフセットのカラム１１１１、ノードＩＤのカラム１１１２及びメモリアドレスのカラム１１１３を有する。他のＡＰノード１００のデータ位置管理テーブル１１１も同様のテーブル構成を有する。
【０１０８】
ディスクオフセットのカラム１１１１は、論理ディスクドライブにおけるユーザデータブロックのディスクオフセット値を格納している。ノードＩＤのカラム１１１２は、ディスクオフセット値が対応するユーザデータブロックのデータを格納しているＭＳノード２００の識別子を格納している。メモリアドレスのカラム１１１３は、ディスクオフセットカラム１１１１の各値に対応する、内部メモリ２１０内のアドレスを示す。例えば、これらの値は、内部メモリ２１０においてユーザデータブロックが格納されている領域の先頭アドレスを示す。
【０１０９】
各ＡＰノード１００のアクセス手段提供機構１１０は、データ位置管理テーブル１１１を保持しており、アプリケーションプログラムからの要求に応じて、データ位置管理テーブル１１１を参照し、アクセス先のＭＳノード２００及び内部メモリ２１０内のアドレスを決定する。
【０１１０】
ここで説明する例において、クラスタメモリストレージシステムに対するアクセス単位は、ユーザデータブロックである。アプリケーションプログラムは、アクセス先の１又は複数のユーザデータブロック（の記憶位置）を指定して、データアクセスを行う。指定されるディスクオフセット値は、データ位置管理テーブル１１１のいずれかのエントリの値である。
【０１１１】
図１３は、冗長化処理機構２１１におけるパリティノード管理テーブル４０４の例を示す。図１３は、パリティノード管理テーブル４０４が保持する情報を示す。図９に示す冗長化処理機構２１１ａ〜２１１ｄは、同一のパリティノード管理テーブル４０４を有している。
【０１１２】
パリティノード管理テーブル４０４は、メモリアドレスのカラム４０４１、パリティノード識別子のカラム４０４２、メモリアドレスのカラム４０４３を有する。メモリアドレスのカラム４０４１は、自ノードの内部メモリ２１０に格納されているデータブロック（ユーザデータブロック又はパリティデータブロック）の格納位置、例えば先頭アドレスを示す。パリティノード識別子のカラム４０４２は、自ノードのユーザデータブロックのパリティデータを格納するＭＳノード２００の識別子を格納する。メモリアドレスのカラム４０４３は、パリティノードにおけるパリティデータブロックの格納位置を示す。
【０１１３】
ＭＳノード２００はデータ書き込み要求パケット３００を受け取ったときに、パリティノード管理テーブル４０４を参照し、生成された差分パリティの送り先ＭＳノード２００の識別子をパリティノード識別子のカラム４０４２から取得し、更新すべきパリティデータブロックを格納するアドレスをメモリアドレスのカラム４０４３から取得する。
【０１１４】
図１４は、冗長化処理機構２１１のハードウェエア構成例を示す。図１４において、冗長化処理機構２１１内の異なるブロックは、異なる回路で構成されている。パリティ処理部４０３はメモリコントローラ４１０、パケットバッファ４１１、パリティ計算器４１２、演算結果バッファ４１３を含む。
【０１１５】
メモリコントローラ４１０は、内部バス２１２を介して、内部メモリ２１０に対して、アドレスと読み出し／書き込みコマンドを発行し、内部バス２１２を介して、内部メモリ２１０とデータブロックを送受信する。パケットバッファ４１１は、ネットワークから受信したデータを、内部メモリ２１０からデータブロックを受信するまでの間、一時的に保持する。パリティ計算器４１２は、差分パリティブロック又はパリティブロックを算出する。演算結果バッファ４１３は、パリティ計算の結果を一時的に保持する。
【０１１６】
図１５は、ＡＰノード１００ａにおける、アクセス要求対応テーブル１１３ａの構成例を示す。他のＡＰノード１００も、同様構成のアクセス要求対応テーブルを有する。アプリケーションプログラムからアクセス手段提供機構１１０ａにアクセス要求が発行されたときに使用される。アクセス手段提供機構１１０ａは、アクセス要求対応テーブル１１３ａを管理し、エントリを生成し、削除する。
【０１１７】
１つのエントリは、ＭＳノード２００への１つのアクセス要求パケット（データ読み出要求パケット又はデータ書き込み要求パケット）の情報を示す。アクセス手段提供機構１１０ａは、ネットワークに対して、アプリケーションプログラムからのアクセス要求に応じたアクセス要求パケットを送出してから、当該パケットに対応した応答パケット（データ読み出し返答パケット又はデータ書き込み完了通知パケット）を受信するまで、アクセス要求対応テーブル１１３ａ当該エントリを維持する。
【０１１８】
アクセス要求対応テーブル１１３ａは、ＰＩＤカラム１１３１、ローカルメモリアドレスカラム１１３２、サイズカラム１１３３、種別カラム１１３４、トランザクション識別子カラム１１３５を有する。
【０１１９】
ＰＩＤカラム１１３１は、ＭＳノード２００に送信したアクセス要求パケットへの完了通知の送信先アプリケーションプログラム（プロセス）の識別子（ＰＩＤ）を格納する。ローカルメモリアドレスカラム１１３２は、新データ（読み出されるデータ又は書き込むべき更新データ）を格納するＡＰノード１００ａのメモリアドレスを示す。
【０１２０】
サイズカラム１１３３は、ＭＳノード２００にデータ読み出し又はデータ書き込みを要求したデータのサイズを示す。１つのパケットが単一のユーザデータブロックへのアクセスを要求するため、その値は一定値である。種別カラム１１３４は、要求アクセスの種別（データ読み出し／データ書き込み）を示す。トランザクション識別子（カラム１１３５）は、アクセス要求パケットを生成するごとに割り当てられ、１つのＡＰノード１００内のアクセス要求対応テーブル中で一意となるように決定される。
【０１２１】
（動作の説明）
図９〜図１５を参照して説明した構成例における、データ読み出し及びデータ書き込みを説明する。以下において、説明の便宜上、ステップに符号が付されている。これら符号は図示されず、明細書内において使用されている。
【０１２２】
クラスタメモリストレージシステムは、起動されると、最初のアクセスを受ける前に、パリティグループのそれぞれを、それらのデータブロックの関係が整合するように初期化する。クラスタメモリストレージシステムは、全てのパリティグループのメモリ領域を初期化する。
【０１２３】
図９の例において、ＭＳノード２００ａ〜２００ｄは、ＡＰノード１００ａからの最初のアクセスを受ける前に、パリティグループＰＧ０、ＰＧ１のそれぞれを、それらのデータブロックの関係が整合するように初期化する。例えば、ＭＳノード２００ａ〜２００ｄは、パリティグループＰＧ０、ＰＧ１のすべての記憶領域を０で初期化する。
【０１２４】
他の例において、ＭＳノード２００ａ〜２００ｄは、前回のシステム終了時のユーザデータを、いずれかの不揮発性記憶デバイスから取得し、全データに対してパリティデータを計算、格納する。
【０１２５】
まず、クラスタメモリストレージシステムへのデータ読み出しアクセスの例を説明する。図９〜図１５を参照して説明した構成例において、ディスクオフセット値が３０の、ユーザデータブロックＤ０３を読み出す例を説明する。
【０１２６】
アクセス手段提供機構１１０ａは、アプリケーションプログラムから、データ読み出し要求を受け取る。このデータ読み出し要求は、３０のディスクオフセット値と、１データブロック（１０のディスクオフセット値と同義）のデータサイズを指定する。また、このデータ読み出し要求は、読み出したデータを格納するローカルメモリのアドレスの情報を含む。
【０１２７】
アクセス手段提供機構１１０ａは、データ位置管理テーブル１１１ａにおいて、指定されたユーザデータの格納場所を検索する。アクセス手段提供機構１１０ａは、指定されたユーザデータブロックＤ０３の格納場所が、ＭＳ０（ＭＳノード２００ａ）において、先頭メモリアドレスが１０のメモリ領域であることを知る（１Ｒ０１）。
【０１２８】
次に、アクセス手段提供機構１１０ａは、一意のトランザクション識別子３３５を割り当てて、データ読み出し要求パケット３０２を生成する。データ読み出し要求パケット３０２において、アクセス先メモリアドレス３３２は、上記先頭メモリアドレス指定する。
【０１２９】
要求元ＡＰノードネットワークアドレス３３３及び要求先ＭＳノードネットワークアドレス３３４は、それぞれ、ＡＰノード１００ａ及びＭＳノード２００ａ（ＭＳ０）のネッネットワークアドレスを示す。アクセス手段提供機構１１０ａは、ＡＰノード１００ａのネットワークアドレスを予め保持している他、ＭＳノード２００ａ〜２００ｄの識別子とネットワークアドレスを関連付けて予め保持している。
【０１３０】
アクセス手段提供機構１１０ａは、生成したデータ読み出し要求パケット３０２をネットワークインターフェイス４０１ａへと送る。アクセス手段提供機構１１０ａは、アクセス要求対応テーブル１１３ａに、データ読み出し要求パケット３０２に割り当てたトランザクション識別子と送信元アプリケーションプログラムから取得した情報を対応付けて、記録する（エントリの追加）（１Ｒ０２）。
【０１３１】
ネットワークインターフェイス４０１ａは、データ読み出し要求パケット３０２に、ネットワークプロトコル上必要なヘッダ（ネットワークパケットヘッダ）を追加し、ネットワークへと送出する（１Ｒ０３）。ネットワークスイッチ３５０ａは、ネットワークパケットヘッダに基づいて、ＭＳノード２００ａへとデータ読み出し要求パケット３０２を転送する（１Ｒ０４）。
【０１３２】
ＭＳノード２００ａのネットワークインターフェイス４０１ｂは、データ読み出し要求パケット３０２を含むネットワークパケットを受信する。ネットワークインターフェイス４０１ｂは、ネットワークプロトコル上必要なヘッダをネットワークパケットから取り除き、データ読み出し要求パケット３０２をパケット受信部４０２へと渡す（１Ｒ０５）。
【０１３３】
パケット受信部４０２は、ヘッダ３１２を参照して当該パケットがデータ読み出し要求パケットであると判定する。パケット受信部４０２は、ヘッダ３１２に含まれるアクセス先メモリアドレス３３２とパケットの種別とをメモリコントローラ４１０へ渡す。また、パケット受信部４０２は、パケットバッファ４１１に、０で満たされたデータ列を送る（１Ｒ０６）。
【０１３４】
メモリコントローラ４１０は、メモリアドレス（開始アドレスとサイズ（１データブロックのサイズ）の双方を含む）と読み出し命令を内部メモリ２１０へと送り、データ（ユーザデータブロック）を読み出す。メモリコントローラ４１０は、読み出されたデータをパリティ計算器４１２へ送る（１Ｒ０７）。
【０１３５】
パリティ計算器４１２は、内部メモリ２１０から送られてきたユーザデータブロックと、パケットバッファ４１１に格納されているデータ列（１データブロック）に対して、パリティ計算（排他的論理和）を行い、演算結果を演算結果バッファ４１３に格納する。演算結果は、内部メモリ２１０から読み出したデータと同一である。なお、データ読み出しは、パリティ計算は不要であるが、本例は、データ読み出し及びデータ書き込み動作のためのパリティ処理部４０３の構成を共通化している（１Ｒ０８）。
【０１３６】
パケット送信部４０５は、演算結果バッファ４１３に入っているデータ（読み出したユーザデータブロック）とパケット受信部４０２から送られた送信元ネットワークアドレス３３３およびトランザクション識別子３３５を用いて、データ読み出し返答パケット３０３を生成し、ネットワークインターフェイス４０１ｂへと送る（１Ｒ０９）。
【０１３７】
ネットワークインターフェイス４０１ｂは、当該パケットにネットワークプロトコル上必要なヘッダを追加し、ネットワークへ送出する（１Ｒ１０）。ネットワークスイッチ３５０ａは、ネットワークパケットヘッダに基づいてＡＰノード１００ａへ、ネットワークパケットを送る（１Ｒ１１）。
【０１３８】
アクセス手段提供機構１１０ａは、データ読み出し返答パケット３０３を受信した場合、トランザクション識別子３３５によって、アクセス要求対応テーブル１１３ａにおける対応エントリを検索する。
【０１３９】
アクセス手段提供機構１１０ａは、検索したエントリの情報から、要求元アプリケーションプログラムのメモリ空間にパケットボディのユーザデータをコピーする。コピーが完了後、アクセス手段提供機構１１０ａは、当該アプリケーションプログラムに対して要求完了を通知し、アクセス要求対応テーブル１１３ａのエントリを削除する（１Ｒ１２）。
【０１４０】
次に、クラスタメモリストレージシステムへのデータ書き込みアクセスの例を説明する。図９〜図１５を参照して説明した構成例において、ディスクオフセット値が３０の、ユーザデータブロックＤ０３を更新する例を説明する。
【０１４１】
アクセス手段提供機構１１０ａは、アプリケーションプログラムから、データ書き込み要求を受け取る。このデータ読み出し要求は、３０のディスクオフセット値と、１データブロック（１０のディスクオフセット値と同義）のデータサイズを指定する。また、このデータ書き込み要求は、書き込むべき更新データを格納するローカルメモリのアドレスの情報を含む。
【０１４２】
アクセス手段提供機構１１０ａは、データ位置管理テーブル１１１ａにおいて、指定されたユーザデータの格納場所を検索する。アクセス手段提供機構１１０ａは、指定されたユーザデータブロックＤ０３の格納場所が、ＭＳ０（ＭＳノード２００ａ）において、先頭メモリアドレスが１０のメモリ領域であることを知る（１Ｗ０１）。
【０１４３】
次に、アクセス手段提供機構１１０ａは、一意のトランザクション識別子３３５を割り当て、指定されたローカルメモリアドレスから更新データを取得して、データ書き込み要求パケット３００を生成する。データ書き込み要求パケット３００において、アクセス先メモリアドレス３３２は、上記先頭メモリアドレスを指定する。
【０１４４】
要求元ＡＰノードネットワークアドレス３３３及び要求先ＭＳノードネットワークアドレス３３４は、それぞれ、ＡＰノード１００ａ及びＭＳノード２００ａ（ＭＳ０）のネッネットワークアドレスを示す。
【０１４５】
アクセス手段提供機構１１０ａは、生成したデータ書き込み要求パケット３００をネットワークインターフェイス４０１ａへと送る。アクセス手段提供機構１１０ａは、アクセス要求対応テーブル１１３ａに、データ書き込み要求パケット３００に割り当てたトランザクション識別子と送信元アプリケーションプログラムから取得した情報を対応付けて、記録する（エントリの追加）（１Ｗ０２）。
【０１４６】
ネットワークインターフェイス４０１ａは、データ書き込み要求パケット３００に、ネットワークプロトコル上必要なヘッダ（ネットワークパケットヘッダ）を追加し、ネットワークへと送出する（１Ｗ０３）。ネットワークスイッチ３５０ａは、ネットワークパケットヘッダに基づいて、ＭＳノード２００ａへとデータ書き込み要求パケット３００を転送する（１Ｗ０４）。
【０１４７】
ＭＳノード２００ａのネットワークインターフェイス４０１ｂは、データ書き込み要求パケット３００を含むネットワークパケットを受信する。ネットワークインターフェイス４０１ｂは、ネットワークプロトコル上必要なヘッダをネットワークパケットから取り除き、データ書き込み要求パケット３００をパケット受信部４０２へと渡す（１Ｗ０５）。
【０１４８】
パケット受信部４０２は、ヘッダ３１０を参照して当該パケットがデータ書き込み要求パケットであると判定する。パケット受信部402は、ヘッダ３１０に含まれるアクセス先メモリアドレス３３２と当該パケットの種別をメモリコントローラ４１０へ渡す。また、パケット受信部４０２は、パケットバッファ４１１に、ボディ３２０に格納されている、Ｄ０３の更新ユーザデータブロックを送る（１Ｗ０６）。
【０１４９】
メモリコントローラ４１０は、メモリアドレス（開始アドレスとサイズ（１データブロックのサイズ）の双方を含む）と読み出し命令を内部メモリ２１０へと送り、データ（ユーザデータブロック）を読み出す。メモリコントローラ４１０は、読み出されたデータをパリティ計算器４１２へ送る（１Ｗ０７）。
【０１５０】
パリティ計算器４１２は、内部メモリ２１０から送られてきたユーザデータブロックと、パケットバッファ４１１に格納されている更新ユーザデータブロックに対して、パリティ計算（排他的論理和）を行い、演算結果を演算結果バッファ４１３に格納する。演算結果は、差分パリティデータブロックである（１Ｗ０８）。
【０１５１】
内部メモリ２１０からのユーザデータブロックの読み出し完了後、メモリコントローラ４１０は、同一アドレスを指定して、データ書き込み命令を内部メモリ２１０へ送る。メモリコントローラ４１０は、書き込み命令と共に、パケットバッファ４１１から取得した更新ユーザデータブロックを、内部メモリ２１０に送る。内部メモリ２１０への書き込み完了により、ユーザデータブロックの更新は、完了する（１Ｗ０９）。
【０１５２】
パリティノード管理テーブル４０４は、パケット受信部402からアクセス先メモリアドレス３３２受け取る。パリティノード管理テーブル４０４は、アクセス先メモリアドレス３３２を、当該ユーザデータブロックに関連するパリティデータブロックの格納場所のアドレスに変換する。
【０１５３】
変換されたアドレスは、対応パリティブロックデータを格納するＭＳノード２００の識別子とメモリアドレス（内部メモリ２１０における先頭アドレス）とを示す。パリティノード管理テーブル４０４は、パリティデータブロックを格納するパリティノード２００の識別子とメモリアドレスをパケット送信部４０５に送る（１Ｗ１０）。
【０１５４】
パリティ処理部４０３は、内部メモリ２１０におけるデータ更新（１Ｗ０９）と、差分パリティデータブロックの生成（１Ｗ１０）を、並列に、実行する。これにより、処理を迅速化する。
【０１５５】
パケット送信部４０５は、演算結果バッファ４１３から差分パリティデータブロックを取得する。パケット送信部４０５は、パリティノード管理テーブル４０４から、ＭＳノード識別子、メモリアドレスを取得する。パケット送信部４０５は、パケット受信部402からトランザクション識別子を取得する。
【０１５６】
パケット送信部４０５は、上記取得した情報から、差分パリティパケット３０４を生成し、ネットワークインターフェイス４０１ｂへ送る。パケット送信部４０５は、ＭＳノード識別子をネットワークアドレスに変換して差分パリティパケット３０４に含める（１Ｗ１１）。
【０１５７】
ネットワークインターフェイス４０１ｂは差分パリティパケット３０４にネットワークプロトコル上必要なヘッダを追加してネットワークパケットを生成し、ネットワークへと送出する（１Ｗ１２）。ネットワークスイッチ３５０ｂはネットワークパケットヘッダに基づいてＭＳノード２００ｃ（ＭＳ２）へ、ネットワークパケットを送る（１Ｗ１３）。
【０１５８】
ＭＳノード２００ｃ（ＭＳ２）のネットワークインターフェイス４０１ｂは、ネットワークパケットを受信し、ネットワークプロトコル上必要なヘッダを取り除き、差分パリティパケット３０４をパケット受信部４０２へと渡す（１Ｗ１４）。
【０１５９】
パケット受信部４０２は、ヘッダ３１４を参照して、当該パケットが差分パリティパケット３０４であると判定する。パケット受信部４０２は、ヘッダ３１４に含まれるアクセス先メモリアドレス３３２とパケットの種別を、メモリコントローラ４１０へ渡す。パケット受信部４０２は、パケットバッファ４１１に、ボディ３２４に格納されている差分パリティブロックを送る（１Ｗ１５）。
【０１６０】
メモリコントローラ４１０は、メモリアドレスを指定して、読み出し命令を内部メモリ２１０へ送り、読み出されたパリティデータブロックをパリティ計算器４１２へと送る（１Ｗ１６）。
【０１６１】
パリティ計算器４１２は、内部メモリ２１０から送られてきた旧パリティデータブロックと、パケットバッファ４１１に格納されている差分パリティデータブロックに対してパリティ計算（排他的論理和）を行う。パリティ計算器４１２は、演算結果である新しいパリティデータブロックを、演算結果バッファ４１３に格納する（１Ｗ１７）。
【０１６２】
内部メモリ２１０からの旧パリティデータブロックの読み出しが完了した後、メモリコントローラ４１０は、同一メモリアドレスを指定して、書き込み命令を内部メモリ２１０へ送る。メモリコントローラ４１０は、書き込み命令と共に、演算結果バッファ４１３に格納される新しいパリティデータブロック（更新パリティデータブロック）を、内部メモリ２１０に送る。内部メモリ２１０への更新パリティデータブロックの書き込みが完了した時点で、パリティデータの更新が完了する（１Ｗ１８）。
【０１６３】
（データ書き込み完了の通知）
クラスタメモリストレージシステムは、ＡＰノード１００ａへのデータ書き込み完了の通知を、ユーザデータを更新したＭＳノード（以下において第１のＭＳノード）２００による差分パリティパケットを生成するステップ（１Ｗ１１）の前または後、または、パリティノード２００による新しいパリティデータを内部メモリ２１０に書き込むステップ（１Ｗ１８）の後に行う。
【０１６４】
第１のＭＳノード２００がデータ書き込み完了通知を返す場合、第１のＭＳノード２００は、ステップ１Ｗ１１に追加して、次の動作を行う。パケット送信部４０５は、パケット受信部４０２から要求元ＡＰノードのネットワークアドレス３３３とトランザクション識別子３３５を取得し、データ書き込み完了通知パケット３０１を生成し、ＡＰノード１００ａに送る（１Ｗ１１ａ）。
【０１６５】
パリティノード２００が完了通知を返す場合には、パリティノード２００は、ステップ１Ｗ１８に続いて、次の動作を行う。パケット送信部４０５は、第１のＭＳノード２００から送られてきた差分パリティパケット３０４を受信したパケット受信部４０２から、要求元ＡＰノードのネットワークアドレス３３３とトランザクション識別子３３５を取得し、データ書き込み完了通知パケット３０１を生成し、ＡＰノード１００ａに送る（１Ｗ１９）。
【０１６６】
最後に、ＡＰノード１００ａは、データ書き込み完了通知パケット３０１を受信すると、次の動作を行う。ＡＰノード１００ａのアクセス手段提供機構１１０ａは、データ書き込み完了通知パケット３０１に含まれるトランザクション識別子３３５に基づいてアクセス要求対応テーブル１１３ａを検索して、送信元アプリケーションプログラムを特定し、データの書き込み完了を当該アプリケーションプログラムに通知する（１Ｗ２０）。
【０１６７】
ここまでの一連の処理はそれぞれのアクセス要求ごとに独立かつ並列に行われる。また、第１のＭＳノード２００がデータ書き込み完了通知を返すことで、同じパリティグループに属するデータブロックの更新処理を、同時に行うように見せることができる。
【実施例３】
【０１６８】
本実施例は、アクセス手段提供機構１１０を、物理ディスクドライブのインターフェイスを採用したハードウェアで構成する。本実施例においては、実施例２との相違点を主に説明する。
【０１６９】
（構成の説明）
図１６は、ＡＰノード１００ａにおけるアクセス手段提供機構１１０ａのハードウェア構成例を表す。他のＡＰノードのアクセス手段提供機構１１０も同様の構成を有する。図１６において、アクセス手段提供機構１１０ａ内の各ブロックは、それぞれ、異なる回路である。
【０１７０】
データ位置管理テーブル１１１ａとアクセス要求対応テーブル１１４ａは、アクセス手段提供ハードウェア上に設けられたメモリデバイス２１４またはＡＰノード１００ａが備えているメインメモリ１３１ａ上に配置される。ネットワークインターフェイス４０１ａは、アクセス手段提供ハードウェア１１０ａに含まれる、または、別に搭載され、パケット送信部１４５及びパケット受信部１４２と通信する。
【０１７１】
図１７は、アクセス要求対応テーブル１１４ａの例を示す。他のＡＰノードのアクセス要求対応テーブルも、同様のテーブル構成を有する。アクセス要求対応テーブル１１４ａは、ローカルメモリアドレスのカラム１１４１、ディスクオフセットのカラム１１４２、サイズのカラム１１４３、種別のカラム１１４４、トランザクション識別子のカラム１１４５を有する。
【０１７２】
（動作の説明）
ディスクドライブインターフェイス１２０は読み出し要求を受信すると、アクセス要求発行部１２１に、読み出し／書き込みの種別（要求の種別）、ディスクオフセット、データサイズ、メインメモリ１３１ａのローカルメモリアドレスを送る（２Ｒ０１）。
【０１７３】
アクセス要求発行部１２１は、データ位置管理テーブル１１１ａを検索し、当該ディスクオフセットに対応するＭＳノードの識別子と、メモリアドレスを取得する。アクセス要求対応テーブル１１４ａを参照して一意のトランザクション識別子を決定し、新たなエントリをアクセス要求対応テーブル１１４ａに追加する。具体的には、ローカルメモリアドレス、ディスクオフセット、サイズ、種別、トランザクション識別子の各カラムの値を、アクセス要求対応テーブル１１４ａに書き込む（２Ｒ０２）。
【０１７４】
アクセス要求発行部１２１は、ＭＳノード識別子が対応するネットワークアドレスを特定する。ＭＳノード識別子のネットワークアドレス、メモリアドレス、トランザクション識別子、読み出し／書き込みの種別（パケット種別）、をパケット送信部１４５に渡す（２Ｒ０３）。
【０１７５】
パケット送信部１４５は、データ読み出し要求パケット３０２を生成する。ネットワークインターフェイス４０１ａに送る（２Ｒ０４）。ネットワークインターフェイス４０１ａは、当該のパケットにネットワークプロトコル上必要なヘッダを追加し、ネットワークへと送出する（２Ｒ０５）。
【０１７６】
クラスタメモリストレージシステムの動作は、実施例２におけるステップ１Ｒ０４からステップ１Ｒ１１と同一である。
【０１７７】
ネットワークインターフェイス４０１ａは、ネットワークパケットを受信すると、ネットワークプロトコル上必要なヘッダを削除し、データ読み出し返答パケット３０３をパケット受信部１４２へと渡す（２Ｒ０６）。
【０１７８】
パケット受信部１４２は、データ読み出し返答パケット３０３のヘッダ３１３を参照して、パケット種別を判定する。パケット受信部１４２は、トランザクション識別子３３５をアクセス要求完了通知部１２２に送る。また、ボディ３２３に格納されているデータブロックを、ディスクドライブインターフェイス１２０に送る（２Ｒ０７）。
【０１７９】
アクセス要求完了通知部１２２は、トランザクション識別子に基づいてアクセス要求対応テーブル１１４ａを検索し、ローカルメモリアドレス、ディスクオフセット、サイズ、および読み出し／書き込みの種別を、ディスクドライブインターフェイス１２０に送る（２Ｒ０８）。
【０１８０】
ディスクドライブインターフェイス１２０は、メインメモリ１３１ａにおける上記ローカルメモリアドレスの場所に、データを書き込む。その後、ディスクドライブインターフェイス１２０は、ＣＰＵ１３０ａに読み出し処理完了を通知する。
【０１８１】
メインメモリ１３１ａは、ＣＰＵ１３０ａとアクセス手段提供機構１１０ａからアクセス可能でローカルメモリアドレスによって格納位置が指定可能な、デバイスで構成されてよい。メインメモリ１３１ａ上にデータを書き込む場合、ディスクドライブインターフェイス１２０は、ＤＭＡコントローラとして動作する。ディスクドライブインターフェイス１２０は、指定されたアドレスに書き込みを行ったあと、ＣＰＵ１３０ａに完了を通知する（２Ｒ０９）。
【０１８２】
次に、書き込み時の動作について説明する。ディスクドライブインターフェイス１２０は、書き込み要求を受信すると、アクセス要求発行部１２１に、読み出し／書き込みの種別（要求の種別）、ディスクオフセット、データサイズを送る。また、ディスクドライブインターフェイス１２０は、メインメモリ１３１ａから更新ユーザデータを読み出し、パケット送信部４０５へと転送する（２Ｗ０１）。
【０１８３】
アクセス要求発行部１２１は、データ位置管理テーブル１１１ａを検索し、ディスクオフセットに対応するＭＳノードの識別子と、メモリアドレスを取得する。また、アクセス要求発行部１２１は、アクセス要求対応テーブル１１４ａを参照して一意のトランザクション識別子を決定し、新しいエントリを追加する。具体的には、ローカルメモリアドレス、ディスクオフセット、サイズ、種別、トランザクション識別子の各カラムの値を、アクセス要求対応テーブル１１４ａに書き込む（２Ｗ０２）。
【０１８４】
アクセス要求発行部１２１は、ＭＳノード識別子が対応するネットワークアドレスを特定する。ＭＳノード識別子のネットワークアドレス、メモリアドレス、トランザクション識別子、読み出し／書き込みの種別（パケット種別）、をパケット送信部１４５に渡す（２Ｗ０３）。
【０１８５】
パケット送信部１４５は、データ書き込み要求パケット３００を生成し、パケットのボディ３２０に、書き込む更新ユーザデータブロックを格納し、ネットワークインターフェイス４０１ａに送る（２Ｗ０４）。ネットワークインターフェイス４０１ａは、当該データ書き込み要求パケット３００にネットワークプロトコル上必要なヘッダを追加し、ネットワークへと送出する（２Ｗ０５）。
【０１８６】
クラスタメモリストレージシステムの動作は、実施例２のステップ１Ｗ０４からステップ１Ｗ１９と同一である。
【０１８７】
ネットワークインターフェイス４０１ａは、データ書き込み完了通知パケット３０１を含むネットワークパケットを受信すると、ネットワークプロトコル上必要なヘッダを削除し、パケット受信部１４２へと渡す（２Ｗ０６）。
【０１８８】
パケット受信部１４２は、データ書き込み完了通知パケット３０１のヘッダ３１１のパケット種別識別子３３０によりパケット種別を判定し、トランザクション識別子３３５をアクセス要求完了通知部１２２に送る（２Ｗ０７）。
【０１８９】
アクセス要求完了通知部１２２は、トランザクション識別子に基づいてアクセス要求対応テーブル１１４ａを検索し、ローカルメモリアドレス、ディスクオフセット、サイズおよび読み出し／書き込みの種別を、ディスクドライブインターフェイス１２０に送る（２Ｗ０８）。ディスクドライブインターフェイス１２０は、ＣＰＵ１３０ａに書き込み完了を通知する（２Ｗ０９）。
【０１９０】
以上のように、本実施例により、アクセス手段提供機構１１０を、物理ディスクドライブのインターフェイスを採用した適切なハードウェアで構成することができる。
【実施例４】
【０１９１】
実施例２および実施例３は、ＭＳノード２００が使用する内部メモリ２１０のデバイスの例として、ＤＲＡＭを想定している。本実施例は、ＭＳノード２００の内部メモリ２１０のデバイスとして、フラッシュメモリを使用する。なお、本実施例は実施例２と独立であるため、実施例２の方法を本例の構成に適用した場合、実施例２のステップと同様のステップを実行する。
【０１９２】
ＮＡＮＤ型フラッシュメモリデバイスは、ＤＲＡＭと同様に、メモリアドレスの指定を受けて、読み書きをすることが可能なデバイスである。一方、ＮＡＮＤ型フラッシュメモリデバイスは、データ書き込みにおいて、消去ブロック単位で、一度、データ消去を行うことを必要とする。
【０１９３】
ＮＡＮＤ型フラッシュメモリが、消去ブロック単位よりも小さいサイズの書き込み命令を受けた場合、１消去ブロックの旧データをバッファに読み出し、バッファ上で更新データによって１消去ブロックデータを更新し、メモリ上の当該１消去ブロックデータを消去し、さらに、更新した１消去ブロックデータを書き込む。
【０１９４】
本例において、ＮＡＮＤ型フラッシュメモリデバイスは、ＴＲＩＭコマンドをサポートしている。ＴＲＩＭコマンドは、事前に消去済みブロックを確保しておくために、あるブロックについて未使用であることを、ＮＡＮＤ型フラッシュメモリデバイスに通知する。本例は、このＴＲＩＭコマンドを使用して、書き込み性能の低下を回避する。
【０１９５】
（構成の説明）
本実施例では、図１０のようにディスクオフセット方向に分割するデータブロックのサイズを、内部メモリに用いるフラッシュメモリの一括消去単位の整数倍とし、前述の読み出し、更新、書き出しの一連のステップの発生を抑制する。
【０１９６】
（動作の説明）
本実施例は、実施例２において説明した、図１４に示す冗長化処理機構２１１のメモリコントローラ４１０の動作について、内部メモリ２１０に対するアクセスのステップを、次のように変更する。なお、読み出し要求に対する処理は、実施例２におけると同様である。
【０１９７】
データ書き込み要求に対する処理を説明する。書き込み要求に対して、実施例２におけるステップ１Ｗ０１からステップ１Ｗ０６は、本実施例において同様である。
【０１９８】
メモリコントローラ４１０は、メモリアドレスと読み出し命令を内部メモリ（フラッシュメモリ）２１０へと送り、読み出された古いデータをパリティ計算器４１２へと送る。メモリコントローラ４１０は、読み出しが完了した領域に対してＴＲＩＭコマンドを発行し、フラッシュメモリ２１０に対して未使用ブロックであることを通知する。フラッシュメモリ２１０は、当該領域を消去する（３Ｗ０２）。
【０１９９】
実施例２におけるステップ１Ｗ０８からステップ１Ｗ１５は、本実施例において同様である。
【０２００】
次に、パリティノードの処理を説明する。パリティノード２００のメモリコントローラ４１０は、メモリアドレスと読み出し命令をフラッシュメモリ２１０へと送り、読み出された旧パリティデータをパリティ計算器４１２へと送る。メモリコントローラ４１０は、新たなパリティデータが生成される前に、読み出しが完了した領域に対してＴＲＩＭコマンドを発行し、フラッシュメモリ２１０に対して未使用ブロックであることを通知する。フラッシュメモリ２１０は、当該領域を消去する（３Ｗ０３）。以降のステップは、実施例１のステップ（１Ｗ１７）〜（１Ｗ２０）と同一である。
【０２０１】
本実施例によれば、フラッシュメモリを使用するＭＳノードにおける処理の遅延を低減することができる。
【０２０２】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。  
【０２０３】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実効することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。
【符号の説明】
【０２０４】
１００  アプリケーションノード、１１０  アクセス手段提供機構、１１１ａ、１１１ｂ  データ位置管理テーブル、１１３ａ  アクセス要求対応テーブル、１１４ａ  アクセス要求対応テーブル、１２１  アクセス要求発行部、１２２  アクセス要求完了通知部、２００  メモリストレージノード、２０５  コントローラ、２１０  内部メモリ、２１１  冗長化処理機構、２１２  内部バス、３００  データ書き込み要求パケット、３０１  データ書き込み完了通知パケット、３０２  データ読み出し要求パケット、３０３  データ読み出し返答パケット、３０４  差分パリティパケット、４０２  パケット受信部、４０３  パリティ処理部、４０４  パリティノード管理テーブル、４０５  パケット送信部、４１０  メモリコントローラ、４１１  パケットバッファ、４１２  パリティ計算器、４１３  演算結果バッファ
【図１】
2014203233.tif 000003
【図２】
2014203233.tif 000004
【図３】
2014203233.tif 000005
【図４】
2014203233.tif 000006
【図５】
2014203233.tif 000007
【図６】
2014203233.tif 000008
【図７】
2014203233.tif 000009
【図８】
2014203233.tif 000010
【図９】
2014203233.tif 000011
【図１０】
2014203233.tif 000012
【図１１】
2014203233.tif 000013
【図１２】
2014203233.tif 000014
【図１３】
2014203233.tif 000015
【図１４】
2014203233.tif 000016
【図１５】
2014203233.tif 000017
【図１６】
2014203233.tif 000018
【図１７】
2014203233.tif 000019