(57)【特許請求の範囲】
【請求項１】
複数の記憶ドライブと、
コントローラと、を含み、
前記コントローラは
ホストから、第１アドレスを指定する第１ライト要求と、前記第１ライト要求に関連付けられた第１新データを受信し、
第２アドレスを指定する第１データ更新コマンドと、前記第１新データとを、前記複数の記憶ドライブに含まれる第１記憶ドライブに送信し、
前記第１記憶ドライブは、
前記第１データ更新コマンドに応答して、前記第２アドレスの、管理しているシーケンス番号を、更新し、
前記更新されたシーケンス番号を、前記コントローラに送信し、
前記コントローラは、前記複数の記憶ドライブに含まれる、前記第２アドレスに関連付けられた旧冗長データを格納する第２記憶ドライブに、前記旧冗長データの第３アドレスを指定する第１冗長データ更新コマンドと、前記旧冗長データを更新するためのデータと、前記更新されたシーケンス番号と、を送信し、
前記第２記憶ドライブは、
前記旧冗長データを更新するためのデータに基づき、前記旧冗長データを更新し、
前記更新されたシーケンス番号によって、前記第３アドレスの、管理しているシーケンス番号を、更新し、
前記コントローラは、
前記第１記憶ドライブから、前記第１アドレスに対する前回ライト要求の処理が完了しているかを示す情報を受信し、
前記前回ライト要求に対応する処理が完了していない場合、前記前回ライト要求の処理を完了した後に、前記第１記憶ドライブに前記第１データ更新コマンドの処理を実行させ、
前記前回ライト要求の処理を完了するため、
前記第１記憶ドライブから前記第２アドレスのシーケンス番号を受信し、
前記第２記憶ドライブから前記第３アドレスのシーケンス番号を受信し、
前記第２アドレスの前記シーケンス番号と、前記第３アドレスの前記シーケンス番号との比較を実行し、
前記比較の結果が不一致を示す場合、前記第２記憶ドライブに、前記第３アドレスにおける前回冗長データ更新コマンドに対応する更新を実行させ、前記第１記憶ドライブに、前記第２アドレスにおける前回データ更新コマンドの新データを確定させ、
前記比較の結果が一致を示す場合、前記第２記憶ドライブに前記第３アドレスにおける前記更新を実行させることなく、前記第１記憶ドライブに、前記第２アドレスにおける前記前回データ更新コマンドの前記新データを確定させる、ストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記第１記憶ドライブは、前記第１新データと前記第２アドレスの旧データとに基づき生成した中間冗長データを、前記コントローラに送信し、
前記旧冗長データを更新するためのデータは、前記中間冗長データであり、
前記第２記憶ドライブは、前記旧冗長データ及び前記中間冗長データに基づき新冗長データを生成する、ストレージシステム。
【請求項３】
請求項１に記載のストレージシステムであって、
前記コントローラは、前記第２アドレスの前記シーケンス番号と、前記第３アドレスの前記シーケンス番号との比較結果に基づき、前記第２アドレスにおけるデータと前記第３アドレスにおける冗長データが整合しているか判定し、
前記第２アドレスにおけるデータと前記第３アドレスにおける冗長データが不整合の場合に、前記第２アドレスにおけるデータと整合するように前記冗長データを更新する、ストレージシステム。
【請求項４】
請求項１に記載のストレージシステムであって、
前記コントローラは、前記旧冗長データを更新するための前記データを前記第２記憶ドライブに送信した後に、前記ホストに、前記第１ライト要求に対する完了応答を返す、ストレージシステム。
【請求項５】
請求項４に記載のストレージシステムであって、
前記コントローラは、前記ホストに前記第１ライト要求に対する完了応答を返し、前記第３アドレスの冗長データ更新完了通知を前記第２記憶ドライブから受信した後、前記第１記憶ドライブに新データ確定コマンドを送信し、
前記第１記憶ドライブは、前記新データ確定コマンドに応答して、前記第１新データを前記第２アドレスに格納されているデータと確定する、ストレージシステム。
【請求項６】
請求項２に記載のストレージシステムであって、
前記第１記憶ドライブは、前記第１データ更新コマンドに応答して、前記中間冗長データ及び前記更新されたシーケンス番号を前記コントローラに返す、ストレージシステム。
【請求項７】
請求項１に記載のストレージシステムであって、
前記コントローラは、前記第１冗長データ更新コマンドを送信する前に、前記第１新データを前記第２記憶ドライブに送信し、
前記第１新データを前記第１記憶ドライブ及び前記第２記憶ドライブに送信した後、前記第１冗長データ更新コマンドを送信する前に、前記ホストに前記第１ライト要求に対する完了応答を返す、ストレージシステム。
【請求項８】
請求項１に記載のストレージシステムであって、
前記コントローラは、
前記第２記憶ドライブの前記第３アドレスから前記旧冗長データを読み出し、
前記旧冗長データと前記第１新データとに基づき新冗長データを生成し、
前記旧冗長データを更新するための前記データは、前記新冗長データである、ストレージシステム。
【請求項９】
第１記憶ドライブと第２記憶ドライブとを含む、ストレージシステムであって、
前記第１記憶ドライブは、
外部に提供する第１論理アドレス空間における論理アドレスとシーケンス番号との間の関係を管理し、
前記第１論理アドレス空間における第１論理アドレスを指定したデータ更新コマンドと、前記データ更新コマンドに関連付けられた新データとを、受信すると、前記第１論理アドレスのシーケンス番号を更新し、
前記第２記憶ドライブは、
外部に提供する第２論理アドレス空間における論理アドレスとシーケンス番号との間の関係を管理し、
前記第１論理アドレスに対応する冗長データを前記第２論理アドレス空間における第２論理アドレスにおいて格納し、
前記第２論理アドレスを指定する冗長データ更新コマンドと、前記第２論理アドレスにおける旧冗長データを更新するためのデータと、前記更新された前記第１論理アドレスのシーケンス番号と、を受信し、
前記旧冗長データを更新するための前記データに基づき、前記旧冗長データを更新し、
前記受信したシーケンス番号によって、前記第２論理アドレスの、管理しているシーケンス番号を、更新し、
前記第１論理アドレスのシーケンス番号と前記第２論理アドレスのシーケンス番号とが不一致の場合、
前記第２記憶ドライブは、前記第２論理アドレスにおける旧冗長データの更新を実行し、
前記第１記憶ドライブは、前記旧冗長データの前記更新の後、前記データ更新コマンドの処理を実行する、ストレージシステム。
【請求項１０】
複数の記憶ドライブの格納データを管理する方法であって、
コントローラが、第１アドレスを指定する第１データ更新コマンドと、第１新データとを、前記複数の記憶ドライブに含まれる第１記憶ドライブに送信し、
前記第１記憶ドライブが、前記第１データ更新コマンドに応答して、前記第１記憶ドライブで管理されている前記第１アドレスのシーケンス番号を、更新し、
前記コントローラが、前記複数の記憶ドライブに含まれる、前記第１アドレスに関連付けられた旧冗長データを格納する第２記憶ドライブに、前記旧冗長データの第２アドレスを指定する第１冗長データ更新コマンドと、前記旧冗長データを更新するためのデータと、前記更新されたシーケンス番号と、を送信し、
前記第２記憶ドライブが、前記旧冗長データを更新するためのデータに基づき、前記旧冗長データを更新し、
前記第２記憶ドライブが、前記更新されたシーケンス番号によって、前記第２記憶ドライブにおいて管理されている前記第２アドレスのシーケンス番号を、更新し、
前記第１記憶ドライブにおいて前記第１アドレスに対する前回データ更新コマンドに関連付けられた未確定データが保持されている場合、前記コントローラが、前記第１アドレスの前記シーケンス番号と、前記第２アドレスの前記シーケンス番号との比較を実行し、
前記比較の結果が不一致を示す場合、前記第２記憶ドライブが前記第２アドレスにおける冗長データの前記前回データ更新コマンドに対応する更新を実行し、前記第１記憶ドライブが前記前回データ更新コマンドの新データを確定し、
前記比較の結果が一致を示す場合、前記第２記憶ドライブが前記第２アドレスにおける前記更新をすることなく、前記第１記憶ドライブが前記前回データ更新コマンドの前記新データを確定し、
前記前回データ更新コマンドの前記新データが確定した後に、前記第１記憶ドライブが前記第１記憶ドライブで管理されている前記第１アドレスのシーケンス番号を更新する、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムにおける冗長データの生成技術に関する。
【背景技術】
【０００２】
通常、パリティの計算は、ストレージシステムに搭載されるコントローラ（ストレージコントローラ）が実施する。しかし、それはストレージコントローラの処理負荷が大きくなるため、記憶ドライブにパリティの演算機能を持たせ、パリティの演算負荷をストレージコントローラから記憶ドライブにオフロードする技術が存在する。【０００３】
例えば特許文献１は、記憶ドライブがパリティ生成機能を有する構成を開示する。ストレージコントローラは、更新データを、更新前データが格納されている記憶ドライブへと送信する。ストレージコントローラは、記憶ドライブによって生成された中間パリティを受け取る。ストレージコントローラは、受け取った中間パリティを、更新データに対応する更新前パリティが格納されている記憶ドライブへ送信する。ストレージコントローラは、更新前パリティを格納している記憶ドライブに、中間パリティと当該記憶ドライブに格納されている更新前パリティとから、更新後パリティを生成させ、格納させる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２０１３／０２９０７７３号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
通常、ストレージコントローラから記憶ドライブに対してライトを指示するとき、ライトのための一連の処理中のストレージコントローラの障害に備えて、ライトデータと、ライトデータの格納場所を管理する情報とを、ストレージコントローラ上で二重化する。【０００６】
また、記憶ドライブのライトデータの更新は、対応する記憶ドライブのパリティデータの更新も必要とする。そのため、記憶ドライブ及びコントローラ上のライトデータ及びパリティデータが、更新前の状態であるか、更新後の状態であるか管理する必要がある。ストレージコントローラは、障害に備えて、この状態管理情報も二重化して保持する。【０００７】
特許文献１に記載の技術も、更新データ（ライトデータ）の管理情報の二重化、及び記憶ドライブの更新前後の状態を管理する情報の二重化を必要とする。
【課題を解決するための手段】
【０００８】
本開示の一態様のストレージシステムは、複数の記憶ドライブと、コントローラと、を含み、前記コントローラはホストから、第１アドレスを指定する第１ライト要求と、前記第１ライト要求に関連付けられた第１新データを受信し、第２アドレスを指定する第１データ更新コマンドと、前記第１新データとを、前記複数の記憶ドライブに含まれる第１記憶ドライブに送信し、前記第１記憶ドライブは、前記第１データ更新コマンドに応答して、前記第２アドレスの、管理しているシーケンス番号を、更新し、前記更新されたシーケンス番号を、前記コントローラに送信し、前記コントローラは、前記複数の記憶ドライブに含まれる、前記第２アドレスに関連付けられた旧冗長データを格納する第２記憶ドライブに、前記旧冗長データの第３アドレスを指定する第１冗長データ更新コマンドと、前記旧冗長データを更新するためのデータと、前記更新されたシーケンス番号と、を送信し、前記第２記憶ドライブは、前記旧冗長データを更新するためのデータに基づき、前記旧冗長データを更新し、前記更新されたシーケンス番号によって、前記第３アドレスの、管理しているシーケンス番号を、更新する。
【発明の効果】
【０００９】
本発明の一態様により、システムの信頼性及び可用性を保ちつつ、パリティデータ生成及び記憶ドライブへのデータ格納処理に係る処理負荷を分散することができる。
【図面の簡単な説明】
【００１０】
【図１】実施形態に係るストレージシステムの構成図を示す。
【図２】フラッシュメモリパッケージの構成図を示す。
【図３】ボリューム管理テーブルの構成を示す。
【図４】論理ボリューム上の記憶空間と、ＲＡＩＤグループ内の記憶領域との関係を表した概念図を示す。
【図５】フラッシュメモリパッケージ内にある論理アドレス管理情報テーブルの構成を示す。
【図６】フラッシュメモリパッケージ内にあるシーケンス番号管理テーブルの構成を示す。
【図７】ＸＯＲ算出機能の設定ウィンドウの一例を示す。
【図８】実施形態１におけるホストライト処理の概略図を示す。
【図９Ａ】実施形態１におけるホストライト処理のフローを示す。
【図９Ｂ】実施形態１におけるホストライト処理のフローを示す。
【図９Ｃ】実施形態１におけるホストライト処理のフローを示す。
【図１０】実施形態１におけるフラッシュメモリパッケージからのリード処理のフローを示す。
【図１１】実施形態２におけるホストライト処理の概略図を示す。
【図１２Ａ】実施形態２におけるホストライト処理のフローを示す。
【図１２Ｂ】実施形態２におけるホストライト処理のフローを示す。
【図１２Ｃ】実施形態２におけるホストライト処理のフローを示す。
【図１３】実施形態３におけるホストライト処理の概略図を示す。
【図１４Ａ】実施形態３におけるホストライト処理のフローを示す。
【図１４Ｂ】実施形態３におけるホストライト処理のフローを示す。
【図１４Ｃ】実施形態３におけるホストライト処理のフローを示す。
【発明を実施するための形態】
【００１１】
以下、図面を参照して、実施形態に係るストレージシステムを説明する。なお、本発明は、以下に説明する実施形態に限定されるものではない。
【００１２】
（実施形態１）
図１は、一実施形態に係るストレージシステム４２の構成を示す。ストレージシステム４２は、コントローラ１００と、コントローラに接続された記憶部２００を含む。
【００１３】
記憶部２００は、ホスト計算機のような上位装置からのライトデータを格納するための複数の最終記憶ドライブを含む。本実施形態に係るストレージシステム４２は、データの最終記憶装置として、ＦＭＰＫ（Ｆｌａｓｈ  Ｍｅｍｏｒｙ  ＰａｃＫａｇｅ）１４４を使用する。ＦＭＰＫは、不揮発性半導体メモリであるフラッシュメモリを用いた記憶ドライブであり、一例としてＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）である。ＦＭＰＫに代えて、磁気ディスクドライブのように、ＦＭと異なる不揮発性メモリを使用する記憶ドライブが使用されてもよい。
【００１４】
コントローラ１００は複数のＦＭＰＫ１４４を、１又は複数のＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）グループ１４５（図３参照）として管理する。
【００１５】
コントローラ１００には、１以上のホスト計算機１０と、管理計算機２０が接続される。コントローラ１００とホスト計算機１０とは、一例としてファイバチャネルを用いて形成されるＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）１を介して接続される。コントローラ１００と管理計算機２０とは、一例としてイーサネットを用いて形成されるネットワーク６４を介して接続される。
【００１６】
ストレージシステム４２は、ホスト計算機１０から、ＦＥ  Ｉ／Ｆ（Ｆｒｏｎｔ  Ｅｎｄ  ＩｎｔｅｒＦａｃｅ）５２において、データリード／ライト（Ｉ／Ｏ処理）の指示を受信する。ストレージパッケージ１２に含まれるストレージコントローラ３０のＣＰＵ６２は、メモリ４０に格納されているストレージ制御プログラムに従って、Ｉ／Ｏ処理を実施する。ストレージパッケージ１２は、故障時に備えて冗長化されており、冗長化されたストレージパッケージ１２は、ＳＷ（スイッチ）６４を介して、相互接続されている。
【００１７】
メモリ４０は、記憶ドライブに対するＩ／Ｏ対象データを一時的に記憶するＣＭ（キャッシュメモリ）用領域、ストレージシステム４２の各種管理情報を記憶するＳＭ（共有メモリ）用領域を含む。ＣＭやＳＭのデータは、障害時に備えて、複数ストレージパッケージ１２内のメモリ４０内のＣＭやＳＭに冗長化される。メモリ４０は、さらに、複数ストレージパッケージ１２（ストレージコントローラ３０）に冗長化されないデータの一時格納領域を含む。
【００１８】
本実施形態は、ライト処理におけるストレージコントローラ間の冗長化処理を削減する。例えば、複数ストレージコントローラ上における、ライト処理における、ライトデータ、パリティデータ（単にパリティとも呼ぶ）、及びライトデータとパリティデータの管理情報の冗長化が不要である。本実施形態は、ストレージコントローラの冗長化されないデータの一時格納領域、及び複数ＦＭＰＫによるライトデータの冗長化（パリティ生成）を利用して、ストレージコントローラのライト性能を向上させる。メモリ４０は、一般に、ＤＲＡＭ、ＳＲＡＭ等の揮発性メモリで構成されるが、不揮発性メモリを用いてもよい。
【００１９】
ＢＥ  Ｉ／Ｆ（Ｂａｃｋ  Ｅｎｄ  ＩｎｔｅｒＦａｃｅ）６８とメモリ４０とは、ＣＰＵ６２を介して相互にアクセス可能である。ＢＥ  Ｉ／Ｆ６８は、ＳＷ８２を介してＦＭＰＫ１４４と接続されている。ホスト計算機１０からのＩ／Ｏ処理要求を受けたＣＰＵ６２は、対象データが格納されているＦＭＰＫ１４４に対して、データの読み書き等を行う。それぞれに複数のＦＭＰＫ１４４から構成される複数のＦＭＰＫグループ８４が定義されていてもよい。
【００２０】
図２を用いて、ＦＭＰＫ１４４の構成について説明する。ＦＭＰＫ１４４は、ＦＭコントローラ１４４７と複数のＦＭチップ１４４３を含んで構成される。ＦＭコントローラ１４４７は、ポート１４４１、論理演算回路（図中ではＸＯＲ）１４４２、ＣＰＵ１４４４、メモリ１４４５、ディスクインタフェース（図中ではＤｉｓｋ  Ｉ／Ｆ）１４４６を含む。
【００２１】
ＦＭチップ１４４３は、不揮発性半導体メモリチップであり、例えばＮＡＮＤ型フラッシュメモリチップである。フラッシュメモリは周知のとおり、ページ単位でデータの読み出し及び書き込みを行い、データ消去を、複数ページの集合であるブロック単位で行う。一度書き込みが行われたページの上書きは不可能であり、一度書き込みが行われたページに対して再度書き込みを行うためには、当該ページを含むブロックのデータを消去する必要がある。
【００２２】
ＦＭＰＫ１４４は、ＦＭＰＫ１４４が接続されるストレージコントローラ３０に対して、ＦＭ１４４３の有する物理記憶領域を直接提供することはせず、論理的な記憶空間を提供する。論理的な記憶空間は、複数の論理ページと呼ばれる所定サイズの領域から構成されている。ＦＭＰＫ１４４が、ＣＰＵ６２からの、論理ページに対するデータ書き込み要求を受け付けると、当該論理ページにＦＭ１４４３の有する物理記憶領域（物理ページ）を割り当ててデータを格納する。
【００２３】
当該論理ページに対するデータ書き込み要求（つまり上書き）を受け付けた場合、ＦＭＰＫ１４４は、当該論理ページには他の物理ページを割り当て、当該他の物理ページにデータを格納する。上書き前のデータが格納されている物理ページは、無効ページとして管理され、後のリクラメーション処理がそのデータを消去する。
【００２４】
メモリ１４４５は、論理ページと物理ページの関係を管理するためのテーブルを格納する。メモリ１４４５は、一般に、揮発性メモリであるが、不揮発性メモリであってもよい。
【００２５】
次に、本実施形態係るストレージシステム４２で構成される、論理ボリュームとＲＡＩＤグループの関係を説明する。ストレージシステム４２は、複数（たとえば４つ）のＦＭＰＫ１４４から１つのＲＡＩＤグループを形成する。
【００２６】
１つのＦＭＰＫ１４４に障害が発生してデータアクセスできなくなった場合、ストレージシステム４２は、残りのＦＭＰＫ１４４内のデータを用いて、障害が発生したＦＭＰＫ１４４に格納されていたデータを復元する。また、ストレージシステム４２は、ＲＡＩＤグループの記憶領域を、論理ボリュームとして、上位装置に提供する。
【００２７】
ストレージコントローラ３０は、論理ボリュームとＦＭＰＫ１４４の対応関係を、ボリューム管理テーブル３００にて管理している。ボリューム管理テーブル３００は、ＳＭ１３２に格納されている。ボリューム管理テーブル３００は、論理ボリュームＩＤカラム３０１、ＦＭＰＫ  ＩＤカラム３０２、ＲＡＩＤレベルカラム３０３、及びＸＯＲ  Ｅｎａｂｌｅビットカラム３０４を含む。
【００２８】
論理ボリュームＩＤカラム３０１は、ストレージシステム４２内に定義されている論理ボリュームのＩＤを示す。ＦＭＰＫ  ＩＤカラム３０２は、論理ボリュームに対応付けられているＲＡＩＤグループを構成しているＦＭＰＫ１４４のＩＤを示す。ＲＡＩＤレベルカラム３０３は、ＲＡＩＤグループのレベルを示す。本実施形態に係るストレージシステム４２は、１つのＲＡＩＤグループの記憶領域を、１つの論理ボリュームに対応付ける。ＸＯＲ  Ｅｎａｂｌｅビットの詳細は後述する。
【００２９】
論理ボリューム上の記憶空間と、ＲＡＩＤグループ内の記憶領域との関係について、図４を用いて説明する。ストレージコントローラ３０は、論理ボリュームＶ０上の記憶空間を、ストライプと呼ぶ複数の固定サイズの記憶領域に分割して、ＲＡＩＤグループ１４５の記憶領域に対応付けている。
【００３０】
図４において、論理ボリュームＶ０内の、Ｄ（０）、Ｄ（１）で示されるボックスがストライプを表しており、ストライプのサイズは例えば、６４ＫＢ、２５６ＫＢ、又は５１２ＫＢである。各ストライプに付されている括弧内の番号を、「ストライプ番号」と呼ぶ。
【００３１】
図４において、要素１４４−１〜１４４−４は、ＦＭＰＫ１４４それぞれがストレージコントローラ３０に提供している記憶空間を表している。論理ボリュームＶ０上のストライプ群は、特定の１つのＦＭＰＫ１４４の記憶空間のみに連続して対応付けられるわけではない。各ストライプは、ＲＡＩＤグループ１４５を構成する複数のＦＭＰＫ１４４の記憶空間（１４４−１〜１４４−４）に分散して対応付けられる。
【００３２】
ＲＡＩＤグループ１４５内の、パリティが記憶されるストライプは、論理ボリュームＶ０上の記憶領域には対応付けられない。図４において、Ｐ０からＰｎで示されるボックスが、パリティが記憶されるストライプを表す。本明細書では、パリティが記憶されるストライプは、「パリティストライプ」と呼ばれる。データが記憶されるストライプは、「データストライプ」と呼ばれる。
【００３３】
パリティストライプに格納されるデータは、データストライプに格納されるデータを用いて生成される。図４は、ＲＡＩＤ５（３Ｄ＋１Ｐ）のＲＡＩＤグループ１４５を例として示す。一つのパリティストライプに格納されるパリティは、当該パリティストライプが存在するＦＭＰＫ１４４とは異なるＦＭＰＫ１４４に存在するデータストライプであって、当該パリティストライプのＦＭＰＫ１４４内アドレスと同アドレスに存在するデータストライプから生成される。
【００３４】
例えば、パリティストライプＰ２はＦＭＰＫ１４４−２の記憶空間上、先頭から３番目のストライプに位置する。パリティストライプＰ２に格納されるパリティを生成するために必要なデータストライプは、ＲＡＩＤグループ１４５を構成するＦＭＰＫ１４４−１、１４４−３、１４４−４内の、先頭から３番目のデータストライプＤ（６）、Ｄ（７）、Ｄ（８）である。
【００３５】
パリティストライプＰ２は、データストライプＤ６、Ｄ７、Ｄ８に格納されているデータの排他的論理和（ＸＯＲ）を格納する。以下、パリティストライプと、当該パリティストライプに格納されるパリティを生成するために用いられるデータストライプのセットを、「ストライプグループ」と呼ぶ。図４は、例として、一つのストライプグループを符号３１０で示す。
【００３６】
データが格納されるＦＭＰＫとパリティが格納されるＦＭＰＫは、ストライプグループによって異なる。実施形態の概要及びフロー説明において、対象データが格納されるＦＭＰＫをデータＦＭＰＫ、対象データに対応するパリティが格納されるＦＭＰＫをパリティＦＭＰＫと呼称する。
【００３７】
論理ボリュームＶ０上の記憶領域と、ＲＡＩＤグループ１４５内の記憶領域は、上記のような規則に基づいて対応付けられている。従って、ストレージコントローラ３０は、ホスト計算機１０からの論理ボリュームＶ０上のアクセス対象領域が対応付けられている、ＲＡＩＤグループ１４５内のストライプを、比較的単純な計算で同定できる。これはＲＡＩＤ機能を採用している公知のストレージ装置で行われている方法であるため、ここでは詳細な説明を省略する。
【００３８】
図５及び６を用いて、各ＦＭＰＫ１４４により保持され、使用される管理情報を説明する。図５は、論理アドレス管理情報テーブル４００の構成例を示し、図６は、シーケンス番号管理テーブル５００の構成例を示す。
【００３９】
ＦＭＰＫ１４４は、ＦＭＰＫ１４４が接続される外部装置に対して、論理的な記憶空間（以下、論理アドレス空間と呼ぶ）を提供し、ＣＰＵ６２から当該論理アドレス空間へのアクセス（リード、ライトなど）を許している。この論理アドレス空間は、ＦＭ１４４３の記憶領域のアドレス空間とは異なっている。
【００４０】
ＦＭＰＫ１４４がＣＰＵ６２から論理アドレス空間上の領域を指定したライト要求を受けると、当該領域にＦＭ１４４３の未使用領域（たとえば未使用の物理ページ）を割り当てる。ＦＭＰＫ１４４は論理アドレス空間上の領域と、当該領域に割り当てたＦＭ１４４３上の記憶領域との対応関係を、論理アドレス管理情報テーブル４００に記録して管理する。
【００４１】
図５は、図５に示すように、論理アドレス管理情報テーブル４００は、ＬＢＡカラム４０１、ＯＬＤ  ＰＡカラム４０２、及びＮＥＷ  ＰＡカラム４０３を含む。ＬＢＡカラム４０１は、ストレージコントローラ３０に提供する論理アドレス空間上のアドレスを示す。
【００４２】
ＯＬＤ  ＰＡカラム４０２は、ＬＢＡカラム４０１が示すアドレスに格納されたデータ（又はパリティ）へのポインタ、つまりＬＢＡカラム４０１が示すアドレスに対応付けられたＦＭ１４４３上のアドレス（物理アドレスと呼ぶ）を示す。ＮＥＷ  ＰＡカラム４０３は、ＬＢＡカラム４０１が示すアドレスに対して更新後データ（新データ）を受信した時に、当該新データを格納するＦＭ１４４３上の物理アドレスを示す。
【００４３】
本実施形態の説明において、論理アドレス管理情報テーブル４００で管理される記憶領域の単位は、１セクタとする。他の例において、論理アドレス管理情報テーブル４００で管理される記憶領域の単位は、１セクタと異なるサイズの領域、例えば、ＦＭ１４４３の最小読み書き単位であるページであってもよい。
【００４４】
図６は、ＲＡＩＤ５（３Ｄ＋１Ｐ）のためのシーケンス番号管理テーブル５００の例を示す。シーケンス番号管理テーブル５００は、ＬＢＡカラム５０１及び複数カラム５２１、５２２、５２３からなるセクション５０２を含む。ＬＢＡカラム５０１は、ストレージコントローラ３０に提供される論理アドレス空間上のアドレスを示す。
【００４５】
本例において、ＬＢＡカラム５０１が示すアドレスの単位は、ＬＢＡカラム４０１と同様である。本例において、一つのストライプグループにおいて、ストライプの論理アドレス（ＬＢＡ）は共通であるが、一つのストライプにおいて、ストライプの論理アドレス（ＬＢＡ）が異なっていてもよい。
【００４６】
セクション５０２は、ストライプグループのデータストライプ数と同数のカラムを有する。カラム５２１、５２２、５２３は、それぞれ、ストライプグループにおけるデータストライプのシーケンス番号を示す。シーケンス番号は、データの世代を示す。カラム５２１、５２２、５３３は、それぞれ、ストライプグループにおける番号０、番号１、番号２のデータストライプのシーケンス番号を示す。
【００４７】
各レコードにおいて、ＬＢＡカラム５０１は、パリティストライプのアドレス又はデータストライプのアドレスを示す。パリティストライプのレコードにおいて、カラム５２１、５２２、５２３は、それぞれ、同ストライプグループのデータストライプのシーケンス番号を示す。データストライプのレコードにおいて、セクション５０２の対応するカラムがそのシーケンス番号を示し、他のカラムが所定の無効値（ＮＵＬＬ値）を示す。
【００４８】
ストライプグループ内のデータストライブ番号は、ストライプグループ内で各データストライプを同定できれば、どのように定義されていてもよい。データストライプ番号は、例えば、ＲＡＩＤグループ内のＦＭＰＫ１４４の順に基づく。例えば、図４において、ＦＭＰＫ１４４−１、１４４−２、１４４−３、１４４−４の順序が定義されている。データストライプの番号順序は、パリティストライプを除いて、ＦＭＰＫ１４４−１、１４４−２、１４４−３、１４４−４の順序に一致する。
【００４９】
例えば、パリティストライプがＦＭＰＫ１４４−１に存在する場合、ＦＭＰＫ１４４−２、１４４−３、１４４−４のデータストライプは、それぞれ、番号０、番号１、番号２を有する。パリティストライプがＦＭＰＫ１４４−３に存在する場合、ＦＭＰＫ１４４−１、１４４−２、１４４−４のデータストライプは、それぞれ、番号０、番号１、番号２を有する。
【００５０】
図４のストライプ３１０を例として、パリティストライプとデータストライプの関係を説明する。パリティストライプＰ２に格納されるパリティデータは、データストライプＤ（６）、Ｄ（７）、Ｄ（８）のＸＯＲで生成される。後述するように、本実施形態において、データＦＭＰＫが中間パリティを生成し、保持しているシーケンス番号をインクリメントし、中間パリティと新しいシーケンス番号とを、パリティが格納されるパリティＦＭＰＫに送信する。パリティＦＭＰＫは、中間パリティと旧（更新前）パリティとから新（更新後）パリティを生成し、シーケンス番号とともに格納する。
【００５１】
そのため、ＬＢＡカラム５０１が、パリティストライプのデータが格納されるＬＢＡを示す場合、そのレコードは、データストライプＤ（６）、Ｄ（７）、Ｄ（８）のシーケンス番号をそれぞれ格納する。
【００５２】
次に、ＦＭＰＫ１４４のパリティ演算機能の設定を説明する。管理計算機２０は、ＦＭＰＫ１４４のパリティ演算機能の設定を行うメニュー画像を、その表示装置において表示し、管理者にＦＭＰＫ１４４のパリティ演算機能の設定を行わせる。図７はそのメニューウィンドウの一例を示す。メニューウィンドウＧ１００は、ＦＭＰＫ設定セクションＧ１０１と、論理ボリューム設定セクションＧ１０４、保存ボタンＢ１０、そしてキャンセルボタンＢ１１を示す。
【００５３】
ＦＭＰＫ設定セクションＧ１０１は、ラジオボタンＧ１０２を含む、ＦＭＰＫ１４４のＸＯＲ算出機能の有効又は無効を入力するためのＧＵＩを示す。ＦＭＰＫ設定セクションＧ１０１は、ＦＭＰＫ１４４のＸＯＲ算出機能の使用可否を設定するための入力セクションである。
【００５４】
論理ボリューム設定セクションＧ１０４は、ＦＭＰＫ設定セクションＧ１０１において、ＦＭＰＫ１４４のＸＯＲ算出機能が有効（ｅｎａｂｌｅ）に設定された場合に入力が可能になり、また設定された情報が有効になる。論理ボリューム設定セクションＧ１０４は、論理ボリュームＩＤ設定カラムＧ１０５と、ＦＭＰＫ  ＸＯＲ機能設定カラムＧ１０６とを含む。
【００５５】
論理ボリュームＩＤ設定カラムＧ１０５は、ストレージシステム４２に定義されている論理ボリュームＩＤを表示する。ＸＯＲ機能設定カラムＧ１０６は、論理ボリュームＩＤ設定カラムＧ１０５に表示されている論理ボリュームが対応付けられているＦＭＰＫ１４４のＸＯＲ算出機能の使用可否を設定するための入力フィールドからなる。ある論理ボリュームについて、ＸＯＲ機能設定カラムＧ１０６の「ｅｎａｂｌｅ」が選択されると、当該論理ボリュームの対応付けられたＲＡＩＤグループのパリティ生成時には、ＦＭＰＫ１４４の有するＸＯＲ算出機能を用いたパリティ生成が行われる。
【００５６】
保存ボタンＢ１０が押下されると、メニューウィンドウＧ１００に入力された設定情報が、ストレージシステム４２に送信され、保存される。具体的には、ＸＯＲ機能設定カラムＧ１０６の「ｅｎａｂｌｅ」が選択された論理ボリュームについて、ボリューム管理テーブル３００のＸＯＲ  Ｅｎａｂｌｅビットカラム３０４の値が１に設定される。「ｄｉｓａｂｌｅ」が選択された場合には、ＸＯＲ  Ｅｎａｂｌｅビットカラム３０４の値が０に設定される。キャンセルボタンＢ１１が押下されると、メニューウィンドウＧ１００で入力した内容はストレージシステム４２に保存されることなく破棄され、メニューウィンドウＧ１００は閉じられる。
【００５７】
図８は、実施形態１におけるホストライト処理の概略図を示す。図８を用いて、本実施形態に係るストレージシステム４２におけるデータと制御の流れを説明する。ストレージシステム４２は、ホスト計算機１０から新データ（新Ｄ）のライト要求を受信し、データＦＭＰＫ１４４に新データを格納する。ストレージシステム４２は、必要な新パリティを生成し、パリティＦＭＰＫ１４４に格納し、ホストに正常応答を返す。
【００５８】
ＣＰＵ６２は、ホスト計算機１０からライト要求を受けると、ＦＥ  Ｉ／Ｆ５２を使用して、ライト要求に伴うライトデータ（新Ｄ）７０を、メモリ４０に格納する（８０）。次に、ＣＰＵ６２は、データＦＭＰＫ１４４に対して、ＬＢＡを指定する新データ更新コマンドを発行し、新データ７０をデータＦＭＰＫ１４４に送信する。
【００５９】
新データ更新コマンドを受けたデータＦＭＰＫ１４４は、新データ７０をメモリ１４４５に格納し、新データ７０を格納するＦＭ領域を確保する。データＦＭＰＫ１４４は、ＦＭ領域に対する物理アドレスを、ＣＰＵ６２が要求したＬＢＡに対応するＮＥＷ  ＰＡカラム４０３のセルに格納する。データＦＭＰＫ１４４は、シーケンス番号セクション５０２の値をインクリメントする。データＦＭＰＫ１４４は、ＸＯＲ回路１４４２を用いてＯＬＤ  ＰＡカラム４０２が指す旧データ７１と新データ７０のＸＯＲ値である中間パリティ７２を生成する（８６）。
【００６０】
データＦＭＰＫ１４４は、メモリ４０に対して中間パリティ７２とシーケンス番号７５と新データ更新完了通知を送り（８２）、ＮＥＷ  ＰＡカラム４０３が指すＦＭ領域に、新データをライトする。通常のＦＭＰＫ１４４はバッテリを含むため、フラッシュメモリへのライトは、新データ更新コマンドの処理と非同期でよい。
【００６１】
次に、ＣＰＵ６２は、パリティＦＭＰＫ１４４に対して、ＬＢＡを指定してパリティ更新コマンドを発行し、中間パリティ７２、シーケンス番号７５、対応するデータのストライプグループ内データストライプ番号を、パリティＦＭＰＫ１４４に送る（８３）。
【００６２】
パリティ更新コマンドを受けたパリティＦＭＰＫ１４４は、中間パリティ７２をメモリ１４４５に格納する。パリティＦＭＰＫ１４４は、ＯＬＤ  ＰＡカラム４０２からＣＰＵ６２が要求したＬＢＡに対応する旧パリティ７３のアドレスを読み出し、ＦＭ領域から旧パリティ７３を読み出す。パリティＦＭＰＫ１４４は、ＸＯＲ回路１４４２を用いて旧パリティ７３と中間パリティ７２のＸＯＲ値である新パリティ７４を生成する（８７）。
【００６３】
さらに、パリティＦＭＰＫ１４４は、新パリティ７４を格納するＦＭ領域を確保し、ＦＭ領域に対する物理アドレスを、ＯＬＤ  ＰＡカラム４０２に格納する。パリティＦＭＰＫ１４４は、シーケンス番号７５を、シーケンス番号管理テーブル５００のセクション５０２において、ＣＰＵ６２から指定されたＬＢＡ及びストライプグループ内データストライプ番号に対応するセルに格納する。
【００６４】
パリティＦＭＰＫ１４４は、メモリ４０に対して新パリティ更新完了通知を送信し、ＯＬＤ  ＰＡ４０２が指すＦＭ領域に、新パリティ７４をライトする。通常のＦＭＰＫ１４４はバッテリを備えるため、ＦＭ領域へのライトは、パリティ更新コマンドの処理と非同期でよい。
【００６５】
新パリティ更新完了を確認したＣＰＵ６２は、ホスト計算機１０に対してライト処理完了（正常終了）を報告する（８４）。その後、ＣＰＵ６２は、データＦＭＰＫ１４４に新データ確定コマンドを送信する（８５）。
【００６６】
新データ確定コマンドを受けたＦＭＰＫ１４４のＣＰＵ１４４４は、ＮＥＷ  ＰＡカラム４０３に格納されている物理アドレスを、ＯＬＤ  ＰＡカラム４０２にコピーし、ＮＥＷ  ＰＡカラム４０３の値を無効値（ＮＵＬＬ値）に更新する。ＣＰＵ１４４４は、メモリ４０に対して新データ確定コマンド完了通知を送信する。ＣＰＵ６２は、新データ確定コマンド完了を確認し、ホストライト処理は完了する。
【００６７】
図９Ａ、９Ｂ及び図９Ｃは、本実施形態に係るＣＰＵ６２が実行するするホストライト処理のフローチャートを示す。図９Ａに示すように、ＣＰＵ６２は、まず、ホスト計算機１０から、ライト要求を受信する（Ｓ２１１０）。次に、ＣＰＵ６２は、新データ、中間パリティ、及びシーケンス番号を格納するための一時格納領域を、そのＣＰＵ６２が繋がるメモリ４０上に確保し（Ｓ２１２０）、ホスト計算機１０に対して書き込み準備完了通知を送信する（Ｓ２１３０）。一時格納領域は、冗長化不要データを格納する領域であり、そのデータは、他のストレージコントローラ３０のメモリ４０にコピーされない。
【００６８】
ホスト計算機１０は書き込み準備完了通知に応答して、新ライトデータ７０の送信を開始する。ホスト計算機１０から新ライトデータ７０のメモリ４０内一時格納領域へのデータ送信が終了すると、ＣＰＵ６２は、データ送信完了通知を、ホスト計算機１０からＦＥ  Ｉ／Ｆ５２を介して受信する（Ｓ２１４０）。
【００６９】
ＣＰＵ６２はこの通知を受信すると、新データ７０を格納すべきデータＦＭＰＫ１４４へ、新データ更新コマンドを送信する（Ｓ２１５０）。新データ更新コマンドは、新データが格納されているメモリ４０のアドレス、新データを送信するデータＦＭＰＫ１４４がＣＰＵ６２に見せている論理アドレス空間の論理アドレス（ＬＢＡ）、及びデータ長を指定する。新データ更新コマンドは、さらに、中間パリティ及びシーケンス番号をそれぞれ格納するためのメモリ４０のアドレスを指定する。
【００７０】
新データ更新コマンドを受けたデータＦＭＰＫ１４４のＣＰＵ１４４４は、論理アドレス管理情報テーブル４００の指定ＬＢＡのレコードを参照し、前回ライト処理の新旧双方のデータが保持されているか判定する。ＮＥＷ  ＰＡカラム４０３の値が無効値である場合、前回ライト処理のデータ更新（ストライプグループ内のパリティ更新を含む）が完了している。ＮＥＷ  ＰＡカラム４０３がアドレスを示す場合、前回ライト処理のデータ更新が未完了であり、前回ライト処理の新旧双方のデータがデータＦＭＰＫ１４４内に保持されている。
【００７１】
前回ライト処理のデータ更新が完了している場合、ＣＰＵ１４４４は、新データ７０をメモリ１４４５に格納し、ＦＭ１４４３において新データ７０を格納する物理領域を確保する。ＣＰＵ１４４４は、確保した物理領域に対する物理アドレスを、ＣＰＵ６２が要求したＬＢＡに対応するＮＥＷ  ＰＡカラム４０３のセルに格納し、シーケンス番号セクション５０２の対応するセルの値をインクリメントする。
【００７２】
ＣＰＵ１４４４は、ＸＯＲ回路１４４２を用いてＯＬＤ  ＰＡカラム４０２が指す旧データ７１と新データ７０のＸＯＲ値である中間パリティ７２を生成し（８６）、メモリ４０の指定されたアドレスに対して、中間パリティ７２、シーケンス番号７５、新データ更新完了通知を格納する（８２）。ＣＰＵ６２は、メモリ４０を介して、新データ更新の完了通知を受信する（Ｓ２１６０）。その後、ＦＭＰＫ１４４のＣＰＵ１４４は、ＮＥＷ  ＰＡカラム４０２が指すＦＭ領域に、新データ７０をライトする。
【００７３】
前回ライト処理のデータ更新が完了しておらず、前回ライト処理の新旧双方のデータが保持されている場合、データＦＭＰＫ１４４のＣＰＵ１４４４は、新旧双方のデータが保持されていることを示す応答を、現在のシーケンス番号と共に、ストレージコントローラ３０のメモリ４０に格納する。  ＣＰＵ６２は、データＦＭＰＫ１４４からの応答を参照して、前回ライト処理の新旧双方のデータが保持されているか判定する（Ｓ２３００）。新旧双方のデータが保持されていない場合（Ｓ２３００：ＮＯ）、ＣＰＵ６２は、パリティＦＭＰＫ１４４へ、パリティ更新コマンドを送信する（Ｓ２１７０）。パリティ更新コマンドは、中間パリティが格納されているメモリ４０のアドレス、中間パリティを送信するＦＭＰＫ１４４がＣＰＵ６２に見せている論理アドレス空間の論理アドレス（ＬＢＡ）、データ長、シーケンス番号、ストライプグループ内番号を指定する。
【００７４】
パリティ更新コマンドを受けたパリティＦＭＰＫ１４４のＣＰＵ１４４４は、中間パリティ７２をメモリ１４４５に格納し、ＯＬＤ  ＰＡカラム４０２からＣＰＵ６２が要求したＬＢＡに対応する旧パリティ７３のポインタを読み出す。ＣＰＵ１４４４は、ＸＯＲ回路１４４２を用いて、旧パリティ７３と中間パリティ７２のＸＯＲ値である新パリティ７４を生成する（８７）。
【００７５】
ＣＰＵ１４４４は、新パリティ７４を格納する物理領域をＦＭ１４４３において確保する。ＣＰＵ１４４４は、物理領域に対する物理アドレスをＯＬＤ  ＰＡカラム４０２に格納し、シーケンス番号７５を、シーケンス番号管理テーブル５００のセクション５０２において、ＣＰＵ６２から送られてきたＬＢＡ及びストライプグループ内データストライプ番号に対応するセルに格納する。ＣＰＵ１４４４は、メモリ４０に対して新パリティ更新完了通知を送信する。
【００７６】
図９Ｂに示すように、ＣＰＵ６２は、メモリ４０を介して、パリティＦＭＰＫ１４４から、パリティ更新コマンド完了通知を受信する。（Ｓ２１８０）。その後、パリティＦＭＰＫ１４４のＣＰＵ１４４４は、ＯＬＤ  ＰＡカラム４０２が指すＦＭ領域に、新パリティ７４をライトする。
【００７７】
ＣＰＵ６２は、新パリティ更新完了通知を受信すると、ホスト計算機１０に対し、処理が正常に終了したことを示すライト完了通知を送信する（Ｓ２１９０）。その後、ＣＰＵ６２は、新データなどを一時格納しているメモリ４０の一時格納領域を、解放する（Ｓ２２００）。
【００７８】
次に、ＣＰＵ６２は、新データ７０を保持するデータＦＭＰＫ１４４へ新データ確定コマンドを送信する（Ｓ２２１０）。新データ確定コマンドでは、データＦＭＰＫ１４４がＣＰＵ６２に見せている論理アドレス空間の論理アドレス（ＬＢＡ）、及びデータ長を指定する。パリティＦＭＰＫ１４４への新データ確定コマンドの送信は不要である。
【００７９】
新データ確定コマンドを受けたデータＦＭＰＫ１４４のＣＰＵ１４４４は、ＮＥＷ  ＰＡカラム４０３に格納されている物理アドレスをＯＬＤ  ＰＡカラム４０２にコピーし、ＮＥＷ  ＰＡカラム４０３の値を無効値に更新する。
【００８０】
ＣＰＵ１４４４は、メモリ４０に対して新データ確定完了通知を送信する。新データ確定の完了が、ＣＰＵ６２に通知される（Ｓ２２２０）。ＣＰＵ６２が新データ確定完了を確認し、ホストライト処理は完了する。パリティ更新後の新データ確定コマンドによりデータＦＭＰＫの論理アドレス管理情報テーブル４００を更新し、ライト処理を完了することで、ホストライト処理の完了を適切に管理できる。
【００８１】
図９Ａに戻って、ステップＳ２３００において、新旧双方のデータがデータＦＭＰＫ１４４に保持されている場合（Ｓ２３００：ＹＥＳ）、ＣＰＵ６２は、新データのＬＢＡ及びストライプグループ内データストライプ番号を指定して、パリティＦＭＰＫ１４４にシーケンス番号を問い合わせる（Ｓ２３１０）。ＣＰＵ６２は、パリティＦＭＰＫ１４４から、当該シーケンス番号を取得する（Ｓ２３２０）。
【００８２】
ＣＰＵ６２は、データＦＭＰＫ１４４から取得したシーケンス番号と、パリティＦＭＰＫ１４４から取得したシーケンス番号とを、比較する（Ｓ２３００）。二つのシーケンス番号が不一致である場合、ＣＰＵ６２はステップＳ２４００に進む。二つのシーケンス番号が一致である場合、ＣＰＵ６２はステップＳ２５００に進む。
【００８３】
図９Ｃに示すように、ステップＳ２４００において、ＣＰＵ６２は、上記ＬＢＡとデータ長とを指定して、中間パリティリードコマンドをデータＦＭＰＫ１４４に送信する。中間パリティリードコマンドは、さらに、中間パリティ及びシーケンス番号をそれぞれ格納するためのメモリ４０のアドレスを指定する。
【００８４】
ＣＰＵ６２は、データＦＭＰＫ１４４から、メモリ４０を介して、中間パリティリード完了と共に、中間パリティを受信する（Ｓ２４１０）。ＣＰＵ６２は、パリティＦＭＰＫ１４４に、パリティ更新コマンドを送信する（Ｓ２４２０）。ステップＳ２４２０、Ｓ２４３０、Ｓ２５００及びＳ２５１０は、それぞれ、ステップＳ２１７０、Ｓ２１８０、Ｓ２２１０及びＳ２２２０と同様であり、詳細を省略する。ステップＳ２５１０の後、ＣＰＵ６２は、ステップＳ２１５０に戻る。
【００８５】
上述のように、ＦＭＰＫが新旧データを保持しているか（新データが未確定であるか）をチェックすることで、ストレージコントローラは、同一アドレスに対する前回ライト処理が、完了しているか、又は、（例えばストレージコントローラの障害により）中断しているか判定できる。
【００８６】
データＦＭＰＫからの応答が、前回ライト処理が完了していないことを示す場合、データＦＭＰＫとパリティＦＭＰＫのシーケンス番号を比較することで、ストレージコントローラは、データＦＭＰＫの前回ライト処理における新データに対応したパリティデータがパリティＦＭＰＫに格納されているか判定できる。
【００８７】
上述のように、データＦＭＰＫのシーケンス番号とパリティＦＭＰＫのシーケンス番号を比較することで、前記ライト処理が中断した時点を特定し、適切なステップから前記ライト処理を再開できる。シーケンス番号の一致は、データＦＭＰＫのデータとパリティＦＭＰＫのパリティデータが整合していることを示す。シーケンス番号が不一致であることは、データＦＭＰＫのデータとパリティＦＭＰＫのパリティデータが不整合であることを示す。
【００８８】
上述のように、前回ライト処理が完了していない場合、ストレージコントローラは、中断したステップから前回ライト処理を再開し、前回ライト処理を完了してから今回（新規）ライト処理を実行する。これにより、ホストデータとパリティデータとの間の不整合を避けることができる。
【００８９】
図１０は、ＦＭＰＫ１４４からのリード処理のフローチャートを示す。以下に説明するリード処理により、適切なデータをＦＭＰＫ１４４からリードすることができる。ＦＭＰＫ１４４のＣＰＵ１４４４は、ストレージコントローラ３０から、ＬＢＡとデータ長を指定するリードコマンドを受信する（Ｓ５１１０）。ＣＰＵ１４４４は、メモリ１４４５において、一時格納領域を確保する（Ｓ５１２０）。
【００９０】
ＣＰＵ１４４４は、論理アドレス管理情報テーブル４００から、指定されたＬＢＡの物理アドレスを取得する（Ｓ５１３０）。指定されたＬＢＡのレコードのＮＥＷ  ＰＡカラム４０３が、物理アドレスを格納している場合、ＣＰＵ１４４４は、ＮＥＷ  ＰＡカラム４０２から物理アドレスを取得する。ＮＥＷ  ＰＡカラム４０３が無効値を格納している場合、ＣＰＵ１４４４は、ＯＬＤ  ＰＡカラム４０２から物理アドレスを取得する。
【００９１】
ＣＰＵ１４４４は、取得した物理アドレスからリードしたデータを一時格納領域へ格納する（Ｓ５１４０）。その後、ＣＰＵ１４４４は、ストレージコントローラ３０へ、リードデータとリード完了通知とを送信する（Ｓ５１５０）。
【００９２】
上述のように、ストレージコントローラは、新データと旧データの双方が存在する場合に新データを応答し、旧データのみ存在する場合に旧データを応答する。これにより、ライト処理中の障害発生後のリード処理において、ホスト計算機にライト完了通知を応答後に旧データを応答することを避けることができ、ストレージシステムの信頼性及び可用性が保たれる。
【００９３】
さらに、新旧データを保持する場合に、ＦＭＰＫ１４４がストレージコントローラ３０へ新旧データ保持状態を通知し、ストレージコントローラ３０がステップＳ２３１０、Ｓ２３２０、Ｓ２３３０、Ｓ２４００、Ｓ２４１０、Ｓ２４２０、Ｓ２４３０、Ｓ２５００、Ｓ２５１０を行った後、ホストへ新データを応答する。これにより、パリティＦＭＰＫ１４４にも新データが反映されるため、新データ応答後のデータＦＭＰＫ１４４が故障時にも、旧データを応答することを避けることができる。
【００９４】
ＲＡＩＤグループ内のＦＭＰＫの障害発生に応じたコレクション処理は、パリティＦＭＰＫからパリティデータをリードする。コレクション処理において、ストレージコントローラは、正常なデータＦＭＰＫからデータをリードする。これにより、前回ライト処理が完了しているか判定できる。ストレージコントローラは、前回ライト処理の完了後、パリティＦＭＰＫからパリティデータをリードする。これにより、ドライブ障害時にも不正データを応答することはなく、ストレージシステムの信頼性及び可用性が保たれる。
【００９５】
本実施形態により、ストレージシステムの信頼性、可用性を保ちつつ、パリティ生成及び記憶媒体へのデータ格納処理に係る、ストレージコントローラの処理負荷を低減することができ、ライト性能を向上できる。
【００９６】
上述のように、ＦＭＰＫによるパリティ生成により、ストレージコントローラによるパリティ生成及びパリティデータの二重化が不要となる。また、シーケンス番号により、データＦＭＰＫ及びパリティＦＭＰＫそれぞれに、ライトデータ更新及びパリティデータ更新の管理情報を持たせ、障害に適切に対応できる。これにより、ストレージコントローラがデータ更新ための管理情報を保持することが不要となる。
【００９７】
上述のように、新データ更新コマンドへの応答がシーケンス番号及び中間パリティを含むことで、ストレージコントローラからデータＦＭＰＫへの発行コマンド数を低減できる。ストレージコントローラは、シーケンス番号及び／又は中間パリティを要求するコマンドを、新データ更新コマンドと別に発行してもよい。
【００９８】
本実施形態は、パリティ更新後に、ホスト計算機にライト処理が正常に終了したことを通知する。これにより、ライトデータの冗長化が不要である。これに代えて、ストレージコントローラのメモリ上のＣＭにライトデータを冗長化し、ホストに正常応答後に、データ更新コマンド以後の処理を実行してもよい。その場合でも、ストレージコントローラがＦＭＰＫを更新する処理は改善され、ストレージコントローラのライト性能は向上する。
【００９９】
（実施形態２）
図１１は、実施形態２におけるホストライト処理の概略図を示す。実施形態２は、新データを格納すべきデータＦＭＰＫと、新データに対応するパリティを格納すべきパリティＦＭＰＫとに、並行に新データを送信する。さらに、両ＦＭＰＫから正常応答が報告された時点で、実施形態２は、ホスト計算機１０に対し、ライト処理が正常に終了したことを通知する。
【０１００】
これにより、実施形態１よりホスト計算機１０からのライト要求に対する応答時間を短縮できる。また、実施形態１でストレージコントローラのメモリ上のＣＭにライトデータを冗長化よりも、ストレージコントローラの処理が減り、ストレージコントローラのライト性能が向上する。
【０１０１】
図１１は、実施形態２におけるホストライト処理の概略図を示す。図１１を用いて、本実施形態に係るストレージシステム４２におけるデータと制御の流れを説明する。ストレージシステム４２は、ホスト計算機１０から新データ（新Ｄ）のライト要求を受信する。ストレージシステム４２は、新データをデータＦＭＰＫとパリティＦＭＰＫに格納し、ホスト計算機１０にライト完了通知を送信する。ストレージシステム４２は、必要な新パリティを生成し、新パリティをパリティＦＭＰＫに格納する。
【０１０２】
ＣＰＵ６２は、ホスト計算機１０から、ライト要求を受信すると、ＦＥ  Ｉ／Ｆ５２を使用して、ライト要求に伴うライトデータ（新Ｄ）７０を、メモリ４０に格納する（６８０）。次に、ＣＰＵ６２は、データＦＭＰＫ１４４に対して、ＬＢＡを指定する新データ更新コマンドを発行し、新データ７０をデータＦＭＰＫ１４４に送信する（６８１）。ＣＰＵ６２は、パリティＦＭＰＫ１４４に対して、ＬＢＡ及びストライプグループ内データ番号を指定する新データ格納コマンドを発行し、新データ７０をパリティＦＭＰＫ１４４にも送信する（６８２）。
【０１０３】
新データ更新コマンドを受けたデータＦＭＰＫ１４４は、新データ７０をメモリ１４４５に格納し、指定されたＬＢＡのシーケンス番号セクション５０２の値をインクリメントし、メモリ４０に対してシーケンス番号７６と新データ更新コマンド受付通知を送信する（６８３）。
【０１０４】
新データ格納コマンドを受けたパリティＦＭＰＫ１４４は、新データ７０をメモリ１４４５に格納し、パリティが格納されるＬＢＡのＮＥＷ  ＰＡカラム４０３に、アドレスを記録し、メモリ４０に対して新データ格納完了通知を送信する。パリティＦＭＰＫ１４４は、電源障害に備えて、新データ格納コマンド処理において、ＦＭ領域を確保してもよい。通常のＦＭＰＫ１４４はバッテリを備えるため、パリティＦＭＰＫ１４４は、電源障害発生時にバッテリからの電源供給で動作し、ＦＭ領域を確保して、新データをライトしてもよい。
【０１０５】
新データ更新コマンド受付通知及び新データ格納完了通知を受信したＣＰＵ６２は、ホスト計算機１０に対してライト完了通知を送信し（６８４）、データＦＭＰＫ１４４からの新データ更新完了通知を待つ。
【０１０６】
新データ更新コマンド受付通知を送ったデータＦＭＭＰＫ１４４は、新データ７０を格納するＦＭ領域を確保し、ＦＭ領域に対する物理アドレスをＣＰＵ６２が要求したＬＢＡに対応するＮＥＷ  ＰＡカラム４０３のセルに格納する。データＦＭＰＫ１４４は、ＸＯＲ回路１４４２を用いてＯＬＤ  ＰＡカラム４０２が指す旧データ７１と新データ７０のＸＯＲ値である中間パリティ７２を生成する（８６）。
【０１０７】
データＦＭＰＫ１４４は、メモリ４０に対して中間パリティ７２と新データ更新完了通知を送り（６８５）、ＮＥＷ  ＰＡカラム４０３が指すＦＭ領域に新データをライトする。通常のＦＭＰＫ１４４はバッテリを含むため、フラッシュメモリへのライトは、新データ更新コマンドの処理と非同期でよい。
【０１０８】
新データ更新完了通知を受信したＣＰＵ６２は、パリティＦＭＰＫ１４４に対して、ＬＢＡを指定してパリティ更新コマンドを発行し、中間パリティ７２、シーケンス番号７５、対応するデータのストライプグループ内データストライプ番号を、パリティＦＭＰＫ１４４に送る（６８６）。
【０１０９】
パリティ更新コマンドを受けたパリティＦＭＰＫ１４４は、中間パリティ７２をメモリ１４４５に格納する。パリティＦＭＰＫ１４４は、ＯＬＤ  ＰＡカラム４０２からＣＰＵ６２が要求したＬＢＡに対応する旧パリティ７３のアドレスを読み出し、ＦＭ領域から旧パリティ７３を読み出す。パリティＦＭＰＫ１４４は、ＸＯＲ回路１４４２を用いて旧パリティ７３と中間パリティ７２のＸＯＲ値である新パリティ７４を生成する（８７）。
【０１１０】
さらに、パリティＦＭＰＫ１４４は、新パリティ７４を格納するＦＭ領域を確保し、ＦＭ領域に対する物理アドレスをＯＬＤ  ＰＡカラム４０２に格納する。パリティＦＭＰＫ１４４は、シーケンス番号管理テーブル５００のセクション５０２において、ＣＰＵ６２から指定されたＬＢＡ及びストライプグループ内データストライプ番号に対応するセルに格納する。
【０１１１】
パリティＦＭＰＫ１４４は、新データ格納コマンドと共に受けた新データを破棄し、メモリ４０に対して新パリティ更新完了通知を送り、ＯＬＤ  ＰＡカラム４０２が指すＦＭ領域に新パリティ７４をライトする。通常のＦＭＰＫ１４４はバッテリを備えるため、ＦＭ領域へのライトは、パリティ更新コマンドの処理と非同期でよい。
【０１１２】
新パリティ更新完了を確認したＣＰＵ６２は、データＦＭＰＫ１４４に新データ確定コマンドを送る（６８７）。新データ確定コマンドを受けたデータＦＭＰＫ１４４は、ＮＥＷ  ＰＡカラム４０３に格納されている物理アドレスをＯＬＤ  ＰＡカラム４０２にコピーし、ＮＥＷ  ＰＡカラム４０３の値を無効値に更新する。データＦＭＰＫ１４４は、メモリ４０に対して新データ確定完了通知を送る。ＣＰＵ６２が新データ確定完了を確認し、ライト処理は完了する。
【０１１３】
図１２Ａ、１２Ｂ及び１２Ｃは、実施形態２におけるＣＰＵ６２が実行するホストライト処理のフローを示す。図１２ＡにおけるステップＳ３１１０からＳ３１５０は、図９ＡにおけるステップＳ２１１０からＳ２１５０と同様である。
【０１１４】
ステップＳ３１６０において、ＣＰＵ６２は、データＦＭＰＫ１４４から、新データ更新コマンドへの応答を受信する。データＦＭＰＫ１４４による新旧データについての判定方法は、実施形態１と同様である。新旧データが存在する場合、データＦＭＰＫ１４４は、新旧データが保持されていることを示す応答を、シーケンス番号と共に返す。旧データのみ存在する場合、データＦＭＰＫ１４４は、新データ７０をメモリ１４４５に格納し、シーケンス番号セクション５０２の値をインクリメントし、メモリ４０に対してシーケンス番号と新データ更新コマンド受付通知を送る（６８３）。
【０１１５】
データＦＭＰＫ１４４が新旧データを保持していない場合（Ｓ３１６５：ＮＯ）。ＣＰＵ６２は、パリティＦＭＰＫ１４４に対して新データ格納コマンドを発行し、新データ７０をパリティＦＭＰＫ１４４に送る（Ｓ３１７０）。新データ格納コマンドは、新データが格納されているメモリ４０のアドレス、新データに対応するパリティを格納するパリティＦＭＰＫ１４４がＣＰＵ６２に見せている論理アドレス空間における論理アドレス（ＬＢＡ）、データ長、及びストライプグループ内データストライプ番号を指定する。
【０１１６】
新データ格納コマンドを受けたパリティＦＭＰＫ１４４は、新データ７０をメモリ１４４５に格納し、パリティデータが格納されるＬＢＡのＮＥＷ  ＰＡカラム４０３に物理アドレスを記録し、メモリ４０に対して新データ格納完了通知を送る（Ｓ３１８０）。
【０１１７】
新データ更新コマンド受付通知及び新データ格納完了通知を受信したＣＰＵ６２は、ホスト計算機１０に対して、ライト完了通知を送信する（Ｓ３１９０）。
【０１１８】
新データ更新コマンド受付通知を送った後、データＦＭＰＫ１４４は、新データ７０を格納するＦＭ領域を確保し、ＦＭ領域に対する物理アドレスをＣＰＵ６２が要求したＬＢＡに対応するＮＥＷ  ＰＡカラム４０３のセルに格納する。データＦＭＰＫ１４４は、ＸＯＲ回路１４４２を用いて、ＯＬＤ  ＰＡカラム４０２が指す旧データ７１と新データ７０のＸＯＲ値である中間パリティ７２を生成する（８６）。
【０１１９】
データＦＭＰＫ１４４は、メモリ４０に対して中間パリティ７２と新データ更新完了通知を送り（６８５）、新データ更新が完了した旨がＣＰＵ６２に通知される（Ｓ３２００）。その後、データＦＭＰＫ１４４は、ＮＥＷ  ＰＡカラム４０３が指すＦＭ領域に新データ７０をライトする。
【０１２０】
新データ更新完了通知を受けたＣＰＵ６２は、パリティＦＭＰＫ１４４へ、パリティ更新コマンドを送信する（Ｓ３２１０）。パリティ更新コマンドは、中間パリティが格納されているメモリ４０のアドレス、パリティＦＭＰＫ１４４がＣＰＵ６２に見せている論理アドレス空間の論理アドレス（ＬＢＡ）、データ長、シーケンス番号、及びストライプグループ内データストライプ番号を指定する。
【０１２１】
パリティ更新コマンドを受けたパリティＦＭＰＫ１４４は、中間パリティ７２をメモリ１４４５に格納する。パリティＦＭＰＫ１４４は、ＣＰＵ６２が要求したＬＢＡに対応するＯＬＤ  ＰＡカラム４０２のセルが示す旧パリティ７３をＦＭ領域から読み出す。パリティＦＭＰＫ１４４は、ＸＯＲ回路１４４２を用いて、旧パリティ７３と中間パリティ７２のＸＯＲ値である新パリティ７４である生成する（８７）。
【０１２２】
パリティＦＭＰＫ１４４は、新パリティ７４を格納するＦＭ領域を確保し、ＦＭ領域に対する物理アドレスをＯＬＤ  ＰＡカラム４０２に格納する。パリティＦＭＰＫ１４４は、シーケンス番号７５をＣＰＵ６２から送られてきたＬＢＡ及びストライプグループ内データストライプ番号に対応するセクション５０２内のセルに格納する。
【０１２３】
パリティＦＭＰＫ１４４は、新データ格納コマンドと共に受けた新データを破棄する。パリティＦＭＰＫ１４４は、メモリ４０に対して新パリティ更新完了通知を送り、新パリティ更新が完了した旨が、ＣＰＵ６２に通知される（Ｓ３２２０）。その後、パリティＦＭＰＫ１４４は、新パリティ７４を確保したＦＭ領域にライトする。
【０１２４】
ＣＰＵ６２は新パリティ更新完了通知を受信すると、新データなどを一時格納していたメモリ４０の一時格納領域を解放し（Ｓ３２３０）、新データ７０を格納したデータＦＭＰＫ１４４へ、新データ確定コマンドを送信する（Ｓ３２４０）。新データ確定コマンドは、データＦＭＰＫ１４４がＣＰＵ６２に見せている論理アドレス空間の論理アドレス（ＬＢＡ）及びデータ長を指定する。
【０１２５】
新データ確定コマンドを受けたデータＦＭＰＫ１４４は、ＮＥＷ  ＰＡカラム４０３に格納されている物理アドレスをＯＬＤ  ＰＡカラム４０２にコピーし、ＮＥＷ  ＰＡカラム４０３の値を無効値に更新する。データＦＭＰＫ１４４は、メモリ４０に対して新データ確定完了通知を送る。これにより、新データ確定完了がＣＰＵ６２に通知される（Ｓ３２５０）。ＣＰＵ６２が新データ確定完了を確認し、ライト処理は完了する。
【０１２６】
ステップＳ３１６５において、新旧データが保持されている場合（Ｓ３１６５：ＹＥＳ）、ＣＰＵ６２は、ステップ３５００に進む。図１２Ｂ及び図１２ＣにおけるステップＳ３５００、Ｓ３５２０、Ｓ３５３０、Ｓ３６００、Ｓ３６１０は、図９Ｂ及び９ＣにおけるステップＳ２３１０、Ｓ２３２０、Ｓ２３３０、Ｓ２４００、Ｓ２４１０と同様である。ステップＳ３６２０、Ｓ３６３０、Ｓ３７００、Ｓ３７１０は、ステップＳ３２１０、Ｓ３２２０、Ｓ３２４０、Ｓ３２５０と同様である。
【０１２７】
（実施形態３）
図１３は、実施形態３におけるホストライト処理の概略図を示す。実施形態３では、ＸＯＲ演算をＦＭＰＫドライブではなく、ストレージコントローラで行う。これにより、ＦＭＰＫ１４４からＸＯＲ回路を省略できる。
【０１２８】
図１３は、実施形態３におけるホストライト処理の概略図を示す。図１３を用いて、本実施形態に係るストレージシステム４２におけるデータと制御の流れを説明する。ストレージシステム４２は、ホスト計算機１０から新データ（新Ｄ）のライト要求を受信し、データＦＭＰＫ１４４に格納する。ストレージシステム４２は、必要な新パリティを生成してパリティＦＭＰＫ１４４に格納し、ホストに正常応答する。
【０１２９】
ＣＰＵ６２は、ホスト計算機１０から、ライト要求を受信すると、ＦＥ  Ｉ／Ｆ５２を使用して、ライト要求に伴うライトデータ（新Ｄ）７０を、メモリ４０に格納する（７８０）。次に、ＣＰＵ６２は、データＦＭＰＫ１４４に対して、ＬＢＡを指定する新データ更新コマンドを発行し、新データ７０をデータＦＭＰＫ１４４に送信する（７８１）。
【０１３０】
新データ更新コマンドを受けたデータＦＭＰＫ１４４は、新データ７０をメモリ１４４５に格納し、新データ７０を格納するＦＭ領域を確保する。データＦＭＰＫ１４４は、ＦＭ領域に対する物理アドレスを、ＣＰＵ６２が要求したＬＢＡに対応するＮＥＷ  ＰＡカラム４０３のセルに格納する。データＦＭＰＫ１４４は、シーケンス番号セクション５０２の値をインクリメントし、ＯＬＤ  ＰＡカラム４０２が指す旧データ７１をＦＭ領域から読み出す。
【０１３１】
データＦＭＰＫ１４４は、メモリ４０に対して、旧データ７１、シーケンス番号７５及び新データ更新完了通知を送る（７８２）。データＦＭＰＫ１４４は、確保したＦＭ領域に新データをライトする。通常のＦＭＰＫ１４４はバッテリを備えるため、ＦＭ領域へのライトは、新データ更新コマンドの処理と非同期でよい。
【０１３２】
次に、ＣＰＵ６２は、パリティＦＭＰＫ１４４に対して旧パリティデータのリードコマンドを送り、パリティＦＭＰＫ１４４は、旧パリティ７３とリード完了通知とを、メモリ４０に返す（７８３）。リード完了を確認したＣＰＵ６２は、メモリ４０上の新データ７０、旧データ７１及び旧パリティ７３を読み出し、それらのＸＯＲを計算し、新パリティ７４を生成し、メモリ４０に格納する（７８４）。
【０１３３】
次に、ＣＰＵ６２は、パリティＦＭＰＫ１４４に対して、ＬＢＡを指定するパリティ更新コマンドを発行し、新パリティ７４、シーケンス番号７５及び対応するストライプグループ内データストライプ番号を、送る（７８５）。
【０１３４】
パリティ更新コマンドを受けたパリティＦＭＰＫ１４４は、新パリティ７４をメモリ１４４５に格納する。パリティＦＭＰＫ１４４は、新パリティ７４を格納するＦＭ領域を確保し、ＦＭ領域に対する物理アドレスをＯＬＤ  ＰＡカラム４０２に格納する。
【０１３５】
パリティＦＭＰＫ１４４は、シーケンス番号７５を、ＣＰＵ６２から送られてきたＬＢＡ及びストライプグループ内データストライプ番号に対応するシーケンス番号セクション５０２内のセルに格納する。パリティＦＭＰＫ１４４は、メモリ４０に対して、新パリティ更新完了通知を送り、その後、新パリティ７４を確保したＦＭ領域に格納する。通常のＦＭＰＫ１４４はバッテリを備えるため、ＦＭ領域のライトは、パリティ更新コマンドの処理と非同期でよい。
【０１３６】
新パリティ更新完了を確認したＣＰＵ６２は、ホスト計算機１０に対してライト完了を報告する（７８６）。その後、ＣＰＵ６２は、データＦＭＰＫ１４４に新データ確定コマンドを送る（７８７）。
【０１３７】
新データ確定コマンドを受けたデータＦＭＰＫ１４４は、ＮＥＷ  ＰＡカラム４０３に格納されている物理アドレスをＯＬＤ  ＰＡカラム４０２にコピーし、ＮＥＷ  ＰＡカラム４０３の値を無効値に更新する。データＦＭＰＫ１４４は、メモリ４０に対して新データ確定完了通知を送る。ＣＰＵ６２が新データ確定完了を確認し、ライト処理は完了する。
【０１３８】
図１４Ａ、１４Ｂ及び１４Ｃは、実施形態３におけるＣＰＵ６２が実行するホストライト処理のフローを示す。図１４ＡにおけるステップＳ４１１０からＳ４１５０は、図９ＡにおけるステップＳ２１１０からＳ２１５０と同様である。
【０１３９】
ステップＳ４１６０において、ＣＰＵ６２は、データＦＭＰＫ１４４から、新データ更新コマンドへの応答を受信する。データＦＭＰＫ１４４による新旧データについての判定方法は、実施形態１と同様である。新旧データが存在する場合、データＦＭＰＫ１４４は、新旧データが保持されていることを示す応答を、シーケンス番号と共に返す。
【０１４０】
ステップＳ４１６５において、旧データのみ存在する場合（Ｓ４１６５：ＮＯ）、データＦＭＰＫ１４４は、新データ７０をメモリ１４４５に格納し、新データ７０を格納するＦＭ領域を確保する。データＦＭＰＫ１４４は、ＦＭ領域に対する物理アドレスを、ＣＰＵ６２が要求したＬＢＡに対応するＮＥＷ  ＰＡカラム４０３のセルに格納する。
【０１４１】
データＦＭＰＫ１４４は、シーケンス番号セクション５０２の対応する値をインクリメントし、ＯＬＤ  ＰＡカラム４０２が指す旧データ７１をＦＭ領域から読み出す。データＦＭＰＫ１４４は、メモリ４０に対して、旧データ７１、シーケンス番号７５及び新データ更新完了通知を送り（７８２）、これにより、新データ更新完了がＣＰＵ６２に通知される（Ｓ４１６０）。  ＣＰＵ６２は新データ更新完了通知を受信すると、パリティＦＭＰＫ１４４に対して、ＬＢＡを指定して、旧パリティのリードコマンドを送る（Ｓ４１７０）。パリティＦＭＰＫ１４４は旧パリティ７３とリード完了通知をメモリ４０返す（Ｓ４１８０）。
【０１４２】
リードコマンド完了通知を受けたＣＰＵ６２は、メモリ４０上の新データ７０、旧データ７１及び旧パリティ７３を読み出し、それらのＸＯＲを計算し、新パリティ７４を生成する。ＣＰＵ６２は、メモリ４０の一時格納領域に、新パリティ７４を格納する（Ｓ４１９０）。
【０１４３】
次に、ＣＰＵ６２は、パリティＦＭＰＫ１４４へパリティ更新コマンドを送信する（Ｓ４２００）。パリティ更新コマンドは、新パリティが格納されているメモリ４０のアドレス、パリティＦＭＰＫ１４４がＣＰＵ６２に見せている論理アドレス空間の論理アドレス（ＬＢＡ）、データ長、シーケンス番号、及びストライプグループ内データストライプ番号を指定する。
【０１４４】
パリティ更新コマンドを受けたパリティＦＭＰＫ１４４は、新パリティ７４をメモリ１４４５に格納し、新パリティ７４を格納するＦＭ領域を確保する。パリティＦＭＰＫ１４４は、ＦＭ領域に対する物理アドレスを、ＯＬＤ  ＰＡカラム４０２に格納する。パリティＦＭＰＫ１４４は、シーケンス番号７５を、ＣＰＵ６２から送られてきたＬＢＡ及びストライプグループ内データストライプ番号に対応するシーケンス番号セクション５０２内のセルに格納する。
【０１４５】
パリティＦＭＰＫ１４４は、メモリ４０に対して新パリティ更新完了通知を送り、これにより新パリティ更新完了がＣＰＵ６２に通知される（Ｓ４２１０）。その後、パリティＦＭＰＫ１４４は、新パリティ７４を、確保したＦＭ領域に格納する。
【０１４６】
ＣＰＵ６２は新パリティ更新完了通知を受信すると、ホスト計算機１０に対し、ライト処理が正常に終了したことを通知し（Ｓ４２２０）、新データなどを一時保存していたメモリ４０の一時格納領域を解放する（Ｓ４２３０）。
【０１４７】
次に、ＣＰＵ６２は、データＦＭＰＫ１４４へ新データ確定コマンドを送信する（Ｓ４２４０）。新データ確定コマンドは、データＦＭＰＫ１４４がＣＰＵ６２に見せている論理アドレス空間の論理アドレス（ＬＢＡ）及びデータ長を指定する。
【０１４８】
新データ確定コマンドを受けたデータＦＭＰＫ１４４は、ＮＥＷ  ＰＡカラム４０３に格納されている物理アドレスをＯＬＤ  ＰＡカラム４０２にコピーし、ＮＥＷ  ＰＡカラム４０３の値を無効値に更新する。データＦＭＰＫ１４４は、メモリ４０に対して新データ確定完了通知を送り、これにより、新データ確定完了がＣＰＵ６２に通知される（Ｓ４２５０）。ＣＰＵ６２は新データ確定完了を確認し、ライト処理は完了する。
【０１４９】
ステップＳ４１６５において、新旧データが保持されている場合（Ｓ４１６５：ＹＥＳ）、ＣＰＵ６２は、ステップ４５００に進む。図１４ＢにおけるステップＳ４５００、Ｓ４５２０、Ｓ４５３０は、図９ＢにおけるステップＳ２３１０、Ｓ２３２０、Ｓ２３３０と同様である。図１４ＣにおけるステップＳ４６００からＳ４６４０、Ｓ４７００、Ｓ４７１０は、図１４ＡにおけるステップＳ４１７０からＳ４２７０、Ｓ４２４０、Ｓ４２５０と同様である。
【０１５０】
本実施形態により、ＦＭＰＫ１４４からＸＯＲ回路を省略できる。本実施形態は、パリティ更新後に、ホスト計算機にライト処理が正常に終了したことを通知する。これに代えて、ストレージシステムは、ストレージコントローラのメモリ上のＣＭでライトデータを冗長化し、ホストに正常応答後にデータ更新コマンド以後の処理を実行してもよい。
【０１５１】
以上、実施形態を説明してきたが、これらは本発明の説明のための例示であって、本発明は上術の実施形態に限定されない。本発明は、他の種々の形態でも実施可能である。例えば、上記実施形態に記載のストレージシステムでは、各構成要素がパッケージボードの形で実装されているが、本発明はそれに限定されるものではない。各種のパッケージボードの数は、一つでもそれより多くてもよい。ストレージコントローラにより実行される処理の少なくとも一部は、ＦＭＰＫにより実行されてもよい。
【０１５２】
実施形態において、ホスト計算機からのライトデータを格納する最終記憶装置が、フラッシュメモリを用いたＦＭＰＫである。最終記憶装置はフラッシュメモリを用いた記憶ドライブに限定されるものではなく、ＰＣＭ、ＲｅＲＡＭ、その他のストレージクラスメモリなどの不揮発メモリや、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）のような磁気ディスクデバイスを使用してもよい。
【０１５３】
上記実施形態は、ＲＡＩＤレベル５の例を中心に説明したが、本発明は、他のＲＡＩＤレベルやＥｒａｓｕｒｅ  Ｃｏｄｉｎｇを使用するシステムに適用できる。本発明は、それぞれがローカルストレージを管理する複数ノードからなる分散ＲＡＩＤシステムに適用できる。本発明は、ストレージシステムとホスト計算機が１又は複数の計算機上で実行される仮想マシンによって実装された計算機システムに適用することができる。一つの計算機において、ホスト仮想マシンとストレージ仮想マシンが実装されている場合、同一のプロセッサが、ホスト及びストレージコントローラとして動作する。
【０１５４】
また、実施形態の説明において、１つのＲＡＩＤグループの記憶領域が、１つの論理ボリュームに対応付けられているが、本発明はこの構成に限定されるものではない。例えば、１つのＲＡＩＤグループの記憶領域が２以上の連続領域に分割し、分割された連続領域をそれぞれ、１つの論理ボリュームに対応付ける構成を採用してもよい。逆に１つの論理ボリュームが、複数のＲＡＩＤグループに対応付けられる構成を採用することもできる。
【０１５５】
また、実施形態の上記説明において、ホスト計算機に提供する論理ボリュームの記憶領域とＲＡＩＤグループの記憶領域とは、固定的にマッピングされている。本発明は、論理ボリュームの記憶領域とＲＡＩＤグループの記憶領域の関係が固定的である構成に限定されるものではない。例えば、周知の技術であるＴｈｉｎ−Ｐｒｏｖｉｓｉｏｎｉｎｇ技術を用いて論理ボリュームを定義し、ホスト計算機から論理ボリューム上記憶領域に対してライト要求を受け付けた時点ではじめて、当該記憶領域に対してＲＡＩＤグループの記憶領域を割り当てる構成を採用することもできる。
【０１５６】
本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１５７】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。
【０１５８】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【図１】
0006722354.tif 000002
【図２】
0006722354.tif 000003
【図３】
0006722354.tif 000004
【図４】
0006722354.tif 000005
【図５】
0006722354.tif 000006
【図６】
0006722354.tif 000007
【図７】
0006722354.tif 000008
【図８】
0006722354.tif 000009
【図９Ａ】
0006722354.tif 000010
【図９Ｂ】
0006722354.tif 000011
【図９Ｃ】
0006722354.tif 000012
【図１０】
0006722354.tif 000013
【図１１】
0006722354.tif 000014
【図１２Ａ】
0006722354.tif 000015
【図１２Ｂ】
0006722354.tif 000016
【図１２Ｃ】
0006722354.tif 000017
【図１３】
0006722354.tif 000018
【図１４Ａ】
0006722354.tif 000019
【図１４Ｂ】
0006722354.tif 000020
【図１４Ｃ】
0006722354.tif 000021