(57)【特許請求の範囲】
【請求項１】
それぞれが、追記型メモリである複数の不揮発メモリチップと、前記複数の不揮発メモリチップに接続されるデバイスコントローラとを備える、複数の記憶デバイスと、
前記複数の記憶デバイスに接続され、旧データを格納する第１の記憶デバイスと旧パリティを格納する第２の記憶デバイスとを含む前記複数の記憶デバイスをＲＡＩＤグループとして制御するよう構成されるシステムコントローラと、
を有し、
前記第１の記憶デバイスの第１のデバイスコントローラは、前記第１の記憶デバイスの前記複数の不揮発メモリチップの物理記憶領域に格納された前記旧データと前記旧データを更新する新データとを有効な状態に維持したまま、前記旧データと前記新データとに基づき、第１の中間パリティを生成し、
前記システムコントローラは、前記第２の記憶デバイスに、第１の新パリティの生成を指示するために、パリティ更新コマンド及び前記第１の中間パリティを送信し、
前記第２の記憶デバイスの第２のデバイスコントローラは前記パリティ更新コマンドに従って、前記第１の中間パリティと、前記第２の記憶デバイスに格納された前記旧パリティとに基づき、前記第１の新パリティを生成し、
前記システムコントローラは、前記第２の記憶デバイスから前記パリティ更新コマンドに対する完了応答を受信すると、前記第１の記憶デバイスに前記旧データを無効化するための無効化コマンドを送信し、
前記第１のデバイスコントローラは前記無効化コマンドの受領に応じて、前記旧データを無効化する、
ことを特徴とする、システム。
【請求項２】
前記物理記憶領域は、前記不揮発メモリチップの物理ページであり、前記第１のデバイスコントローラは、前記物理ページを論理ページに関連付けるページマッピング管理テーブルを有し、
前記第１のデバイスコントローラは、前記ページマッピング管理テーブル上で、前記旧データを格納した第１の物理ページを第１の論理ページに関連付けており、
前記第１のデバイスコントローラは、
前記第１の記憶デバイスの前記不揮発メモリチップに前記新データを格納する際、前記旧データと前記新データとを有効な状態に維持するために、前記ページマッピング管理テーブル上で前記第１の物理ページの前記第１の論理ページへの関連付けを維持したまま、前記新データが格納され前記第１の物理ページとは異なる第２の物理ページを、前記第１の論理ページへ関連付け、
前記旧データを無効化するために、前記ページマッピング管理テーブルから、前記第１の物理ページの情報を削除する、
ことを特徴とする、請求項１に記載のシステム。
【請求項３】
前記第１のデバイスコントローラは、
前記ページマッピング管理テーブルから前記第１の物理ページの情報を削除した後に、前記旧データを削除する、
ことを特徴とする、請求項２記載のシステム。
【請求項４】
前記システムコントローラが前記完了応答を前記第２の記憶デバイスから所定時間内に受信しない場合、前記システムは、
前記旧データと前記新データに基づき、前記第１のデバイスコントローラにより第２の中間パリティを生成し、
前記第２の中間パリティを前記第１のデバイスコントローラから前記第２のデバイスコントローラへ転送し、
前記第２の中間パリティと前記旧パリティに基づき、前記第２のデバイスコントローラにより第２の新パリティを生成する、
ことを特徴とする、請求項１記載のシステム。
【請求項５】
それぞれが、追記型メモリである複数の不揮発メモリチップと、前記複数の不揮発メモリチップに接続されるデバイスコントローラとを備える、複数の記憶デバイスと、
前記複数の記憶デバイスに接続され、旧データを格納する第１の記憶デバイスと旧パリティを格納する第２の記憶デバイスとを含む前記複数の記憶デバイスをＲＡＩＤグループとして制御するよう構成されるシステムコントローラと、
を有し、
前記第１の記憶デバイスの第１のデバイスコントローラは、
前記第１の記憶デバイスの前記複数の不揮発メモリチップの物理記憶領域に格納されていた前記旧データを有効な状態に維持したまま、前記システムコントローラから受信する新データを格納し、
前記システムコントローラから受信した前記新データと前記物理記憶領域に格納された前記旧データに基づき、前記第２の記憶デバイスに転送されるべき第１の中間パリティを生成し、
前記第２の記憶デバイスに格納されていた前記旧パリティと前記第１の中間パリティに基づき第１の新パリティが生成されたと認識された後に前記システムコントローラから送信されてくる、前記旧データを無効化するための無効化コマンドの受領に応じて、前記旧データを無効化する、
ことを特徴とする、システム。
【請求項６】
前記第２の記憶デバイスは、前記第１の新パリティの生成後に、前記システムコントローラへ完了応答を送信し、
前記システムコントローラは、前記完了応答の受領に応じて、前記第１の記憶デバイスへ前記無効化コマンドを送信する、
ことを特徴とする、請求項５に記載のシステム。
【請求項７】
前記物理記憶領域は、前記不揮発メモリチップの物理ページであり、前記第１のデバイスコントローラは、前記物理ページを論理ページに関連付けるページマッピング管理テーブルを有し、
前記第１のデバイスコントローラは、前記ページマッピング管理テーブル上で、前記旧データを格納した第１の物理ページを第１の論理ページに関連付けており、
前記第１のデバイスコントローラは、
前記第１の記憶デバイスの前記不揮発メモリチップに前記新データを格納する際、前記旧データと前記新データとを有効な状態に維持するために、前記ページマッピング管理テーブル上で前記第１の物理ページの前記第１の論理ページへの関連付けを維持したまま、前記新データが格納され前記第１の物理ページとは異なる第２の物理ページを、前記第１の論理ページへ関連付け、
前記旧データを無効化するために、前記ページマッピング管理テーブルから、前記第１の物理ページの情報を削除する、
ことを特徴とする、請求項６に記載のシステム。
【請求項８】
前記第１のデバイスコントローラは、
前記ページマッピング管理テーブルから前記第１の物理ページの情報を削除した後に、前記旧データを削除する、
ことを特徴とする、請求項７記載のシステム。
【請求項９】
前記システムコントローラが前記完了応答を前記第２の記憶デバイスから所定時間内に受信しない場合、前記システムは、
前記旧データと前記新データに基づき、前記第１のデバイスコントローラにより第２の中間パリティを生成し、
前記第２の中間パリティを前記第１のデバイスコントローラから前記第２の記憶デバイスの第２のデバイスコントローラへ転送し、
前記第２の中間パリティと前記旧パリティに基づき、前記第２のデバイスコントローラにより第２の新パリティを生成する、
ことを特徴とする、請求項６記載のシステム。
【請求項１０】
それぞれが、追記型メモリである複数の不揮発メモリチップと、前記複数の不揮発メモリチップに接続されるデバイスコントローラとを備える、複数の記憶デバイスと、
前記複数の記憶デバイスに接続され、旧データを格納する第１の記憶デバイスと旧パリティを格納する第２の記憶デバイスとを含む前記複数の記憶デバイスをＲＡＩＤグループとして制御するよう構成されるシステムコントローラと、
を有し、
前記第１の記憶デバイスの第１のデバイスコントローラは、前記第１の記憶デバイスの前記複数の不揮発メモリチップの物理記憶領域に格納された前記旧データと前記旧データを更新する新データとを有効な状態に維持したまま、前記旧データと前記新データとに基づき、第１の中間パリティを生成し、
前記第２の記憶デバイスの第２のデバイスコントローラは、
前記第１のデバイスコントローラで生成された前記第１の中間パリティと、前記第２の記憶デバイスに格納された前記旧パリティに基づき、第１の新パリティを生成し、
前記第２の記憶デバイスから前記システムコントローラへ、完了応答を送信する、
ことを特徴とする、システム。
【請求項１１】
前記システムコントローラは、前記完了応答の受領に応じて、前記第１の記憶デバイスへ前記旧データを無効化するための無効化コマンドを送信し、
前記第１の記憶デバイスは、前記無効化コマンドの受領に応じて前記旧データを無効化する、
ことを特徴とする、請求項１０に記載のシステム。
【請求項１２】
前記物理記憶領域は、前記不揮発メモリチップの物理ページであり、前記第１のデバイスコントローラは、前記物理ページを論理ページに関連付けるページマッピング管理テーブルを有し、
前記第１のデバイスコントローラは、前記ページマッピング管理テーブル上で、前記旧データを格納した第１の物理ページを第１の論理ページに関連付けており、
前記第１のデバイスコントローラは、
前記第１の記憶デバイスの前記不揮発メモリチップに前記新データを格納する際、前記旧データと前記新データとを有効な状態に維持するために、前記ページマッピング管理テーブル上で前記第１の物理ページの前記第１の論理ページへの関連付けを維持したまま、前記新データが格納され前記第１の物理ページとは異なる第２の物理ページを、前記第１の論理ページへ関連付け、
前記旧データを無効化するために、前記ページマッピング管理テーブルから、前記第１の物理ページの情報を削除する、
ことを特徴とする、請求項１１に記載のシステム。
【請求項１３】
前記第１のデバイスコントローラは、
前記ページマッピング管理テーブルから前記第１の物理ページの情報を削除した後に、前記旧データを削除する、
ことを特徴とする、請求項１２記載のシステム。
【請求項１４】
前記システムコントローラが前記完了応答を前記第２の記憶デバイスから所定時間内に受信しない場合、前記システムは、
前記旧データと前記新データに基づき、前記第１のデバイスコントローラにより第２の中間パリティを生成し、
前記第２の中間パリティを前記第１のデバイスコントローラから前記第２のデバイスコントローラへ転送し、
前記第２の中間パリティと前記旧パリティに基づき、前記第２のデバイスコントローラにより第２の新パリティを生成する、
ことを特徴とする、請求項１１記載のシステム。
【請求項１５】
それぞれが、追記型メモリである複数の不揮発メモリチップと、前記複数の不揮発メモリチップに接続されるデバイスコントローラとを備える、複数の記憶デバイスと、
前記複数の記憶デバイスに接続され、旧データを格納する第１の記憶デバイスと旧パリティを格納する第２の記憶デバイスとを含む前記複数の記憶デバイスをＲＡＩＤグループとして制御するよう構成されるシステムコントローラと、
を有し、
前記システムコントローラまたは前記複数の記憶デバイスは、パリティを生成するパリティ演算部を有し、
前記第１の記憶デバイス及び前記第２の記憶デバイスがパリティ演算部を有する場合、
前記第１の記憶デバイスの第１のデバイスコントローラは、前記第１の記憶デバイスの前記複数の不揮発メモリチップの物理記憶領域に格納された前記旧データと前記旧データを更新する新データとを有効な状態に維持したまま、前記旧データと前記新データとに基づき第１の中間パリティを生成し、
前記システムコントローラは、前記第２の記憶デバイスに、第１の新パリティの生成を指示するために、パリティ更新コマンド及び前記第１の中間パリティを送信し、
前記第２の記憶デバイスの第２のデバイスコントローラは前記パリティ更新コマンドに従って、前記第１の中間パリティと、前記第２の記憶デバイスに格納された前記旧パリティとに基づき、前記第１の新パリティを生成し、
前記システムコントローラは、前記第２の記憶デバイスから前記パリティ更新コマンドに対する完了応答を受信すると、前記第１の記憶デバイスに前記旧データを無効化するための無効化コマンドを送信し、
前記第１のデバイスコントローラは前記無効化コマンドの受領に応じて、前記旧データを無効化し、
前記第１のデバイスコントローラ及び前記第２のデバイスコントローラが前記パリティ演算部を有さず、前記システムコントローラが前記パリティ演算部を有する場合、
前記システムコントローラが第３の新パリティを生成する、
ことを特徴とする、システム。
【請求項１６】
前記物理記憶領域は、前記不揮発メモリチップの物理ページであり、前記第１のデバイスコントローラは、前記物理ページを論理ページに関連付けるページマッピング管理テーブルを有し、
前記第１のデバイスコントローラは、前記ページマッピング管理テーブル上で、前記旧データを格納した第１の物理ページを第１の論理ページに関連付けており、
前記第１のデバイスコントローラは、
前記第１の記憶デバイスの前記不揮発メモリチップに前記新データを格納する際、前記旧データと前記新データとを有効な状態に維持するために、前記ページマッピング管理テーブル上で前記第１の物理ページの前記第１の論理ページへの関連付けを維持したまま、前記新データが格納され前記第１の物理ページとは異なる第２の物理ページを、前記第１の論理ページへ関連付け、
前記旧データを無効化するために、前記ページマッピング管理テーブルから、前記第１の物理ページの情報を削除する、
ことを特徴とする、請求項１５に記載のシステム。
【請求項１７】
前記第１のデバイスコントローラは、
前記ページマッピング管理テーブルから前記第１の物理ページの情報を削除した後に、前記旧データを削除する、
ことを特徴とする、請求項１６記載のシステム。
【請求項１８】
前記システムコントローラが前記完了応答を前記第２の記憶デバイスから所定時間内に受信しない場合、前記システムは、
前記第１のデバイスコントローラにより、前記旧データと前記新データとから第２の中間パリティを生成し、
前記第２の中間パリティを前記第１のデバイスコントローラから前記第２のデバイスコントローラへ転送し、
前記第２のデバイスコントローラにより、前記第２の中間パリティと前記旧パリティとから第２の新パリティを生成する、
ことを特徴とする、請求項１５記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置に格納される冗長コードを演算する技術に関する。
【背景技術】
【０００２】
ストレージシステムのコントローラが複数の記憶装置を制御することでＲＡＩＤ（Redundant  Array  of  Independent  Disks）を構成し、データロストの発生を防ぐ技術が知られている。例えば、ＲＡＩＤ５を採用するストレージシステムでは、記憶装置の上位装置にあたるストレージシステムのコントローラが、複数のデータブロックからパリティを生成する。
【０００３】
前述のようなパリティ生成に伴うストレージシステムのコントローラの処理を軽減するため、下位装置にあたる各記憶装置が、ＲＡＩＤを構成するストレージシステムがある。各記憶装置は、例えば、ＨＤＤ（Hard  Disk  Drive）であり、各ＨＤＤのコントローラ（以下、ＨＤＤコントローラ）がパリティを生成する。
【０００４】
例えば、特許文献１では、更新前データ（旧データ）に対するデータの更新要求があると、ＨＤＤコントローラは、更新データ（新データ）と更新前データ（旧データ）からパリティを生成するための中間値（中間パリティ）を生成した後に、新データで旧データを更新する。ＨＤＤコントローラは、生成した中間パリティを旧データに対応する旧パリティが格納しているＨＤＤに転送する。中間パリティを受信したＨＤＤでは、ＨＤＤコントローラが、中間パリティと旧パリティから新パリティを生成し、生成した新パリティで旧パリティを更新する。
【０００５】
近年のフラッシュメモリの低価格化に伴い、記憶装置としてＨＤＤの代わりにFlash ＳＳＤ（Flash  Solid  State  Drive）が使用されるケースが増えつつある。ＨＤＤではある範囲の論理アドレスで特定されるデータに対する更新要求があると当該データ（旧データ）が格納されている物理領域に更新データ（新データ）が上書きされる。しかし、FlashＳＳＤでは、データを上書きすることができないため、論理アドレスで特定されるデータに対する更新要求があると、当該データが格納されている物理領域とは異なる物理領域に更新データ（新データ）が格納され、特定された論理アドレスと新しい物理領域とがマッピングされる。これにより、Flash  ＳＳＤの旧データが格納されている物理領域が無効にされる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】ＵＳ５，１９１，５８４
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１では、中間パリティを生成した後に新データで旧データを上書きするため、中間パリティを生成した後は、旧データが存在しなくなる。そのため、パリティの更新前（例えば、中間パリティを、旧パリティを格納しているＨＤＤに対して転送する前）に障害が発生し、中間パリティが消失した場合、旧データが存在しないため、中間パリティを再度、生成することができない。
【０００８】
一方、記憶装置をFlash  ＳＳＤに置き換えた場合、フラッシュメモリはデータを上書きしないため、中間パリティを生成した後に、旧データが残っている可能性はある。しかし、Flash  ＳＳＤでは、新データを書き込むと旧データを格納している物理領域を無効とし、所定のタイミングで旧データを消去する。すなわち、Flash  ＳＳＤでも、引用文献１と同様に、障害発生時に旧データが存在しない可能性があり、その場合、中間パリティを生成することができない。
【課題を解決するための手段】
【０００９】
本発明の一態様であるストレージシステムは、第１のコントローラと、複数の記憶装置を備える。RAIDを構成する複数の記憶装置のそれぞれは、ホストコンピュータからのデータを格納する記憶空間を提供する一つ以上の不揮発メモリチップと、不揮発メモリチップに接続される第２のコントローラとを有している。第１のコントローラが、第１のデータを第２のデータに更新する更新要求を受信した場合、複数の記憶装置のうちの第１の記憶装置内の第２のコントローラは、第２のデータを、第１の記憶装置の記憶空間内であって、第１のデータが格納されている領域とは異なる領域に格納し、第１と第２のデータとを関連付ける情報を生成し、そして第１及び第２のデータから中間パリティを生成するよう構成されている。複数の記憶装置のうち、第１のデータに対応する第１のパリティが格納されている第２の記憶装置における第２のコントローラは、前記中間パリティを受信し、前記中間パリティと第１のパリティから第２のパリティを生成し、第２のパリティを第２の記憶装置の記憶空間の領域内に格納するよう構成されている。第１の記憶装置の第２のコントローラは、第２のパリティが第２の記憶装置の記憶空間の領域内に格納された後に、前記情報を消去し、第１のデータが格納されている前記領域を消去対象領域として設定するよう構成されている。
【図面の簡単な説明】
【００１０】
【図１】図１は、ストレージシステムの構成の一例を示す。
【図２】図２は、システムコントローラ２０の構成の一例を示す。
【図３】図３は、実施例１に係る計算機システムの構成の一例を示す。
【図４】図４は、ＲＧ及びＬＵの構成の一例を示す。
【図５】図５は、ＲＧ管理テーブル６００の一例を示す。
【図６】図６は、ＬＵ管理テーブル７００の一例を示す。
【図７】図７は、ＦＭＰＫ管理テーブル８００の一例を示す。
【図８】図８は、ＲＧ上のアドレス空間の一例を示す。
【図９】図９は、ＲＧに所属するＦＭＰＫ５０上のアドレス空間の一例を示す。
【図１０】図１０は、ＦＭＰＫ５０におけるページマッピングの一例を示す。
【図１１】図１１は、ページマッピング管理テーブル１１００の一例を示す。
【図１２】図１２は、パリティ演算機能登録処理の一例を示す。
【図１３】図１３は、パリティ演算実施装置の決定方法１３００の一例を示す。
【図１４】図１４は、システムコントローラ２０のライト処理の一例を示す。
【図１５】図１５は、第１パリティ演算選択処理の一例を示す。
【図１６】図１６は、第２パリティ演算選択処理の一例を示す。
【図１７】図１７は、第３パリティ演算選択処理の一例を示す。
【図１８】図１８は、第４パリティ演算選択処理の一例を示す。
【図１９】図１９は、ライト方法選択処理１４０３の一例を示す。
【図２０】図２０は、第１リードモディファイライト処理の一例を示す。
【図２１】図２１は、第１リードモディファイライト処理におけるシステムコントローラ２０の動作の一例を示す。
【図２２】図２２は、第２リードモディファイライト処理の一例を示す。
【図２３】図２３は、第２リードモディファイライト処理におけるシステムコントローラ２０の動作の一例を示す。
【図２４】図２４は、第３リードモディファイライト処理の一例を示す。
【図２５】図２５は、第３リードモディファイライト処理におけるシステムコントローラ２０の動作の一例を示す。
【図２６】図２６は、第１フルストライプライト処理の一例を示す。
【図２７】図２７は、第１フルストライプライト処理におけるシステムコントローラ２０の動作の一例を示す。
【図２８】図２８は、第２フルストライプライト処理の一例を示す。
【図２９】図２９は、第２フルストライプライト処理におけるシステムコントローラ２０の動作の一例を示す。
【図３０】図３０は、第１データ復旧処理の一例を示す。
【図３１】図３１は、第１データ復旧処理におけるシステムコントローラ２０の動作の一例を示す。
【図３２】図３２は、第２データ復旧処理の一例を示す。
【図３３】図３３は、第２データ復旧処理におけるシステムコントローラ２０の動作の一例を示す。
【図３４】図３４は、通常のライトコマンドによるデバイスコントローラ６０の処理の一例を示す。
【図３５】図３５は、旧データ保持ライトコマンドによるデバイスコントローラ６０の処理の一例を示す。
【図３６】図３６は、中間パリティリードコマンドによるデバイスコントローラ６０の処理の一例を示す。
【図３７】図３７は、パリティ更新ライトコマンドによるデバイスコントローラ６０の処理の一例を示す。
【図３８】図３８は、パリティ生成ライトコマンドによるデバイスコントローラ６０の処理の一例を示す。
【図３９】図３９は、デバイスコントローラ６０による、旧データ破棄処理の一例を示す。
【図４０】図４０は、Ｑパリティの生成方法の一例を示す。
【図４１】図４１は、Ｄ０，Ｄ１の復旧方法の一例を示す。
【図４２】図４２は、第４リードモディファイライト処理の一例を示す。
【図４３】図４３は、第４リードモディファイライト処理におけるシステムコントローラ２０の動作の一例を示す。
【図４４】図４４は、実施例３に係る計算機システムの構成の一例を示す。
【図４５】図４５は、実施例４に係る計算機システムの構成の一例を示す。
【発明を実施するための形態】
【００１１】
幾つかの実施例を説明する。なお、本発明の技術的範囲は各実施例に限定されない。
【００１２】
なお、以後の説明では、「＊＊＊テーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。各種情報がデータ構造に依存しないことを示すために「＊＊＊テーブル」を「＊＊＊情報」と呼ぶことができる。
【００１３】
また、以後の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Central  Processing  Unit  ））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び通信制御装置（例えば通信ポート）を用いながら行うため、処理の主語がプロセッサとされてもよい。また、プログラムを主語として説明された処理は、管理システムが行う処理としても良い。また、プログラムの一部又は全ては専用ハードウェアによって実現されてもよい。このため、プログラムを主語として説明された処理は、コントローラが行う処理としても良い。コントローラは、プロセッサと、プロセッサに実行されるコンピュータプログラムを記憶する記憶資源とを含んでも良いし、上記の専用ハードウェアを含んでも良い。また、コンピュータプログラムは、プログラムソースから各計算機にインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
【００１４】
また、以下の説明では、管理システムは、一以上の計算機、例えば、管理計算機、又は、管理計算機と表示用計算機との組み合わせである。具体的には、例えば、管理計算機が表示用情報を表示する場合は、管理計算機が管理システムである。また、処理の高速化や高信頼化のために、複数の計算機で管理計算機と同等の機能が実現されてもよく、この場合は、当該複数の計算機（表示を表示用計算機が行う場合は表示用計算機を含んで良い）が、管理システムである。
【実施例１】
【００１５】
まず、本発明の適用例であるストレージシステムの構成について説明する。
【００１６】
図１は、ストレージシステム３０の構成の一例を示す。このストレージシステム３０は、データを格納する複数のストレージ装置５０と、これら複数のストレージ装置に接続されているシステムコントローラ２０とを有する。ストレージ装置は、例えば、ＦＭＰＫ（Flash  Memory  Package）５０である。
【００１７】
ＦＭＰＫ５０は、データを格納する不揮発メモリと、不揮発メモリ及びシステムコントローラ２０に接続されているデバイスコントローラ６０とを有する。不揮発メモリは例えば、ＮＡＮＤ型のＦＭ（Flash  Memory）５５である。不揮発メモリはフラッシュメモリに限定されず、追記型のメモリ（例えば、相変化メモリ）でも良い。デバイスコントローラ６０は、通信インタフェースデバイス、記憶デバイス及びそれらに接続された制御デバイスを有する。通信インタフェースデバイスは例えば、システムインタフェース５３とＦＭインタフェース５４である。以下の説明において、インタフェースをＩ／Ｆと示すことがある。システムＩ／Ｆ５３は、システムコントローラ２０に接続される。ＦＭ  Ｉ／Ｆ５４は、ＦＭ５５に接続される。
【００１８】
記憶デバイスは例えば、メモリ５２及びバッファ６６である。制御デバイスは例えば、ＣＰＵ５１である。制御デバイスは、ＣＰＵ５１のようなプロセッサの他に、所定の処理（例えば圧縮、伸長、暗号化又は復号化）を行う専用ハードウェア回路を含んでも良い。専用ハードウェア回路は例えば、パリティ又は中間パリティを計算するパリティ演算回路６５である。メモリ５２には、ＦＭ５５を制御するためのプログラム及び各種情報が記憶される。ＣＰＵ５１は、メモリ５２に記憶されているプログラムを実行することにより各種機能を実現させる。バッファ６６は例えば、ＤＲＡＭ（Dynamic  Random  Access  Memory）等の揮発メモリである。また、バッファ６６は、ＦＭ５５へ書き込むデータ、ＦＭ５５から読み出したデータ、パリティ演算中のデータ等を一時的に格納する。
【００１９】
ＦＭＰＫ５０は、複数のＦＭ５５を有していても良い。複数のＦＭ５５は、異種の記憶媒体を含んでも良いし、同種の記憶媒体であっても良い。例えば、ＦＭ５５は、複数の物理ブロックで構成されている。各物理ブロックは複数の物理ページで構成されている。ＦＭ５５内の各セルは、ＳＬＣ（Single  Level  Cell）であってもＭＬＣ（Multiple  LevelCell）であっても良い。また、不揮発メモリは、他の不揮発メモリであっても良いし、相変化メモリ等の記録可能なメモリであっても良い。
【００２０】
図２は、システムコントローラ２０の構成を示す。システムコントローラ２０は、通信インタフェースデバイス、記憶デバイス、及びそれらに接続された制御デバイスを有する。通信インタフェースデバイスは例えば、通信ネットワークに接続するための通信Ｉ／Ｆ１８、ＦＭＰＫ５０に接続するためのディスクＩ／Ｆ１９である。記憶デバイスは例えば、メモリ１２及びバッファ２６である。制御デバイスは例えば、ＣＰＵ１１である。制御デバイスは、ＣＰＵ１１のようなプロセッサの他に、所定の処理（例えば圧縮、伸長、暗号化又は復号化）を行う専用ハードウェア回路を含んでも良い。専用ハードウェア回路は例えば、パリティ又は中間パリティのいずれかを計算するパリティ演算回路２５である。メモリ１２には、ＦＭＰＫ５０を制御するためのプログラム及び各種情報が記憶される。ＣＰＵ１１は、メモリ１２に記憶された情報に基づき、プログラムを実行することにより各種機能を実現させる。バッファ２６は例えば、ＤＲＡＭ等の揮発メモリである。また、バッファ２６は、ＦＭＰＫ５０へライトするデータ、ＦＭＰＫ５０からリードしたデータ、パリティ演算中のデータ等を一時的に格納する。なお、システムコントローラ２０に接続される全てのＦＭＰＫ５０がパリティ演算回路６５を有している場合には、システムコントローラ２０は、パリティ演算回路２５を有していなくても良い。
【００２１】
システムコントローラ２０に相当する従来のシステムコントローラが提供していた機能として、パリティ演算、スナップショット、データ圧縮、重複排除などがあるが、これらの機能をＦＭＰＫ５０等の記憶媒体が実現できる。この実施例では、パリティ演算機能を説明する。
【００２２】
システムコントローラ２０とデバイスコントローラ６０が階層を形成していることから、システムコントローラ２０を上位コントローラ、デバイスコントローラ６０を下位コントローラ、と定義することもできる。
【００２３】
次に、システムコントローラ２０がＲＡＩＤ（Redundant  Array  of  Independent  Disks）機能をサポートしているコントローラである場合のストレージシステム３０の適用例である、計算機システムについて説明する。
【００２４】
図３は、実施例１に係る計算機システムの構成の一例を示す。この計算機システムは、ホスト計算機１０と、ストレージシステム３０とを有する。ホスト計算機１０とストレージシステム３０とは、通信ネットワーク、例えば、ＳＡＮ（Storage  Area  Network）１を介して接続される。なお、計算機システムは、複数のホスト計算機１０を有していても良い。この場合、ストレージシステム３０は、ＳＡＮ１を介して複数のホスト計算機１０に接続される。
【００２５】
ストレージシステム３０は、複数のＦＭＰＫ５０と、これらのＦＭＰＫ５０を制御するシステムコントローラ２０とを有する。ストレージ装置は例えば、ＦＭＰＫ５０である。この例においてシステムコントローラ２０は例えば、ＲＡＩＤコントローラである。また、この例において、ストレージシステム３０は、複数のシステムコントローラ２０を有する。各システムコントローラ２０は、ＳＡＮ１を介してホスト計算機１０に接続されている。複数のＦＭＰＫ５０の夫々は、複数のシステムコントローラ２０に接続されている。なお、ストレージシステム３０は、一つのシステムコントローラ２０だけを有していても良い。
【００２６】
システムコントローラ２０の構成は、図２に示された構成と同様である。メモリ１２には更に、複数のＦＭＰＫ５０を用いるＲＡＩＤ機能のためのプログラム及び各種情報が記憶される。この例において、システムコントローラ２０は、パリティ演算回路２５を有しているが、パリティ演算回路２５を有していなくても良い。
【００２７】
ホスト計算機１０は、管理システムであっても良い。
【００２８】
以下、システムコントローラ２０がＲＡＩＤ５の制御を行う場合について説明する。
【００２９】
システムコントローラ２０は、ＲＧ（RAID  Group）とＬＵ（Logical  Unit、論理ボリュームと呼ばれることもある）とＦＭＰＫ５０と関連付けられている。図４は、ＲＧ及びＬＵの構成の一例を示す。システムコントローラ２０は、ＦＭＰＫ５０の幾つかをＲＧに割り当て、ＲＧの記憶領域の一部又は全部をＬＵに割り当てる。なお、論理ボリュームは、シンプロビジョニング技術によりボリュームの容量が仮想化された仮想ボリュームであってもよい。仮想ボリュームには予めデータを格納するための物理的な記憶領域が割当てられていない。当該仮想ボリュームへのライト要求に応じて所定の単位で、当該仮想ボリュームに対して、物理的な記憶領域が割当てられる。
【００３０】
図５は、ＲＧ管理テーブル６００の一例を示す。図６は、ＬＵ管理テーブル７００の一例を示す。図７は、ＦＭＰＫ管理テーブル８００の一例を示す。システムコントローラ２０は、ＲＧ（RAID  Group）とＬＵ（Logical  Unit）とＦＭＰＫ５０との関係を、メモリ１２内のＲＧ管理テーブル６００とＬＵ管理テーブル７００とＦＭＰＫ管理テーブル８００へ書き込む
【００３１】
ＲＧ管理テーブル６００は、ＲＧ毎のレコードを有する。或るＲＧのレコードは、このＲＧを示すＲＧ番号６０１と、このＲＧに割り当てられたＦＭＰＫ５０を示すＦＭＰＫ番号６０２と、このＲＧのＲＡＩＤレベル６０３とを示す。
【００３２】
ＬＵ管理テーブル７００は、ＬＵ毎のレコードを有する。或るＬＵのレコードは、このＬＵを示すＬＵ番号７０１と、このＬＵに割り当てられたＲＧを示すＲＧ番号７０２と、このＬＵに割り当てられたストライプブロックのサイズであるストライプサイズ７０３と、このＬＵの開始論理アドレスであるＬＵ開始アドレス７０４と、このＬＵのサイズであるＬＵサイズ７０５と、このＬＵのＩＯ特性７０６とを示す。ＩＯ特性７０６はこのＬＵに対して行われたＩＯパターンの傾向であり、シーケンシャルの傾向が強いか、或いはランダムの傾向が強いか、を示す。
【００３３】
ＩＯ特性７０６は、ユーザにより予め指定されても良いし、システムコントローラ２０により判定されても良い。また、これらを組み合わせ、ＩＯ特性７０６の初期値がユーザにより予め指定され、所定の時間が経過した後、システムコントローラ２０が判定により初期値を最適化しても良い。また、ＩＯ特性７０６の判定方法として例えば、システムコントローラ２０は、単位時間毎に、或るＬＵに対するコマンドの統計を取り、ランダムＩ／ＯパターンとシーケンシャルのＩ／Ｏパターンのうち高いほうを当該ＬＵのＩＯ特性７０６と判定しても良い。コマンドの種類は、ランダムライト及びシーケンシャルライトを含む。ランダムライトの割合とシーケンシャルライトの割合の比較は、これらのコマンドの頻度を比較しても良いし、これらのコマンドにより書き込まれたデータ量を比較しても良い。また、システムコントローラ２０は、一定周期でＩＯ特性７０６を前述の判定方法によりモニタリングし、変更の必要があれば、ＬＵ管理テーブル７００を更新しても良い。
【００３４】
ＦＭＰＫ管理テーブル８００は、ＦＭＰＫ５０毎のレコードを有する。或るＦＭＰＫ５０のレコードは、このＦＭＰＫ５０を示すＦＭＰＫ番号８０１と、このＦＭＰＫ５０が所属するＲＧを示す所属ＲＧ番号８０２と、このＦＭＰＫ５０のパリティ演算機能を示すパリティ演算機能サポート情報８０３とを示す。パリティ演算機能サポート情報８０３は例えば、このＦＭＰＫ５０がパリティ演算回路６５等のパリティ演算機能を有するか否かを示すフラグである。
【００３５】
図８は、ＲＧ上のアドレス空間の一例を示す。図９は、ＲＧに所属するＦＭＰＫ５０上のアドレス空間の一例を示す。この例において、システムコントローラ２０は、ＲＡＩＤ５のＲＧ＃０のために、４個のＦＭＰＫ５０であるＦＭＰＫ＃０〜ＦＭＰＫ＃３を割り当てる。更にシステムコントローラ２０は、ＲＧ＃０上のアドレス空間から、連続する領域をＬＵ＃０に割り当て、別の連続する領域をＬＵ＃１に割り当てる。システムコントローラ２０は、ＦＭＰＫ＃０〜ＦＭＰＫ＃３上のアドレス空間に亘るストライプラインを割り当て、ストライプライン順、ＦＭＰＫ番号順にストライプブロック及びパリティを割り当てる。ここでシステムコントローラ２０は、ストライプライン毎に、ストライプブロック及びパリティを割り当てるＦＭＰＫ番号をシフトさせる。このときシステムコントローラ２０は、ＲＧ＃０，ＬＵ＃０，ＬＵ＃１に関する情報を、ＲＧ管理テーブル６００とＬＵ管理テーブル７００とＦＭＰＫ管理テーブル８００へ書き込む。
【００３６】
図１０は、ＦＭＰＫ５０におけるページマッピングの一例を示す。ＦＭＰＫ５０上の論理アドレス空間は、複数の論理ページに分割されている。一方、ＦＭＰＫ５０上の物理アドレス空間は、複数の物理ブロックに分割されており、更に各物理ブロックは、所定のブロックサイズを有し、複数の物理ページに分割されている。各論理ページ及び各物理ページは、所定のページサイズを有する。
【００３７】
なお、物理ページの代わりに、物理ブロック等、他の物理領域が用いられても良い。また、論理ページの代わりに、論理ユニット等、他の論理領域が用いられても良い。
【００３８】
図１１は、ページマッピング管理テーブル１１００の一例を示す。デバイスコントローラ６０は、論理ページを物理ページに関連付け、その関連をメモリ５２内のページマッピング管理テーブル１１００へ書き込む。ページマッピング管理テーブル１１００は、論理ページ毎のレコードを有する。或る論理ページのレコードは、この論理ページを示す論理ページ番号１１０１と、現在この論理ページに割り当てられている物理ページである現物理ページを示す物理ページ番号１１０２と、現物理ページの直前にこの論理ページに割り当てられていた物理ページである旧物理ページを示す旧物理ページ番号１１０３とを示す。即ち、或る論理ページに関連付けられている旧物理ページは、一世代前にこの論理ページに関連付けられていた現物理ページを示す。論理ページに関連付けられた旧物理ページは有効ページとして、論理ページとの関連付けが解除されるまでその関連性が保持される。関連付けが解除された旧物理ページは無効ページとなるため、リクラメーション処理等により所定のタイミングで、旧物理ページ内のデータが消去される。リクラメーション処理とは、メモリの特性上データを上書きできないフラッシュメモリにおいて、無効データ（無効ページに格納されているデータ）を消去して、その無効データが格納されていたページを再度書き込み可能な状態にする処理を言う。フラッシュメモリではブロック単位でデータを消去するので、デバイスコントローラ６０は、対象ブロック内に有効ページと無効ページの両方がある場合、有効ページ内のデータを他ブロックへ移動してから、対象ブロックに格納されている無効データを消去する。本実施例においては、デバイスコントローラ６０は、論理ページに関連付けられた物理ページ１１０２及び旧物理ページ１１０３を有効ページと判断して、リクラメーション処理を実行する。
【００３９】
旧物理ページの管理方法の具体例について説明する。デバイスコントローラ６０は、ページマッピング管理テーブル１１００に示されている旧物理ページが不要か否かを判定し、或る旧物理ページが不要と判定された場合、この旧物理ページと論理ページの関連付けを解除しても良い。例えば、デバイスコントローラ６０により管理される旧物理ページ数の上限が予め設定され、デバイスコントローラ６０は、ページマッピング管理テーブル１１００から旧物理ページを古い順に削除する。また、デバイスコントローラ６０は、システムコントローラ２０からの指示により、ページマッピング管理テーブル１１００から旧物理ページを削除しても良い。判定基準の一例としては、データ更新に伴うパリティの更新が終了したことである。また、システムコントローラ２０は、旧物理ページのデータが必要か否かを判定し、この旧物理ページが不要であると判定された場合に、この旧物理ページに対応するデバイスコントローラ６０へ、ページマッピング管理テーブル１１００からこの旧物理ページを削除することを指示しても良い。また、システムコントローラ２０又はデバイスコントローラ６０は、ＦＭ５５の使用済みの容量が一定値以上になった場合に、ページマッピング管理テーブル１１００から旧物理ページを削除しても良い。また、旧物理ページのデータの読み出しが要求され、且つ旧物理ページがページマッピング管理テーブル１１００に残っている場合、デバイスコントローラ６０は、旧物理ページのデータを読み出すことができる。
【００４０】
次に、システムコントローラ２０の動作について説明する。
【００４１】
まず、データ更新時のライト方法について説明する。
【００４２】
ライト方法は例えば、リードモディファイライト及びフルストライプライトである。この例におけるリードモディファイライトは、一つのストライプラインの中で指定された一つのストライプブロックのデータを更新する処理である。あるいは、この例におけるフルストライプライトは、一つのストライプライン内の全てのデータを更新する処理である。リードモディファイライトは、指定されたストライプブロックの旧データと新データから中間パリティを計算し、中間パリティと旧パリティから新パリティを計算する。フルストライプライトは、全ての新データから新パリティを計算する。ここで、旧データは更新前のデータを示し、新データは更新後のデータを示し、旧パリティは更新前のパリティを示す、新パリティは更新後のパリティを示す。中間パリティは、パリティ演算の途中のパリティであり、旧パリティと新パリティの差分を示す。
【００４３】
次に、パリティ演算機能について説明する。
【００４４】
パリティ演算機能は例えば、パリティ演算回路２５及びパリティ演算回路６５であり、一つのストライプラインにおける二つのストライプブロックのデータの間の排他的論理和（exclusive  OR）をパリティとして計算する。また、パリティ演算機能は、旧データと新データの間の排他的論理和を中間パリティとして計算する。また、パリティ演算機能は、旧パリティと中間パリティの間の排他的論理和を新パリティとして計算する。旧データをＤｉ、新データをＤｉ＿ｎｅｗ、旧パリティをＰとすると、新パリティＰ＿ｎｅｗは次式で表される。
【００４５】
Ｐ＿ｎｅｗ  ＝  Ｐ＋（Ｄｉ＋Ｄｉ＿ｎｅｗ）
【００４６】
ここで、演算子「＋」は排他的論理和を表し、（Ｄｉ＋Ｄｉ＿ｎｅｗ）は中間パリティを表す。中間パリティは、Ｄｉ以外の全てのデータ間の排他的論理和に等しい。
【００４７】
なお、パリティの代わりに、ハミング符号等、他の冗長コードが用いられても良い。
【００４８】
次に、システムコントローラ２０がＦＭＰＫ管理テーブル８００にパリティ演算機能サポート情報８０３を登録するパリティ演算機能登録処理について説明する。
【００４９】
図１２は、パリティ演算機能登録処理の一例を示す。システムコントローラ２０は、新規のＦＭＰＫ５０をインストールする時や、システムコントローラ２０の立ち上げ時等に、パリティ演算機能登録処理を行う。
【００５０】
まずシステムコントローラ２０は、パリティ演算機能サポート確認コマンドをＦＭＰＫ５０のデバイスコントローラ６０へ発行し、その応答を受領する（１２０１）。このときパリティ演算機能サポート確認コマンドを受けたデバイスコントローラ６０は、デバイスコントローラ６０自身がパリティ演算機能を有しているか否かを示す応答をシステムコントローラ２０へ送る。次にシステムコントローラ２０は、応答に基づいて、デバイスコントローラ６０がパリティ演算機能を有しているか否かを示す情報を、ＦＭＰＫ管理テーブル８００のパリティ演算機能サポート情報８０３へ登録し（１２０２）、この処理のフローを終了する。
【００５１】
なお、パリティ演算機能登録処理を行う代わりに、ユーザが予めパリティ演算機能サポート情報８０３を登録しても良い。
【００５２】
次に、パリティ演算を行うパリティ演算実施装置の決定方法について説明する。
【００５３】
図１３は、パリティ演算実施装置の決定方法１３００の一例を示す。システムコントローラ２０は決定方法１３００に従って、システムコントローラ２０又はデバイスコントローラ６０をパリティ演算実施装置として決定する。システムコントローラ２０は、システムコントローラ２０がパリティ演算回路２５等のパリティ演算機能を有するか否かを示す情報と、ＦＭＰＫ管理テーブル８００のパリティ演算機能サポート情報８０３とに基づいて、システムコントローラ２０とデバイスコントローラ６０の何れかをパリティ演算実施装置として決定する。パリティ演算実施装置を決定するための４個のケースが定義されている。各ケースは、ケース番号１３０１、システムコントローラ２０がパリティ演算機能を有するか否かを示すシステム機能情報１３０２と、デバイスコントローラ６０がパリティ演算機能を有するか否かを示すデバイス機能情報１３０３と、パリティ演算実施装置を示すパリティ演算実施情報１３０４と、オプション１３０５とを示す。
【００５４】
ケース＃１は、システムコントローラ２０がパリティ演算機能を有しており、且つデバイスコントローラ６０もパリティ演算機能を有しているケースである。パリティ演算実施情報１３０４によれば、このケースにおいてシステムコントローラ２０は、パリティ演算実施装置としてシステムコントローラ２０とデバイスコントローラ６０の何れも選択することができる。この場合、システムコントローラ２０は、オプション１３０５に基づいて後述のライト処理を行う。
【００５５】
ケース＃２は、システムコントローラ２０がパリティ演算機能を有しており、且つデバイスコントローラ６０がパリティ演算機能を有していないケースである。パリティ演算実施情報１３０４によれば、このケースにおいてシステムコントローラ２０は、パリティ演算実施装置としてシステムコントローラ２０を選択する。
【００５６】
ケース＃３は、システムコントローラ２０がパリティ演算機能を有しておらず、且つデバイスコントローラ６０がパリティ演算機能を有しているケースである。パリティ演算実施情報１３０４によれば、このケースにおいてシステムコントローラ２０は、パリティ演算実施装置としてデバイスコントローラ６０を選択する。
【００５７】
ケース＃４は、システムコントローラ２０がパリティ演算機能を有しておらず、且つデバイスコントローラ６０もパリティ演算機能を有していないケースである。パリティ演算実施情報１３０４によれば、このケースにおいてシステムコントローラ２０は、パリティ演算実施装置としてシステムコントローラ２０とデバイスコントローラ６０の何れも選択することができない。
【００５８】
なお、パリティ演算機能登録処理及びパリティ演算実施装置の決定は、省かれても良い。例えば、システムコントローラ２０と全てのデバイスコントローラ６０がパリティ演算機能を有している場合、システムコントローラ２０は、パリティ演算機能登録処理及びパリティ演算実施装置の決定を省き、後述するケース＃１におけるライト処理を行う。また、管理者等によりパリティ演算実施装置が予め設定されている場合も、これらの処理を省略可能である。
【００５９】
次に、ケース＃１〜＃３におけるシステムコントローラ２０のライト処理について説明する。
【００６０】
図１４は、システムコントローラ２０のライト処理の一例を示す。まずシステムコントローラ２０は、外部ホストからＩＯ要求としてライト要求を受領する（１４０１）。外部ホストは例えば、ＳＡＮ１を介してシステムコントローラ２０に接続されたホスト計算機１０である。次にシステムコントローラ２０は、パリティ演算を行うパリティ演算実施装置としてシステムコントローラ２０及びデバイスコントローラ６０の一方を選択するパリティ演算選択処理を行う（１４０２）。なお、ケース＃２及びケース＃３では、パリティ演算実施装置は選択済みなので、ステップ１４０２の処理は省略する。次にシステムコントローラ２０は、受領した命令に基づいてライト方法を選択するライト方法選択処理を行う（１４０３）。ライト方法は、リードモディファイライト及びフルストライプライトの一方である。次にシステムコントローラ２０は、選択されたライト方法に従ってデバイスコントローラ６０にデータ及びパリティを更新させるデータ更新処理を行う（１４０４）。
【００６１】
次に、パリティ演算選択処理１４０２の幾つかの具体例について説明する。
【００６２】
まず、システムコントローラ２０がＬＵ毎のＩＯ特性７０６に基づいてパリティ演算実施装置を選択する処理の具体例である、第１パリティ演算選択処理について説明する。
【００６３】
図１５は、第１パリティ演算選択処理の一例を示す。まずシステムコントローラ２０は、ＬＵ管理テーブル７００に基づいて、当該ライトの対象のＬＵのＩＯ特性７０６がランダムを示すか否かを判定する（１５０１）。当該ＬＵのＩＯ特性７０６がランダムを示す場合（１５０１，Ｙｅｓ）、システムコントローラ２０は、パリティ演算実施装置としてデバイスコントローラ６０を選択することにより、デバイスコントローラ６０にパリティ演算を指示することを決定し（１５０２）、この処理のフローを終了する。一方、当該ＬＵのＩＯ特性７０６がランダムを示さない場合（１５０１，Ｎｏ）、すなわち後述するシーケンシャルライトの場合は、システムコントローラ２０は、パリティ演算実施装置としてシステムコントローラ２０を選択することにより、システムコントローラ２０がパリティ演算を実施することを決定し（１５０３）、この処理のフローを終了する。
【００６４】
即ち、システムコントローラ２０は、ＩＯ契機で、ＬＵ管理テーブル７００のＩＯ特性７０６を参照し、ＩＯ特性７０６が、当該ＬＵへの書き込みにおいてランダムライトがシーケンシャルライトより多いことを示す場合、デバイスコントローラ６０にパリティ生成を指示する。一方、ＩＯ特性７０６が、当該ＬＵへの書き込みにおいてランダムライトがシーケンシャルライトより少ないことを示す場合、システムコントローラ２０がパリティ生成を実施する。
【００６５】
次に、システムコントローラ２０がシステムコントローラ２０のハードウェアの負荷を検出し、この負荷に基づいてパリティ演算実施装置を選択する処理の具体例である、第２パリティ演算選択処理について説明する。
【００６６】
図１６は、第２パリティ演算選択処理の一例を示す。ハードウェアは例えば、ＣＰＵ１１、メモリ１２、パリティ演算回路２５である。まずシステムコントローラ２０は、自身のハードウェアの負荷が基準より高いか否かを判定する（１６０１）。ハードウェアの負荷が基準より高いと判定された場合（１６０１，Ｙｅｓ）、システムコントローラ２０は、パリティ演算実施装置としてデバイスコントローラ６０を選択し、デバイスコントローラ６０にパリティ演算を指示し（１６０２）、この処理のフローを終了する。一方、ハードウェアの負荷が基準より高くないと判定された場合（１６０１，Ｎｏ）、システムコントローラ２０は、パリティ演算実施装置としてシステムコントローラ２０を選択し（１６０３）、この処理のフローを終了する。
【００６７】
ここで、システムコントローラ２０は例えば、システムコントローラ２０のハードウェアの負荷を計測し、計測結果が所定の閾値を超えた場合に、ハードウェアの負荷が高いと判定する。計測結果は例えば、ＣＰＵ１１の利用率、メモリ１２の使用量、パリティ演算回路２５へ入力されたデータ量等である。
【００６８】
次に、システムコントローラ２０が当該ライトのＩＯパターンに基づいてパリティ演算実施装置を選択する処理の具体例である、第３パリティ演算選択処理について説明する。
【００６９】
図１７は、第３パリティ演算選択処理の一例を示す。まずシステムコントローラ２０は、当該ＩＯ要求のＩＯパターンがランダムライトか否かを判定する（１７０１）。ＩＯパターンがランダムライトであると判定された場合（１７０１，Ｙｅｓ）、システムコントローラ２０はパリティ演算実施装置としてデバイスコントローラ６０を選択し、デバイスコントローラ６０にパリティ演算を指示し（１７０２）、この処理のフローを終了する。一方、ＩＯパターンがランダムライトでないと判定された場合、即ちＩＯパターンがシーケンシャルライトであると判定された場合（１７０１，Ｎｏ）、システムコントローラ２０は、パリティ演算実施装置としてシステムコントローラ２０を選択し（１７０３）、この処理のフローを終了する。
【００７０】
次に、システムコントローラ２０が当該ライトのＩＯパターンとシステムコントローラ２０のハードウェアの負荷とに基づいてパリティ演算実施装置を選択する処理の具体例である、第４パリティ演算選択処理について説明する。
【００７１】
図１８は、第４パリティ演算選択処理の一例を示す。まずシステムコントローラ２０は、当該ライトのＩＯパターンがランダムライトか否かを判定する（１８０１）。ＩＯパターンがランダムライトであると判定された場合（１８０１，Ｙｅｓ）、システムコントローラ２０はパリティ演算実施装置としてデバイスコントローラ６０を選択し、デバイスコントローラ６０にパリティ演算を指示し（１８０２）、この処理のフローを終了する。一方、ＩＯパターンがランダムライトでないと判定された場合（１８０１，Ｎｏ）、システムコントローラ２０は、ハードウェアの負荷が高いか否かを判定する（１８０３）。ハードウェアの負荷が高いと判定された場合（１８０３，Ｙｅｓ）、システムコントローラ２０は、処理のフローを１８０２へ移行させる。一方、ハードウェアの負荷が高くないと判定された場合（１８０３，Ｎｏ）、システムコントローラ２０は、パリティ演算実施装置としてシステムコントローラ２０を選択し（１８０４）、この処理のフローを終了する。
【００７２】
なお、システムコントローラ２０は、以上に示された複数の種類のパリティ演算選択処理１４０２を組み合わせることにより、パリティ演算実施装置を選択しても良い。
【００７３】
シーケンシャルライト時及びフルストライプライト時、システムコントローラ２０がパリティ演算を行うことにより、システムコントローラ２０からデバイスコントローラ６０へのデータ転送量の増大を防ぐことができる。これによりライト速度の低下を防ぐことができる。
【００７４】
次に、ライト方法選択処理１４０３の具体例について説明する。
【００７５】
図１９は、ライト方法選択処理１４０３の一例を示す。ライト方法の選択肢は例えば、リードモディファイライト及びフルストライプライトである。まずシステムコントローラ２０は、当該ＩＯ要求であるライトのＩＯパターンがランダムライトか否かを判定する（１９０１）。ＩＯパターンがランダムライトであると判定された場合（１９０１，Ｙｅｓ）、システムコントローラ２０は、ライト方法としてリードモディファイライトを選択し（１９０２）、この処理のフローを終了する。一方、ＩＯパターンがランダムライトでないと判定された場合（１９０１，Ｎｏ）、即ちＩＯパターンがシーケンシャルライトであると判定された場合、システムコントローラ２０は、ライト方法としてフルストライプライトを選択し（１９０３）、この処理のフローを終了する。
【００７６】
次に、パリティ演算実施装置の選択結果とライト方法の選択結果に応じたデータ更新処理１４０４の幾つかの具体例について説明する。
【００７７】
まず、パリティ演算実施装置としてデバイスコントローラ６０が選択され、ライト方法としてリードモディファイライトが選択された場合のデータ更新処理１４０４の具体例である、第１リードモディファイライト処理について説明する。
【００７８】
図２０は、第１リードモディファイライト処理の一例を示す。図２１は、第１リードモディファイライト処理におけるシステムコントローラ２０の動作の一例を示す。この例において、４個のＦＭＰＫ５０であるＦＭＰＫ＃０，＃１，＃２，＃３は、一つのストライプライン内のデータＤ０，Ｄ１，Ｄ２、パリティＰを夫々格納している。ここでシステムコントローラ２０が、ライトの命令により、Ｄ０の旧データを更新するための新データを受けた状態を初期状態とする。以下の説明において、ＦＭＰＫ＃０，＃１，＃２，＃３のうち、更新されるデータを格納しているＦＭＰＫ＃０をデータＦＭＰＫと呼ぶことがある。また、ＦＭＰＫ＃０，＃１，＃２，＃３のうち、パリティを格納しているＦＭＰＫ＃３をパリティＦＭＰＫと呼ぶことがある。
【００７９】
まずシステムコントローラ２０は、ＦＭＰＫ＃０，＃１，＃２，＃３の中からＤ０に対応するＦＭＰＫ＃０（データＦＭＰＫ）を選択し、旧データの保持と新データの書き込みとを指示する旧データ保持ライトコマンドをＦＭＰＫ＃０へ発行することにより、新データをＦＭＰＫ＃０へ転送する（２１０１）。このコマンドを受けたＦＭＰＫ＃０のデバイスコントローラ６０は、システムコントローラ２０からの新データをＦＭＰＫ＃０内の旧データの物理ページと異なる物理ページへ書き込む。通常ライトコマンドでは、論理ページに新物理ページが割り当てられると旧物理ページは無効となり、旧物理ページに格納されている旧データは消去の対象となる。そこで、システムコントローラ２０は、パリティの更新が完了するまで旧データが保持されるようにするため、通常ライトコマンドではなく旧データ保持ライトコマンドを利用する。以後の説明において、ライトコマンドとは、通常ライトコマンドを示すものとする。
【００８０】
次にシステムコントローラ２０は、中間パリティを要求する中間パリティリードコマンドをＦＭＰＫ＃０へ発行することにより、ＦＭＰＫ＃０から中間パリティを取得する（２１０２）。中間パリティは、旧パリティのパリティ演算により新パリティを生成するための、中間演算結果である。このコマンドを受けたＦＭＰＫ＃０のデバイスコントローラ６０は、ＦＭＰＫ＃０内に格納された旧データとＦＭＰＫ＃０内に格納された新データとから中間パリティを計算し、応答として中間パリティをシステムコントローラ２０へ送る。ここでＦＭＰＫ＃０のデバイスコントローラ６０は、計算された中間パリティを、バッファ６６へ書き込んでも良いし、ＦＭＰＫ＃０内のＦＭ５５の中で旧データの物理ページ及び新データの物理ページの両方と異なる物理ページへ書き込んでも良い。
【００８１】
次にシステムコントローラ２０は、ＦＭＰＫ＃０，＃１，＃２，＃３の中からＰに対応するＦＭＰＫ＃３（パリティＦＭＰＫ）を選択し、パリティの更新を指示するパリティ更新ライトコマンドをＦＭＰＫ＃３へ発行することにより、ＦＭＰＫ＃０から受信した中間パリティをＦＭＰＫ＃３へ転送する（２１０３）。このコマンドを受けたＦＭＰＫ＃３は、ＦＭＰＫ＃３内の旧パリティとシステムコントローラ２０からの中間パリティから新パリティを計算し、新パリティをＦＭＰＫ＃３へ書き込む。ＦＭＰＫ＃３のデバイスコントローラ６０は、新パリティをＦＭＰＫ＃３へ書き込んだら、システムコントローラ２０に対してパリティ更新ライトの完了応答を通知する。ここでＦＭＰＫ＃３のデバイスコントローラ６０は、システムコントローラ２０からの中間パリティを、バッファ６６へ書き込んでも良いし、ＦＭＰＫ＃３内のＦＭ５５の中で旧パリティの物理ページ及び新パリティの物理ページの両方と異なる物理ページへ書き込んでも良い。
【００８２】
次にシステムコントローラ２０は、ＦＭＰＫ＃３からの完了応答を受信すると、旧データを無効にすることを指示する旧データ破棄コマンドを、ＦＭＰＫ＃０へ発行し（２１０４）、このフローを終了する。このコマンドを受けたＦＭＰＫ＃０のデバイスコントローラ６０は、保持していた旧データを無効とするため、マッピング管理テーブル１１００から旧データ破棄コマンドにより特定された論理ページにマッピングされた物理ページを削除する。
【００８３】
なお、システムコントローラ２０は、パリティ更新ライトコマンド発行後、ＦＭＰＫ＃３からの完了応答を所定の時間以内に受信しなかった場合は、パリティの更新が失敗したものと判断して、ＦＭＰＫ＃０から中間パリティを再取得し、その中間パリティをＦＭＰＫ＃３へ再転送することで、パリティの更新処理を再実行してもよい。
【００８４】
具体的には、システムコントローラ２０は、パリティ更新ライトコマンド発行後、ＦＭＰＫ＃３からの完了応答を所定の時間以内に受信しなかった場合は、中間パリティリードコマンドをＦＭＰＫ＃０へ再発行し、このコマンドに応じて再計算された中間パリティを受信する。そして、システムコントローラ２０は、パリティ更新ライトコマンドをＦＭＰＫ＃３へ再発行することにより、再計算された中間パリティをＦＭＰＫ＃３に書き込む。
【００８５】
この処理によれば、一つのストライプブロックのデータの更新におけるシステムコントローラ２０とデバイスコントローラ６０の間のデータ転送は次のようになる。
【００８６】
（１）更新後のデータがシステムコントローラ２０からデータＦＭＰＫのデバイスコントローラ６０へ転送される。
（２）中間パリティがデータＦＭＰＫのデバイスコントローラ６０からシステムコントローラ２０へ転送される。
（３）中間パリティがシステムコントローラ２０からパリティＦＭＰＫのデバイスコントローラ６０へ転送される。
【００８７】
これにより、システムコントローラ２０とデバイスコントローラ６０の間のデータ転送を抑えることができる。あるいは、システムコントローラ２０がパリティ演算を行う場合、システムコントローラ２０とデバイスコントローラ６０の間のデータ転送は次のようになる。
【００８８】
（１）更新前のデータがデータＦＭＰＫのデバイスコントローラ６０からシステムコントローラ２０へ転送される。
（２）更新前のパリティがパリティＦＭＰＫのデバイスコントローラ６０からシステムコントローラ２０へ転送される。
（３）更新後のデータがシステムコントローラ２０からデータＦＭＰＫのデバイスコントローラ６０へ転送される。
（４）更新後のパリティがシステムコントローラ２０からパリティＦＭＰＫのデバイスコントローラ６０へ転送される。
【００８９】
このようにシステムコントローラ２０がパリティ演算を行う場合に比べると、第１リードモディファイライト処理のデータ転送は少ない。
【００９０】
また、データＦＭＰＫが更新前のデータと更新後のデータの両方をＦＭ５５に保持することにより、データＦＭＰＫのデバイスコントローラ６０が中間パリティを演算するために使用するバッファ６６を削減することができる。
【００９１】
更に、新データのライト後も旧データをパリティが更新されるまで保持することで、パリティ更新前に障害が起きた場合にも、データ復旧が可能となる。また、パリティ更新後は旧データを無効にして旧データを消去対象とすることで、旧データによる記憶領域の使用量を削減することができる。
【００９２】
次に、パリティ演算実施装置としてデバイスコントローラ６０が選択され、ライト方法としてリードモディファイライトが選択された場合の別のデータ更新処理１４０４の別の具体例である、第２リードモディファイライト処理について説明する。
【００９３】
図２２は、第２リードモディファイライト処理の一例を示す。図２３は、第２リードモディファイライト処理におけるシステムコントローラ２０の一例の動作を示す。この例における初期状態は、第１リードモディファイライト処理の初期状態と同様である。まずシステムコントローラ２０は、リードコマンドをＤ０に対応するＦＭＰＫ＃０（データＦＭＰＫ）へ発行することにより、ＦＭＰＫ＃０から旧データを取得する（２３０１）。このコマンドを受けたＦＭＰＫ＃０のデバイスコントローラ６０は、ＦＭＰＫ＃０内の旧データを読み出し、旧データを応答としてシステムコントローラ２０へ送る。
【００９４】
次にシステムコントローラ２０は、パリティ更新ライトコマンドをＰに対応するＦＭＰＫ＃３（パリティＦＭＰＫ）へ発行することにより、新データと旧データをＦＭＰＫ＃３へ転送する（２３０２）。このコマンドを受けたＦＭＰＫ＃３のデバイスコントローラ６０は、システムコントローラ２０からの新データとシステムコントローラ２０からの旧データとＦＭＰＫ＃３内の旧パリティから新パリティを計算し、この新パリティを、ＦＭＰＫ＃３へ書き込む。
【００９５】
次にシステムコントローラ２０は、ライトコマンドをＦＭＰＫ＃０に発行することにより、新データをＦＭＰＫ＃０に転送する（２３０３）。このコマンドを受けたＦＭＰＫ＃０のデバイスコントローラ６０は新データをＦＭＰＫ＃０へ書き込む。
【００９６】
この処理によれば、一つのストライプブロックのデータの更新におけるシステムコントローラ２０とデバイスコントローラ６０の間のデータ転送は次のようになる。
【００９７】
（１）更新前のデータがデータＦＭＰＫのデバイスコントローラ６０からシステムコントローラ２０へ転送され、更新後のデータがシステムコントローラ２０からデータＦＭＰＫのデバイスコントローラ６０に転送される。
（２）更新前のデータと更新後のデータとがシステムコントローラ２０からパリティＦＭＰＫのデバイスコントローラ６０へ転送される。
【００９８】
これにより、システムコントローラ２０とデバイスコントローラ６０の間のデータ転送を抑えることができる。
【００９９】
２３０２において、システムコントローラ２０は、１回のパリティ更新ライトコマンドで、新データと旧データをパリティＦＭＰＫへ転送する。この時の転送データ量は、第１リードモディファイライト処理が中間パリティをシステムコントローラ２０からパリティＦＭＰＫへ転送する場合の転送データ量に比べて、２倍になる。しかし、転送回数が１回であるため、データ転送のオーバヘッドの増加を防ぐことができる。データ転送が、例えばＳＡＳ（Serial  Attached  Small  Computer  System  Interface）−６ＧＢのような高速インタフェースにより行われる場合、転送データ量が増加するデメリットより転送回数が減少するメリットの方が大きい。
【０１００】
更に、新データのライト後も旧データをパリティが更新されるまで保持することで、パリティ更新前に障害が起きた場合にもデータ復旧が可能となる。また、パリティ更新後は旧データを無効にして、旧データを消去対象とすることで、旧データによる記憶領域の使用量を削減することができる。
【０１０１】
なお、パリティ演算実施装置としてデバイスコントローラ６０が選択され、ライト方法としてリードモディファイライトが選択された場合、第１リードモディファイライト処理及び第２リードモディファイライト処理の何れが行われても良い。
【０１０２】
次に、パリティ演算実施装置としてシステムコントローラ２０が選択され、ライト方法としてリードモディファイライトが選択された場合のデータ更新処理１４０４の具体例である、第３リードモディファイライト処理について説明する。
【０１０３】
図２４は、第３リードモディファイライト処理の一例を示す。図２５は、第３リードモディファイライト処理におけるシステムコントローラ２０の動作の一例を示す。この例における初期状態は、第１リードモディファイライト処理の初期状態と同様である。まずシステムコントローラ２０は、Ｄ０を要求するリードコマンドをＤ０に対応するＦＭＰＫ＃０へ発行することによりＦＭＰＫ＃０から旧データを取得し、リードコマンドをＰに対応するＦＭＰＫ＃３へ発行することによりＦＭＰＫ＃３から旧パリティを取得する（２５０１）。このリードコマンドを受けたＦＭＰＫ＃０は、ＦＭＰＫ＃０内の旧データを読み出し、旧データを応答としてシステムコントローラ２０へ送る。また、このリードコマンドを受けたＦＭＰＫ＃３のデバイスコントローラ６０は、ＦＭＰＫ＃３内の旧パリティを読み出し、旧パリティを応答としてシステムコントローラ２０へ送る。
【０１０４】
次にシステムコントローラ２０は、旧データと旧パリティと新データから新パリティを計算する（２５０２）。次にシステムコントローラ２０は、ライトコマンドをＦＭＰＫ＃０へ発行することによりＦＭＰＫ＃０へ新データを転送し、ライトコマンドをＰに対応するＦＭＰＫ＃３へ発行することによりＦＭＰＫ＃３へ新パリティを転送し（２５０３）、この処理のフローを終了する。このライトコマンドを受けたＦＭＰＫ＃０のデバイスコントローラ６０は、ＦＭＰＫ＃０へ新データを書き込む。また、このライトコマンドを受けたＦＭＰＫ＃３は、ＦＭＰＫ＃３へ新パリティを書き込む。
【０１０５】
この処理によれば、一つのストライプブロックのデータの更新におけるシステムコントローラ２０とデバイスコントローラ６０の間のデータ転送は次のようになる。
【０１０６】
（１）更新前のデータがデータＦＭＰＫのデバイスコントローラ６０からシステムコントローラ２０へ転送され、更新後のデータがシステムコントローラ２０からデータＦＭＰＫのデバイスコントローラ６０に転送される。
（２）更新前のパリティがパリティＦＭＰＫのデバイスコントローラ６０からシステムコントローラ２０へ転送される。
（３）更新後のパリティがシステムコントローラ２０からパリティＦＭＰＫのデバイスコントローラ６０へ転送される。
【０１０７】
これにより、システムコントローラ２０とデバイスコントローラ６０の間のデータ転送を抑えることができる。
【０１０８】
次に、フルストライプライトの幾つかの具体例について説明する。
【０１０９】
まず、パリティ演算実施装置としてデバイスコントローラ６０が選択され、ライト方法としてフルストライプライトが選択された場合の別のデータ更新処理１４０４の具体例である、第１フルストライプライト処理について説明する。
【０１１０】
図２６は、第１フルストライプライト処理の一例を示す。図２７は、第１フルストライプライト処理におけるシステムコントローラ２０の動作の一例を示す。この例において、ＦＭＰＫ＃０，＃１，＃２，＃３は、Ｄ０，Ｄ１，Ｄ２，Ｐを夫々格納している。ここでシステムコントローラ２０が、ライトの命令により、Ｄ０，Ｄ１，Ｄ２の旧データを更新するための新データを受けた状態を初期状態とする。以下の説明において、ＦＭＰＫ＃０，＃１，＃２，＃３のうち、更新されるデータを格納しているＦＭＰＫ＃０，＃１，＃２をデータＦＭＰＫと呼ぶことがある。
【０１１１】
まずシステムコントローラ２０は、Ｄ０，Ｄ１，Ｄ２に夫々対応するＦＭＰＫ＃０，＃１，＃２（データＦＭＰＫ）へライトコマンドを発行することにより、受領データをＤ０，Ｄ１，Ｄ２の新データに分割し、Ｄ０，Ｄ１，Ｄ２の新データをＦＭＰＫ＃０，＃１，＃２へ夫々転送する（２７０１）。このライトコマンドを受けたＦＭＰＫ＃０，＃１，＃２のデバイスコントローラ６０は、システムコントローラ２０からの新データをＦＭＰＫ＃０，＃１，＃２へ夫々書き込む。
【０１１２】
次にシステムコントローラ２０は、パリティの生成と書き込みを指示するパリティ生成ライトコマンドをＰに対応するＦＭＰＫ＃３（パリティＦＭＰＫ）へ発行することにより、Ｄ０，Ｄ１，Ｄ２の新データをＦＭＰＫ＃３へ転送し（２７０２）、この処理のフローを終了する。このライトコマンドを受けたＦＭＰＫ＃３のデバイスコントローラ６０は、Ｄ０，Ｄ１，Ｄ２の新データから新パリティを計算し、新パリティをＦＭＰＫ＃３へ書き込む。
【０１１３】
この処理によれば、一つのストライプラインのデータの更新におけるシステムコントローラ２０とデバイスコントローラ６０の間のデータ転送は次のようになる。
【０１１４】
（１）更新後のデータがシステムコントローラ２０からデータＦＭＰＫのデバイスコントローラ６０へ転送される。
（２）更新後のパリティデータがシステムコントローラ２０からパリティＦＭＰＫのデバイスコントローラ６０へ転送される。
【０１１５】
これにより、システムコントローラ２０とデバイスコントローラ６０の間のデータ転送を抑えることができる。
【０１１６】
次に、パリティ演算実施装置としてシステムコントローラ２０が選択され、ライト方法としてフルストライプライトが選択された場合の別のデータ更新処理１４０４の具体例である、第２フルストライプライト処理について説明する。
【０１１７】
図２８は、第２フルストライプライト処理の一例を示す。図２９は、第２フルストライプライト処理におけるシステムコントローラ２０の動作の一例を示す。この例における初期状態は、第１フルストライプライト処理の初期状態と同様である。まずシステムコントローラ２０は、Ｄ０，Ｄ１，Ｄ２の新データから新パリティを計算する（２９０１）。次にシステムコントローラ２０は、Ｄ０，Ｄ１，Ｄ２に夫々対応するＦＭＰＫ＃０，＃１，＃２へライトコマンドを発行することにより、Ｄ０，Ｄ１，Ｄ２の新データをＦＭＰＫ＃０，＃１，＃２へ夫々転送し、Ｐに対応するＦＭＰＫ＃３へライトコマンドを発行することにより、計算された新パリティをＦＭＰＫ＃３へ転送し（２９０２）、この処理のフローを終了する。ライトコマンドを受けたＦＭＰＫ＃０，＃１，＃２のデバイスコントローラ６０は、システムコントローラ２０からの新データをＦＭＰＫ＃０，＃１，＃２へ夫々書き込む。また、ライトコマンドを受けたＦＭＰＫ＃３のデバイスコントローラ６０は、システムコントローラ２０からの新パリティをＦＭＰＫ＃３へ書き込む。
【０１１８】
この処理によれば、一つのストライプラインのデータの更新におけるシステムコントローラ２０とデバイスコントローラ６０の間のデータ転送は次のようになる。
【０１１９】
（１）更新後のデータがシステムコントローラ２０からデータＦＭＰＫのデバイスコントローラ６０へ転送される。
（２）、更新後のパリティがシステムコントローラ２０からパリティＦＭＰＫのデバイスコントローラ６０へ転送される。
【０１２０】
これにより、システムコントローラ２０とデバイスコントローラ６０の間のデータ転送を抑えることができる。
【０１２１】
次に、パリティ演算実施装置の選択結果に応じたデータ復旧処理の幾つかの具体例について説明する。
【０１２２】
まず、パリティ演算実施装置としてデバイスコントローラ６０が選択された場合のデータ復旧処理の具体例である、第１データ復旧処理について説明する。
【０１２３】
図３０は、第１データ復旧処理の一例を示す。図３１は、第１データ復旧処理におけるシステムコントローラ２０の動作の一例を示す。この例において、ＦＭＰＫ＃０，＃１，＃２，＃３は、Ｄ０，Ｄ１，Ｄ２，Ｐを夫々格納している。ここで、ＦＭＰＫ＃１内のＦＭ５５に障害が発生し、このＦＭ５５が新たなＦＭ５５に交換された状態を初期状態とする。以下の説明において、ＦＭＰＫ＃０，＃１，＃２，＃３のうち、復旧されるデータを格納しているＦＭＰＫ＃１を復旧中ＦＭＰＫと呼ぶことがある。
【０１２４】
まずシステムコントローラ２０は、ＦＭＰＫ＃０，＃１，＃２，＃３が所属するＲＧ内の生存しているＦＭＰＫ＃０，＃２，＃３へリードコマンドを発行することにより、ＦＭＰＫ＃０，＃２，＃３に夫々格納されたＤ０，Ｄ２，Ｐを取得する（３１０１）。このリードコマンドを受けたＦＭＰＫ＃０，＃２，＃３のデバイスコントローラ６０は、Ｄ０，Ｄ２，Ｐを夫々読み出し、読み出したＤ０，Ｄ２，Ｐをシステムコントローラ２０へ転送する。ここで読み出されるデータであってもパリティであっても良い。
【０１２５】
次にシステムコントローラ２０は、復旧中のＦＭＰＫ＃１（復旧中ＦＭＰＫ）へパリティ生成を示すライトコマンドを発行することにより、読み出されたＤ０，Ｄ２，ＰをＦＭＰＫ＃１へ転送し（３１０２）、この処理のフローを終了する。このライトコマンドを受けたＦＭＰＫ＃１のデバイスコントローラ６０は、Ｄ０，Ｄ２，ＰからＤ１を計算することによりＤ１の復旧データを生成し、Ｄ１の復旧データをＦＭＰＫ＃１へ書き込む。
【０１２６】
この処理によれば、一つのストライプブロックのデータの復旧におけるシステムコントローラ２０とデバイスコントローラ６０の間のデータ転送は次のようになる。
【０１２７】
（１）復旧中ＦＭＰＫ以外のＦＭＰＫ５０のデータが対応するデバイスコントローラ６０からシステムコントローラ２０へ転送される。
（２）転送されたデータがシステムコントローラ２０から復旧中ＦＭＰＫのデバイスコントローラ６０へ転送される。
【０１２８】
これにより、システムコントローラ２０とデバイスコントローラ６０の間のデータ転送を抑えることができる。
【０１２９】
次に、パリティ演算実施装置としてシステムコントローラ２０が選択された場合のデータ復旧処理の具体例である、第２データ復旧処理について説明する。
【０１３０】
図３２は、第２データ復旧処理の一例を示す。図３３は、第２データ復旧処理におけるシステムコントローラ２０の動作の一例を示す。この例における初期状態は、第１の具体例と同様である。まずシステムコントローラ２０は、ＦＭＰＫ＃０，＃１，＃２，＃３が所属するＲＧ内の生存しているＦＭＰＫ＃０，＃２，＃３へリードコマンドを発行することにより、ＦＭＰＫ＃０，＃２，＃３からＤ０，Ｄ２，Ｐを読み出す（３３０１）。このリードコマンドを受けたＦＭＰＫ＃０，＃２，＃３のデバイスコントローラ６０は、Ｄ０，Ｄ２，Ｐを夫々読み出し、読み出したＤ０，Ｄ２，Ｐをシステムコントローラ２０へ転送する。ここで読み出されるデータであってもパリティであっても良い。
【０１３１】
次にシステムコントローラ２０は、Ｄ０，Ｄ２，ＰからＤ１を計算することにより、Ｄ１の復旧データを生成する（３３０２）。次にシステムコントローラ２０は、ライトコマンドをＦＭＰＫ＃１へ発行することにより、復旧されたＤ１をＦＭＰＫ＃１へ書き込み（３３０３）、この処理のフローを終了する。このライトコマンドを受けたＦＭＰＫ＃１のデバイスコントローラ６０は、受けたＤ１をＦＭＰＫ＃１へ書き込む。
【０１３２】
この処理によれば、一つのストライプブロックのデータの復旧におけるシステムコントローラ２０とデバイスコントローラ６０の間のデータ転送は次のようになる。
【０１３３】
（１）復旧中ＦＭＰＫ以外のＦＭＰＫ５０のデータが対応するデバイスコントローラ６０からシステムコントローラ２０へ転送される。
（２）転送されたデータがシステムコントローラ２０から復旧中ＦＭＰＫのデバイスコントローラ６０へ転送される。
【０１３４】
これにより、システムコントローラ２０とデバイスコントローラ６０の間のデータ転送を抑えることができる。
【０１３５】
次に、デバイスコントローラ６０の動作について説明する。
【０１３６】
まず、通常のライトコマンドを受けた場合のデバイスコントローラ６０の処理の具体例である、通常ライト処理について説明する。
【０１３７】
この通常ライト処理において、デバイスコントローラ６０は、旧データを保持する必要がない。
【０１３８】
図３４は、通常ライト処理の一例を示す。まずデバイスコントローラ６０は、通常のライトコマンドを受領する（３４０１）。次にデバイスコントローラ６０は、このライトコマンドにより指定された論理アドレスから論理ページ番号を求め、この論理ページ番号の論理ページをライト先論理ページとする（３４０２）。次にデバイスコントローラ６０は、新規に空きページを取得し、取得された物理ページをライト先物理ページとして割り当てる（３４０３）。次にデバイスコントローラ６０は、ライトコマンドにより受領したライトデータをライト先物理ページへ書き込む（３４０４）。
【０１３９】
次にデバイスコントローラ６０は、ページマッピング管理テーブル１１００においてライト先論理ページにライト先物理ページを関連付け、物理ページ番号としてライト先物理ページの番号を登録する（３４０５）。次にデバイスコントローラ６０は、コマンド完了を示す応答をシステムコントローラ２０へ送り（３４０６）、この処理のフローを終了する。
【０１４０】
３４０３において、デバイスコントローラ６０は、未使用の物理ページを確保する、物理ブロックを消去してその物理ブロック内の物理ページを確保する、等の処理を行うことにより、空きの物理ページを取得しても良い。このとき、デバイスコントローラ６０は、物理ブロックの消去のために、ページマッピング管理テーブル１１００における他の論理ページと旧物理ページの関連付けを解除しても良い。
【０１４１】
次に、旧データ保持ライトコマンドを受けた場合のデバイスコントローラ６０の処理の具体例である、旧データ保持ライトコマンド処理について説明する。
【０１４２】
この旧データ保持ライト処理は例えば、前述の第１リードモディファイライト処理に用いられる。
【０１４３】
図３５は、旧データ保持ライト処理の一例を示す。まずデバイスコントローラ６０は、旧データ保持ライトコマンドを受領する（３５０１）。次にデバイスコントローラ６０は、このライトコマンドにより指定された論理アドレスから論理ページ番号を求め、この論理ページ番号の論理ページをライト先論理ページとする（３５０２）。次にデバイスコントローラ６０は、ページマッピング管理テーブル１１００を参照することにより、ライト先論理ページに物理ページが割り当てられているか否かを判定する（３５０３）。
【０１４４】
ライト先論理ページに物理ページが割り当てられている場合（３５０３，Ｙｅｓ）、デバイスコントローラ６０は、ページマッピング管理テーブル１１００においてライト先論理ページに関連付けられている物理ページ番号を旧物理ページ番号として登録する（３５０４）。
【０１４５】
ライト先論理ページに物理ページが割り当てられていない場合（３５０３、Ｎｏ）又は３５０４の後、デバイスコントローラ６０は、新規に空きページを取得し、取得された物理ページをライト先物理ページとして割り当てる（３５０５）。次にデバイスコントローラ６０は、ライトコマンドにより受領したライトデータをライト先物理ページへ書き込む（３５０６）。
【０１４６】
次にデバイスコントローラ６０は、ページマッピング管理テーブル１１００においてライト先論理ページにライト先物理ページを関連付け、物理ページ番号としてライト先物理ページの番号を登録する（３５０７）。次にデバイスコントローラ６０は、コマンド完了を示す応答をシステムコントローラ２０へ送り（３５０８）、この処理のフローを終了する。
【０１４７】
この処理によれば、データＦＭＰＫは、データの更新時に更新前のデータを保持することができる。更に、データＦＭＰＫのデバイスコントローラ６０は、更新された論理ページと、旧データを格納する旧物理ページと、新データを格納する物理ページとを関連付けることができる。これにより、データＦＭＰＫは、データ更新時、更新前のデータと更新後のデータの両方を不揮発メモリに保持することができる。また、データＦＭＰＫのデバイスコントローラ６０は、揮発メモリを用いることなく、更新前のデータと更新後のデータの両方を読み出すことができる。更に、システムコントローラ２０は、データＦＭＰＫのデバイスコントローラ６０に更新前のデータと更新後のデータの両方を保持させることができる。
【０１４８】
次に、中間パリティリードコマンドを受けた場合のデバイスコントローラ６０の処理の具体例である、中間パリティリード処理について説明する。
【０１４９】
この中間パリティリード処理は、指定されたアドレスの旧データと新データのパリティ演算を行うことにより、中間パリティを生成して返す。この中間パリティリード処理は例えば、前述の第１リードモディファイライト処理に用いられる。
【０１５０】
図３６は、中間パリティリード処理の一例を示す。まずデバイスコントローラ６０は、中間パリティリードコマンドを受領する（３６０１）。次にデバイスコントローラ６０は、この中間パリティリードコマンドにより指定された論理アドレスから論理ページ番号を求め、この論理ページ番号の論理ページをリード先論理ページとする（３６０２）。次にデバイスコントローラ６０は、ページマッピング管理テーブル１１００を参照することにより、リード先論理ページに対応する旧物理ページが登録されているか否かを判定する（３６０３）。
【０１５１】
リード先論理ページに対応する旧物理ページが登録されている場合（３６０３，Ｙｅｓ）、デバイスコントローラ６０は、リード先論理ページに対応する旧物理ページのデータと現在の物理ページのデータとを読み出し、読み出されたデータから中間パリティを計算する（３６０４）。次にデバイスコントローラ６０は、中間パリティをシステムコントローラ２０へ転送し（３６０６）、この処理のフローを終了する。
【０１５２】
３６０３において、リード先論理ページに対応する旧物理ページが登録されていない場合（３６０３，Ｎｏ）、デバイスコントローラ６０は、リード先論理ページの旧データがないことを示すコマンド結果をシステムコントローラ２０へ報告し（３６０５）、この処理のフローを終了する。
【０１５３】
３６０５においてリード先論理ページの旧データがないことを示す結果を受けたシステムコントローラ２０は例えば、新データと同一ストライプライン内の全てのデータを読み出し、読み出されたデータから新パリティを計算し、パリティに対応するデバイスコントローラ６０へ新パリティを書き込むためのライトコマンドを発行しても良い。或いはこの場合、システムコントローラ２０は例えば、新データと同一ストライプライン内の全てのデータを読み出し、パリティに対応するデバイスコントローラ６０へ、読み出されたデータから新パリティを計算するためのパリティ生成ライトコマンドを発行しても良い。
【０１５４】
この処理によれば、データＦＭＰＫのデバイスコントローラ６０は、システムコントローラ２０から中間パリティの演算の指示を受けた場合、更新前のデータと更新後のデータとを読み出し、読み出されたデータから中間パリティを生成することができる。更に、システムコントローラ２０は、データＦＭＰＫのデバイスコントローラ６０に中間パリティを生成させ、デバイスコントローラ６０から中間パリティを取得することができる。
【０１５５】
仮に、データＦＭＰＫのデバイスコントローラ６０がシステムコントローラ２０の動作と非同期で中間パリティを生成したとする。この場合、中間パリティの演算がデバイスコントローラ６０のバッファ６６をに負担をかけることにより、このデバイスコントローラ６０の性能が低下する。また、中間パリティ演算に必要なデータがバッファ６６に格納されている状態で電源断が発生した場合、このデータが消失し、データ復旧が不可能になる可能性がある。一方、この実施例によれば、データＦＭＰＫのデバイスコントローラ６０が中間パリティリードコマンドを受けたタイミングで中間パリティを生成することにより、ストレージシステム３０の性能低下を防ぐことができる。また、中間パリティ演算に必要なデータの消失を防ぎ、ストレージシステム３０の信頼性を向上させることができる。
【０１５６】
次に、パリティ更新ライトコマンドを受けた場合のデバイスコントローラ６０の処理の具体例である、パリティ更新ライト処理について説明する。
【０１５７】
このパリティ更新ライト処理は、転送された中間パリティと指定された旧パリティとのパリティ演算を行うことにより、新パリティを生成して、この新パリティをＦＭ５５へ書き込む。このパリティ更新ライトコマンドは例えば、前述の第１リードモディファイライト処理に用いられる。
【０１５８】
図３７は、パリティ更新ライト処理の一例を示す。まずデバイスコントローラ６０は、パリティ更新ライトコマンドを受領する（３７０１）。次にデバイスコントローラ６０は、このライトコマンドにより指定された論理アドレスから論理ページ番号を求め、この論理ページ番号の論理ページをリード先論理ページとする（３７０２）。次にデバイスコントローラ６０は、ページマッピング管理テーブル１１００を参照することにより、リード先論理ページに対応する物理ページ番号を求め、この物理ページ番号に示された物理ページからデータを読み出す（３７０３）。読み出されたデータは例えば、旧パリティである。次にデバイスコントローラ６０は、新規に空きページを取得し、取得された物理ページを結果格納先物理ページとして割り当てる（３７０４）。次にデバイスコントローラ６０は、読み出されたデータと受領したデータとを用いてパリティ演算を行い、演算結果を結果格納先物理ページへ書き込む（３７０５）。
【０１５９】
次にデバイスコントローラ６０は、ページマッピング管理テーブル１１００においてライト先論理ページに結果格納先物理ページを関連付け、物理ページ番号として結果格納先物理ページの番号を登録する（３７０６）。次にデバイスコントローラ６０は、コマンド完了を示す応答をシステムコントローラ２０へ送り（３７０７）、この処理のフローを終了する。
【０１６０】
この処理によれば、パリティＦＭＰＫのデバイスコントローラ６０は、システムコントローラ２０からの更新後のデータと、パリティＦＭＰＫに格納されている更新前のパリティとから更新後のパリティを算出し、更新後のパリティをＦＭ５５へ送信することができる。更に、システムコントローラ２０は、パリティＦＭＰＫのデバイスコントローラ６０に更新後のパリティを生成させ保存させることができる。
【０１６１】
次に、パリティ生成ライトコマンドを受けた場合のデバイスコントローラ６０の処理の具体例である、パリティ生成ライト処理について説明する。
【０１６２】
このパリティ生成ライト処理は、複数ストライプブロック分の転送されたデータを用いてパリティを生成し、このパリティを指定アドレスへ書き込むコマンドである。このパリティ生成ライト処理は例えば、前述の第１フルストライプライト処理及びデータ復旧処理に用いられる。
【０１６３】
図３８は、パリティ生成ライトコマンドによるデバイスコントローラ６０の処理の一例を示す。まずデバイスコントローラ６０は、パリティ生成ライトコマンドを受領する（３８０１）。次にデバイスコントローラ６０は、このライトコマンドにより指定された論理アドレスから論理ページ番号を求め、この論理ページ番号の論理ページをライト先論理ページとする（３８０２）。次にデバイスコントローラ６０は、新規に空きページを取得し、取得された物理ページをライト先物理ページとして割り当てる（３８０３）。次にデバイスコントローラ６０は、ライトコマンドにより受領したライトデータをライト先物理ページへ書き込む（３８０４）。
【０１６４】
次にデバイスコントローラ６０は、ページマッピング管理テーブル１１００においてライト先論理ページにライト先物理ページを関連付け、物理ページ番号としてライト先物理ページの番号を登録する（３８０５）。次にデバイスコントローラ６０は、コマンド完了を示す応答をシステムコントローラ２０へ送り（３８０６）、この処理のフローを終了する。
【０１６５】
この処理によれば、パリティＦＭＰＫのデバイスコントローラ６０は、システムコントローラ２０からの更新後のデータから更新後のパリティを算出し、更新後のパリティをパリティＦＭＰＫへ書き込むことができる。更に、システムコントローラ２０は、パリティＦＭＰＫのデバイスコントローラ６０に更新後のパリティを生成させ保存させることがでる。
【０１６６】
図３９は、デバイスコントローラ６０による、旧データ破棄処理の一例を示す。まず、デバイスコントローラ６０は、システムコントローラ２０から旧データ破棄コマンドを受領する（３９０１）。次に、デバイスコントローラ６０は、この旧データ破棄コマンドで指定された論理アドレスから論理ページ番号を求め、この論理ページ番号に対応する旧物理ページ番号をページマッピング管理テーブル１１００から削除する（３９０２）。デバイスコントローラ６０は、旧データ破棄コマンドを受領するまで、旧データを無効にしない。つまり、デバイスコントローラ６０は、新データをライトした後であっても、パリティが更新される（旧データ破棄コマンドを受領する）まで旧データを確実に保持することができる。このように、パリティが更新されるまで旧データを維持することにより、パリティ更新前に障害が起きた場合であっても、データ復旧が可能となる。また、パリティ更新後は旧データを無効にして消去対象とすることで、旧データによる記憶領域の使用量を削減することができる。
【実施例２】
【０１６７】
この実施例では、システムコントローラ２０がＲＡＩＤ６の制御を行う場合について説明する。
【０１６８】
この実施例における計算機システムの構成は、実施例１の計算機システムの構成と同様である。そこで、実施例１との違いについて以下に説明する。
【０１６９】
システムコントローラ２０は、ＲＡＩＤ６の制御を行う。そこで、まずＲＡＩＤ５とＲＡＩＤ６の違いについて説明する。
【０１７０】
前述のＲＡＩＤ５をＲＡＩＤ６へ拡張するために、パリティ演算回路２５又はパリティ演算回路６５は、更に係数付きパリティ演算を行う。ここで、５個のＦＭＰＫ５０が、データＤ０，Ｄ１，Ｄ２、パリティＰ，Ｑを夫々格納しているとする。Ｑの生成のための係数としてＡ０，Ａ１，Ａ２が使用される場合、Ｐ，Ｑは次式により生成される。
【０１７１】
Ｐ  ＝  Ｄ０＋Ｄ１＋Ｄ２
Ｑ  ＝  Ａ０・Ｄ０＋Ａ１・Ｄ１＋Ａ２・Ｄ２
【０１７２】
図４０は、Ｑパリティの生成方法の一例を示す。パリティ演算実施装置は、Ａ０，Ａ１，Ａ２を予めメモリに格納している。Ｑは、Ｄ０，Ｄ１，Ｄ２，Ａ０，Ａ１，Ａ２から計算される。図中に黒の菱形で示された演算器は、それに付された係数を乗算する。
【０１７３】
また、Ｐ生成式及びＱ生成式を連立方程式として解くことにより、データロスト時に任意のデータ又はパリティを復旧することができる。例えばＤ０，Ｐを復旧する場合、次式によりこれらを生成することができる。
【０１７４】
Ｄ０  ＝  Ａ１／Ａ０・Ｄ１＋Ａ２／Ａ０・Ｄ２＋１／Ａ０・Ｑ
Ｐ  ＝  Ｄ０＋Ｄ１＋Ｄ２
【０１７５】
また、例えばＤ０，Ｄ１を復旧する場合、次式によりこれらを生成することができる。
【０１７６】
Ｄ０  ＝  （Ａ１＋Ａ２）／（Ａ０＋Ａ１）・Ｄ２＋Ａ１／（Ａ０＋Ａ１）・Ｐ
＋１／（Ａ０＋Ａ１）・Ｑ
Ｄ１  ＝  （Ａ０＋Ａ２）／（Ａ０＋Ａ１）・Ｄ２＋Ａ０／（Ａ０＋Ａ１）・Ｐ
＋１／（Ａ０＋Ａ１）・Ｑ
【０１７７】
図４１は、Ｄ０，Ｄ１の復旧方法の一例を示す。上に示すように、Ｄ０，Ｄ１はそれぞれ、Ｄ２、Ｐ、Ｑの線形式αＤ２＋βＰ＋γＱと表現することが出来る。
ここで係数α、β、γはＡ０、Ａ１、Ａ２に基づく値である。
パリティ演算実施装置は、Ａ０，Ａ１、Ａ２に基づくα、β、γを予めメモリに格納していても良い。Ｄ０は、Ｄ２，Ｐ，Ｑ，及びＡ０，Ａ１、Ａ２に基づく値である α、β、γから計算される。
本例はあくまでも概念を示すための一例であり、実際には、処理が高速化されるよう、またメモリ使用量が削減されるような設計がなされる。
【０１７８】
次に、パリティ演算実施装置としてデバイスコントローラ６０が選択され、ライト方法としてリードモディファイライトが選択された場合のデータ更新処理１４０４の具体例である、第４リードモディファイライト処理について説明する。
【０１７９】
図４２は、第４リードモディファイライト処理の一例を示す。図４２は、第４リードモディファイライト処理におけるシステムコントローラ２０の動作の一例を示す。この例において、ＦＭＰＫ＃０，＃１，＃２，＃３，＃４は、Ｄ０，Ｄ１，Ｄ２，Ｐ，Ｑを夫々格納している。ここでシステムコントローラ２０が、ライトの命令により、Ｄ０の旧データを更新するための新データを受けた状態を初期状態とする。以下の説明において、ＦＭＰＫ＃０，＃１，＃２，＃３，＃４のうち、更新されるデータであるＤ０を格納しているＦＭＰＫ＃０をデータＦＭＰＫと呼ぶことがある。また、ＦＭＰＫ＃０，＃１，＃２，＃３，＃４のうち、Ｐを格納しているＦＭＰＫ＃３をＰパリティＦＭＰＫと呼ぶことがある。また、ＦＭＰＫ＃０，＃１，＃２，＃３，＃４のうち、Ｑを格納しているＦＭＰＫ＃４をＱパリティＦＭＰＫと呼ぶことがある。
【０１８０】
まずシステムコントローラ２０は、旧データ保持ライトコマンドをＤ０に対応するＦＭＰＫ＃０（データＦＭＰＫ）へ発行することにより、新データをＦＭＰＫ＃０へ書き込む（４１０１）。このコマンドを受けたＦＭＰＫ＃０のデバイスコントローラ６０は、システムコントローラ２０からの新データをＦＭＰＫ＃０内の旧データの物理ページと異なる物理ページへ書き込む。
【０１８１】
次にシステムコントローラ２０は、中間パリティリードコマンドをＦＭＰＫ＃０へ発行することにより、ＦＭＰＫ＃０から中間パリティを取得する（４１０２）。このコマンドを受けたＦＭＰＫ＃０のデバイスコントローラ６０は、ＦＭＰＫ＃０内に格納された旧データと新データから中間パリティを計算し、中間パリティを応答としてシステムコントローラ２０へ送る。
【０１８２】
次にシステムコントローラ２０は、ＲＡＩＤ５の場合と同様のパリティ更新ライトコマンドを、Ｐに対応するＦＭＰＫ＃３（ＰパリティＦＭＰＫ）へ発行することにより、中間パリティをＦＭＰＫ＃３へ送信する（４１０３）。このコマンドを受けたＦＭＰＫ＃３のデバイスコントローラ６０は、ＦＭＰＫ＃３内の旧パリティとシステムコントローラ２０からの中間パリティから新パリティを計算し、新パリティをＦＭＰＫ＃３へ書き込む。
【０１８３】
ｉが０，１，２の何れか一つであって、当該ＲＧ内のデータＤｉをＤｉ＿ｎｅｗへ更新する場合の新パリティＰ＿ｎｅｗの計算について説明する。ＲＡＩＤ５と同様、パリティ更新ライトコマンドを受けたデバイスコントローラ６０は、中間パリティ（Ｄｉ＋Ｄｉ＿ｎｅｗ）と旧パリティＰとから、Ｐ＿ｎｅｗを次式により計算する。
【０１８４】
Ｐ＿ｎｅｗ  ＝  Ｐ＋（Ｄｉ＋Ｄｉ＿ｎｅｗ）
【０１８５】
データＦＭＰＫのデバイスコントローラ６０は、中間パリティリードコマンドに応じて（Ｄｉ＋Ｄｉ＿ｎｅｗ）を計算する。ＰパリティＦＭＰＫのデバイスコントローラ６０は、パリティ更新ライトコマンドに応じてＰ＋（Ｄｉ＋Ｄｉ＿ｎｅｗ）を計算する。
【０１８６】
次にシステムコントローラ２０は、Ｑを更新するためのパリティ更新コマンドであるＱパリティ更新ライトコマンドをＱに対応するＦＭＰＫ＃４へ発行することにより、中間パリティをＦＭＰＫ＃４（ＱパリティＦＭＰＫ）へ転送し（４１０４）、この処理のフローを終了する。このコマンドを受けたＦＭＰＫ＃４のデバイスコントローラ６０は、ＦＭＰＫ＃４内の旧パリティとシステムコントローラ２０からの中間パリティと係数から新パリティを計算し、新パリティをＦＭＰＫ＃３へ書き込む。
【０１８７】
この処理によれば、一つのストライプブロックのデータの更新におけるシステムコントローラ２０とデバイスコントローラ６０の間のデータ転送は次のようになる。
【０１８８】
（１）更新後のデータがシステムコントローラ２０からデータＦＭＰＫのデバイスコントローラ６０へ転送される。
（２）中間パリティがデータＦＭＰＫのデバイスコントローラ６０からシステムコントローラ２０へ転送される。
（３）中間パリティがシステムコントローラ２０からＰパリティＦＭＰＫのデバイスコントローラ６０とＱパリティＦＭＰＫのデバイスコントローラ６０とへ転送される。
【０１８９】
これにより、システムコントローラ２０とデバイスコントローラ６０の間のデータ転送を抑えることができる。
【０１９０】
Ｑパリティ更新ライトコマンドを受けたデバイスコントローラ６０の処理は、パリティ更新ライトコマンドの場合と比較して、予めデバイスコントローラ６０に設定された係数Ａｉを用いる点が異なる。当該ＲＧ内のデータＤｉをＤｉ＿ｎｅｗへ更新する場合、Ｑパリティ更新ライトコマンドを受けたデバイスコントローラ６０は、中間パリティ（Ｄｉ＋Ｄｉ＿ｎｅｗ）と旧パリティＱとＡｉとから、新パリティＱ＿ｎｅｗを次式により計算する。
【０１９１】
Ｑ＿ｎｅｗ  ＝  Ｑ＋Ａｉ・（Ｄｉ＋Ｄｉ＿ｎｅｗ）
【０１９２】
データＦＭＰＫのデバイスコントローラ６０は、中間パリティリードコマンドに応じて（Ｄｉ＋Ｄｉ＿ｎｅｗ）を計算する。ＱパリティＦＭＰＫのデバイスコントローラ６０は、Ｑパリティ更新ライトコマンドに応じてＱ＋Ａｉ・（Ｄｉ＋Ｄｉ＿ｎｅｗ）を計算する。
【０１９３】
パリティ更新ライトコマンドによれば、ＰパリティＦＭＰＫのデバイスコントローラ６０は、システムコントローラ２０からの更新後のデータと、ＰパリティＦＭＰＫに格納されている更新前のＰパリティとから更新後のＰパリティを算出し、更新後のＰパリティをＰパリティＦＭＰＫへ書き込むことができる。更に、システムコントローラ２０は、ＰパリティＦＭＰＫのデバイスコントローラ６０に更新後のＰパリティを生成させ保存させることができる。
【０１９４】
Ｑパリティ更新ライトコマンドによれば、ＱパリティＦＭＰＫのデバイスコントローラ６０は、システムコントローラ２０からの更新後のデータと、ＱパリティＦＭＰＫに格納されている更新前のＱパリティと、所定の係数から更新後のＱパリティを算出し、更新後のＱパリティをＱパリティＦＭＰＫへ書き込むことができる。更に、システムコントローラ２０は、ＱパリティＦＭＰＫのデバイスコントローラ６０に更新後のＱパリティを生成させ保存させることができる。
【実施例３】
【０１９５】
この実施例では、システムコントローラ２０がパリティ演算機能を有していない場合のストレージシステム３０の適用例である、計算機システムについて説明する。
【０１９６】
図４４は、実施例３に係る計算機システムの構成の一例を示す。この実施例の計算機システムにおいて、ストレージシステム３０の要素と同一の符号が付された要素は、ストレージシステム３０の要素と同一物又は相当物を示す。この実施例の計算機システムは、ホスト計算機４１ａと、ホスト計算機４１ｂと、ホスト計算機４１ｂに接続された複数のＦＭＰＫ５０とを有する。ホスト計算機４１ａとホスト計算機４１ｂとは、例えば、ＬＡＮ（Local  Area  Network）２を介して接続される。
【０１９７】
ホスト計算機４１ａは、ホストコントローラ４２ａと、ホストコントローラ４２ａに接続されている複数のＦＭＰＫ５０とを有する。ホストコントローラ４２ａは、ＬＡＮ２等の通信ネットワークに接続するためのＮＩＣ（Network  Interface  Card）１３と、メモリ１２と、ＣＰＵ１１と、バッファ２６とを有する。
【０１９８】
ホスト計算機４１ｂは、ＬＡＮ２等の通信ネットワークに接続するためのＮＩＣ１３と、ＦＭＰＫ５０に接続するためのＨＢＡ（Host  Bus  Adapter）１５と、メモリ１２と、ＣＰＵ１１と、バッファ２６とを有する。
【０１９９】
ホストコントローラ４２ａ及びホスト計算機４１ｂにおいて、メモリ１２には、ＦＭＰＫ５０を制御するためのプログラム及び各種情報が記憶される。ＣＰＵ１１は、メモリ１２に記憶された情報に基づき、プログラムを実行することにより各種機能を実現させる。ホストコントローラ４２ａとホスト計算機４１ｂの夫々は、自身に接続されている複数のＦＭＰＫ５０を用いるＲＡＩＤの制御を行っても良い。
【０２００】
ホストコントローラ４２ａ及びホスト計算機４１ｂの一方は、ＬＡＮ２を介して他方へＩＯ要求を行っても良いし、自身のＦＭＰＫ５０へＩＯ要求を行っても良い。
【０２０１】
この実施例において、システムコントローラ２０は、ホストコントローラ４２ａとホスト計算機４１ｂの何れの形態であっても良い。
【０２０２】
ホストコントローラ４２ａ及びホスト計算機４１ｂの夫々は、パリティ演算実施装置の決定方法１３００におけるケース＃３又はケース＃４に該当する。
【実施例４】
【０２０３】
次に、システムコントローラ２０がパリティ演算機能を有している場合のストレージシステム３０の適用例である、第３計算機システムについて説明する。
【０２０４】
図４５は、実施例４に係る計算機システムの構成の一例を示す。この実施例の計算機システムにおいて、実施例３の計算機システムの要素と同一の符号が付された要素は、実施例３の計算機システムの要素と同一物又は相当物を示す。この実施例の計算機システムは、ホスト計算機４１ｃと、ホスト計算機４１ｄと、ホスト計算機４１ｄに接続された複数のＦＭＰＫ５０とを有する。ホスト計算機４１ｃとホスト計算機４１ｄとは、通信ネットワーク、例えば、ＬＡＮ２を介して接続される。
【０２０５】
ホスト計算機４１ｃは、ホストコントローラ４２ｃと、ホストコントローラ４２ｃに接続されている複数のＦＭＰＫ５０とを有する。ホストコントローラ４２ｃは、ホストコントローラ４２ａの要素に加えて、パリティ演算回路２５を有する。
【０２０６】
ホスト計算機４１ｄは、ホスト計算機４１ｂの要素に加えて、パリティ演算回路２５を有する。
【０２０７】
ホストコントローラ４２ｃ及びホスト計算機４１ｄにおいて、メモリ１２には、ＦＭＰＫ５０を制御するためのプログラム及び各種情報が記憶される。ＣＰＵ１１は、メモリ１２に記憶された情報に基づき、プログラムを実行することにより各種機能を実現させる。ホストコントローラ４２ｃとホスト計算機４１ｄの夫々は、自身に接続されている複数のＦＭＰＫ５０を用いるＲＡＩＤの制御を行っても良い。
【０２０８】
ホストコントローラ４２ｃ及びホスト計算機４１ｄの一方は、ＬＡＮ２を介して他方へＩＯ要求を行っても良いし、自身のＦＭＰＫ５０のデバイスコントローラ６０へＩＯ要求を行っても良い。
【０２０９】
ホストコントローラ４２ａ及びホスト計算機４１ｂの夫々は、パリティ演算実施装置の決定方法１３００におけるケース＃１又はケース＃２に該当する。
【０２１０】
この実施例において、システムコントローラ２０は、ホストコントローラ４２ｃとホスト計算機４１ｄの何れの形態であっても良い。
【０２１１】
なお、計算機システムは、前述の実施例の何れかの要素の組み合わせであっても良い。また、一つの計算機システム内に、パリティ演算機能を有しているシステムコントローラ２０とパリティ演算機能を有していないシステムコントローラ２０とが混在していても良い。
【０２１２】
以上に述べられた各実施例によれば、システムコントローラ２０とデバイスコントローラ６０の間のデータ転送を抑えることができる。これにより、ストレージシステム３０の速度を向上させることができる。データ転送は例えば、データの転送回数や転送量等で表される。
【０２１３】
また、以上に述べられた各実施例によれば、システムコントローラ２０とデバイスコントローラ６０の間のデータ転送を抑えると共に、デバイスコントローラ６０における揮発メモリの使用量を削減することができる。
【０２１４】
また、システムコントローラ２０の動作における各工程の順序は、交換されることがある。例えば、１４０２と１４０３は交換可能である。また、デバイスコントローラ６０の動作における各工程の順序は、交換されることがある。例えば、３７０３と３７０４は交換可能である。
【符号の説明】
【０２１５】
１０：ホスト計算機、２０：システムコントローラ、２５：パリティ演算回路、２６：バッファ、３０：ストレージシステム、４１ａ，４１ｂ，４１ｃ，４１ｄ：ホスト計算機４２ａ，４２ｃ：ホストコントローラ、５０：ＦＭＰＫ（フラッシュメモリパッケージ）、５５：ＦＭ（フラッシュメモリ）、６０：デバイスコントローラ、６５：パリティ演算回路、６６：バッファ
【図１】
0005937697.tif 000002
【図２】
0005937697.tif 000003
【図３】
0005937697.tif 000004
【図４】
0005937697.tif 000005
【図５】
0005937697.tif 000006
【図６】
0005937697.tif 000007
【図７】
0005937697.tif 000008
【図８】
0005937697.tif 000009
【図９】
0005937697.tif 000010
【図１０】
0005937697.tif 000011
【図１１】
0005937697.tif 000012
【図１２】
0005937697.tif 000013
【図１３】
0005937697.tif 000014
【図１４】
0005937697.tif 000015
【図１５】
0005937697.tif 000016
【図１６】
0005937697.tif 000017
【図１７】
0005937697.tif 000018
【図１８】
0005937697.tif 000019
【図１９】
0005937697.tif 000020
【図２０】
0005937697.tif 000021
【図２１】
0005937697.tif 000022
【図２２】
0005937697.tif 000023
【図２３】
0005937697.tif 000024
【図２４】
0005937697.tif 000025
【図２５】
0005937697.tif 000026
【図２６】
0005937697.tif 000027
【図２７】
0005937697.tif 000028
【図２８】
0005937697.tif 000029
【図２９】
0005937697.tif 000030
【図３０】
0005937697.tif 000031
【図３１】
0005937697.tif 000032
【図３２】
0005937697.tif 000033
【図３３】
0005937697.tif 000034
【図３４】
0005937697.tif 000035
【図３５】
0005937697.tif 000036
【図３６】
0005937697.tif 000037
【図３７】
0005937697.tif 000038
【図３８】
0005937697.tif 000039
【図３９】
0005937697.tif 000040
【図４０】
0005937697.tif 000041
【図４１】
0005937697.tif 000042
【図４２】
0005937697.tif 000043
【図４３】
0005937697.tif 000044
【図４４】
0005937697.tif 000045
【図４５】
0005937697.tif 000046