(57)【特許請求の範囲】
【請求項１】
ホストコンピュータに接続されたストレージシステムであって、プロセッサ、複数のドライブ、及び前記複数のドライブにより提供され、前記ホストコンピュータからのI/O要求のターゲットとなる論理ボリュームとを有し、
前記複数のドライブは、それぞれが前記論理ボリュームに対する書き込みデータが分割された所定数のストライプデータとそのストライプデータに基づき生成される複数の冗長データとで構成された複数のストライプ列を有し、
前記プロセッサは、
前記ホストコンピュータからI/O要求を受信した場合、
前記各ストライプ列が属する領域に対するアクセス頻度の高低を判別し、アクセス頻度の低い領域に属するストライプ列の中の冗長データを非同期化対象外の第１の冗長データとし、アクセス頻度の高い領域に属するストライプ列の中の冗長データのうち少なくとも一部を非同期化対象の第２の冗長データとし、前記I/O要求で指定されたストライプ列のストライプデータと当該ストライプ列の中の第１の冗長データとを更新し、
前記I/O要求で指定されたストライプ列のストライプデータの更新とは異なるタイミングで、前記I/O要求で指定されたストライプ列の中の第２の冗長データを更新し、
前記いずれかのドライブの障害時には、前記ホストコンピュータからのI/O要求に同期して、前記アクセス頻度の低い領域に属するストライプ列よりも、前記アクセス頻度の高いストライプ列であって、前記第２の冗長データを含むストライプ列に対するデータの復元処理を優先して実行することを特徴とするストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記複数のストライプ列の各々に対応したフラグ情報を格納するメモリを更に有し、
前記プロセッサは、前記第２の冗長データを更新するまで、前記ストライプ列に対応するフラグをオンにすることを特徴とするストレージシステム。
【請求項３】
請求項２に記載のストレージシステムであって、
前記プロセッサは、前記フラグがオンになっているストライプに含まれる前記第２の冗長データを更新し、その更新が完了したら前記フラグをオフにすることを特徴とするストレージシステム。
【請求項４】
請求項３に記載のストレージシステムであって、
スペアドライブを更に有し、
前記複数のドライブのいずれかが故障した場合、前記プロセッサは、前記フラグがオンになっている全てのストライプに含まれる前記第２の冗長データを更新し、その更新が完了したら、故障した前記ドライブに格納されていたデータを前記スペアドライブに復元することを特徴とするストレージシステム。
【請求項５】
ホストコンピュータに接続されたストレージシステムであって、プロセッサ、複数のドライブ、及び前記複数のドライブにより提供され、前記ホストコンピュータからのI/O要求のターゲットとなる論理ボリュームとを有し、
前記複数のドライブは、それぞれが前記論理ボリュームに対する書き込みデータが分割された所定数のストライプデータとそのストライプデータに基づき生成される複数の冗長データとで構成された複数のストライプ列を有し、
前記プロセッサは、
前記ホストコンピュータからI/O要求を受信した場合、
前記各ストライプ列が属する領域に対するアクセス頻度の高低を判別し、アクセス頻度の低い領域に属するストライプ列の中の冗長データを非同期化対象外の第１の冗長データとし、アクセス頻度の高い領域に属するストライプ列の中の冗長データのうち少なくとも一部を非同期化対象の第２の冗長データとし、前記I/O要求で指定されたストライプ列のストライプデータと当該ストライプ列の中の第１の冗長データとを更新し、
前記I/O要求で指定されたストライプ列のストライプデータの更新と非同期で、前記I/O要求で指定されたストライプ列の中の第２の冗長データを更新し、
前記いずれかのドライブの障害時には、前記ホストコンピュータからのI/O要求に同期して、前記アクセス頻度の低い領域に属するストライプ列よりも、前記アクセス頻度の高いストライプ列であって、前記第２の冗長データを含むストライプ列に対するデータの復元処理を優先して実行することを特徴とするストレージシステム。
【請求項６】
請求項５に記載のストレージシステムであって、
前記複数のストライプ列の各々に対応したフラグ情報を格納するメモリを更に有し、
前記プロセッサは、前記モードが設定されていて前記第２の冗長データの更新が前記ストライプデータの更新と非同期で行われる場合、前記第２の冗長データを更新するまで、前記第２の冗長データが属する前記ストライプ列に対応するフラグをオンにすることを特徴とするストレージシステム。
【請求項７】
請求項６に記載のストレージシステムであって、
前記プロセッサは、前記フラグがオンになっているストライプに含まれる前記第２の冗長データを更新し、その更新が完了したら前記フラグをオフにすることを特徴とするストレージシステム。
【請求項８】
請求項７に記載のストレージシステムであって、
スペアドライブを更に有し、
前記複数のドライブのいずれかが故障した場合、前記プロセッサは、前記フラグがオンになっている全てのストライプに含まれる前記第２の冗長データを更新し、その更新が完了したら、故障した前記ドライブに格納されていたデータを前記スペアドライブに復元することを特徴とするストレージシステム。
【請求項９】
ホストコンピュータに接続されたストレージシステムであって、プロセッサ、複数のドライブ、及び前記複数のドライブにより提供され、前記ホストコンピュータからのI/O要求のターゲットとなる論理ボリュームとを有し、
前記複数のドライブは、それぞれが前記論理ボリュームに対する書き込みデータが分割された所定数のストライプデータとそのストライプデータに基づき生成される複数の冗長データとで構成された複数のストライプ列を有し、
前記プロセッサは、
前記ホストコンピュータからI/O要求を受信した場合、
前記各ストライプ列が属する領域に対するアクセス頻度の高低を判別し、アクセス頻度の低い領域に属するストライプ列の中の冗長データを非同期化対象外の第１の冗長データとし、アクセス頻度の高い領域に属するストライプ列の中の冗長データのうち少なくとも一部を非同期化対象の第２の冗長データとし、前記I/O要求で指定されたストライプ列のストライプデータと当該ストライプ列の中の第１の冗長データとを更新し、
前記I/O要求で指定されたストライプ列のストライプデータの更新と同期又は非同期で、前記I/O要求で指定されたストライプ列の中の第２の冗長データを更新し、
前記いずれかのドライブの障害時には、前記ホストコンピュータからのI/O要求に同期して、前記アクセス頻度の低い領域に属するストライプ列よりも、前記アクセス頻度の高いストライプ列であって、前記第２の冗長データを含むストライプ列に対するデータの復元処理を優先して実行することを特徴とするストレージシステム。
【請求項１０】
請求項９に記載のストレージシステムであって、
前記論理ボリュームの更新された領域に対するアクセス頻度が所定値よりも低い場合、更新された前記ブロックデータと同じストライプに属する前記第２の冗長データの更新を前記ブロックデータの更新と同期して行い、
前記論理ボリュームの更新された領域に対するアクセス頻度が所定値よりも高い場合、更新された前記ブロックデータと同じストライプに属する前記第２の冗長データの更新を前記ストライプデータの更新と非同期で行うことを特徴とするストレージシステム。
【請求項１１】
請求項９に記載のストレージシステムであって、
更新された前記ストライプデータを含む前記ストライプ列にはアクセス可能だが、前記論理ボリュームを提供する複数のドライブのいずれかに障害が発生している場合には、前記アクセス頻度に関わらず、更新された前記ストライプデータと同じストライプ列に属する前記第２の冗長データの更新を前記ストライプデータの更新と同期して行うことを特徴とするストレージシステム。
【請求項１２】
請求項９に記載のストレージシステムであって、
前記ホストコンピュータからのI/O要求がシーケンシャルアクセスの場合には、前記アクセス頻度に関わらず、更新された前記ストライプデータと同じストライプ列に属する前記第２の冗長データの更新を前記ストライプデータの更新と同期して行うことを特徴とするストレージシステム。
【請求項１３】
請求項９に記載のストレージシステムであって、
前記複数のストライプ列の各々に対応したフラグ情報を格納するメモリを更に有し、
前記プロセッサは、前記第２の冗長データを更新するまで、前記ストライプ列に対応するフラグをオンにすることを特徴とするストレージシステム。
【請求項１４】
請求項１３に記載のストレージシステムであって、
前記プロセッサは、前記フラグがオンになっているストライプに含まれる前記第２の冗長データ更新し、その更新が完了したら前記フラグをオフにし、前記論理ボリュームに対して、前記フラグがオンになっているストライプ列の容量の上限を設定でき、
スペアドライブを更に有し、
前記複数のドライブのいずれかが故障した場合、前記プロセッサは、前記フラグがオンになっている全てのストライプ列に含まれる前記第２の冗長データを更新し、その更新が完了したら、故障した前記ドライブに格納されていたデータを前記スペアドライブに復元することを特徴とするストレージシステム。
【請求項１５】
請求項１に記載のストレージシステムであって、
前記プロセッサは、アクセス頻度の高い領域に属するストライプ列の容量が許容非同期化容量内であるか否かを判定し、当該判定で肯定の判定結果を得た場合、前記アクセス頻度の高い領域に属するストライプ列の中の冗長データを前記非同期化対象の第２の冗長データとし、前記判定で否定の判定結果を得た場合、前記アクセス頻度の高い領域に属するストライプ列の中の冗長データを前記非同期化対象外の第１の冗長データすることを特徴とするストレージシステム。
【請求項１６】
請求項１又は１５に記載のストレージシステムであって、
スペアドライブを更に有し、
前記複数のドライブのいずれかからドライブ故障の兆候を検出した場合、前記プロセッサは、前記ドライブ故障の兆候が検出されたドライブに設定されたストライブ列のストライプデータのうち前記第２の冗長データと同じストライプ列のストライプデータを他のストライプデータに優先して前記スペアドライブに復元することを特徴とするストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のドライブを冗長化されたデータの記憶領域として管理するストレージシステムに関する。
【背景技術】
【０００２】
複数のHDDやSSDなどで記憶領域が構成されるディスクアレイシステムが、メインフレームやオープン系サーバのサブシステムとして利用されている。このようなシステムでは、ドライブに障害が発生してもデータロストしないように、RAID環境の構築をサポートする。
【０００３】
例えば4台のドライブでRAID5を構築する場合、3つのストライプデータD1からパリティP1を生成し、これらを4台のドライブに分散して格納する。そして、次の3つのストライプデータD2からパリティP2を生成し、これらを4台のドライブに分散して格納するが、パリティが一つのドライブに集中しないようにP2はP1と異なるドライブに格納される。この例であれば1台のドライブに障害が発生してもデータを回復できる。しかし、2台以上のドライブに障害（二重障害）が発生した場合には対応できない。一方、RAID6は2つのパリティを生成する。この場合は二重障害に対応できる。
【０００４】
また、RAID5では、データ更新時にパリティを生成するためにドライブから更新前のデータとパリティを取得する。このアクセスに伴うディスク回転待ちを回避するため、特許文献１には、RAID5のパリティをディスクI/Oとは非同期で生成する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】US5720025号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述のとおり、RAID環境の構築をサポートするストレージシステムでは、ユーザデータに冗長データを付加して障害耐性を確保している。ここで、冗長データとはパリティデータを、RAID1ではミラーデータを意味する。ユーザデータに対し冗長データのオーバーヘッドが小さいこと、RAID3やRAID4のようにパリティ専用ドライブのボトルネックがないことからRAID5をサポートするストレージシステムが多い。
【０００７】
しかし、RAID5では二重障害に対応できない。近年ドライブが大容量化しているが、これに伴い、ドライブに障害が発生した場合、その障害回復に要する時間も増加する。障害回復時間が増加すると二重障害発生のリスクも増える。障害耐性を高めるにはRAID6でストレージシステムを構築することが考えられる。
【０００８】
しかし、RAID6では、更新前のデータと2つのパリティをドライブから読込んで新たな2つのパリティを生成し、更新後のデータと生成した2つのパリティとをドライブに書き込むため、更新データをドライブに反映するのに6回ドライブにアクセスする必要がある。（以下、このドライブアクセス時間の長大化をライトペナルティと呼ぶ。）
【０００９】
そこで、本発明では、冗長化されたディスク構成をサポートするストレージシステムにおいて、障害耐性を確保する一方で、データ更新に伴い発生する冗長データの更新をドライブに反映する際に、ドライブアクセス時間が長くなり、I/Oのスループットが低下するのを防止する。
【課題を解決するための手段】
【００１０】
前記目的を達成するために、本発明の一実施例では、ストレージシステムにおいて、論理ボリュームのストライプデータの更新に対応して、ディスクドライブの対応するデータストライプのストライプデータと第1の冗長データとを更新する。そして、そのストライプデータの更新とは異なるタイミングで、更新されたストライプデータと同じストライプ列に属する所定数のストライプデータに基づき、第２の冗長データを更新する。
【００１１】
また、別の一実施例では、ストレージシステムにおいて、第２の冗長データの更新をストライプデータの更新と非同期で行うことが可能なモードを論理ボリュームに対して設定できるようにする。
【００１２】
更に、別の一実施例では、ストレージシステムにおいて、論理ボリュームの更新された領域に対するアクセス頻度に応じて、更新されたストライプデータと同じストライプ列に属する第２の冗長データの更新をストライプデータの更新と同期又は非同期で行うかを選択する。
【００１３】
本発明の他の特徴は後述の実施例で説明される。ただし、本発明の範囲を実施例に限定する意図ではない。
【発明の効果】
【００１４】
本発明によれば、冗長化されたディスク構成をサポートするストレージシステムにおいて、障害耐性を確保する一方で、データ更新に伴い発生する冗長データの更新をドライブに反映する際に、ドライブアクセス時間が長くなり（ドライブ稼働率が上昇）、I/Oのスループットが低下するのを防止することができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の第一実施例に係る計算機システムの構成図である。
【図２】本発明の第一実施例に係る計算機システムの論理構成図である。
【図３】本発明の第一実施例に係る計算機システムの記憶領域の構成図である。
【図４】本発明の第一実施例に係る計算機システムの共有メモリの構成図である。
【図５】本発明の第一実施例に係る計算機システムのローカルメモリの構成図である。
【図６】本発明の第一実施例に係る計算機システムの論理物理アドレス変換テーブルの構成図である。
【図７】本発明の第一実施例に係る計算機システムの非同期中ビットマップの構成図である。
【図８】本発明の第一実施例に係る計算機システムの非同期中領域数カウンタテーブルの構成図である。
【図９】本発明の第一実施例に係る計算機システムのリビルド済みビットマップの構成図である。
【図１０】本発明の第一実施例に係る計算機システムのアクセス頻度テーブルの構成図である。
【図１１】本発明の第一実施例に係る計算機システムの設定テーブルの構成図である。
【図１２】本発明の第一実施例に係る計算機システムのI/O処理プログラムの処理を説明するためのフローチャートである。
【図１３】デステージ処理プログラムの処理を説明するためのフローチャートである。
【図１４】リビルド処理プログラムの処理を説明するためのフローチャートである。
【図１５】リビルド処理プログラムの処理を説明するためのフローチャートである。
【図１６】ドライブコピー処理プログラムの処理を説明するためのフローチャートである。
【図１７】ホストI/O処理プログラムのサブプログラムである、通常リード処理を説明するためのフローチャートである。
【図１８】ホストI/O処理プログラムのサブプログラムである、コレクションリード処理を説明するためのフローチャートである。
【図１９】ホストI/O処理プログラムのサブプログラムである、通常ライト処理を説明するためのフローチャートである。
【図２０】ホストI/O処理プログラムのサブプログラムである、コレクションライト処理を説明するためのフローチャートである。
【図２１】ホストI/O処理プログラムのサブプログラムである、高速ライト処理を説明するためのフローチャートである。
【図２２】ホストI/O処理プログラムのサブプログラムである、非同期冗長データ生成判定処理を説明するためのフローチャートである。
【図２３】ホストI/O処理プログラムのサブプログラムである、非同期冗長データ生成判定処理を説明するためのフローチャートである。
【図２４】ドライブコピー処理プログラムのサブプログラムである、通常コピー処理を説明するためのフローチャートである。
【図２５】ホストI/O処理プログラムのサブプログラムである、コレクションコピー処理を説明するためのフローチャートである。
【図２６】リビルド処理プログラムのサブプログラムである、非同期冗長データコレクション処理を説明するためのフローチャートである。
【図２７】論理ボリューム毎のパラメタの設定のためのGUIを表わす画面構成図である。
【図２８】本発明の効果を説明するための説明図である。
【図２９】リビルド処理実行制御プログラムの処理を説明するためのフローチャートである。
【図３０】本発明の第二実施例に係る計算機システムの論理構成図である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施例を図面に基づいて説明する。尚、以下に説明する実施例は、特許請求の範囲に係る発明を限定するものではなく、また、実施例の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１７】
（第１実施例）
本実施例は、ドライブの正常時には、ホストI/Oに同期してパリティ生成を実施することなく、ホストI/Oとは非同期でパリティ生成を実施し、ドライブの障害時には、ホストI/Oに同期してパリティ生成を実施すると共に、障害ドライブのデータを復元するものである。
【００１８】
図１は、本発明の第１実施例に係る計算機システムの構成図である。
【００１９】
図１において、計算機システムは、ホスト１０１と、管理サーバ１０２と、ネットワーク１０３と、ストレージシステム１０４から構成される。ストレージシステム１０４は、ポート１０６と、保守Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１０７と、複数のプロセッサパッケージ１０９Ａ、１０９Ｂと、キャッシュメモリ１１０と、共有メモリ１１１と、複数のドライブ１１３から構成される。
【００２０】
ホスト１０１は、CPU（Central  Processing  Unit）、メモリ、入出力インタフェース等の情報処理資源を備えたコンピュータ装置であり、例えば、サーバ、パーソナルコンピュータ、ワークステーション、メインフレーム等として構成され、ネットワーク１０３を介して、ストレージシステム１０４のポート１０６に接続される。ホスト１０１は、ストレージシステム１０４に対して、データのリード命令やライト命令を発行し、ストレージシステム１０４は、ホスト１０１から発行されたリード命令又はライト命令に応じてデータの読み込み又は書き込みを実行する。
【００２１】
即ち、ホスト１０１は、ストレージシステム１０４から提供される論理ボリュームを指定したアクセス命令（アクセス要求）、例えば、リード命令又はライト命令をストレージシステム１０４に発行することで、その論理ボリュームにアクセスすることができる。
【００２２】
ネットワーク１０３は、例えば、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）や、イーサネット（登録商標）などから構成される。
【００２３】
管理サーバ１０２は、ＣＰＵ、メモリ、入出力インタフェース等の情報処理資源を備えたコンピュータ装置で構成され、ネットワーク１０３を介して、ストレージシステム１０４の保守Ｉ／Ｆ１０７またはポート１０６に接続される。管理サーバ１０２は、ストレージ管理者の操作を基に、ストレージシステム１０４を運用する上で必要な各種設定情報や管理のための命令をストレージシステム１０４に送信する。
【００２４】
次に、ストレージシステム１０４の内部構成について説明する。
【００２５】
ストレージシステム１０４は、ポート１０６と、保守Ｉ／Ｆ１０７と、複数のプロセッサパッケージ１０９Ａ、１０９Ｂと、キャッシュメモリ１１０と、共有メモリ１１１と、複数のドライブ１１３から構成され、これらが、内部ネットワーク１１２を介して相互に接続され、ポート１０６と、保守Ｉ／Ｆ１０７がネットワーク１０３に接続される。各プロセッサパッケージ１０９Ａ、１０９Ｂには、ローカルメモリ１１８と、プロセッサ１１９が収納される。
【００２６】
プロセッサ１１９は、ストレージシステム１０４全体を統括制御するプロセッサであって、ホスト１０１からのリード命令やライト命令を処理するために、ドライブ１１３とキャッシュメモリ１１０間のデータの転送処理などを実行する。  
【００２７】
ローカルメモリ１１８は、プロセッサ１１９がリード命令やライト命令を処理するための情報や、ストレージシステム１０４の機能を実行する上で、必要な制御用の情報を格納するメモリであって、プロセッサ１１９が占有して使用できる領域である。ローカルメモリ１１８には、例えば、プロセッサ１１９が実行する各種プログラム等が格納される。
【００２８】
キャッシュメモリ１１０は、ストレージシステム１０４のＩ／Ｏ処理のスループットやレスポンスを向上させるために、データを一時的なキャッシュデータとして格納するためのメモリであって、高速アクセスが可能なメモリである。
【００２９】
共有メモリ１１１は、プロセッサ１１９がリード命令やライト命令を処理するための情報や、ストレージシステム１０４の機能（例えば、ボリュームのコピー機能など）を実行する上で、必要な制御用の情報を格納するメモリである。この共有メモリ１１１には、複数のプロセッサパッケージ１０９Ａ、Ｂのプロセッサ１１９間で共有している情報も格納される。図では、共有メモリ１１１はキャッシュメモリ１１０とは別のメモリとして記載されているが、キャッシュメモリ１１０の一部の領域を共有メモリ１１１として使用してもよい。
【００３０】
各ドライブ１１３は、例えば、ＦＣ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）などのインタフェースを有する記憶デバイスであって、ハードディスクドライブ（ＨＤＤ）や、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などから構成される。
【００３１】
記憶デバイスとしては、例えば、ハードディスクデバイス、半導体メモリデバイス、光ディスクデバイス、光磁気ディスクデバイス、磁気テープデバイス、フレキシブルディスクデバイス等が挙げられ、これらの記憶デバイスは、データを読み書き可能なデバイスである。
【００３２】
また、各ドライブ１１３でRAID（Redundant  Array  of  Inexpensive  Disks）グループ、例えば、RAID４、RAID５、RAID６等を構成したり、各ドライブ１１３を複数のRAIDグループに分割したりすることもできる。この際、各ドライブ１１３の物理的記憶領域上に複数の論理ボリュームを形成することもできる。
【００３３】
論理ボリュームは、ホスト１０１に、ホスト１０１のアクセス対象として提供される論理ユニットであって、通常ボリュームと仮想ボリュームとに分けられる。
【００３４】
通常ボリュームは、ドライブ１１３上に形成された論理的記憶領域から構成される。それに対して、仮想ボリュームは、Thin Provisioning機能により提供され、ページと呼ばれる記憶領域の単位から構成される。仮想ボリューム作成当初のデータが書き込まれる前の段階では、ページには物理的記憶領域から形成される論理的記憶領域は、対応付けられていない。そして、ページに新規のデータの書込みが行われると、当該書込みが行われたページに、ドライブ１１３上に形成された論理的記憶領域の一部の記憶領域が割り当てられ、この割当てられた記憶領域にデータが格納される。
【００３５】
通常ボリュームと仮想ボリュームには、識別子として、LUN（Logical  Unit  Number）が割り当てられ、各セグメントには、論理ブロックアドレスLBA（Logical  Block  Address）が割り当てられる。この際、ホスト１０１は、識別子LUNと論理ブロックアドレスLBAからなる論理アドレスをストレージシステム１０４に送信することにより、通常ボリュームまたは仮想ボリュームに対応した記憶領域に記憶されたデータにアクセスすることができる。
【００３６】
図２は、本発明の第一実施例に係る計算機システムの論理構成図である。
【００３７】
図２において、論理ボリューム２００は、ホスト１０１からアクセスされる論理的な記憶デバイスを表わす。ホスト１０１は、論理ボリューム２００に対してリードコマンドやライトコマンドを発行することにより、指定の記憶領域に、データの読み書きを実施する。この際、論理ボリューム２００の実体となる記憶領域は、例えば、複数のドライブ１１３の中から選択された複数のドライブ１１３Aで構成される。データは、複数のドライブ１１３Ａに形成されるストライプ列２０４のストライプデータ２２３の集合として、各ドライブ１１３Ａに格納される。
【００３８】
複数のドライブ１１３AでRAID６を構成した場合、複数のデータ部D1、D2、・・・と、PパリティP1、P2、・・・と、QパリティQ1、Q2、・・・によって、複数のストライプ列２０４が構成される。例えば、６個のデータ部Ｄ１と、ＰパリティＰ１と、ＱパリティＱ１によって、一つのストライプ列２０４が構成され、６個のデータ部Ｄ２と、ＰパリティＰ２と、ＱパリティＱ２によって、一つのストライプ列２０４が構成される。一つのストライプ列２０４を構成する複数のデータのうち、一つのデータ、例えば、データ部D１が、一つのストライプデータ２２３として管理される。
【００３９】
スペアドライブ１１３Bは、ドライブ１１３Aの故障時に、データの復元先として使用されるドライブである。
【００４０】
なお、ストライプ列２０４の構成は、複数のドライブ１１３AでRAID６を構成した場合に限定されるものではない。例えば、８台のドライブ１１３Aでストライプ列２０４を構成する必要はなく、ストレージシステム１０４に実装される全てのドライブ１１３を使って、ストライプ列２０４を構成してもよいし、一部のドライブ１１３を使って、ストライプ列２０４を構成してもよい。スペアドライブ１１３Bにストライプ列２０４を構成する場合も同様である。
【００４１】
図３は、本発明の第一実施例に係る計算機システムの記憶領域の構成図である。
【００４２】
図３において、各ドライブ１１３に格納されるストライプデータ２２３は、複数のスロット３０１から構成される。各スロット３０１は、複数のサブブロック３０３から構成される。各サブブロック３０３のデータサイズは、一般的には、５１２バイトである。サブブロック３０３は、ドライブへのアクセスの最小単位である。各スロット３０１は、複数のサブブロック３０３を束ねた領域で構成され、キャッシュメモリ１１０の管理単位である。つまり、キャッシュメモリ１１０にドライブ１１３からデータを転送する場合、スロット３０１の大きさの単位でキャッシュメモリ１１０に、データ格納領域（以下、キャッシュ格納領域と称することもある。）が確保され、確保されたデータ格納領域にデータが転送される。
【００４３】
図４は、本発明の第一実施例に係る計算機システムの共有メモリの構成図である。
【００４４】
図４において、共有メモリ１１１には、論理物理アドレス変換テーブル４０１と、非同期中ビットマップ（bitmap）４０２と、非同期中領域数カウンタテーブル４０３と、リビルド済みビットマップ４０４と、アクセス頻度テーブル４０５と、設定テーブル４０６が格納される。
【００４５】
なお、非同期中ビットマップ（bitmap）４０２と、リビルド済みビットマップ４０４は、テーブルとして管理される。また、後述するキャッシュメモリ管理テーブルを共有メモリ１１１に格納することもできる。これらのテーブルは、共有メモリ１１１に配置してもよいし、各テーブルの一部又は全体をキャッシュメモリ１１０、ローカルメモリ１１８又はドライブ１１３に配置してもよい。
【００４６】
図５は、本発明の第一実施例に係る計算機システムのローカルメモリの構成図である。
【００４７】
図５において、ローカルメモリ１１８には、ホストI/O処理プログラム５０１と、デステージ処理プログラム５０２と、リビルド処理プログラム５０３と、ドライブコピー処理プログラム５０４が格納される。これらのプログラムは、プロセッサ１１９により実行される。これらのプログラムは、共有メモリ１１１に配置してもよいし、各プログラムの一部又は全体をキャッシュメモリ１１０、ローカルメモリ１１８又はドライブ１１３に配置してもよい。
【００４８】
図６は、本発明の第一実施例に係る計算機システムの論理物理アドレス変換テーブルの構成図である。
【００４９】
図６において、論理物理アドレス変換テーブル４０１は、複数の論理ボリュームと、各論理ボリュームを構成するドライブ１１３との関係を管理するためのテーブルであって、共有メモリ１１１に格納される。
【００５０】
論理物理アドレス変換テーブル４０１は、論理ボリューム番号フィールド６０１と、種別フィールド６０２と、物理ドライブ番号フィールド６０３と、物理開始アドレスフィールド６０４と、ドライブ状態フィールド６０５から構成される。
【００５１】
論理ボリューム番号は、各論理ボリュームを一意に識別するための識別子である。論理ボリューム番号フィールド６０１の各エントリには、各論理ボリュームを一意に識別するための識別子が格納される。例えば、２つの論理ボリュームを識別するための識別子として、第１のエントリには、「２０１」が格納され、第２のエントリには、「２０２」が格納される。
【００５２】
種別は、各論理ボリュームのRAIDレベルを示す情報である。種別フィールド６０２の各エントリには、各論理ボリュームのRAIDレベルとして、例えば、「RAID6」が格納される。
【００５３】
物理ドライブ番号は、各論理ボリュームを構成するドライブ１１３を一意に識別するための識別子である。物理ドライブ番号フィールド６０３の各エントリには、各論理ボリュームを構成するドライブ１１３を一意に識別するための識別子が格納される。例えば、論理ボリューム２００（論理ボリューム番号２０１の論理ボリューム）が８台のドライブ１１３で構成され、各ドライブ１１３の物理ドライブ番号が、「１００１」〜「１００８」である場合、物理ドライブ番号フィールド６０３の第１のエントリには、論理ボリューム２００を構成するドライブ１１３の識別子として、「１００１」〜「１００８」が格納される。
【００５４】
物理開始アドレスは、各論理ボリュームを構成するドライブ１１３のアドレスの開始位置を示す情報である。物理開始アドレスフィールド６０４の各エントリには、各ドライブ１１３のアドレスの開始位置を示すアドレスとして、例えば、「０ｘ００００」が格納される。
【００５５】
ドライブ状態は、各ドライブ１１３の状態を示す情報である。ドライブ状態フィールド６０５の各エントリには、各ドライブ１１３の状態を示す情報として、例えば、ドライブ１１３が正常状態にある場合には、「正常」が格納され、ドライブ１１３が故障である場合には、「故障中」が格納される。
【００５６】
例えば、プロセッサ１１９は、I/O処理の実施中に、ドライブ１１３とキャッシュメモリ１１０間でデータを転送し、データ転送にエラーが生じた場合あるいは、データ転送に時間を要し、タイムアウトとなった場合に、データ転送の対象となったドライブ１１３を故障と判断し、故障と判断したドライブ１１３に対応するドライブ状態フィールド６０５のエントリに、「故障中」を格納する。
【００５７】
また、プロセッサ１１９は、定期的にドライブ１１３の記憶領域をVerifyコマンド等により診断する場合、診断結果から、診断対象となったドライブ１１３を故障と判断し、故障と判断したドライブ１１３に対応するドライブ状態フィールド６０５のエントリに、「故障中」を格納する。
【００５８】
図７は、本発明の第一実施例に係る計算機システムの非同期中ビットマップの構成図である。
【００５９】
図７において、計算機システムの非同期中ビットマップ４０２は、論理ボリューム２００ごとに保持されるテーブルであって、論理ボリューム２００のストライプ列２０４に属するストライプデータ２２３のうち冗長データの作成の有無を管理するためのテーブルである。
【００６０】
１個のビット７０１は、更新ビットとして管理され、論理ボリューム２００内の１個のストライプ列２０４に対応する。論理ボリューム２００内に、例えば、２５個のストライプ列２０４が構成される場合、この論理ボリューム２００に対応する非同期中ビットマップ４０２は、２５個のビット７０１で構成される。
【００６１】
この非同期中ビットマップ４０２において、ビット７０１がON＝「１」の場合、このビット７０１に対応するストライプ列２０４の冗長データ、例えば、Ｑパリティは、Ｉ／Ｏ処理とは、非同期でプロセッサ１１９によって作成される（以下、プロセッサ１１９が、Ｉ／Ｏ処理とは非同期で実行する処理を、非同期的な処理と称することがある。）。この場合、冗長データは、古い状態であることを表わす。
【００６２】
一方、ビット７０１がOFF＝「０」の場合、このビット７０１に対応するストライプ列２０４の冗長データは、Ｉ／Ｏ処理と同期してプロセッサ１１９によって作成される（以下、プロセッサ１１９が、Ｉ／Ｏ処理と同期して実行する処理を、同期的な処理と称することがある。）。この場合、冗長データは、最新状態であることを表わす。
【００６３】
図８は、本発明の第一実施例に係る計算機システムの非同期中領域数カウンタテーブルの構成図である。
【００６４】
非同期中領域数カウンタテーブル４０３は、各論理ボリューム２００に対応する非同期中ビットマップ４０２のビット７０１がONになっている個数（更新ビットの個数）を管理するためのテーブルである。この非同期中領域数カウンタテーブル４０３は、論理ボリューム番号フィールド８０１と、非同期中領域数カウンタフィールド８０２から構成される。
【００６５】
論理ボリューム番号は、各論理ボリューム２００を一意に識別するための識別子である。論理ボリューム番号フィールド８０１の各エントリには、各論理ボリューム２００を一意に識別するための識別子として、例えば、「２０１」、「２０２」、「２０３」が格納される。
【００６６】
非同期中領域数カウンタは、各論理ボリューム２００に対応する非同期中ビットマップ４０２のビット７０１が、ONになっている個数を示す情報である。非同期中領域数カウンタフィールド８０２の各エントリには、各論理ボリューム２００に対応する非同期中ビットマップ４０２のビット７０１がONになっている個数が格納される。例えば、論理ボリューム番号２０１の論理ボリューム２００に対応する非同期中ビットマップ４０２のビット７０１がONになっている個数が、「１００」である場合、論理ボリューム番号２０１に対応する、非同期中領域数カウンタフィールド８０２のエントリには、「１００」が格納される。
【００６７】
図９は、本発明の第一実施例に係る計算機システムのリビルド済みビットマップの構成図である。
【００６８】
図９において、リビルド済みビットマップ４０４は、論理ボリューム２００ごとに保持されるテーブルであって、論理ボリューム２００のストライプ列２０４に割り当てられるドライブ１１３のうち、故障したドライブ１１３に格納されたストライプデータ２２３が、リビルド済み（修復済み）であるか否かを管理するためのテーブルである。
【００６９】
リビルド済みビットマップ４０４は、複数のビット９０１から構成され、１個のビット９０１は、論理ボリューム２００内の１個のストライプ列２０４に対応する。論理ボリューム２００内に、例えば、２５個のストライプ列が構成される場合、この論理ボリューム２００に対応するリビルド済みビットマップ４０４は、２５個のビット９０１で構成される。
【００７０】
リビルド済みビットマップ４０４において、ビット９０１がON＝「１」の場合、ストライプ列２０４内の故障したドライブ１１３に対応するストライプデータ２２３は、リビルド済みであって、データ修復済みとなっていることを表わす。
【００７１】
一方、ビット９０１がOFF＝「０」の場合、ストライプ列２０４内の故障したドライブ１１３に対応するストライプデータ２２３は、リビルドが未実施であって、データ未修復となっていることを表わす。
【００７２】
リビルド済みビットマップ４０４は、故障中のドライブ１１３を含む、全ての論理ボリューム２００について保持される。この際、あらかじめ全ての論理ボリューム２００について、リビルド済みビットマップ４０４を保持する構成としてもよいし、共有メモリ１１１の容量削減のため、論理ボリューム２００内のドライブ１１３が故障した際に、動的に、故障したドライブ１１３に対応する論理ボリューム２００にリビルド済みビットマップ４０４を割り当ててもよい。また、リビルド済みビットマップ４０４は、ドライブの故障発生後、一連のリビルド処理を開始する際に、初期値OFF＝「０」で初期化される。
【００７３】
図１０は、本発明の第一実施例に係る計算機システムのアクセス頻度テーブルの構成図である。
【００７４】
図１０において、アクセス頻度テーブル４０５は、各論理ボリューム２００に対するアクセス頻度を管理するためのテーブルであって、論理ボリューム番号フィールド１００１と、領域アドレスフィールド１００２と、アクセス頻度カウンタフィールド１００３から構成される。
【００７５】
論理ボリューム番号は、各論理ボリューム２００を一意に識別するための識別子である。論理ボリューム番号フィールド１００１の各エントリには、各論理ボリューム２００を一意に識別するための識別子として、例えば、「２０１」、「２０２」が格納される。
【００７６】
領域アドレスは、各論理ボリューム２００内の小領域のアドレスを示す情報である。領域アドレスフィールド１００２の各エントリには、各論理ボリューム２００内の小領域のアドレスが格納される。例えば、論理ボリューム番号２０１の論理ボリューム２００内に複数の小領域が存在する場合、各小領域に対応するアドレスとして、「０ｘ００００００００」、「０ｘ００００００１０」、「０ｘ００００００２０」、・・・が格納される。
【００７７】
なお、小領域のアドレスは、例えば、論理ボリューム２００内の１個のストライプ列２０４に対応するアドレスとしてもよいし、それよりも細かい粒度（例えば、ストライプデータ２０３単位や、スロット３０１単位、サブブロック３０３単位）でもよいし、大きな粒度（複数のストライプ列２０４や、１個または複数の仮想ボリュームのページ単位）でもよい。
【００７８】
アクセス頻度カウンタは、各論理ボリューム２００内の小領域に対するアクセス頻度を示す情報である。アクセス頻度カウンタフィールド１００３の各エントリには、各論理ボリューム２００内の小領域に対するアクセス頻度が格納される。例えば、論理ボリューム番号２０１の論理ボリューム２００内の小領域に対するアクセス頻度であって、ホスト１０１からのI/Oによるアクセス頻度が、「１０」である場合、論理ボリューム番号２０１の論理ボリューム２００内の小領域に対応する、アクセス頻度カウンタフィールド１００３のエントリには、「１０」が格納される。
【００７９】
なお、アクセス頻度カウンタは、プロセッサ１１９からドライブ１１３へのI/O数としてもよいし、ホスト１０１からのI/Oによるアクアクセス回数（キャッシュメモリ１１０へのヒットによりドライブ１１３へのアクセスが発生しない場合のアクセス回数を含む）としてもよい。
【００８０】
図１１は、本発明の第一実施例に係る計算機システムの設定テーブルの構成図である。
【００８１】
図１１において、設定テーブル４０６は、論理ボリューム２００毎に保持されるテーブルであって、各論理ボリューム２００に設定される設定項目と設定内容を管理するためのテーブルである。この設定テーブル４０６は、論理ボリューム番号フィールド１１０１と、設定項目フィールド１１０２と、設定内容フィールド１１０３から構成される。
【００８２】
論理ボリューム番号は、各論理ボリューム２００を一意に識別するための識別子である。論理ボリューム番号フィールド１１０１の各エントリには、各論理ボリューム２００を一意に識別するための識別子として、例えば、「２０１」、「２０２」が格納される。
【００８３】
設定項目は、各論理ボリューム２００に設定される設定項目を示す情報である。設定項目フィールド１１０２の各エントリには、各論理ボリューム２００に設定される設定項目を示す情報、例えば、「リビルド動作モード」、「非同期冗長データ生成モード」、「許容非同期化量」が格納される。
【００８４】
「リビルド動作モード」は、リビルドの動作（データの冗長度を回復するための動作）の速度を設定するための項目である。「非同期冗長データ生成モード」は、論理ボリューム２００で本発明の効果を得るために、冗長データの生成を実施しないようにするかどうかを選択する項目である。「許容非同期化容量」は、非同期の処理の対象となるストライプ列２０４の容量として許容される容量を設定する項目である。
【００８５】
設定内容は、設定項目の内容を特定する情報である。設定内容フィールド１１０３の各エントリには、設定項目の内容を特定する情報が格納される。例えば、「リビルド動作モード」に対応する設定内容フィールド１１０３のエントリには、「High Speed」又は「Normal」が格納される。設定内容フィールド１１０３のエントリに「High Speed」が格納されて場合、ホストI/Oよりもリビルド処理を優先した動作が実行され、リビルド時間が短縮されることを意味する。なお、優先する方法については、後説する。
【００８６】
設定内容フィールド１１０３のエントリに「Normal」が格納された場合、ホストI/Oを優先し、リビルド処理の影響を少なくする動作が実行されることを意味する。
【００８７】
また、「非同期冗長データ生成モード」に対応する設定内容フィールド１１０３のエントリには、冗長データの生成を実施しない場合には、「ON」が格納され、冗長データの生成を実施する場合には、「OFF」が格納される。
【００８８】
また、「許容非同期化容量」に対応する設定内容フィールド１１０３のエントリには、非同期的な処理の対象となるストライプ列２０４の容量として許容される容量であって、非同期時に処理されるストライプ列２０４の最大個数、例えば、「１０００」が格納される。
【００８９】
図１２は、本発明の第一実施例に係る計算機システムのI/O処理プログラムの処理を説明するためのフローチャートである。
【００９０】
ホスト１０１から、ストレージシステム１０４内のプロセッサ１１９が、Ｉ／Ｏ処理要求を受けると、プロセッサ１１９は、ストレージシステム１０４内のホストＩ／Ｏ処理プログラム５０１を起動する。
【００９１】
ホストＩ／Ｏ処理プログラム５０１は、論理ボリューム２００へのデータのリード要求か、論理ボリューム２００へのデータのライト要求かを判定する（Ｓ１２０１）。
【００９２】
Ｉ／Ｏ処理要求がライトの場合、ホストＩ／Ｏ処理プログラム５０１は、キャッシュメモリ１１０に、Ｉ／Ｏ処理要求に対応する論理ボリューム上のアドレスに対応した領域（以下、キャッシュメモリ領域と称することがある。）が確保されているか否かを確認し、キャッシュメモリ領域が確保されている場合、もしくは確保されていなければ、キャッシュメモリ１１０にキャッシュメモリ領域を確保した後、ホスト１０１にライトデータの転送が可能であることを応答する。
【００９３】
その後、ホストＩ／Ｏ処理プログラム５０１は、ホスト１０１から転送されてくるライトデータを、確保されているキャッシュメモリ領域に書き込み、キャッシュメモリ管理テーブル（図示せず）に、ライトデータを書き込んだキャッシュメモリ領域は、まだ、ドライブ１１３にライトデータを書き込んでいない領域であるとして、ダーティフラグを立てる（Ｓ１２０７）。
【００９４】
ここで、ダーティフラグは、キャッシュメモリ１１０にのみデータがあり、ドライブ１１３にデータがない状態を示す情報であって、キャッシュメモリ１１０の領域を管理するキャッシュメモリ管理テーブルに保持される。あとで説明するデステージ処理プログラム５０２は、このダーティフラグが立っているか否かを参照し、ダーティフラグが立っている場合には、キャッシュメモリ１１０上にあるデータをドライブ１１３に書き込むためのデステージ処理を実行する。
【００９５】
キャッシュメモリ管理テーブルに、ダーティフラグが立っている領域のデータが、ドライブ１１３に書き込まれた後は、ダーティフラグはキャッシュメモリ管理テーブルから削除される。なお、リード処理時に、ドライブ１１３から読み込んだデータがキャッシュメモリ１１０に格納された場合には、キャッシュメモリ管理テーブルには、クリーンフラグが立てられる。
【００９６】
上記のように、キャッシュメモリ管理テーブルは、キャッシュメモリ１１０のアドレスに対応する論理ボリューム２００のアドレスと、キャッシュメモリ１１０に存在するデータの状態を少なくとも保持して管理することができる。また、キャッシュメモリ１１０のアドレスに対応する論理ボリューム２００のアドレスは、論理ボリューム２００のデータを格納するために、キャッシュメモリ１１０にキャッシュメモリ領域が確保された場合にのみ、有効な値であるとして、キャッシュメモリ管理テーブルに保持される。
【００９７】
さて、ホストＩ／Ｏ処理プログラム５０１は、ステップＳ１２０７の処理を実行した後、ホスト１０１にライトＩ／Ｏ処理が完了したことを応答する（Ｓ１２０８）。然る後、ホストＩ／Ｏ処理プログラム５０１は、このルーチンでの処理を終了する。
【００９８】
一方、ステップＳ１２０１で、Ｉ／Ｏ処理要求がリード要求であると判定した場合、ホストＩ／Ｏ処理プログラム５０１は、リード要求で要求された論理ボリューム２００に、故障中のドライブ１１３が有るかを確認する（Ｓ１２０２）。
【００９９】
具体的には、ホストＩ／Ｏ処理プログラム５０１は、論理物理アドレス変換テーブル４０１のドライブ状態フィールド６０５を参照し、論理ボリューム２００に対応するドライブ１１３の中に、「故障中」のドライブ１１３があるかを確認する。
【０１００】
ステップＳ１２０２で肯定の判定結果を得た場合、即ち、リード要求で要求された論理ボリューム２００に故障中のドライブ１１３が有る場合、ホストＩ／Ｏ処理プログラム５０１は、アクセス範囲に故障中のドライブ１１３があるかどうかをチェックする（Ｓ１２０３）。
【０１０１】
具体的には、アクセス範囲は、ホスト１０１からのリード要求に含まれるLBA(Logical Block Addressing)で決定されるので、ホストＩ／Ｏ処理プログラム５０１は、リード要求に含まれるLBAから、アクセス先のストライプ列２０４を求め、求めたストライプ列２０４の中に、故障中のドライブ１１３のストライプデータ２２３が含まれるかどうかを、論理物理アドレス変換テーブル４０１のドライブ状態フィールド６０５をチェックして判断する。
【０１０２】
ステップＳ１２０３で肯定の判定結果を得た場合、即ち、アクセス範囲に故障中のドライブ１１３がある場合、ホストＩ／Ｏ処理プログラム５０１は、コレクションリード処理を実行する（Ｓ１２０５）。コレクションリード処理はデータを復元しながら、復元されたデータをリードする処理であるが、詳細については後述する。
【０１０３】
ステップＳ１２０３で否定の判定結果を得た場合、即ち、アクセス範囲に故障中のドライブ１１３がない場合、あるいは、ステップＳ１２０２で否定の判定結果を得た場合、即ち、リード要求で要求された論理ボリューム２００に故障中のドライブ１１３が存在しない場合、ホストＩ／Ｏ処理プログラム５０１は、通常リード処理を実行する（Ｓ１２０４）。
【０１０４】
通常リード処理は、読みたいデータがキャッシュメモリ１１０にない場合（キャッシュミスした場合）、ドライブ１１３から、キャッシュメモリ１１０にデータを転送する処理であるが、詳細については後述する。
【０１０５】
通常リードド処理又はコレクションリード処理が終了した場合、ホストＩ／Ｏ処理プログラム５０１は、キャッシュメモリ１１０上のデータをホスト１０１に転送する（Ｓ１２０６）。
【０１０６】
ホストＩ／Ｏ処理プログラム５０１は、ホスト１０１が要求したデータを全てホスト１０１に転送した後、リード処理完了応答をホスト１０１に転送し、このルーチンでの処理を終了する。
【０１０７】
図１３は、デステージ処理プログラムの処理を説明するためのフローチャートである。
【０１０８】
ホストＩ／Ｏ処理プログラム５０１は、ホスト１０１からのデータのライト要求（書き込み要求）に応じて、ホスト１０１からのライトデータをキャッシュメモリ１１０に書き込んだ後、キャッシュメモリ管理テーブルにダーティフラグを立てる。このため、プロセッサ１１９は、キャッシュメモリ１１０上に存在するライトデータをドライブ１１３に定期的に書き込むために、デステージ処理プログラム５０２を定期的に起動する。
【０１０９】
デステージ処理プログラム５０２は、キャッシュメモリ管理テーブルを参照し、キャッシュメモリ１１０のキャッシュ領域に、未反映データ（ダーティフラグが立っているデータであって、ドライブ１１３への書き込みがなされていないデータ）が存在するか否かを定期的に判定する（Ｓ１３０１）。
【０１１０】
ステップＳ１３０１で肯定の判定結果を得た場合、即ち、キャッシュメモリ１１０上に、未反映データが存在する場合、デステージ処理プログラム５０２は、キャッシュ管理テーブルに登録された論理ボリューム番号の論理アドレスを基に、論理ボリューム２００に故障中のドライブ１１３が有るかどうかを判定する（Ｓ１３０２）。この際、デステージ処理プログラム５０２は、図１２のステップＳ１２０２と同様の処理を実行する。
【０１１１】
ステップＳ１３０２で肯定の判定結果を得た場合、即ち、論理ボリューム２００に故障中のドライブ１１３が有る場合、デステージ処理プログラム５０２は、アクセス範囲に故障中のドライブ１１３が有るかどうかを判定する（Ｓ１３０３）。
【０１１２】
この際、デステージ処理プログラム５０２は、図１２のステップＳ１２０３と同様の処理を実行する。
【０１１３】
ステップＳで肯定の判定結果を得た場合、即ち、アクセス範囲に故障中のドライブ１１３がある場合は、デステージ処理プログラム５０２は、コレクションライト処理を実施する（Ｓ１３０５）。コレクションライト処理は、故障中のドライブ１１３を含む領域に対するライト処理であるが、詳細は後説する。
【０１１４】
コレクションライト処理を実施後、デステージ処理プログラム５０２は、再度Ｓ１３０１に戻り、未反映データの有無を判定するための処理を実施する。
【０１１５】
一方、ステップＳ１３０３で否定の判定結果を得た場合、即ち、アクセス範囲に故障中のドライブ１１３がない場合は、デステージ処理プログラム５０２は、通常ライト処理を実施する（Ｓ１３０４）。通常ライト処理の詳細は後説する。
【０１１６】
通常ライト処理を実施後、デステージ処理プログラム５０２は、再度Ｓ１３０１に戻り、未反映データの有無を判定するための処理を実施する。
【０１１７】
また、ステップＳ１３０２で否定の判定結果を得た場合、即ち、論理ボリューム２００に故障中のドライブ１１３が無い場合、デステージ処理プログラム５０２は、非同期冗長データ生成判定処理を実施する（Ｓ１３０６）。非同期冗長データ生成判定処理の詳細は後説する。
【０１１８】
非同期冗長データ生成判定処理を実施した後、デステージ処理プログラム５０２は、非同期冗長データ生成判定処理の実施が必要か否かを判定する（Ｓ１３０７）。
【０１１９】
ステップＳ１３０７で肯定の判定結果を得た場合、即ち、非同期冗長データ生成判定処理を実施要の場合、デステージ処理プログラム５０２は、高速ライト処理を実施する（Ｓ１３０８）。高速ライト処理は、冗長データを生成しないことでドライブ負荷の低いライト処理を実現する処理であるが、詳細は後説する。
【０１２０】
高速ライト処理を実施後、デステージ処理プログラム５０２は、再度Ｓ１３０１に戻り、未反映データの有無を判定するための処理を実施する。
【０１２１】
一方、ステップＳ１３０７で否定の判定結果を得た場合、即ち、非同期冗長データ生成判定処理を実施不要の場合、デステージ処理プログラム５０２は、通常ライト処理を実施する（Ｓ１３０４）。
【０１２２】
通常ライト処理を実施後、デステージ処理プログラム５０２は、再度Ｓ１３０１に戻り、未反映データの有無を判定するための処理を実施する。
【０１２３】
また、Ｓ１３０１で否定の判定結果を得た場合、即ち、即ち、キャッシュメモリ１１０上に、未反映データが存在しない場合、デステージ処理プログラム５０２は、このルーチンでの処理を終了する。
【０１２４】
図１４は、リビルド処理プログラムの処理を説明するためのフローチャートである。
【０１２５】
この処理は、プロセッサ１１９が、ドライブ１１３の故障発生時、又は、一定時間毎に、周期的にリビルド処理プログラム５０３を起動することによって開始される。  
【０１２６】
リビルド処理プログラム５０３は、まず、全ての非同期中ビットマップ４０２のうち、ONの領域を、処理済みか否かを判定する（Ｓ１４０１）。これは具体的には、リビルド処理プログラム５０３が、ステップＳ１４０１とステップＳ１４０２で、全ての論理ボリューム２００のストライプ列２０４について順番にチェックをしていき、全てのチェック処理が完了したことを想定している。
【０１２７】
この具体的な処理としては、リビルド処理プログラム５０３が、非同期中ビットマップ４０２の全てのビット７０１がOFFになっているか否かを判定し（Ｓ１４０２）、最終的に、非同期中領域数カウンタテーブル４０３の非同期中領域数カウンタフィールド８０２の全てのエントリが、０になっていれば、処理済みとして終了してもよい。
【０１２８】
ステップＳ１４０１で肯定の判定結果を得た場合、即ち、全ての非同期中ビットマップ４０２がONの領域を処理済みの場合、リビルド処理プログラム５０３は、処理Aに進む。この処理Aについては、図１５で詳細に説明する。
【０１２９】
ステップＳ１４０１で否定の判定結果を得た場合、即ち、全ての非同期中ビットマップ４０２がONの領域を処理済みで無い場合、リビルド処理プログラム５０３は、その処理済みでない領域について、次の処理を進める。
【０１３０】
具体的には、リビルド処理プログラム５０３は、非同期中ビットマップ４０２の中に、非同期中ビットがONの領域が存在するか否かを判定し（Ｓ１４０２）、このステップＳ１４０２で否定の判定結果を得た場合、ステップＳ１４０１の処理に戻り、ステップＳ１４０２で肯定の判定結果を得た場合、即ち、非同期中ビットマップ４０２の中に、非同期中ビットがONの領域が存在する場合、コレクション先の領域があるか否かを判定する（Ｓ１４０３）。
【０１３１】
ステップＳ１４０３で肯定の判定結果を得た場合、即ち、未使用のスペアドライブ１１３Ｂの中に、コレクション先の領域がある場合、リビルド処理プログラム５０３は、コレクションコピー処理を実施する（Ｓ１４０４）。コレクションコピー処理は、コレクション先の領域に復元データをコピーする処理であるが、詳細については後説する。
【０１３２】
なお、未使用のスペアドライブ１１３Ｂが無い場合でも、故障中のドライブ１１３が、物理的にリプレースされた場合には、リプレースされたドライブ１１３の記憶領域をコレクション先の領域とすることもできる。
【０１３３】
ステップＳ１４０３で肯定の判定結果を得た場合、即ち、未使用のスペアドライブ１１３Ｂの中に、コレクション先の領域が存在しない場合、リビルド処理プログラム５０３は、非同期冗長データコレクション処理を実施する（Ｓ１４０５）。非同期冗長データコレクション処理は、冗長データの作成を非同期化（以下、ホストI/Oとは非同期で処理することを、非同期化と称することがある。）する領域について、冗長データを作成する処理であるが、詳細については後説する。
【０１３４】
コレクションコピー処理（Ｓ１４０４）又は非同期冗長データコレクション処理（Ｓ１４０５）が完了した場合、次の領域について、また、Ｓ１４０１に戻って処理を開始する。
【０１３５】
図１５は、リビルド処理プログラムの処理を説明するためのフローチャートである。
【０１３６】
この処理は、図１４のステップＳ１４０１で肯定の判定結果が得られた場合に実行される。
【０１３７】
リビルド処理プログラム５０３は、まず、全てのリビルド済みビットがOFFの領域を、処理済みか否かを判定する（Ｓ１５０１）。この判定処理は、前述のステップＳ１４０１と同様に、リビルド処理プログラム５０３が、ステップＳ１５０１とステップＳ１５０２で、全ての論理ボリューム２００のストライプ列２０４について順番にチェックをしていき、全てのチェック処理が完了したことを想定している。
【０１３８】
ステップＳ１５０１で肯定の判定結果を得た場合、即ち、全てのリビルド済みビットマップ４０４がOFFの領域を処理済みの場合、リビルド処理プログラム５０３は、このルーチンでの処理を終了する。
【０１３９】
ステップＳ１５０１で否定の判定結果を得た場合、即ち、全てのリビルド済みビットマップ４０４がOFFの領域を処理済みで無い場合、リビルド処理プログラム５０３は、その処理済みでない領域について、次の処理を進める。
【０１４０】
具体的には、リビルド処理プログラム５０３は、リビルド済みビットマップ４０４の中に、ビット９０１がOFFの領域が存在するか否かを判定し（Ｓ１５０２）、このステップＳ１５０２で否定の判定結果を得た場合、ステップＳ１５０１の処理に戻り、ステップＳ１５０２で肯定の判定結果を得た場合、即ち、リビルド済みビットマップ４０４の中に、ビット９０１がOFFの領域が存在する場合、コレクション先の領域があるか否かを判定する（Ｓ１５０３）。
【０１４１】
ステップＳ１５０３で肯定の判定結果を得た場合、即ち、コレクション先の領域がある場合、リビルド処理プログラム５０３は、コレクションコピー処理を実行し（Ｓ１５０４）、その後、次の領域について、また、ステップＳ１５０１に戻って処理を開始する。
【０１４２】
以上に説明した、図１４及び図１５の処理では、ドライブ故障発生時に非同期中ビットマップ４０２がONの領域から先にデータの復元処理を実施し、その後、その他の領域ついてデータの復元処理を実施する。この理由は、非同期中ビットマップ４０２がONの領域はその他の領域よりも冗長度が低いため、冗長性の低い領域を早急にデータの復元処理を実施することによって、全体としての信頼性を向上させる効果を得ることができる。
【０１４３】
図１６は、ドライブコピー処理プログラムの処理を説明するためのフローチャートである。
【０１４４】
この処理は、プロセッサ１１９が、ドライブ故障の兆候を事前に検出した場合などに、故障しそうなドライブ１１３から、スペアドライブ１１３Ｂへのコピー処理のために、ドライブコピー処理プログラム５０４を起動することによって開始される。以下、この事前コピー処理をダイナミックスペアリングと称することがある。
【０１４５】
プロセッサ１１９が、ドライブ故障の兆候を事前に検出する方法としては、例えば、S.M.A.R.T情報を用いた方法などがある。また、ダイナミックスペアリングの他にも、特定の論理ボリュームのデータを別の論理ボリュームのデータにコピーする際に、プロセッサ１１９が、ドライブコピー処理プログラム５０４を起動してもよい。
【０１４６】
まず、ドライブコピー処理プログラム５０４は、論理ボリューム２００の全領域をコピー完了したか否かを判定する（Ｓ１６０１）。この判定処理は、前述のＳ１４０１と同様に、ドライブコピー処理プログラム５０４が、ステップＳ１６０１とステップＳ１６０２で全ての論理ボリューム２００のストライプ列２０４について順番にチェックをしていき、全てのチェック処理が完了したことを想定している。ただし、故障中のドライブ１１３が無い場合は、処理済みとして、終了する。
【０１４７】
また、論理ボリューム２００の一部の領域をコピーする場合は、その領域に含まれるストライプ列２０４について、コピーが完了済みかをＳ１６０１で判定することもできる。
【０１４８】
ステップＳ１６０１で否定の判定結果を得た場合、即ち、論理ボリューム２００の全領域をコピー完了していない場合、ドライブコピー処理プログラム５０４は、そのコピー済みでない領域について、次の処理を進める。
【０１４９】
ドライブコピー処理プログラム５０４は、論理ボリューム２００の領域のうち、コピーが完了していない領域が、非同期冗長データ領域であるか否かを判定する（Ｓ１６０２）。
【０１５０】
具体的には、ドライブコピー処理プログラム５０４は、設定テーブル４０６の各論理ボリューム２００について、非同期冗長データ生成モードフィールド１１０２に対応した設定内容フィールド１１０３のエントリがONの場合、コピーが完了していない領域が、非同期冗長データ領域であると判定する。
【０１５１】
ステップＳ１６０２で肯定の判定結果を得た場場合、即ち、非同期冗長データ領域で有る場合、ドライブコピー処理プログラム５０４は、非同期中ビット７０１がONの領域か否かを判定する（Ｓ１６０３）。
【０１５２】
ステップＳ１６０３で肯定の判定結果を得た場合、即ち、非同期中ビット７０１がONの領域が存在する場合、ドライブコピー処理プログラム５０４は、コレクションコピー処理を実施し（Ｓ１６０５）、その後、次の領域について、またＳ１６０１に戻って処理を実行する。
【０１５３】
ステップＳ１６０２で否定の判定結果を得た場合、即ち、非同期冗長データ領域で無かった場合、又はステップＳ１６０３で否定の判定結果を得た場合、即ち、非同期中ビット７０１がONの領域で無かった場合、ドライブコピー処理プログラム５０４は、通常コピー処理を実行し（Ｓ１６０４）、その後、次の領域について、またＳ１６０１に戻って、処理を実行する。
【０１５４】
以上に説明したドライブコピー処理プログラム５０４の処理は、リビルド処理プログラム５０３で説明したように、ドライブ故障発生時に非同期中ビットマップ４０２がONの領域から先にデータの復元処理を実施し、その後、その他の領域ついてデータの復元処理を実施すれば、全体としての信頼性を向上させる効果を得ることができる。
【０１５５】
図１７は、ホストI/O処理プログラムのサブプログラムである、通常リード処理を説明するためのフローチャートである。
【０１５６】
まず、ホストＩ／Ｏ処理プログラム５０１は、キャッシュメモリ管理テーブルを参照し、キャッシュメモリ１１０に、リード命令で要求されたデータ（当該データ）が有るか否かを判定する（Ｓ１７０１）。
【０１５７】
ステップＳ１７０１で否定の判定結果を得た場合、即ち、キャッシュメモリ１１０に当該データが無い場合、ホストＩ／Ｏ処理プログラム５０１は、ドライブ１１３からデータをリードしてキャッシュメモリ１０に転送する（Ｓ１７０２）し、その後、アクセス頻度テーブル４０５を更新する（Ｓ１７０３）。
【０１５８】
具体的には、ホストＩ／Ｏ処理プログラム５０１は、アクセス頻度テーブル４０５のうち、領域アドレスフィールド１００２の領域アドレスに対応するアクセス頻度カウンタフィールド１００３のアクセス頻度カウンタを、ドライブ１１３へのコマンド発行回数分インクリメントする。
【０１５９】
ホストＩ／Ｏ処理プログラム５０１は、アクセス頻度テーブル４０５を更新した場合、又は、ステップＳ１７０１で肯定の判定結果を得た場合、このルーチンでの処理を終了する。
【０１６０】
図１８は、ホストI/O処理プログラムのサブプログラムである、コレクションリード処理を説明するためのフローチャートである。
【０１６１】
まず、ホストＩ／Ｏ処理プログラム５０１は、リード対象領域のうち、故障中のドライブ１１３を含まないリード対象領域について、通常リード処理を実行する（Ｓ１８０１）。
【０１６２】
具体的には、ホスト１０１からのリード要求に含まれるLBAに対応する１個または複数のストライプ列２０４、またはその一部について、ストライプ列２０４に属するドライブ１１３のうち、故障中のドライブ１１３以外のドライブ１１３のストライプデータ２２３の部分を読み込む。このリード処理は、図１７で説明した、ホストI/O処理プログラムのサブプログラムである、通常リード処理と同様である。
【０１６３】
なお、このリード処理は、このステップＳ１８０１で実施しなくても、コレクションリード処理の過程で、別のドライブ１１３へのリード処理が発生するタイミングに合わせて実施することができ。この場合、ホスト１０１は、リードコマンド発行回数を削減することできる。
【０１６４】
次に、ホストＩ／Ｏ処理プログラム５０１は、リード対象領域が、リビルド済みビット９０１がOFFの領域か否かを判定する（Ｓ１８０２）。
【０１６５】
具体的には、ホストＩ／Ｏ処理プログラム５０１は、リード対象のストライプ列２２４に対応するリビルド済みビットマップ４０４のビット９０１がOFFかどうかを判定する。
【０１６６】
ステップＳ１８０２で否定の判定結果を得た場合、即ち、リード対象のストライプ列２０４に対応するリビルド済みビットマップ４０４のビット９０１がONの場合は、既に、スペアドライブ１１３Ｂ等の復元先の領域に、データが復元済みであるため、ホストＩ／Ｏ処理プログラム５０１は、復元先の領域から直接リード処理を実行し（Ｓ１８０３）、このルーチンでの処理を終了する。
【０１６７】
このリード処理は、図１７で説明した、I/O処理プログラムのサブプログラムである、通常リード処理と同様である。
【０１６８】
ステップＳ１８０２で肯定の判定結果を得た場合、即ち、リード対象のストライプ列２０４に対応するリビルド済みビットマップ４０４のビット９０１がOFFの場合、ホストＩ／Ｏ処理プログラム５０１は、コレクション先の領域があるか否かを判定する（Ｓ１８０４）。この判定処理では、ホストＩ／Ｏ処理プログラム５０１は、前述のＳ１４０３と同様に、コレクション先の領域があるか否かを判定する。
【０１６９】
ステップＳ１８０４で肯定の判定結果を得た場合、即ち、コレクション先の領域がある場合、ホストＩ／Ｏ処理プログラム５０１は、I/O同期リビルドの実行が必要か否かを判定する（Ｓ１８０６）。
【０１７０】
具体的には、ホストＩ／Ｏ処理プログラム５０１は、設定テーブル４０６の設定項目フィールド１１０２の「リビルド動作モード」に対応した設定内容フィールド１１０３のエントリをチェックする。この際、設定内容が、「High Speed」である場合、ホストＩ／Ｏ処理プログラム５０１は、I/O同期リビルドの実行が必要であると判定する。
【０１７１】
一方、ホストＩ／Ｏ処理プログラム５０１は、設定内容が、「Normal」である場合、当該論理ボリューム２００の負荷をチェックし、負荷に応じて、I/O同期リビルドの実行が必要か、不要かを判定する。論理ボリューム２００の負荷は、対応するドライブの稼働率を使用してもよいし、ライトペンド量（キャッシュ上の未反映データの量）から判断してもよい。例えば、負荷が低い場合には、レスポンス低下を防ぐためにI/O同期リビルドの実行を不要と判定し、負荷が高い場合は、I/O同期リビルドの効果が高いため、I/O同期リビルドの実行を必要と判定する。なお、ホストＩ／Ｏ処理プログラム５０１は、論理ボリューム２００の負荷量に応じて、I/O同期リビルドの実行頻度を動的に変更してもよい。また、ホストＩ／Ｏがシーケンシャルアクセスの場合には、I/O同期リビルドの実行が必要であると判定してもよい。
【０１７２】
ステップＳ１８０６で肯定の判定結果を得た場合、即ち、I/O同期リビルドの実行が必要であると判定した場合、ホストＩ／Ｏ処理プログラム５０１は、コレクションコピー処理を実行し（Ｓ１８１０）、その後、このルーチンでの処理を終了する。
【０１７３】
ステップＳ１８０６で否定の判定結果を得た場合、即ち、I/O同期リビルドの実行が不要であると判定した場合、ホストＩ／Ｏ処理プログラム５０１は、キャッシュメモリ管理テーブルを参照し、キャッシュメモリ１０に、当該データ、即ち、リード対象のストライプ列２０４の全ての復元元データが有るか否かを判定する（Ｓ１８０５）。
【０１７４】
リード範囲のデータに対応するストライプデータ２２３が、故障中のドライブ１１３に存在する場合（Ｓ１８０１で故障中のドライブ１１３以外のデータはリード済み）、このときのリード対象データは、復元元のストライプデータ２２３内のリード領域に対応するデータとなる。
【０１７５】
具体的には、例えば、RAID6の場合、ストライプ列２０４に属するデータのうち、あるデータ部が故障した場合、それ以外のデータ部と、Pパリティ（又はQパリティ）から復元するので、それらのデータが、リード対象データとなる。
【０１７６】
Ｓ１８０５で否定の判定結果を得た場合、即ち、キャッシュメモリ１１０に、当該データのストライプ列２０４の全ての復元元データが無い場合、ホストＩ／Ｏ処理プログラム５０１は、その足りない復元元データをドライブ１１３からリードしてキャッシュメモリ１１０に転送する（Ｓ１８０７）。
【０１７７】
ステップＳ１８０５で肯定の判定結果を得た場合、即ち、キャッシュメモリ１１０に、当該データのストライプ列２０４の全ての復元元データが有る場合、又は、ステップＳ１８０７の処理の後、ホストＩ／Ｏ処理プログラム５０１は、キャッシュメモリ１１０上の復元元データを基にデータコレクション処理（Ｓ１８０８）を実行する。
【０１７８】
このデータコレクション処理として、ホストＩ／Ｏ処理プログラム５０１は、例えば、RAID6の場合、復元元データと、PパリティデータとのXOR演算によりデータを復元する。
【０１７９】
ステップＳ１８０８の後、ホストＩ／Ｏ処理プログラム５０１は、アクセス頻度テーブル４０５を更新する処理を実行し（Ｓ１８０９）、その後、このルーチンでの処理を終了する。
【０１８０】
具体的には、ホストＩ／Ｏ処理プログラム５０１は、アクセス頻度テーブル４０５のうち、領域アドレスフィールド１００２に対応するアクセス頻度カウンタフィールド１００３のアクセス頻度カウンタを、ドライブ１１３へのコマンド発行回数分インクリメントし、アクセス頻度テーブル４０５を更新したら、処理を終了する。
【０１８１】
なお、ステップＳ１８０５〜Ｓ１８０９は、既に実施済みなどの理由で、復元データがキャッシュメモリ１１０に有る場合、実行せずに処理を終了してもよい。
【０１８２】
図１９は、ホストI/O処理プログラムのサブプログラムである、通常ライト処理を説明するためのフローチャートである。
【０１８３】
まず、ホストＩ／Ｏ処理プログラム５０１は、冗長データを生成する（Ｓ１９０１）。例えば、RAID6の場合、ホストＩ／Ｏ処理プログラム５０１は、ライト先の領域の更新前データと、Pパリティの更新前データと、Qパリティの更新前データから、XOR演算およびガロア演算を実行し、更新後のデータに対応するPパリティのデータとQパリティのデータを算出する。
【０１８４】
この際、この算出処理に必要な更新前データが、キャッシュメモリ１１０上に無い場合、ホストＩ／Ｏ処理プログラム５０１は、ドライブ１１３から更新前データをキャッシュメモリ１１０に転送する。
【０１８５】
その後、ホストＩ／Ｏ処理プログラム５０１は、キャッシュメモリ１１０からドライブ１１３に更新後のデータを転送する（Ｓ１９０２）。
【０１８６】
その後、ホストＩ／Ｏ処理プログラム５０１は、アクセス頻度更新処理を実施する（Ｓ１９０３）。
【０１８７】
具体的には、ホストＩ／Ｏ処理プログラム５０１は、アクセス頻度テーブル４０５のうち、対応する領域のアクセス頻度カウンタフィールド１００３のアクセス頻度カウンタをドライブ１１３へのコマンド発行回数分インクリメントし、アクセス頻度を更新した後、このルーチンでの処理を終了する。
【０１８８】
図２０は、ホストI/O処理プログラムのサブプログラムである、コレクションライト処理を説明するためのフローチャートである。
【０１８９】
まず、ホストＩ／Ｏ処理プログラム５０１は、ライト対象領域について、故障中のドライブ１１３を含まない領域の通常ライト処理を実行する（Ｓ２００１）。
【０１９０】
具体的には、ホスト１０１からのリード要求に含まれるLBAに対応する１個または複数のストライプ列２０４、またはその一部について、ストライプ列２０４に属するドライブ１１３のうち、故障中のドライブ１１３以外のドライブ１１３のストライプデータ２２３の部分をドライブ１１３に書き込む。
【０１９１】
このライト処理は、図１９で説明した、ホストI/O処理プログラムのサブプログラムである、通常ライト処理と同様である。
【０１９２】
なお、このライト処理は、このステップＳ２００１で実施しなくても、コレクションライト処理の過程で、別のドライブ１１３へのライト処理が発生するタイミングに合わせて実施することができ。この場合、ホスト１０１は、ライトコマンド発行回数を削減することできる。
【０１９３】
次に、ホストＩ／Ｏ処理プログラム５０１は、ライト対象領域が、リビルド済みビット９０１がOFFの領域か否かを判定する（Ｓ２００２）。
【０１９４】
具体的には、ホストＩ／Ｏ処理プログラム５０１は、ライト対象のストライプ列２０４に対応するリビルド済みビットマップ４０４のビット９０１がOFFかどうかを判定する。
【０１９５】
ステップＳ２００２で否定の判定結果を得た場合、即ち、ライト対象のストライプ列２０４に対応するリビルド済みビットマップ４０４のビット９０１がONの場合は、既に、スペアドライブ１１３Ｂ等の復元先の領域が、復元済みであるため、ホストＩ／Ｏ処理プログラム５０１は、復元先の領域から直接ライト処理を実行し（Ｓ２００３）、このルーチンでの処理を終了する。
【０１９６】
このライト処理は、図１９で説明した、ホストI/O処理プログラムのサブプログラムである、通常リード処理と同様である。
【０１９７】
ステップＳ２００２で肯定の判定結果を得た場合、即ち、ライト対象のストライプ列２０４に対応するリビルド済みビットマップ４０４のビット９０１がOFFの場合、ホストＩ／Ｏ処理プログラム５０１は、コレクション先の領域があるか否かを判定する（Ｓ２００４）。この判定処理では、ホストＩ／Ｏ処理プログラム５０１は、前述のＳ１４０３と同様に、コレクション先の領域があるか否かを判定する。
【０１９８】
ステップＳ２００４で肯定の判定結果を得た場合、即ち、コレクション先の領域がある場合、ホストＩ／Ｏ処理プログラム５０１は、I/O同期リビルドの実行が必要か否かを判定する（Ｓ２００５）。
【０１９９】
具体的には、ホストＩ／Ｏ処理プログラム５０１は、設定テーブル４０６の設定項目フィールド１１０２の「リビルド動作モード」に対応した設定内容フィールド１１０３のエントリをチェックする。この際、設定内容が、「High Speed」である場合、ホストＩ／Ｏ処理プログラム５０１は、I/O同期リビルドの実行が必要であると判定する。
【０２００】
一方、ホストＩ／Ｏ処理プログラム５０１は、設定内容が、「Normal」である場合、当該論理ボリューム２００の負荷をチェックし、負荷が低い場合には、I/O同期リビルドの実行が必要であると判定し、負荷が高い場合は、ホストI/O処理を優先するために、I/O同期リビルドの実行が不要であると判定する。なお、ホストＩ／Ｏ処理プログラム５０１は、論理ボリューム２００の負荷量に応じて、動的にI/O同期リビルドの実行頻度を変更することもでき、また、ホストＩ／Ｏがシーケンシャルアクセスの場合には、I/O同期リビルドの実行が必要であると判定することもできる。
【０２０１】
ステップＳ２００５で肯定の判定結果を得た場合、即ち、I/O同期リビルドの実行が必要であると判定した場合、ホストＩ／Ｏ処理プログラム５０１は、コレクションコピー処理を実行し（Ｓ２００９）、その後、このルーチンでの処理を終了する。
【０２０２】
ステップＳ２００５で否定の判定結果を得た場合、即ち、I/O同期リビルドの実行が不要であると判定した場合、又は、ステップＳ２００４で否定の判定結果を得た場合、即ち、コレクション先の領域がない場合、ホストＩ／Ｏ処理プログラム５０１は、ホストＩ／Ｏ処理プログラム５０１は、冗長データを生成する（Ｓ２００６）。
【０２０３】
例えば、RAID6の場合、ホストＩ／Ｏ処理プログラム５０１は、ライト先の領域の更新前データと、Pパリティの更新前データと、Qパリティの更新前データから、XOR演算およびガロア演算を実行し、更新後のデータに対応するPパリティのデータとQパリティのデータを算出する。
【０２０４】
この際、この算出処理に必要な更新前データが、キャッシュメモリ１１０上に無い場合、ホストＩ／Ｏ処理プログラム５０１は、ドライブ１１３から更新前データをキャッシュメモリ１１０に転送する。但し、図１９のステップＳ１９０２と異なる点は、冗長データやデータの記憶先のドライブ１１３が、故障中の状態であるデータは、生成する必要がない点である。
【０２０５】
その後、ホストＩ／Ｏ処理プログラム５０１は、キャッシュメモリ１１０からドライブ１１３に更新後のデータを転送する（Ｓ２００７）。
【０２０６】
その後、ホストＩ／Ｏ処理プログラム５０１は、アクセス頻度更新処理を実施する（Ｓ２００８）。
【０２０７】
具体的には、ホストＩ／Ｏ処理プログラム５０１は、アクセス頻度テーブル４０５のうち、対応する領域のアクセス頻度カウンタフィールド１００３のアクセス頻度カウンタをドライブ１１３へのコマンド発行回数分インクリメントし、アクセス頻度を更新した後、このルーチンでの処理を終了する。
【０２０８】
図２１は、ホストI/O処理プログラムのサブプログラムである、高速ライト処理を説明するためのフローチャートである。
【０２０９】
高速ライト処理は、特定の冗長データをドライブ１１３にライトしないことにより、１回のライト処理当たりのドライブ１１３へのコマンド発行回数を削減する効果を持つ。
【０２１０】
まず、ホストＩ／Ｏ処理プログラム５０１は、非同期化対象を除く冗長データの生成を実施する（Ｓ２１０１）。
【０２１１】
この際、2個以上(N個とする)の冗長データを持つRAIDレベルにおいて、N-1個以下の種類の冗長データを非同期化対象として、冗長データを生成することが有効である。これは、全ての冗長データ(N個)を非同期化すると、1台のドライブ１１３が故障した時点で、データを失う領域が発生するためである。
【０２１２】
例えば、RAID6の場合、Pパリティと、Qパリティの2個の冗長データのうち、Qパリティを非同期化対象とする場合は、Pパリティのみを更新することになる。
【０２１３】
また、例えば、パリティを3種類（Pパリティ、Qパリティ、Rパリティ）持つRAIDレベルにおいて、３種類の冗長データのうち、QパリティとRパリティ両方を非同期化対象としてもよいし、いずれか１つを非同期化対象としてもよい。一般に、N種類のパリティを持つ場合に、段階的に高負荷領域ほど非同期化パリティの種数を減らすことにより、システム全体の性能・信頼性をさらに効率化することが可能である。その場合は、非同期化パリティの種数が多いページ（＝高負荷なページ）から順にリビルド処理を実行することで、信頼性（MTTDL : Mean Time To Data Loss）を最大化する。例えば、3種類のパリティを持つ場合に、超高負荷領域（超小容量）はQパリティ、Rパリティを非同期化対象とし、高負荷領域（小容量）はRパリティを非同期化対象とし、低負荷領域（大容量）は全てのパリティを非同期化対象としない。障害発生時は超高負荷領域についてまずリビルドを完了させ、次に高負荷領域についてリビルドを完了させ、最後に低負荷領域についてリビルドを完了させるという順番で実施する。
【０２１４】
具体的な冗長データの生成は、図１９のＳ１９０１と同様であるが、前述したとおり、非同期化対象の冗長データは、除いて処理を実施する。
【０２１５】
その後、ホストＩ／Ｏ処理プログラム５０１は、キャッシュメモリ１１０からドライブ１１３に更新後のデータを転送する（Ｓ２１０２）。
【０２１６】
その後、ホストＩ／Ｏ処理プログラム５０１は、アクセス頻度更新処理を実施する（Ｓ２１０３）。
【０２１７】
具体的には、ホストＩ／Ｏ処理プログラム５０１は、アクセス頻度テーブル４０５のうち、対応する領域のアクセス頻度カウンタフィールド１００３のアクセス頻度カウンタをドライブ１１３へのコマンド発行回数分インクリメントし、アクセス頻度を更新する。
【０２１８】
次に、ホストＩ／Ｏ処理プログラム５０１は、非同期中ビットマップ４０２のビット７０１をONとし（Ｓ２１０４）、その後、このルーチンでの処理を終了する。
【０２１９】
なお、高速ライト処理では、高頻度領域について非同期化するパリティ分のキャッシュメモリ１１０を確保しないため、確保しない分のキャッシュメモリ１１０の領域を別のデータのキャッシュに活用でき、ストレージシステム１０４全体の処理効率を向上させることができる。
【０２２０】
図２２は、ホストI/O処理プログラムのサブプログラムである、非同期冗長データ生成判定処理を説明するためのフローチャートである。
【０２２１】
まず、ホストＩ／Ｏ処理プログラム５０１は、ホスト１０１からのＩ／Ｏ処理要求を基にシーケンシャルアクセスか否かを判定する（Ｓ２２０１）。
【０２２２】
この際、ホストＩ／Ｏ処理プログラム５０１は、ホスト１０１からのＩ／Ｏ処理要求のコマンドに含まれる転送長（Transfer length）が一定長を超える場合や、複数のI/O処理要求のLBAのアドレスの履歴から、連続的な領域にアクセスが来ているかどうかなどで、シーケンシャルアクセスか否かを判定する。
【０２２３】
ステップＳ２２０１で、肯定の判定結果を得た場合、即ち、シーケンシャルアクセスである場合、ホストＩ／Ｏ処理プログラム５０１は、当該領域は非同期化不要とし（Ｓ２２０５）、このルーチンでの処理を終了する。
【０２２４】
この理由は、シーケンシャルアクセスだった場合は、キャッシュ上のライトデータだけで冗長データが生成できるので、ドライブにアクセス必要がないためである。
【０２２５】
ステップＳ２２０１で否定の判定結果を得た場合、即ち、シーケンシャルアクセスでは無かった場合、ホストＩ／Ｏ処理プログラム５０１は、対象の非同期中ビットマップ４０２のビット７０１がONか否かを判定する（Ｓ２２０２）。
【０２２６】
ステップＳ２２０２で否定の判定結果を得た場合、即ち、対象の非同期中ビットマップ４０２のビット７０１がOFFの場合、ホストＩ／Ｏ処理プログラム５０１は、対象が高アクセス頻度領域か否かを判定する（Ｓ２２０３）。
【０２２７】
この際、ホストＩ／Ｏ処理プログラム５０１は、例えば、アクセス頻度テーブル４０５のうち、対象領域のアクセス頻度カウンタフィールド１００３の値が、アクセス頻度の閾値を超えたか否かで判定することができる。
【０２２８】
ステップＳ２２０３で否定の判定結果を得た場合、即ち、対象が高アクセス頻度領域ではなかった場合、ホストＩ／Ｏ処理プログラム５０１は、当該領域は非同期化不要とし（Ｓ２２０５）、このルーチンでの処理を終了する。
【０２２９】
ステップＳ２２０３で肯定の判定結果を得た場合、即ち、対象が高アクセス頻度領域だった場合、ホストＩ／Ｏ処理プログラム５０１は、対象が、許容非同期化容量以内かどうかを判定する（Ｓ２２０３）。
【０２３０】
具体的には、ホストＩ／Ｏ処理プログラム５０１は、設定テーブル４０６のうち、対象となる論理ボリューム２００に対応する設定項目フィールド１１０２の「許容非同期化容量」の設定内容フィールド１１０３の値と、非同期中領域数カウンタテーブル４０３のうち、対象となる論理ボリューム２００に対応する非同期中領域数カウンタフィールド８０２の値とを比較し、次に、非同期中領域数カウンタフィールド８０２の値がインクリメントされた場合に、非同期中領域数カウンタフィールド８０２の値が、「許容非同期化容量」の設定内容フィールド１１０３の値を超える場合に、許容非同期化容量以内ではないと判定する。
【０２３１】
また、ホストＩ／Ｏ処理プログラム５０１は、非同期中領域数カウンタフィールド８０２の値が、「許容非同期化容量」の設定内容フィールド１１０３の値を超えない場合は、許容非同期化容量以内あると判定する。
【０２３２】
また、既に対象の領域の非同期中ビットマップ４０２のビット７０１がONの場合、ホストＩ／Ｏ処理プログラム５０１は、無条件で許容非同期化容量以内と判定する。
【０２３３】
ステップＳ２２０４で否定の判定結果を得た場合、即ち、許容非同期化容量以内ではないと判定された場合、ホストＩ／Ｏ処理プログラム５０１は、当該領域は非同期化不要とし（Ｓ２２０５）、このルーチンでの処理を終了する。
【０２３４】
ステップＳ２２０４で肯定の判定結果を得た場合、即ち、許容非同期化容量以内であると判定された場合、又は、ステップＳ２２０２で肯定の判定結果を得た場合、即ち、対象の非同期中ビットマップ４０２のビット７０１がONである場合、ホストＩ／Ｏ処理プログラム５０１は、当該領域は非同期化要とし（Ｓ２２０６）、このルーチンでの処理を終了する。
【０２３５】
なお、上記で述べたステップは、その一部の判定処理を省いてもよいし、全ての判定処理を実施してもよいものとする。
【０２３６】
図２３は、ホストI/O処理プログラムのサブプログラムである、非同期冗長データ生成判定処理を説明するためのフローチャートである。
【０２３７】
この処理は、図２２で説明した方法とは異なり、アクセス頻度テーブル４０５を使用せずに、高頻度な領域を優先して非同期化する方法である。なお、この処理では、図２２で説明したフローチャートと異なる点のみを説明する。
【０２３８】
ホストＩ／Ｏ処理プログラム５０１は、ステップＳ２３０１で、対象が、シーケンシャルアクセスでないと判定された場合、対象の非同期中ビットマップ４０２のビット７０１がONであるか否かを判定する（Ｓ２３０２）。
【０２３９】
ステップＳ２３０２で肯定の判定結果を得た場合、即ち、対象の非同期中ビットマップ４０２のビット７０１がONである場合、ホストＩ／Ｏ処理プログラム５０１は、ステップＳ２３０４に移行し、ステップＳ２２０４と同様の処理を実行する。
【０２４０】
ステップＳ２３０２で否定の判定結果を得た場合、即ち、対象の非同期中ビットマップ４０２のビット７０１がOFFである場合、ホストＩ／Ｏ処理プログラム５０１は、確率判定の結果を基に実施要か否かを判定する（Ｓ２３０３）。
【０２４１】
具体的には、ホストＩ／Ｏ処理プログラム５０１は、例えば、ローカルメモリ１１８上のカウンタを使用して、M回に1回だけ実施要と判定することができる。なお、この際、その他の頻度をコントロールする方法を使用してもよい。
【０２４２】
ホストＩ／Ｏ処理プログラム５０１は、ステップＳ２３０３で肯定の判定結果を得た場合、ステップＳ２３０４の処理に移行し、ステップＳ２２０４と同様の処理を実行する。また、ホストＩ／Ｏ処理プログラム５０１は、ステップＳ２３０３で否定の判定結果を得た場合、ステップＳ２３０５の処理に移行し、ステップＳ２２０５と同様の処理を実行する。
【０２４３】
以上の処理により、アクセス頻度テーブル４０５を使用しなくても、アクセス頻度の高い領域が、確率的に非同期化される可能性が高くなるため、図２２で説明した方法と近い効果を得ることができる。
【０２４４】
また、以上の説明で述べた方法以外に、ドライブの稼働率やライトペンド量（キャッシュ上の未反映データの量）に応じて、“非同期化不要”か“非同期化要”を切り分ける条件判定を、例えばＳ２３０３の直前に加えてもよい。例えば、ドライブの稼働率が低い場合には、スループットやレスポンスの悪化影響が少ないと判断し、既に対象の非同期中bitが ONの場合を除いて“非同期化不要”とすることを選択してもよい。また、ライトペンド量が少ない場合に、同様にスループットやレスポンスの悪化影響が少ないと判断し、既既に対象の非同期中bitが ONの場合を除いて“非同期化不要”とすることを選択してもよい。これらの条件判定を追加することにより、非同期化対象の領域を不必要に広げることを抑止し、信頼性のさらなる向上効果を生むことができる。
【０２４５】
図２４は、ドライブコピー処理プログラムのサブプログラムである、通常コピー処理を説明するためのフローチャートである。
【０２４６】
まず、ドライブコピー処理プログラム５０４は、対象の全てのコピー元のストライプデータ２２３がキャッシュメモリ１１０に有るか否かを判定する（Ｓ２４０１）。
【０２４７】
Ｓ２４０１で否定の判定結果を得た場合、即ち、対象の全てのコピー元のストライプデータ２２３がキャッシュメモリ１１０に無い場合、ドライブコピー処理プログラム５０４は、キャッシュメモリ１１０にない対象データをコピー元ドライブ１１３からリードし、リードした対象データをキャッシュメモリ１１０に転送する（Ｓ２４０２）。
【０２４８】
その後、ドライブコピー処理プログラム５０４は、キャッシュメモリ１１０からコピー先ドライブ１１３にデータを転送し（Ｓ２４０３）、このルーチンでの処理を終了する。
【０２４９】
また、ステップＳ２４０１で肯定の判定結果を得た場合、即ち、対象の全てのコピー元のストライプデータ２２３がキャッシュメモリ１１０にある場合、ドライブコピー処理プログラム５０４は、キャッシュメモリ１１０からコピー先ドライブ１１３にデータを転送し（Ｓ２４０３）、このルーチンでの処理を終了する。
【０２５０】
図２５は、ドライブコピー処理プログラム、リビルド処理プログラム、およびホストI/O処理プログラムのサブプログラムである、コレクションコピー処理を説明するためのフローチャートである。
【０２５１】
この処理は、ドライブコピー処理プログラム５０４、リビルド処理プログラム５０３、およびホストI/O処理プログラム５０１のうち、いずれかのプログラムによって実行される。なお、この処理では、ホストI/O処理プログラム５０１が実行する場合について説明する。
【０２５２】
ホストI/O処理プログラム５０１は、対象の全ての復元元のストライプデータ２２３が、キャッシュメモリ１１０に有るか否かを判定する（Ｓ２５０１）。
【０２５３】
ステップＳ２５０１で否定の判定結果を得た場合、即ち、対象の全ての復元元のストライプデータ２２３がキャッシュメモリ１１０に無い場合、ホストI/O処理プログラム５０１は、キャッシュメモリ１１０にない対象データを、復元元ドライブ１３からリードし、リードした対象データをキャッシュメモリ１１０に転送する（Ｓ２５０２）。
【０２５４】
その後、ホストI/O処理プログラム５０１は、対象のストライプデータ２２３の復元を実施し（Ｓ２５０３）、復元された復元データをキャッシュメモリ１１０から復元先ドライブ１１３に転送し（Ｓ２５０４）、ステップＳ２５０５に進む。
【０２５５】
一方、ステップＳ２４０１で肯定の判定結果を得た場合、即ち、対象の全ての復元元のストライプデータ２２３がキャッシュメモリ１１０にある場合、ホストI/O処理プログラム５０１は、対象のストライプデータ２２３の復元を実施し（Ｓ２５０３）、復元された復元データをキャッシュメモリ１１０から復元先ドライブ１１３に転送し（Ｓ２５０４）、ステップＳ２５０５に進む。
【０２５６】
ステップＳ２５０５で、ホストI/O処理プログラム５０１は、処理対象のストライプ列２０４に相当するリビルド済みビットをONにし（Ｓ２５０５）、その後、処理対象のストライプ列２０４に相当する非同期中ビットがONで有る場合（Ｓ２５０６）は、非同期中ビットをOFFにし（Ｓ２５０７）、その後、非同期中領域数カウンタフィールド８０２の個数をデクリメントし（Ｓ２５０８）、このルーチンを終了する。このデクリメント処理によって、リビルド処理プログラム５０３は、リビルド済みビットがONの領域数の管理が可能となる。
【０２５７】
一方、ステップＳ２５０６で処理対象のストライプ列２０４に相当する非同期中ビットがONでない場合は、このルーチンを終了する。
【０２５８】
図２６は、リビルド処理プログラムのサブプログラムである、非同期冗長データコレクション処理を説明するためのフローチャートである。
【０２５９】
まず、リビルド処理プログラム５０３は、対象の全ての冗長データ生成元のデータがキャッシュメモリ１１０に有るか否かを判定する（Ｓ２６０１）。
【０２６０】
ステップＳ２６０１で否定の判定結果を得た場合、即ち、対象の全ての冗長データ生成元のストライプデータ２２３がキャッシュメモリ１１０に無い場合、リビルド処理プログラム５０３は、対象のストライプデータ２２３をドライブ１１３から読み出し、読み出したストライプデータ２２３をキャッシュメモリ１１０に転送する（Ｓ２６０２）。
【０２６１】
その後、リビルド処理プログラム５０３は、対象となる冗長データの復元を実施し（Ｓ２６０３）、復元された冗長データをキャッシュメモリ１１０から対象のドライブ１１３に転送し（Ｓ２６０４）、処理対象のストライプ列２０４に相当するリビルド済みビットをONにし（Ｓ２６０５）、その後、非同期中ビットをOFFにし（Ｓ２６０６）、その後、非同期中領域数カウンタフィールド８０２の個数をデクリメントし（Ｓ２６０７）、このルーチンでの処理を終了する。
【０２６２】
ステップＳ２４０１で肯定の判定結果を得た場合、即ち、対象の全ての復元元のストライプデータ２２３がキャッシュメモリ１１０にある場合、リビルド処理プログラム５０３は、対象となる冗長データの復元を実施し（Ｓ２６０３）、復元された冗長データをキャッシュメモリ１１０から対象のドライブ１１３に転送し（Ｓ２６０４）、処理対象のストライプ列２０４に相当するリビルド済みビットをONにし（Ｓ２６０５）、その後、非同期中ビットをOFFにし（Ｓ２６０６）、その後、非同期中領域数カウンタフィールド８０２の個数をデクリメントし（Ｓ２６０７）、このルーチンでの処理を終了する。
【０２６３】
図２７は、論理ボリューム毎のパラメタの設定のためのGUIを表わす画面構成図である。
【０２６４】
図２７において、設定画面２７０１は、設定対象の論理ボリューム２００を特定できる論理ボリューム番号を表示する領域２７０２と、簡易設定を選択する領域２７０３と、詳細設定を行う領域２７０４，２７０５，２７０６で構成される。
【０２６５】
領域２７０４には、非同期冗長データ生成モードとして、高頻度アクセス領域のみ冗長データの更新を遅らせる場合、「ON」が設定され、常に冗長データの更新を実施する場合、「OFF」が設定される。
【０２６６】
領域２７０５には、リビルド動作モードとして、I/O同期リビルドを常に実施する場合、「High Speed」が設定され、ホストI/Oに優先してリビルド処理を実行する場合、「Normal」が設定される。
【０２６７】
領域２７０６には、許容非同期化容量として、高頻度アクセス領域のみ冗長データの更新を遅らせる場合に、対象とする領域の最大サイズ、例えば、１０ＭＢが設定される。
【０２６８】
領域２７０４、２７０５、２７０６がそれぞれ設定された場合、プロセッサ１１９は、設定テーブル４０６のうち、領域２７０２で設定された論理ボリューム２００のエントリを新規設定又は更新する。ただし、領域２７０６に設定される許容非同期化容量は、対象とする領域の容量（MB）を、ストライプ列２０４の個数に換算し、換算した個数を、設定テーブル４０６の設定項目フィールド１１０２のうち、「許容非同期化容量」に対応した設定内容フィールド１１０３の値として、設定テーブル４０６に格納する。
【０２６９】
なお、上記で述べた詳細設定の設定値を「ｐｒｅＳｅｔ１」のようなラベルで保存しておき、領域２７０３に、「ｐｒｅＳｅｔ１」を簡便に設定するようにしてもよい。
【０２７０】
図２８は、本発明の効果を説明するための説明図である。
【０２７１】
図２８において、ライトアクセスの対象となる領域２８００は、例えば、高頻度Writeアクセスが発生している領域２８０１と、低頻度Writeアクセスが発生している領域２８０２に分けることができる。
【０２７２】
この際、領域２８０１は、例えば、８０％のI/O負荷が、領域２８００全体の２０％の領域に集中している領域（以下、ホットスポットと称することがある。）である。領域２８０２は、例えば、２０％のI/O負荷が、領域２８００全体の８０％の領域に発生している領域（以下、非アクティブ領域と称することがある。）。
【０２７３】
上述のように、IOに偏りがあることを仮定した場合に、本発明の効果は、以下のテーブル２８０４で表される。
【０２７４】
テーブル２８０４では、本発明の方式により、高頻度Writeアクセスの領域２８０１のパリティライトを遅らすために、RAID6と比較して、ライトペナルティの影響をシステム全体として抑えることができ、RAID5と比較して、信頼性も向上させることができることを示している。
【０２７５】
具体的には、ホストアクセスがWriteのみのRandomアクセスであると仮定すると、RAID5の場合、1回のホストアクセスにより、4回のドライブアクセスが発生する。よって、ホストI/Oのスループット性能は、1/4となる。RAID6の場合、1回のホストアクセスにより、6回のドライブアクセスが発生する。よって、ホストI/Oのスループット性能は、1/6となる。
【０２７６】
これに対して、本方式では、ホットスポット２８０１に対する1回のホストアクセスは、4回のドライブアクセスとなり、非アクティブ領域２８０２に対する1回のホストアクセスは、6回のドライブアクセスとなる。
【０２７７】
よって、1回のホストアクセスに対する平均のドライブアクセス回数は、1/(4*0.8 + 6*0.2) = 4.4となり、ホストI/Oのスループット性能は、1/4.4となる。
【０２７８】
ここで、RAID5のスループットを1としたときに、RAID6のスループットは、ライトペナルティの影響が大きく、0.66となるが、本方式のスループットは、0.9であり、RAID6ほどのライトペナルティの影響は受けず、スループット低下を抑えることができる。
【０２７９】
また、ホットスポット２８０１は、領域２８００全体の20%程度であるため、ドライブ故障時の冗長度の回復時間を20%に削減することができる。これにより、論理ボリューム２００の信頼性（MTTDL : Mean Time To Data Loss）をRAID5と比較し、最大で5倍に向上させることができる。
【０２８０】
また、リビルド動作 モードを「High Speed」に設定した場合、ホストI/Oが、高負荷な状態でも、I/Oに同期したリビルド処理を実施することにより、リビルド時間を削減する効果を持つため、さらに信頼性を向上させることができる。
【０２８１】
図２９は、リビルド処理実行制御プログラムの処理を説明するためのフローチャートである。
【０２８２】
リビルド処理実行制御プログラム５０５は、リビルド処理プログラム５０３を実行する契機を制御するプログラムである。
【０２８３】
リビルド処理実行制御プログラム５０５は、ストレージシステムがホストからI/Oアクセスが可能になるまでに実行が開始され、非同期的に動作し続ける処理である。
【０２８４】
まず、リビルド処理実行制御プログラム５０５は、ドライブ故障が発生したか否かを判定する（Ｓ２９０１）。この際、リビルド処理実行制御プログラム５０５は、例えば、論理物理アドレス変換テーブル４０１のドライブ状態フィールド６０５を参照し、故障中のドライブ１１３が有るかどうかで判断する。
【０２８５】
ステップＳ２９０１で否定の判定結果を得た場合、即ち、ドライブ故障が発生していない場合、リビルド処理実行制御プログラム５０５は、対象のドライブ１１３が低負荷か否かを判定する（Ｓ２９０２）。
【０２８６】
この際、リビルド処理実行制御プログラム５０５は、例えば、アクセス頻度テーブル４０５の対象の論理ボリューム２００のアクセス頻度カウンタフィールド１００３のアクセス頻度カウンタの合計値が、一定の閾値を超えたかどうかで判断する。なお、アクセス頻度カウンタフィールド１００３の値とは別の論理ボリューム番号ごとのアクセス頻度カウンタを保持し、保持した量が、一定の閾値を超えたかどうかで判断してもよい。
【０２８７】
ステップＳ２９０２で否定の判定結果を得た場合、即ち、対象のドライブ１１３が低負荷でない場合、リビルド処理を実行し（Ｓ２９０３）、その後、一定期間待ってから（Ｓ２９０４）、再度ステップＳ２９０１に戻り、ステップＳ２９０１の処理を実行する。
【０２８８】
なお、リビルド処理実行制御プログラム５０５は、ドライブ故障が発生した契機又は、対象のドライブ１１３が低負荷となった状態で、一定期間待つステップＳ２９０４の処理を中断し、ステップＳ２９０１の処理に移行することもできる。
【０２８９】
ステップＳ２９０２が肯定の判定結果を得た場合、即ち、対象のドライブ１１３が低負荷である場合、リビルド処理実行制御プログラム５０５は、リビルド処理を実行し（Ｓ２９０５）、その後、一定期間待ってから（Ｓ２９０６）、再度ステップＳ２９０１に戻り、ステップＳ２９０１の処理を実行する。
【０２９０】
なお、リビルド処理実行制御プログラム５０５は、ドライブ故障が発生した契機で、一定期間待つステップＳ２９０６の処理を中断し、ステップＳ２９０１の処理に移行することもできる。
【０２９１】
一方、ステップＳ２９０１で肯定の判定結果を得た場合、即ち、故障中のドライブ１１３が存在する場合、リビルド処理実行制御プログラム５０５は、リビルド処理を実行し（Ｓ２９０７）、その後、一定期間待ってから（Ｓ２９０８）、再度ステップＳ２９０１に戻り、ステップＳ２９０１の処理を実行する。
【０２９２】
上記のステップＳ２９０４、Ｓ２９０６、Ｓ２９０８における一定期間待つ期間の量（t1、t2、t3）については、それぞれの期間の量に差をつける（例：t1>t2>t3）ことにより、リビルド処理の頻度やリビルド処理によるドライブ１１３に対する負荷量を調整することができる。例えば、ドライブ故障時は、データロストの危険を回避すべく、他よりもリビルド処理時間を短くするため、短い待ち時間とすることができる。また、ドライブ１１３が低負荷の場合は、ホスト１０１によるドライブ１１３への負荷が低いため、よりリビルド処理を積極的に実施するため、短い待ち時間とすることができる。もちろん、上記の例のように“高負荷”、“低負荷”の2段階だけでなく、より段階的に待ち時間を調整してもよい。
【０２９３】
本実施例によれば、冗長化されたディスク構成をサポートするストレージシステムにおいて、障害耐性を確保する一方で、データ更新に伴い発生する冗長データの更新をドライブに反映する際に、ドライブアクセス時間が長くなり、I/Oのスループットが低下するのを防止することができる。
【０２９４】
（第２実施例）
図３０は、本発明の第２実施例に係る計算機システムの論理構成図である。
【０２９５】
以下、本発明の第２実施例に係る計算機システムの論理構成のうち、図２と異なる点についてのみ説明する。
【０２９６】
第１実施例の方法は、ドライブ１１３のどこにストライプデータ２２３を配置しているかは依存しない。例えば、図２のように８台のドライブ１１３Ａでストライプ列２０４を構成する必要はなく、ストレージシステム１０４に実装される全てのドライブ１１３を使って、ストライプ列２０４を構成してもよいし、一部のドライブ１１３を使って、ストライプ列２０４を構成してもよい。スペアドライブ１１３Ｂの使用領域も同様である。
【０２９７】
これに対して、第２実施例では、図３０に示すように、ストライプ列３００１が、不規則にドライブ１１３から割り当てられている。
【０２９８】
ストライプ列３００１を、不規則にドライブ１１３に割り当てる際には、同一のドライブ１１３に複数のストライプデータ３００２を配置しないようにする。
【０２９９】
これは、冗長度が低くならないようにするためである。スペアドライブ１１３Ｂは、未使用のストライプデータ３００２を割り当てて使用する。勿論、同一のドライブ１１３Ｂに複数のストライプデータ３００２を配置しないようにスペアドライブ１１３Ｂを選択する。
【０３００】
また、本実施例は、ＲＡＩＤ６のようなデータ配置だけでなく、Ｔｒｉｐｌｉｃａｔｉｏｎにおいても適用できる。
【０３０１】
具体的には、通常のＴｒｉｐｌｉｃａｔｉｏｎの構成の場合、１個のデータに対して、２個の冗長データをドライブ１１３に作成し、３重に同期的に更新を実施する。
【０３０２】
本実施例によれば、高負荷の領域に対して、３個目のデータの更新を非同期に実施することで、ライトペナルティによる性能影響を低減する（ＲＡＩＤ１のような２重化の状態に近くする）ことが可能となる。
【０３０３】
また、上述の方法は、特許文献２に記載のようなパリティの容量を削減する技術と組み合わせることにより、ユーザの使用できる容量を物理的な容量により近づけ効率化することが可能である。
【産業上の利用可能性】
【０３０４】
以上詳述したように、本発明は、複数のドライブ１１３を冗長化されたデータの記憶領域として管理するストレージシステムに利用することでき、障害耐性を確保する一方で、データ更新に伴い発生する冗長データの更新をドライブに反映する際に、ドライブアクセス時間が長くなり、I/Oのスループットが低下するのを防止することができる。
【０３０５】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０３０６】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば、集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid  State  Drive）等の記録装置、または、ＩＣ（Integrated  Circuit）カード、ＳＤ（Secure  Digital）メモリカード、ＤＶＤ（Digital  Versatile  Disc）等の記録媒体に記録して置くことができる。
【符号の説明】
【０３０７】
１０１  ホスト、１０２  管理サーバ、１０３  ネットワーク、１０４  ストレージシステム、１０６  ポート、１０７  保守Ｉ／Ｆ、１０９  プロセッサパッケージ、１１０  キャッシュメモリ、１１１  共有メモリ、１１２  内部ネットワーク、１１３  ドライブ、１１８  ローカルメモリ、１１９  プロセッサ。
【図１】
0005744244.tif 000002
【図２】
0005744244.tif 000003
【図３】
0005744244.tif 000004
【図４】
0005744244.tif 000005
【図５】
0005744244.tif 000006
【図６】
0005744244.tif 000007
【図７】
0005744244.tif 000008
【図８】
0005744244.tif 000009
【図９】
0005744244.tif 000010
【図１０】
0005744244.tif 000011
【図１１】
0005744244.tif 000012
【図１２】
0005744244.tif 000013
【図１３】
0005744244.tif 000014
【図１４】
0005744244.tif 000015
【図１５】
0005744244.tif 000016
【図１６】
0005744244.tif 000017
【図１７】
0005744244.tif 000018
【図１８】
0005744244.tif 000019
【図１９】
0005744244.tif 000020
【図２０】
0005744244.tif 000021
【図２１】
0005744244.tif 000022
【図２２】
0005744244.tif 000023
【図２３】
0005744244.tif 000024
【図２４】
0005744244.tif 000025
【図２５】
0005744244.tif 000026
【図２６】
0005744244.tif 000027
【図２７】
0005744244.tif 000028
【図２８】
0005744244.tif 000029
【図２９】
0005744244.tif 000030
【図３０】
0005744244.tif 000031