(57)【要約】  コントローラは、ホストからライト要求を受信し、ライト要求が示す指定アドレスに対応する中間パリティ生成コマンドを、複数の記憶デバイスにおける第１記憶デバイスに、送信する。中間パリティ生成コマンドは、上記指定アドレスの新データと前記新データに更新される前データとから、中間パリティを生成することを指示する。中間パリティ生成コマンドは、新データを格納しているメモリ領域の第１アドレスと、中間パリティを格納するためのメモリ領域の第２アドレスとを含む。第１記憶デバイスは、中間パリティ生成コマンドを受信し、第１アドレスから新データを取得し、新データと、第１記憶デバイスに記憶されている前データと、から中間パリティを生成し、中間パリティを第２アドレスに格納する。
2018051505.tif 000002
【特許請求の範囲】
【請求項１】
メモリ領域を含む、コントローラと、
それぞれが記憶媒体を含む複数の記憶デバイスと、を含み、
前記コントローラは、
ホストからライト要求を受信し、
前記ライト要求が示す指定アドレスに対応する中間パリティ生成コマンドを、前記複数の記憶デバイスにおける第１記憶デバイスに、送信し、
前記中間パリティ生成コマンドは、前記指定アドレスの新データと前記新データに更新される前データとから、中間パリティを生成することを指示し、
前記中間パリティ生成コマンドは、前記新データを格納している前記メモリ領域の第１アドレスと、前記中間パリティを格納するための前記メモリ領域の第２アドレスとを含み、
前記第１記憶デバイスは、
前記中間パリティ生成コマンドを受信し、
前記第１アドレスから前記新データを取得し、
前記新データと、前記第１記憶デバイスに記憶されている前記前データと、から前記中間パリティを生成し、
前記中間パリティを、前記第２アドレスに格納する、ストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記コントローラは、前記複数の記憶デバイスにおける第２記憶デバイスに、新パリティ生成コマンドを送信し、
前記新パリティ生成コマンドは、前記中間パリティと、前記指定アドレスの前データに関する前パリティとから、新パリティを生成することを指示し、
前記新パリティ生成コマンドは、前記第２アドレスを含み、
前記第２記憶デバイスは、
前記新パリティ生成コマンドを受信し、
前記第２アドレスから前記中間パリティを読み出し、
前記中間パリティと、前記第２記憶デバイスに記憶されている前記前パリティとから、前記新パリティを生成する、ストレージシステム。
【請求項３】
請求項２に記載のストレージシステムであって、
前記コントローラは、複数のプロセッサを含み、
前記複数のプロセッサにおける第１プロセッサは、前記ライト要求の処理を開始し、
前記第１プロセッサは、前記複数のプロセッサにより共有された共有記憶領域に、前記ライト要求の処理フェーズを示すライト要求管理情報を格納し、
前記複数のプロセッサにおける第２プロセッサは、
前記第１プロセッサの障害に応答して前記ライト要求の処理を引き継ぎ、
前記共有記憶領域の前記ライト要求管理情報を参照して、前記ライト要求の処理におけるフェーズを特定する、ストレージシステム。
【請求項４】
請求項３に記載のストレージシステムであって、
前記ライト要求管理情報が前記新パリティの生成前であることを示す場合、前記第２プロセッサは、前記第１記憶デバイス及び前記第２記憶デバイスに、前記中間パリティ生成コマンド及び前記新パリティ生成コマンドの処理を中止することを指示する、リセットコマンドをそれぞれ送信する、ストレージシステム。
【請求項５】
請求項４に記載のストレージシステムであって、
前記第１記憶デバイスは、
前記指定アドレスと、前記指定アドレスに関するデータを格納している前記第１記憶デバイスの記憶媒体のアドレスとの対応関係を示すマッピング情報と、前記前データを格納している前記第１記憶デバイスの記憶媒体のアドレスと、を管理し、
前記第１記憶デバイスの記憶媒体において、前記新データを前記前データと異なるアドレスに格納し、
前記マッピング情報において、前記指定アドレスに対応するアドレスを、前記新データのアドレスに更新し、
前記リセットコマンドに応答して、前記マッピング情報において、前記指定アドレスに対応するアドレスを、前データのアドレスを書き戻す、ストレージシステム。
【請求項６】
請求項３に記載のストレージシステムであって、
前記第１記憶デバイスは、前記第１記憶デバイスの記憶媒体において、前記新データを前記前データと異なるアドレスに格納し、
前記第２記憶デバイスは、前記第２記憶デバイスの記憶媒体において、前記新パリティを前記前パリティと異なるアドレスに格納し、
前記ライト要求管理情報が前記新パリティの生成前であることを示す場合、前記第２プロセッサは、前記新データを含むストライプ列のデータを、前記複数の記憶デバイスから取得し、取使した前記ストライプ列のデータからパリティを生成して前記第２記憶デバイスに格納する、ストレージシステム。
【請求項７】
メモリ領域を含む、コントローラと、それぞれが記憶媒体を含む複数の記憶デバイスと、を含むストレージシステムにおける、データ格納の方法であって、
前記コントローラが、ホストからライト要求を受信し、
前記コントローラが、前記ライト要求が示す指定アドレスに対応する中間パリティ生成コマンドを、前記複数の記憶デバイスにおける第１記憶デバイスに、送信し、
前記中間パリティ生成コマンドは、前記指定アドレスの新データと前記新データに更新される前データとから、中間パリティを生成することを指示し、
前記中間パリティ生成コマンドは、前記新データを格納している前記メモリ領域の第１アドレスと、前記中間パリティを格納するための前記メモリ領域の第２アドレスとを含み、
前記第１記憶デバイスが、前記中間パリティ生成コマンドを受信し、
前記第１記憶デバイスが、前記第１アドレスから前記新データを取得し、
前記第１記憶デバイスが、前記新データと、前記第１記憶デバイスに記憶されている前記前データと、から前記中間パリティを生成し、
前記第１記憶デバイスが、前記中間パリティを、前記第２アドレスに格納する、方法。
【請求項８】
請求項７に記載の方法であって、
前記コントローラが、前記複数の記憶デバイスにおける第２記憶デバイスに、新パリティ生成コマンドを送信し、
前記新パリティ生成コマンドは、前記中間パリティと、前記指定アドレスの前データに関する前パリティとから、新パリティを生成することを指示し、
前記新パリティ生成コマンドは、前記第２アドレスを含み、
前記第２記憶デバイスが、前記新パリティ生成コマンドを受信し、
前記第２記憶デバイスが、前記第２アドレスから前記中間パリティを読み出し、
前記第２記憶デバイスが、前記中間パリティと、前記第２記憶デバイスに記憶されている前記前パリティとから、前記新パリティを生成する、方法。
【請求項９】
請求項８に記載の方法であって、
前記コントローラは、複数のプロセッサを含み、
前記複数のプロセッサにおける第１プロセッサが、前記ライト要求の処理を開始し、
前記第１プロセッサが、前記複数のプロセッサにより共有された共有記憶領域に、前記ライト要求の処理フェーズを示すライト要求管理情報を格納し、
前記複数のプロセッサにおける第２プロセッサが、前記第１プロセッサの障害に応答して前記ライト要求の処理を引き継ぎ、
前記第２プロセッサが、前記共有記憶領域の前記ライト要求管理情報を参照して、前記ライト要求の処理におけるフェーズを特定する、方法。
【請求項１０】
請求項９に記載の方法であって、
前記ライト要求管理情報が前記新パリティの生成前であることを示す場合、前記コントローラが、前記第１記憶デバイス及び前記第２記憶デバイスに、前記中間パリティ生成コマンド及び前記新パリティ生成コマンドの処理を中止することを指示する、リセットコマンドをそれぞれ送信する、方法。
【請求項１１】
請求項１０に記載の方法であって、
前記第１記憶デバイスが、前記指定アドレスと、前記指定アドレスに関するデータを格納している前記第１記憶デバイスの記憶媒体のアドレスとの対応関係を示すマッピング情報と、前記前データを格納している前記第１記憶デバイスの記憶媒体のアドレスと、を管理し、
前記第１記憶デバイスが、前記第１記憶デバイスの記憶媒体において、前記新データを前記前データと異なるアドレスに格納し、
前記第１記憶デバイスが、前記マッピング情報において、前記指定アドレスに対応するアドレスを、前記新データのアドレスに更新し、
前記第１記憶デバイスが、前記リセットコマンドに応答して、前記マッピング情報において、前記指定アドレスに対応するアドレスを、前データのアドレスを書き戻す、方法。
【請求項１２】
請求項９に記載の方法であって、
前記第１記憶デバイスが、前記第１記憶デバイスの記憶媒体において、前記新データを前記前データと異なるアドレスに格納し、
前記第２記憶デバイスが、前記第２記憶デバイスの記憶媒体において、前記新パリティを前記前パリティと異なるアドレスに格納し、
前記ライト要求管理情報が前記新パリティの生成前であることを示す場合、前記第２プロセッサが、前記新データを含むストライプ列のデータを、前記複数の記憶デバイスから取得し、取使した前記ストライプ列のデータからパリティを生成して前記第２記憶デバイスに格納する、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムに関する。
【背景技術】
【０００２】
本開示の背景技術として、例えば、国際公開第２０１５／１４５７２４号が知られている。国際公開第２０１５／１４５７２４号は、例えば要約において、以下の構成を開示している。【０００３】
ストレージシステムは記憶装置のストライプ内の複数の不連続領域に対してライトデータを格納する時、当該複数の不連続領域を特定する情報を含んだ新データ送信コマンドとライトデータを記憶装置に送信した後、記憶装置から複数のライトデータと当該複数のライトデータの更新前データから生成される、中間パリティを受信し、パリティを格納する記憶装置に中間パリティ送信コマンドと中間パリティとを送信する。その後複数の記憶装置に、複数の不連続領域を特定する情報を含んだデータ確定コマンドを送信すると、パリティを格納する記憶装置は、受信した中間パリティと、当該中間パリティに対応する更新前パリティとから更新後パリティを生成して、更新後パリティを記憶媒体に格納する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１５／１４５７２４号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記ストレージシステムにおいて、ストレージコントローラと複数記憶装置とは、例えばＳＣＳＩ規格で接続され、パリティ更新の際に以下のステップが実行される。（１）コントローラから記憶装置１へ新データ送信コマンドを発行（新データはコントローラから記憶装置１へ送信される）。（２）記憶装置１から新データ送信コマンドに対する完了応答（完了コマンド）を発行。（３）記憶装置１からコントローラへ中間パリティ送信コマンドを発行（中間パリティは記憶装置１からコントローラへ送信される）。【０００６】
（４）コントローラから中間パリティ送信コマンドに対する完了応答（完了コマンド）を発行。（５）コントローラから記憶装置２へ中間パリティ送信コマンドを発行。（６）記憶装置２から中間パリティ送信コマンドに対する完了応答（完了コマンド）を発行。（７）記憶装置２からコントローラへの新パリティ生成完了応答（完了コマンド）を発行。【０００７】
上記ストレージシステムは、ホストからのデータライトに伴うパリティ更新の度に、ステップ（１）〜（７）のコマンドを発行する。コマンド発行数が多いと、プロセッサの負荷となる。したがって、パリティ更新の際のプロセッサの負荷を抑制し、ストレージシステムの処理性能を向上するために、発行コマンド数の削減が望まれる。
【課題を解決するための手段】
【０００８】
本発明の代表的な一例は、メモリ領域を含む、コントローラと、それぞれが記憶媒体を含む複数の記憶デバイスと、を含むストレージシステムであって、前記コントローラは、ホストからライト要求を受信し、前記ライト要求が示す指定アドレスに対応する中間パリティ生成コマンドを、前記複数の記憶デバイスにおける第１記憶デバイスに、送信し、前記中間パリティ生成コマンドは、前記指定アドレスの新データと前記新データに更新される前データとから、中間パリティを生成することを指示し、前記中間パリティ生成コマンドは、前記新データを格納している前記キャッシュ領域の第１アドレスと、前記中間パリティを格納するための前記キャッシュ領域の第２アドレスとを含み、前記第１記憶デバイスは、前記中間パリティ生成コマンドを受信し、前記第１アドレスから前記新データを取得し、前記新データと、前記第１記憶デバイスに記憶されている前記前データと、から前記中間パリティを生成し、前記中間パリティを、前記第２アドレスに格納する。
【発明の効果】
【０００９】
本発明によれば、パリティ生成を効率化しプロセッサの負荷を抑制することで、ストレージシステムの性能向上を実現できる。
【図面の簡単な説明】
【００１０】
【図１】計算機システムの構成例を示す。
【図２】フラッシュパッケージの構成例を示す。
【図３】ホスト計算機からのライト要求に応じたデータ更新の正常シーケンス例を示す。
【図４】ホスト計算機からのライト要求に応じたデータ更新の正常シーケンス例を示す。
【図５】ライト要求管理情報の構成例を示す。
【図６】中間パリティ生成コマンドの構成例を示す。
【図７】新パリティ生成コマンドの構成例を示す。
【図８】ホスト計算機からのライト要求に応じたデータ更新において、障害が発生した場合の、シーケンス例を示す。
【図９Ａ】リセットコマンドの構成例を示す。
【図９Ｂ】リセットコマンドの構成例を示す。
【図１０】ホスト計算機からのライト要求に応じたデータ更新において、障害が発生した場合の他のシーケンス例を示す。
【図１１】ホスト計算機からのライト要求に応じたデータ更新のシーケンス例を示す。
【図１２】ホスト計算機からのライト要求に応じたデータ更新において、障害が発生した場合の他のシーケンス例を示す。
【図１３】ホスト計算機からのライト要求に応じたデータ更新の他の正常シーケンス例を示す。
【図１４】ホスト計算機からのライト要求に応じたデータ更新の他の正常シーケンス例を示す。
【図１５】図１３及び図１４に示す正常シーケンスにおいて障害が発生した場合のシーケンス例を示す。
【発明を実施するための形態】
【実施例１】
【００１１】
以下、図面を参照しながら実施例を説明する。ただし、本実施例は、発明を実現するための一例に過ぎず、発明の技術的範囲を限定するものではない。また、各図において共通の構成については、同一の参照番号が付されている。【００１２】
なお、以後の説明では「テーブル」という表現にて本発明の情報を説明するが、これら情報は必ずしもテーブルによるデータ構造で表現されていなくても良く、「リスト」、「ＤＢ（データベース）」、「キュー」等のデータ構造やそれ以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「テーブル」、「リスト」、「ＤＢ」、「キュー」等については、単に「情報」と呼ぶこともできる。また、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ＩＤ」という表現を用いることが可能であり、これらについてはお互いに置換が可能である。【００１３】
以後の説明では「プログラム」を主語として説明を行うことがあるが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート（通信制御装置）を用いながら行うため、プロセッサを主語とした説明としてもよく、コントローラを主語とした説明としてもよい。また、プログラムを主語として開示された処理は管理装置や情報処理装置等の計算機が行う処理としてもよい。プログラムの一部または全ては専用ハードウェアで実現してもよく、また、モジュール化されていてもよい。各種プログラムはプログラム配布サーバや記憶メディアによって各計算機にインストールされてもよい。【００１４】
また、近年、計算機やストレージシステムでは、大量データの高速解析や高速Ｉ／Ｏ処理のために、大容量のメモリ領域を必要としている。例えば計算機ではインメモリＤＢのようなアプリケーションである。しかしながら、装置に搭載可能なＤＲＡＭ容量は、コスト上の理由や電気的な実装制約によって限られていた。このため、緩和手段として、ＤＲＡＭよりは遅いもののＨＤＤに比べれば高速なＮＡＮＤフラッシュメモリといった半導体記憶媒体を利用する動きが出てきている。【００１５】
これらの半導体記憶媒体はＳＳＤ（Ｓｏｌｉｄｅ Ｓｔａｔｅ Ｄｒｉｖｅ）という名前で呼ばれており、ＳＡＴＡ（Ｓｅｉｒａｌ ＡＴＡ）やＳＡＳ（Ｓｅｒｉａｌ Ａｔｔａｃｈｅｄ ＳＣＳＩ）といったディスクＩ／Ｏインターフェイス接続とそのプロトコルを介して計算機やストレージコントローラに接続され、利用されてきた。【００１６】
しかし、計算機の性能向上に対し、これらのディスクＩ／Ｏインターフェイスとプロトコルを介してのアクセスは、オーバヘッドが大きくレイテンシが大きい。そこで、より近年ではプロセッサに直結できる汎用バスであるＰＣＩ−Ｅｘｐｒｅｓｓ（ＰＣＩｅ)上に搭載でき、かつ、その高速性を活かすために新たに策定されたＮＶＭｅ（Ｎｏｎ Ｖｏｌａｔｉｌｅ Ｍｅｍｏｒｙ Ｅｘｐｒｅｓｓ）プロトコルを用いて、低レイテンシでアクセス可能なＰＣＩｅ接続型ＳＳＤ（ＰＣＩｅ−ＳＳＤ又はＰＣＩｅ−Ｆｌａｓｈ）が登場してきている。【００１７】
本実施形態は、例えば、パリティ生成において、記憶デバイスからコントローラ上のメモリに直接アクセス可能とするＮＶＭｅコマンドを使用する。ＮＶＭｅでは、データ送受信のためのサポートするＩ／Ｏコマンドは非常に簡素であり、サポート必須コマンドは、Ｗｒｉｔｅ、Ｒｅａｄ、Ｆｌｕｓｈの３つのみである。また、ＳＡＳなどの従来ディスクＩ／Ｏプロトコルでは、ホストが主体となって、コマンドやデータを装置側へ送信していたのに対し、ＮＶＭｅでは、干すトからはコマンドが作成されたことのみを装置に通知し、コマンドそのものの取得やデータの転送、装置側が主体となって実施される。【００１８】
すなわち装置側からのアクションに置き換えられて実施される。例えば装置が取得したコマンドの内容がＷｒｉｔｅだった場合、従来であればホストが装置に向けてWriteデータを送信するが、ＮＶＭｅでは、装置がホストのデータをＲｅａｄする動作によって実現される。逆に、コマンドの内容がＲｅａｄだった場合、Ｒｅａｄコマンドの処理は、装置がホストのメモリへデータをＷｒｉｔｅする動作によって実現される。【００１９】
すなわち、ＮＶＭｅでは、コマンドの受領、データのリード・ライト転送共に、動作契機は装置側が握っているので、ホストからの要求をいつでも受け付けるための余計なリソース確保が不要となる。【００２０】
よって、本実施例では、発行コマンドにコントローラのアドレス情報、ストレージデバイスのアドレス情報を含めることで、パリティ生成を効率化し、プロセッサの負荷を抑制することで、ストレージシステムの処理性能を向上させる。【００２１】
図１は、実施形態に係る計算機システム１００の構成例を示す。計算機システム１００は、ホスト計算機１０１、管理装置１０２、ストレージシステム１０４、を含む。ホスト計算機１０１、管理装置１０２、ストレージシステム１０４は、ネットワーク１０３で互いに接続される。ネットワーク１０３は、例えば、Ｓｔｏｒａｇｅ Ａｒｅａ Ｎｅｔｗｏｒｋ（ＳＡＮ）である。管理装置１０２はネットワーク１０３とは別の管理ネットワークを介し他の装置と接続されてもよい。【００２２】
ホスト計算機１０１は、アプリケーションプログラムを実行する計算機であり、ストレージシステム１０４の論理的な記憶領域にネットワーク１０３経由でアクセスする。ホスト計算機１０１は、例えば、入力デバイス、出力デバイス、ＣＰＵ（ＣｅｎｔｒａｌＰｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ）、メモリ、ディスクアダプタ、ネットワークアダプタ、及び、二次記憶デバイスを含む（不図示）。【００２３】
ホスト計算機１０１は、ユーザが使用するアプリケーションプログラム、ストレージシステム１０４とのインターフェイス制御をおこなうストレージシステム制御プログラムを実行する。ホスト計算機１０１は、ストレージシステム１０４が提供するボリュームを使用する。ホスト計算機１０１は提供されたボリュームに対して、リードコマンドやライト要求を発行することで、ボリュームに格納されたデータにアクセスする。【００２４】
管理装置１０２は、ストレージシステム１０４を管理し、例えばストレージシステム１０４の記憶領域の構成を行う。管理装置１０２は、ストレージシステム１０４の管理を行うための管理プログラムを実行する。管理装置１０２は、汎用のコンピュータと同様に、キーボードやディスプレイ等の入出力デバイス、ＣＰＵ、メモリ、ネットワークアダプタ、及び、二次記憶デバイスを有する。【００２５】
ストレージシステム１０４は、システムコントローラ１０５と複数のフラッシュパッケージ１１３を含む。ストレージシステム１０４は、フラッシュパッケージ１１３の記憶領域にデータを格納する。ストレージシステム１０４は、ホスト計算機１０１に対して１以上のボリュームを提供する。【００２６】
システムコントローラ１０５は、ホストインターフェイス（Ｉ／Ｆ）１０６、保守Ｉ／Ｆ、ドライブＩ／Ｆ１０８、ＭＰ（Ｍｉｃｒｏ Ｐｒｏｃｅｓｓｏｒ）１０９、メモリユニット１１９、複数のフラッシュパッケージ１１３を含む。これら構成要素は、バス１１２によって相互接続されている。【００２７】
ホストＩ／Ｆ１０６は、ストレージシステム１０４がホスト計算機１０１のイニシエータと通信するために用いられる、インターフェイスデバイスである。ホスト計算機１０１がボリュームにアクセスするために発行する要求（リード要求、ライト要求等）は、ホストＩ／Ｆ１０６に到来する。ストレージシステム１０４は、ホスト計算機１０１に、ホストＩ／Ｆ１０６から情報（例えばリードデータ）を返却する。【００２８】
保守Ｉ／Ｆ１０７は、ストレージシステム１０４が管理装置１０２と通信するためのインターフェイスデバイスである。管理装置１０２からのコマンドは保守Ｉ／Ｆ１０７に到来する。ストレージシステム１０４は、管理装置１０２に、保守Ｉ／Ｆ１０７から情報を返す。【００２９】
図１は、ホストＩ／Ｆ１０６と保守Ｉ／Ｆ１０７がいずれもネットワーク１０３に接続された構成を示すが、ホストＩ／Ｆ１０６が接続されるネットワークと、保守Ｉ／Ｆ１０７が接続されるネットワークが、異なるネットワークであってもよい。【００３０】
ＭＰ１０９は、システムコントローラ１０５内に１又は複数含まれ、ストレージシステム１０４の各種制御を行うためのプログラムを実行する。メモリユニット１１９は、キャッシュメモリ１１０、共有メモリ１１１、ローカルメモリ１１８で構成される。キャッシュメモリ１１０、共有メモリ１１１、ローカルメモリ１１８は、物理的に一つのメモリ内で領域を分割して使用されてもよいし、それぞれが物理的に別個のメモリで構成されてもよい。【００３１】
キャッシュメモリ１１０は、キャッシュ領域を提供する。キャッシュメモリ１１０は、例えばＲＡＭ（Ｒａｎｄｏｍ Ａｃｃｅｓｓ Ｍｅｍｏｒｙ）で構成され、フラッシュパッケージ１１３に読み書きされるデータを一時的に格納する。共有メモリ１１１は、ハードディスクやフラッシュメモリ、ＲＡＭ等で構成され、ストレージコントローラで動作するプログラムや構成情報等を格納する。ローカルメモリ１１８は、ＭＰ１０９が実行するプログラムや、ＭＰ１０９が使用する情報を一時的に保存するために用いられる。【００３２】
キャッシュメモリ１１０は、ボリューム（記憶デバイス）に対するライトデータ、またはボリューム（記憶デバイス）から読み出されたデータ（リードデータ）を一時的に記憶する一時記憶領域として用いられる。【００３３】
具体的には、例えば、キャッシュメモリ１１０に記憶されたリードデータがホスト計算機１０１に返却された後も、当該リードデータは消去せずにキャッシュメモリ１１０に記憶されたままでもよい。【００３４】
また、例えば、リードデータがホスト計算機１０１に返却された後は、当該リードデータがキャッシュメモリ１１０から削除されてもよい。キャッシュメモリ１１０には、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の揮発性記憶媒体が用いられるが、キャッシュメモリ１１０に不揮発性メモリが用いられてもよい。【００３５】
共有メモリ１１１は、ＭＰ１０９が使用する管理情報を格納するための共有記憶領域を提供する。キャッシュメモリ１１０と同様、共有メモリ１１１には、ＤＲＡＭ、ＳＲＡＭ等の揮発性記憶媒体が用いられるが、不揮発性記憶媒体が用いられてもよい。【００３６】
フラッシュパッケージ１１３は、ホスト計算機１０１からのライトデータを記憶するための不揮発性記憶媒体を有する記憶デバイスである。フラッシュパッケージ１１３は記憶媒体として、フラッシュメモリ等の不揮発性半導体メモリ又は他の記憶媒体を用いる。フラッシュパッケージ１１３の一例は、ＳＳＤである。【００３７】
高信頼化のため、複数のフラッシュパッケージ１１３が、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）グループ１１５を構成する。ＭＰ１０９は、一台のフラッシュパッケージ１１３が故障しても、そのフラッシュパッケージ１１３のデータを回復できるＲＡＩＤ機能を有する。【００３８】
ＲＡＩＤグループ１１５において、一つ以上の論理ボリュームが作成される。一つの論理ボリュームは、ＲＡＩＤグループ１１５を構成するフラッシュパッケージ１１３が有する物理的な記憶領域と関連付けられる。【００３９】
ＲＡＩＤ機能は、ホスト計算機１０１から受信したライトデータと冗長データのセットを、ＲＡＩＤグループ１１５のフラッシュパッケージ１１３に分散して格納する。複数のＲＡＩＤレベルが知られている。例えば、ＲＡＩＤ１は、ライトデータ及びそのコピーを、異なるフラッシュパッケージ１１３に格納する。【００４０】
その他、ＲＡＩＤ５は、ライトデータ及び一つのパリティからなる冗長データセットを異なるフラッシュパッケージ１１３に分散して格納し、ＲＡＩＤ５は、ライトデータ及び二つのパリティからなる冗長データを異なるフラッシュパッケージ１１３に分散して格納する。【００４１】
なお、本実施例ではホスト計算機１０１がネットワークを介してシステムコントローラ１２に接続されている例を示すが、ストレージシステム４２のハードウェア構成は、サーバと同様の構成であってもよい。たとえば本実施例のストレージシステム１０４に代えて、パーソナルコンピュータ等の汎用のコンピュータ（以下、これを単に「コンピュータ」と呼ぶ）に複数のフラッシュパッケージ１１３を搭載（または接続）し、コンピュータ上で、各種プログラムを実行させてもよい。この場合、コンピュータがサーバからＩ／Ｏ要求を受け付けて、フラッシュパッケージ１１３へのデータの格納、またはフラッシュパッケージ１１３からのデータの読み出しを行う。【００４２】
また、コンピュータ上で各種プログラムを実行させる構成の場合、ストレージシステム上で実行される各種プログラムとサーバで実行されるプログラムがいずれも、同一コンピュータ上で実行されるように構成されていてもよい。この場合、たとえば仮想マシンを形成するハイパーバイザプログラムをコンピュータ上で実行することで、コンピュータ上に少なくとも、サーバで実行されるプログラムを実行するサーバ仮想マシンと、ストレージシステム上で各種プログラムを実行するストレージ仮想マシンとを形成すればよく、リード要求またはライト要求は、サーバ仮想マシンから発行される。よって、以降のホスト計算機１０１は「サーバ仮想マシン」と置き換えてもよい。【００４３】
図２は、フラッシュパッケージ１１３の構成例を示す。フラッシュパッケージ１１３は、デバイスコントローラ２１０と、ホスト計算機１０１からのライトデータを記憶するための記憶媒体であるフラッシュメモリ２８０を有する。デバイスコントローラ２１０は、ドライブＩ／Ｆ２１１、デバイスプロセッサ２１３、メモリ２１４、フラッシュＩ／Ｆ２１５、ロジック回路２１６を有し、これらは内部ネットワーク２１２を介して相互接続されている。ロジック回路２１６は、例えば、パリティ演算や、暗号処理や圧縮処理を行う。【００４４】
ドライブＩ／Ｆ２１１は、システムコントローラ１０５と通信するためのインターフェイスデバイスである。フラッシュＩ／Ｆ２１５は、デバイスコントローラ２１０がフラッシュメモリ２８０と通信するためのインターフェイスデバイスである。【００４５】
デバイスプロセッサ２１３は、フラッシュパッケージ１１３の制御を行うためのプログラムを実行する。本例では、以下で説明するフラッシュパッケージ１１３が行う処理は、デバイスプロセッサ２１３がプログラムを実行することにより行われる。【００４６】
メモリ２１４は、デバイスプロセッサ２１３が実行するプログラムや、デバイスプロセッサ２１３が使用する制御情報等を格納するためのものである。フラッシュメモリ２８０に読み書きされるデータを一時的に格納する一時格納領域も備える。【００４７】
デバイスプロセッサ２１３は、ＭＰ１０９から要求を受け付け、受けたコマンドに従う処理を実行する。例えば、デバイスプロセッサ２１３デバイスデバイスプロセッサ２１３は、ＭＰ１０９からライトコマンドを受信し、そのライトコマンドのデータをフラッシュメモリ２８０に書き込む。デバイスプロセッサ２１３は、メモリ２１４内の一時格納領域又はフラッシュメモリ２８０にデータを書込んだ後、ライトコマンドの完了応答（応答コマンド）をＭＰ１０９に返す。【００４８】
デバイスプロセッサ２１３は、ＭＰ１０９からリードコマンドを受信し、そのリードコマンドのデータをメモリ２１４内の一時格納領域又はフラッシュメモリ２８０から読み出して、ＭＰパッケージ１０９に返す。ＭＰ１０９からフラッシュパッケージ１１３へのコマンド及びコマンドに対するフラッシュパッケージ１１３の処理の詳細は後述する。【００４９】
ストレージシステム１０４は、例えば、ログ構造ファイルシステムのように、新データを記憶媒体であるフラッシュパッケージ１１３内のフラッシュメモリ２８０に追記する。ストレージシステム１０４は、ホスト計算機１０１からの要求が示す論理アドレスで特定されるデータに更新要求があると、更新データを前データに上書きすることなく、フラッシュメモリ２８０において、前データと異なる記憶領域に追記する。フラッシュメモリ２８０は、ホスト計算機１０１からの要求が示す論理アドレスの過去データと現在データと、を保持する。【００５０】
また、ストレージシステム１０４は、例えばフラッシュパッケージ１１３のメモリ２１４にマッピング情報を有する。マッピング情報とは、論理アドレスと物理アドレスを対応づけて管理する情報である。論理アドレスとは、ホスト計算機１０１がアクセスするためのアドレス空間におけるアドレスであり、ボリュームへのＩ／Ｏアドレス（ボリューム識別子とボリューム内アドレス）である。物理アドレスとは、フラッシュメモリ２８０内でデータが実際に格納されるアドレスである。【００５１】
ホスト計算機１０１からデータの更新要求があった場合、ストレージシステム１０４は、更新要求が示す論理アドレスに対応付けられていた前データが格納されていた物理アドレスから、更新データが格納された物理アドレスに対応付けを変更することでマッピング情報の更新を行う。マッピング情報は、更新データの物理アドレスのみを保持しておく構成でも、更新データの物理アドレスおよび前データの物理アドレスの双方を保持してもよい。【００５２】
マッピング情報が更新データの物理アドレスのみを保持する場合は、ストレージシステム１０４は、更新データをフラッシュメモリ２８０に格納した際に前データの物理アドレスと論理アドレスの対応付けを解除、すなわち、前データの物理アドレスを削除して更新データの物理アドレスを論理アドレスに対応づけることで、マッピング情報の更新を行ってもよい。【００５３】
マッピング情報が、更新データと前データの物理アドレスを両方保持する場合は、ストレージシステム１０４は、更新データをフラッシュメモリ２８０に格納した後の所定の期間は、更新データの物理アドレス及び前データの物理アドレスの両方を、論理アドレスに対応付けておいてもよい。さらに、所定の期間の経過後、ストレージシステム１０４は、論理アドレスと前データの物理アドレスとの対応付けを解除する、すなわち、前データの物理アドレスを削除してもよい。対応付け解除の契機は、時間の経過に限らず、所定のコマンドまたは所定の完了応答を受領した後でもよい。【００５４】
データの追記により、書き込み速度、特に、ＮＡＮＤフラッシュを使用するフラッシュパッケージ１１３における書き込み速度を向上する。フラッシュパッケージ１１３又はＭＰ１０９が、追記のためのアドレス管理を行う。【００５５】
図３及び図４は、ホスト計算機１０１からのライト要求に応じたデータ更新の正常シーケンス例を示す。システムコントローラ（図中、ＣＴＬ）１０５は、ライト要求及び新データ３０１をホスト計算機１０１から受信する。本実施例では、ライト要求のアドレスに応じて当該ライト要求を処理するＭＰ１０９が予め定められている。本例において、ＭＰ＿Ａ１０９Ａが、予め定められた処理ＭＰである。【００５６】
ＭＰ＿Ａ１０９Ａは、ライト要求管理情報３３１に、受信したライト要求についての情報を登録する（Ｓ１１）。図５は、ライト要求管理情報３３１の構成例を示す。ライト要求管理情報３３１は、共有メモリ１１１に格納され、ライト要求、当該ライト要求を処理するＭＰ及び当該ライト要求の処理におけるフェーズを示す。具体的には、ライト要求管理情報３３１は、要求ＩＤ、処理ＭＰ、フェーズ、及び論理アドレスの欄を有する。【００５７】
要求ＩＤ欄は、ライト要求の識別子を示す。新たなライト要求に対して一意の値が付与される。処理ＭＰ欄は、当該ライト要求を処理するＭＰの識別子を示す。フェーズ欄は、当該ライト要求の処理におけるフェーズを示す。具体的には、「パリティ生成前」又は「パリティ生成後」のいずれかのフェーズを示す。新たなライト要求を受けた場合は、「パリティ生成前」で登録される。論理アドレス欄は、ライト要求が示すライト先である論理アドレスを示す。【００５８】
ホスト計算機１０１からのライト要求に係るデータ（新データ）は、キャッシュメモリ１１０に格納される。ＭＰ＿Ａ１０９Ａは、ホスト計算機１０１から受信したライト要求から、中間パリティ生成コマンドを生成する。ＭＰ＿Ａ１０９Ａは、中間パリティ生成コマンドを、前データ３０２を格納するフラッシュパッケージ（データノード）１１３Ａに送信する。【００５９】
中間パリティ生成コマンドは、新データ３０１を格納し、さらに、新データ３０１と前データ３０２とから、中間パリティ３０３を生成することを指示する。図６は、中間パリティ生成コマンド３４１の構成例を示す。中間パリティ生成コマンド３４１は、ＯＰＥＣＯＤＥフィールド、アドレス情報１フィールド、アドレス情報２フィールド、コマンド詳細フィールド、及び、アドレス情報３フィールドを有する。【００６０】
ＯＰＥＣＯＤＥフィールドはオペレーションの種類を示し、本例において、ホスト計算機１０１からのライト要求の処理を示す。アドレス情報１フィールドは、キャッシュメモリ１１０において新データ３０１を格納しているアドレスを示す。アドレス情報２フィールドは、キャッシュメモリ１１０において、新たに生成される中間パリティ３０３を格納するためのアドレスを示す。【００６１】
コマンド詳細フィールドは、本コマンドが中間パリティ生成コマンドであることを示す。アドレス情報３フィールドは、新データ３０１の論理アドレスを示す。当該論理アドレスは、前データ３０２の論理アドレスでもある。【００６２】
ＭＰ＿Ａ１０９Ａは、マッピング情報を参照して、ライト要求が示す論理アドレスから、ライト要求の前データ３０２を格納しているデータノード１１３Ａにおける物理アドレスを同定する。キャッシュメモリ１１０において新たに生成される中間パリティを格納するためのアドレスは、キャッシュメモリ１１０における空き領域を示す。【００６３】
データノード１１３Ａは、受信した中間パリティ生成コマンド３４１を参照し、キャッシュメモリ１１０から、アドレス情報１で指定されているアドレスに格納されている新データ３０１をリードし、メモリ２１４の一時格納領域に格納する（Ｓ１２）。データノード１１３Ａは、新データ３０１をフラッシュメモリ２８０の空き領域に格納し、メモリ２１４に格納されているマッピング情報を更新、すなわち、論理アドレスと新データ３０１が格納された物理アドレスを対応付けする。【００６４】
なお、新データ３０１をフラッシュメモリ２８０に格納する処理およびマッピング情報の更新は、このＳ１２のタイミングで行わなくてもよい。例えば、中間パリティ生成コマンド３４１の受領に同期せず、所定のタイミングで周期的に行うでもよいし、デバイスプロセッサ２１３の処理性能に余裕が有るタイミングで行うでもよい。【００６５】
また、本実施例は、中間パリティ生成コマンドの受領を契機とせず、すなわち、中間パリティ生成コマンドの受領とは非同期で、新データ３０１をフラッシュメモリ２８０に格納する処理と中間パリティを生成する処理を開始する。デバイスプロセッサ２１３は、中間パリティ生成コマンドを受領し、メモリ２１４の一時格納領域にデータを書込んだ後、ライトコマンドの完了応答（応答コマンド）をＭＰ１０９に返す。【００６６】
なお、中間パリティ生成コマンドの受領を契機として、すなわち、中間パリティ生成コマンドの受領と同期して、新データ３０１をフラッシュメモリ２８０に格納する処理と中間パリティを生成する処理を始めてもよい。この場合、デバイスプロセッサ２１３は、新パリティ生成が完了した後にライトコマンドの完了応答（応答コマンド）をＭＰ１０９に返す。【００６７】
データノード１１３Ａは、マッピング情報の更新に伴い、ライト要求が示す新データの論理アドレスに対応する前データ３０２の物理アドレスである前データアドレス３２１を、メモリ２１４に格納する（Ｓ１３）。前データアドレス３２１は、ライト要求が示す論理アドレスとの対応が分かるように記憶されていればよい。例えば、前データアドレス３２１は、マッピング情報に含まれてもよく、マッピング情報とは別の形態で格納されてもよい。なお、メモリ２１４に格納された前データアドレス３２１は、当該ライト要求に関する処理とは非同期で消去されても、格納されてから所定の時間経過後に消去されてもよい。前データアドレス３２１は、障害発生時に参照される。詳細は後述する。【００６８】
上述のように、本例のフラッシュパッケージ１１３は、前データに新データを上書きせず、異なる物理アドレスに新データを追記する。【００６９】
データノード１１３Ａは、マッピング情報を参照し、アドレス情報３が指定する論理アドレスから、前データ３０２を格納するデータノード１１３Ａのフラッシュメモリ２８０における物理アドレスを同定する。データノード１１３Ａは、前データ３０２を読み出し、メモリ２１４に格納する。データノード１１３Ａは、メモリ２１４に格納された新データ３０１と前データ３０２とから、中間パリティ３０３を生成する（Ｓ１４）。【００７０】
データノード１１３Ａは、中間パリティ生成コマンド３４１を参照し、アドレス情報２で指定されているキャッシュメモリ１１０のアドレスに、中間パリティ３０３を格納する（Ｓ１５）。【００７１】
上述のように、本実施例のように、キャッシュメモリ１１０において新データ３０１を格納しているアドレス、キャッシュメモリ１１０において、新たに生成される中間パリティ３０３を格納するためのアドレスも中間パリティ生成コマンド３４１に含めることにより、中間パリティ生成コマンド１つの発行で、システムコントローラ１０５からフラッシュパッケージ１１３への新データ３０１のリード、並びに、中間パリティ３０３の生成及びフラッシュパッケージ１１３からシステムコントローラ１０５へのライトが実現される。これにより、少ないコマンド及びステップによって効率的に中間パリティ３０３を生成できる。【００７２】
次に、ＭＰ＿Ａ１０９Ａは、ホスト計算機１０１から受信したライト要求から、新パリティ生成コマンドを生成する。ＭＰ＿Ａ１０９Ａは、新パリティ生成コマンドを、前パリティ３０４を格納するフラッシュパッケージ（パリティノード）１１３Ｂに送信する。本例は一つのパリティノードを示すが、複数のパリティノードが存在する場合、処理ＭＰ１０９は、新パリティ生成コマンドを、前パリティを格納するパリティノードそれぞれに送信する。【００７３】
中間パリティ生成コマンドは、中間パリティ３０３と前パリティ３０４とから、新パリティ３０５を生成することを指示する。図７は、新パリティ生成コマンド３４２の構成例を示す。新パリティ生成コマンド３４２は、ＯＰＥＣＯＤＥフィールド、アドレス情報１フィールド、コマンド詳細フィールド、及び、アドレス情報３フィールドを有する。【００７４】
ＯＰＥＣＯＤＥフィールドはオペレーションの種類を示し、本例において、ホスト計算機１０１からのライト要求の処理を示す。アドレス情報１フィールドは、キャッシュメモリ１１０において中間パリティ３０３を格納しているアドレスを示す。コマンド詳細フィールドは、本コマンドが新パリティ生成コマンドであることを示す。【００７５】
アドレス情報３フィールドは、ライト要求があったデータに関する新パリティの論理アドレスを示す。当該論理アドレスは、前パリティ３０４の論理アドレスでもある。【００７６】
ＭＰ＿Ａ１０９Ａは、マッピング情報を参照して、ライト要求が示す論理アドレスから、ライト要求の前パリティ３０４を格納しているパリティノード１１３Ｂにおける物理アドレスを同定する。【００７７】
パリティノード１１３Ｂは、受信した新パリティ生成コマンド３４２を参照し、キャッシュメモリ１１０から、アドレス情報１で指定されているアドレスに格納されている中間パリティ３０３をリードし、メモリ２１４に格納する（Ｓ１６）。【００７８】
パリティノード１１３Ｂは、マッピング情報を参照し、アドレス情報３が指定する論理アドレスから、前パリティ３０４を格納するパリティノード１１３Ｂのフラッシュメモリ２８０における物理アドレスを同定する。パリティノード１１３Ｂは、前パリティ３０４を読み出し、メモリ２１４に格納する。【００７９】
パリティノード１１３Ｂは、メモリ２１４に格納された中間パリティ３０３と前パリティ３０４とから、新パリティ３０５を生成する（Ｓ１７）。パリティノード１１３Ｂは、新パリティ３０５を、フラッシュメモリ２８０の空き領域に格納し、メモリ２１４に格納されているマッピング情報を更新する。【００８０】
パリティノード１１３Ｂは、マッピング情報の更新に伴い、当該論理アドレスに対応する前パリティアドレス３２２を、メモリ２１４に格納する（Ｓ１８）。前パリティアドレス３２２は、障害発生時に参照される。詳細は後述する。【００８１】
最後に、パリティノード１１３Ｂは、完了応答３１１をシステムコントローラ１０５に返す（Ｓ１９）。【００８２】
ＭＰ＿Ａ１０９Ａは、完了応答３１１を受信すると、ライト要求管理情報３３１を更新する（Ｓ２０）。具体的には、ＭＰ＿Ａ１０９Ａは、処理したライト要求のエントリにおいて、フェーズ欄の「パリティ生成前」を「パリティ生成後」に変更する。【００８３】
上述のように、新パリティ生成コマンド３４２により、システムコントローラ１０５からフラッシュパッケージ１１３への中間パリティ３０３のリード、並びに、中間新パリティ３０５の生成が実現される。これにより、少ないコマンド及びステップによって効率的に新パリティ３０５を生成できる。【００８４】
上記例は、フラッシュパッケージ１１３が、追記されるデータのアドレスを管理する。他の例において、システムコントローラ１０５（ＭＰ１０９）が追記されるデータのアドレスを管理してもよい。システムコントローラ１０５は、前データアドレス及び前パリティアドレスを管理する。【００８５】
システムコントローラ１０５により発行される中間パリティ生成コマンドは、キャッシュメモリ１１０において新データを格納するアドレス及び中間パリティを格納するアドレスを含む。さらに、フラッシュパッケージ１１３における新データの格納アドレスと前データの格納アドレスを含む。フラッシュパッケージ１１３は、フラッシュメモリ２８０の指定されたアドレスから前データを読み出し、さらに、指定されたアドレスに新データを格納する。【００８６】
システムコントローラ１０５により発行される新パリティ生成コマンドは、キャッシュメモリ１１０において中間パリティを格納するアドレス、並びに、フラッシュパッケージ１１３における新パリティの格納アドレス及び前パリティの格納アドレスを含む。フラッシュパッケージ１１３は、フラッシュメモリ２８０の指定されたアドレスから前パリティを読み出し、さらに、指定されたアドレスに新パリティを格納する。【００８７】
図８は、ホスト計算機１０１からのライト要求に応じたデータ更新において、障害が発生した場合の、シーケンス例を示す。本例において、ＭＰ＿Ａ１０９Ａにおいて障害が発生する。以下においては、図４に示すシーケンス例との差異を主に説明する。【００８８】
図８において、新データ３０１がシステムコントローラ１０５のキャッシュメモリ１１０からデータノード１１３Ａに転送された（Ｓ１２）直後に、予め設定されていた処理ＭＰ＿Ａ１０９Ａにおいて障害が発生している。処理ＭＰは、ＭＰ＿Ａ１０９ＡからＭＰ＿Ｂ１０９Ｂに引き継がれる。【００８９】
ＭＰ＿Ｂ１０９Ｂは、図４に示すシーケンスを中断した後、新データ３０１の転送（Ｓ１２）から再実行する。具体的には、ＭＰ＿Ｂ１０９Ｂは、ライト要求管理情報３３１を参照し、ＭＰ＿Ａ１０９Ａから引き継いだ処理の情報を取得する（Ｓ３１）。具体的には、処理ＭＰが、ＭＰ＿Ａ１０９Ａを示すエントリを取得する。本例において、ライト要求管理情報３３１は、ＭＰ＿Ａ１０９Ａから引き継いだ処理のフェーズは、「パリティ生成前」であることを示す。【００９０】
ＭＰ＿Ｂ１０９Ｂは、本処理の中断をデータノード１１３Ａ及びパリティノード１１３Ｂに通知する。具体的には、ＭＰ＿Ｂ１０９Ｂはデータノード１１３Ａ及びパリティノード１１３Ｂそれぞれに、リセットコマンドを送信する（Ｓ３１）。【００９１】
図９Ａ及び図９Ｂはリセットコマンドの構成例を示す。図９Ａは、データノードに送信されるリセットコマンドの構成例３５１を示し、図９Ａは、パリティノードに送信されるリセットコマンドの構成例３５２を示す。リセットコマンドは、アドレス情報フィールドとコマンド詳細フィールドを示す。【００９２】
データノードへのリセットコマンド３５１において、アドレス情報フィールドは、中間パリティ生成コマンド３４１におけるアドレス情報３と同様に、データノードにおいて新データを格納する論理アドレスを示す。コマンド詳細は、中間パリティ生成のリセットを示す。【００９３】
パリティノードへのリセットコマンド３５２において、アドレス情報フィールドは、新パリティ生成コマンド３４２におけるアドレス情報３と同様に、新パリティを格納する論理アドレスを示す。コマンド詳細は、新パリティ生成のリセットを示す。【００９４】
リセットコマンドを受信したデータノード１１３Ａ及びパリティノード１１３Ｂは、中間パリティ生成処理及び新パリティ生成処理を中断する。図８の例において、データノード１１３Ａは、中間パリティ生成処理を開始しておらず、パリティノード１１３Ｂは、新パリティ生成処理を開始していない。データノード１１３Ａ及びパリティノード１１３Ｂは、それぞれ、リセットコマンドへの完了応答を、ＭＰ＿Ｂ１０９Ｂに返す（Ｓ３２及びＳ３３）。【００９５】
データノード１１３Ａ及びパリティノード１１３Ｂから完了応答を受信すると、ＭＰ＿Ｂ１０９Ｂは、ライト要求管理情報３３１を更新する（Ｓ３４）。具体的には、ＭＰ＿Ｂ１０９Ｂは、ライト要求管理情報３３１の当該エントリにおいて、処理ＭＰをＭＰ＿ＡからＭＰ＿Ｂに変更する。シーケンスの以降のステップは、処理ＭＰがＭＰ＿Ａ１０９ＡからＭＰ＿Ｂ１０９Ｂに変わっている点を除き、図４と同様である。【００９６】
図１０は、ホスト計算機１０１からのライト要求に応じたデータ更新において、障害が発生した場合の他のシーケンス例を示す。本例において、ＭＰ＿Ａ１０９Ａにおいて障害が発生する。以下においては、図８に示すシーケンス例との差異を主に説明する。【００９７】
図１０において、データノード１１３Ａが中間パリティを生成した（Ｓ１４）後、システムコントローラ１０５に転送する前に、予め設定されていた処理ＭＰ＿Ａ１０９Ａにおいて障害が発生している。処理ＭＰは、ＭＰ＿Ａ１０９ＡからＭＰ＿Ｂ１０９Ｂに引き継がれる。【００９８】
データノード１１３Ａ及びパリティノード１１３Ｂは、ＭＰ＿Ｂ１０９Ｂからリセットコマンドを受信する（Ｓ３１）。データノード１１３Ａは、マッピング情報について、リセットコマンド３５１の論理アドレスに対応する物理アドレスを、Ｓ１３でメモリ２１４に格納した前データアドレス３２１に戻してから、完了応答を返す（Ｓ４１）。これにより、その後のステップにおいて、正しい中間パリティを生成することができる。【００９９】
図１１は、ホスト計算機１０１からのライト要求に応じたデータ更新のシーケンス例を示す。データノード１１３Ａが中間パリティをシステムコントローラ１０５に送信した（Ｓ１５）後、システムコントローラ１０５が中間パリティをパリティノード１１３Ｂに転送する前に、予め設定されていた処理ＭＰ＿Ａ１０９Ａにおいて障害が発生している。処理ＭＰは、ＭＰ＿Ａ１０９ＡからＭＰ＿Ｂ１０９Ｂに引き継がれる。その他の点は、図１０のシーケンスと同様である。【０１００】
図１２は、ホスト計算機１０１からのライト要求に応じたデータ更新において、障害が発生した場合の他のシーケンス例を示す。パリティノード１１３Ｂが新パリティを生成して（Ｓ１７）前パリティの物理アドレスをメモリ２１４に格納した（Ｓ１８）後、完了応答をシステムコントローラ１０５に送信する（Ｓ１９）前に、予め設定されていた処理ＭＰ＿Ａ１０９Ａにおいて障害が発生している。処理ＭＰは、ＭＰ＿Ａ１０９ＡからＭＰ＿Ｂ１０９Ｂに引き継がれる。【０１０１】
データノード１１３Ａ及びパリティノード１１３Ｂは、ＭＰ＿Ｂ１０９Ｂからリセットコマンドを受信する（Ｓ３１）。【０１０２】
データノード１１３Ａは、マッピング情報の論理アドレスに対応する物理アドレスを、Ｓ１３でメモリ２１４に格納した前データアドレス３２１に戻してから、完了応答を返す（Ｓ４１）。同様に、パリティノード１１３Ｂは、マッピング情報について、リセットコマンド３５２の論理アドレスに対応する物理アドレスを、Ｓ１８でメモリ２１４に格納した前パリティアドレス３２２に戻してから、完了応答を返す（Ｓ４２）。これにより、その後のステップにおいて、正しい中間パリティ及び新パリティを生成することができる。他の点は、図１１のシーケンスと同様である。【０１０３】
上記いずれの場合とも異なり、処理を引き継いだＭＰ＿Ｂ１０９Ｂが参照したライトライト要求管理情報３３１が、「パリティ生成後」を示す場合、ＭＰ＿Ｂ１０９Ｂは、ライト要求に対するパリティ更新は完了していると判定する。このように、ライト要求管理情報３３１により、障害発生時の処理を適切に制御できる。【０１０４】
また、上述のように、ライト要求の処理途中のいずれのステップにおけるＭＰ障害においても、処理を引き継いだＭＰが新データの転送から開始することで、効率的にシステムコントローラ１０５を構成できる。【０１０５】
上記例においてライト要求管理情報３３１は、「パリティ生成前」、「パリティ生成後」のみを管理するため、システム構成を簡便にできる。ライト要求管理情報３３１は、他のフェーズを示してもよい。例えば、ライトライト要求管理情報３３１は、「中間パリティ生成前」、「中間パリティ生成後」のフェーズを示してもよい。処理を引き継いだＭＰ＿Ｂ１０９Ｂは、フェーズに応じた処理を行う。
【実施例２】
【０１０６】
実施例１とは異なる実施例について、図１３〜１５を用いて説明する。本実施例では、前データアドレス３２１及び前パリティアドレス３２２をメモリ２１４に格納しない場合についての処理について説明する。
図１３及び図１４は、本実施例におけるホスト計算機１０１からのライト要求に応じたデータ更新の他の正常シーケンス例を示す。以下においては、図３及び４に示すシーケンス例との違いを主に説明する。図３及び４に示すシーケンス例における前データアドレス３２１及び前パリティアドレス３２２並びにそれらの格納ステップＳ１３、Ｓ１８が、図１３及び図１４のシーケンスにおいて省略されている。他の点は、図３及び４に示すシーケンスと図１３及び図１４に示すシーケンスとで同様である。【０１０７】
次に、図１３及び図１４に示す正常シーケンスにおいて障害が発生した場合のシーケンス例を説明する。図１５のシーケンス例において、データノード１１３Ａが中間パリティをシステムコントローラ１０５に送信した（Ｓ１５）後、システムコントローラ１０５が中間パリティをパリティノード１１３Ｂに転送する（Ｓ１６）前に、ＭＰ＿Ａ１０９Ａにおいて障害が発生している。【０１０８】
以下においては、実施例１における図１１および図１５に示すシーケンス例との差異を主に説明する。予め設定されていた処理ＭＰ＿Ａ１０９Ａにおいて障害が発生し、処理ＭＰは、ＭＰ＿Ａ１０９ＡからＭＰ＿Ｂ１０９Ｂに引き継がれる。【０１０９】
ＭＰ＿Ｂ１０９Ｂは、ライト要求管理情報３３１を参照し、ＭＰ＿Ａ１０９Ａから引き継いだ処理の情報を取得する（Ｓ５１）。本例において、ライト要求管理情報３３１は、ＭＰ＿Ａ１０９Ａから引き継いだ処理のフェーズは、「パリティ生成前」であることを示す。【０１１０】
図１５の例において、本シーケンスの図１１との違いは、前データアドレス３２１及び前パリティアドレス３２２を使用しないため、その格納及び書き戻しのステップは存在しない。また、ライト要求管理情報３３１のリセット指示がなく、ライト要求管理情報３３１が更新されないまま、すなわち図１１のＳ３１〜３４が無いまま、パリティ更新処理（Ｓ１２〜Ｓ１９）に進む。このパリティ更新処理（Ｓ１２〜Ｓ１９）は、ライト要求管理情報３３１のフェーズが「パリティ生成前」であるために行われる。【０１１１】
パリティノード１１３Ｂから新パリティ生成の完了応答を受信すると（Ｓ１９）、ＭＰ＿Ｂ１０９Ｂは、ライト要求管理情報３３１を更新しようと参照するが、ライト要求管理情報３３１に記憶されている処理ＭＰがＭＰ＿Ｂ１０９Ｂとは異なると判定すると、パリティ不整合が起きていると判定する。そこで、ライト要求管理情報３３１の処理ＭＰをＭＰ＿Ｂ１０９Ｂに更新（Ｓ５２）し、パリティを再度生成する（Ｓ５３）。【０１１２】
なお、Ｓ５３のパリティ再生成は、本実施例では、前データアドレス３２１及び前パリティアドレス３２２をメモリ２１４に格納していないため、今まで説明してきたような、新データ、前データおよび前パリティを用いて新パリティを生成する方法ではなく、いわゆるシーケンシャルライトのパリティ生成方法をとる。具体的には、ＭＰ＿Ｂ１０９Ｂは、本シーケンスにおいて新データを格納し新パリティを生成したストライプ列のデータブロックを、データノード１１３Ａを含む複数のデータノードから受信する。ＭＰ＿Ｂ１０９Ｂは、受信したストライプ列のデータブロックからパリティを生成する。【０１１３】
本例は前回データアドレス及び前回パリティアドレスを参照せず、また、処理ＭＰが変更されているため、パリティノード１１３Ｂが正しくない新パリティを生成する可能性がある。よって、処理を引き継いだＭＰ＿Ｂ１０９Ｂにて、新データからパリティを再生成することで、正確なパリティを確実に保持することができる。【０１１４】
上記構成において、一部を省略することができる。例えば、ストレージシステム１０４は、新パリティ生成コマンドを使用することなく、新パリティを生成してもよい。例えばシステムコントローラ１０５が前パリティをパリティノードから読み出し、新パリティを生成して、パリティノードに格納してもよい。または、システムコントローラ１０５からパリティノードに中間パリティ送信コマンドを送信し、その完了応答及び新パリティ生成完了応答を受信してもよい。【０１１５】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。【０１１６】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。
【図１】
2018051505.tif 000003
【図２】
2018051505.tif 000004
【図３】
2018051505.tif 000005
【図４】
2018051505.tif 000006
【図５】
2018051505.tif 000007
【図６】
2018051505.tif 000008
【図７】
2018051505.tif 000009
【図８】
2018051505.tif 000010
【図９Ａ】
2018051505.tif 000011
【図９Ｂ】
2018051505.tif 000012
【図１０】
2018051505.tif 000013
【図１１】
2018051505.tif 000014
【図１２】
2018051505.tif 000015
【図１３】
2018051505.tif 000016
【図１４】
2018051505.tif 000017
【図１５】
2018051505.tif 000018
【国際調査報告】
2018051505.tif 000019
2018051505.tif 000020
2018051505.tif 000021
2018051505.tif 000022