(57)【特許請求の範囲】
【請求項１】
記憶アレイにおける複数の記憶ディスクにおいて、もう１つの記憶ディスクの故障によって該記憶アレイが永久にデータを失うことになる状態を、該記憶アレイが永久にデータを失う直前の状態であると識別するステップと、
前記記憶アレイが永久にデータを失う直前の状態であることを識別したことに応答して、ホストの入出力（Ｉ／Ｏ）要求によるリソースの使用が閾値量を超えないよう制限することによって、該ホストのＩ／Ｏ要求に対し、該記憶アレイの少なくとも一部を再構築する再構築入出力（Ｉ／Ｏ）要求に優先権を与えるステップと、を含み、
前記記憶アレイが前記永久にデータを失う直前の状態でなければ、前記再構築Ｉ／Ｏ要求に対し、前記ホストのＩ／Ｏ要求に優先権を与える、方法であって、
前記再構築Ｉ／Ｏ要求を優先するとき、前記ホストのＩ／Ｏ要求によるリソースの使用が閾値量を超えなければ、該ホストのＩ／Ｏ要求および前記再構築Ｉ／Ｏ要求を、受け取った順番で処理し、前記ホストのＩ／Ｏ要求によるリソースの使用が該閾値量を超えたならば、該受け取ったＩ／Ｏ要求から、次の再構築Ｉ／Ｏ要求を選択して処理する、
方法。
【請求項２】
前記記憶アレイは、ＲＡＩＤシステムを備える、
請求項１に記載の方法。
【請求項３】
前記ＲＡＩＤシステムは、複数のＲＡＩＤレベルを含んでおり、
前記識別するステップは、該複数のＲＡＩＤレベルのうちの少なくとも１つが前記永久にデータを失う直前の状態であることを識別し、
さらに、該永久にデータを失う直前の状態であると識別された少なくとも１つのＲＡＩＤレベルについてのみ、前記ホストのＩ／Ｏ要求に対し、前記再構築Ｉ／Ｏ要求に優先権を与える、
請求項２に記載の方法。
【請求項４】
前記複数のＲＡＩＤレベルのうちの少なくとも１つは、ＲＡＩＤレベル６を含む、
請求項３に記載の方法。
【請求項５】
前記ホストＩ／Ｏ要求を優先するとき、前記記憶アレイの少なくとも一部を再構築する再構築Ｉ／Ｏ要求と前記ホストのＩ／Ｏ要求の両方を、受け取った順番に待ち行列に入れるステップと、
先入れ先出し（ＦＩＦＯ）の順番で、該待ち行列から、前記再構築Ｉ／Ｏ要求および前記ホストＩ／Ｏ要求を処理するステップと、
を含む、請求項１に記載の方法。
【請求項６】
前記再構築Ｉ／Ｏ要求を優先するとき、前記記憶アレイおよび対応するコントローラの複数のリソースのうち、前記ホストＩ／Ｏ要求よりも前記再構築Ｉ／Ｏ要求に、より多くのリソースの使用を割り当てることをさらに含む、
請求項１に記載の方法。
【請求項７】
前記記憶アレイにおいて、永久にデータを失うことなく故障が許されるディスクの数は、該記憶アレイのＲＡＩＤアーキテクチャのレベルに少なくとも基づいて変動する、
請求項１に記載の方法。
【請求項８】
コンピュータの１つまたは複数のプロセッサによって実行される場合に、該１つまたは複数のプロセッサに動作を実行させるコンピュータプログラムを格納した１つまたは複数のコンピュータ読取り可能媒体であって、
記憶アレイにおける複数の記憶ディスクにおいて、もう１つの記憶ディスクの故障によって該記憶アレイが永久にデータを失うことになる状態を、該記憶アレイが永久にデータを失う直前の状態であると識別するステップと、
前記記憶アレイが永久にデータを失う直前の状態であると識別したことに応答して、ホストの入出力（Ｉ／Ｏ）要求によるリソースの使用が閾値量を超えないよう制限することによって、該ホストのＩ／Ｏ要求に対し、該記憶アレイの少なくとも一部を再構築する再構築入出力（Ｉ／Ｏ）要求に優先権を与えるステップと、を含み、
前記記憶アレイが前記永久にデータを失う直前の状態でなければ、前記再構築Ｉ／Ｏ要求に対し、前記ホストのＩ／Ｏ要求に優先権を与える、
ことを実行させるためのプログラムを格納したコンピュータ読み取り可能媒体であって、
前記再構築Ｉ／Ｏ要求を優先するとき、前記ホストのＩ／Ｏ要求によるリソースの使用が閾値量を超えなければ、該ホストのＩ／Ｏ要求および前記再構築Ｉ／Ｏ要求を、受け取った順番で処理し、前記ホストのＩ／Ｏ要求によるリソースの使用が該閾値量を超えたならば、該受け取ったＩ／Ｏ要求から、次の再構築Ｉ／Ｏ要求を選択して処理する、
コンピュータ読み取り可能媒体。
【請求項９】
前記再構築Ｉ／Ｏ要求を優先するとき、前記記憶アレイおよび対応するコントローラの複数のリソースのうち、前記ホストＩ／Ｏ要求よりも前記再構築Ｉ／Ｏ要求に、より多くのリソースの使用を割り当てることをさらに含む、
請求項８に記載のコンピュータ読み取り可能媒体。
【請求項１０】
前記記憶アレイにおいて、永久にデータを失うことなく故障が許されるディスクの数は、該記憶アレイのＲＡＩＤアーキテクチャのレベルに少なくとも基づいて変動する、
請求項８に記載のコンピュータ読み取り可能媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、記憶アレイに関し、より具体的には、本発明は、Ｉ／Ｏ要求に優先順位を与えて、再構築中におけるホストのＩ／Ｏパフォーマンスおよび記憶アレイの可用性を向上させることに関する。
【０００２】
【従来の技術】
従来からのディスクアレイデータ記憶システムは、単一の大容量記憶システムを形成するよう配置され調整された複数の記憶ディスクドライブ装置を有している。大容量記憶システムの一般的な設計目的には、メガバイト単位の低コスト、高い入出力パフォーマンス、および高いデータ可用性が含まれる。データ可用性は、ディスクまたは他のコンポーネントが故障した場合に動作の継続を保証しつつ、記憶システムに格納されたデータにアクセスすることができる能力を含む。データ可用性は、データまたはデータ間の関係を記憶システムの複数の場所に格納するといった冗長性を使用することによって提供されることが多い。ディスクが故障した場合、冗長データが、システムの動作可能な部分から検索され、コンポーネントの故障に起因して失われた元のデータを再生するのに使用される。
【０００３】
ディスクドライブに冗長データを格納する２つの一般的な方法がある。すなわち、ミラーリングおよびパリティである。ミラーリングの冗長性では、格納されるデータは複製され、記憶システムの同じサイズの２つの別々の領域（元のデータの記憶領域および冗長データの記憶領域）に格納される。パリティの冗長性では、元のデータは元のデータの記憶領域に格納され、冗長データは冗長データの記憶領域に格納されるが、冗長データはパリティデータのみであるので、冗長データの記憶領域のサイズは元のデータの記憶領域のサイズより小さい。
【０００４】
ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  ＩｎｄｅｐｅｎｄｅｎｔＤｉｓｋｓ）記憶システムは、冗長データを格納するために物理記憶容量の一部が使用されるディスクアレイシステムである。一般に、ＲＡＩＤシステムは、頭文字ＲＡＩＤのもとで示される７つのアーキテクチャすなわちレベルのうちの１で特徴付けられる。ＲＡＩＤ０アーキテクチャは、いかなる冗長性もなく構成されているディスクアレイシステムである。このアーキテクチャは、実際には冗長アーキテクチャではないため、ＲＡＩＤ０はしばしばＲＡＩＤシステムの議論からは省かれる。
【０００５】
ＲＡＩＤ１アーキテクチャは、ミラーリングの冗長性に従って構成された記憶ディスクを含む。元のデータはディスクのあるセットに格納され、そのデータの複製コピーは別のディスクに保持される。ＲＡＩＤ２〜ＲＡＩＤ６アーキテクチャは、すべてパリティタイプの冗長記憶を伴う。特に、ＲＡＩＤ５アーキテクチャは、ディスクのすべてにわたってデータおよびパリティ情報を分散させる。一般に、ディスクは、「ブロック」と呼ばれる等しいサイズのアドレス領域に分割される。同じユニットアドレス範囲を有するそれぞれのディスクからの一組のブロックを、「ストライプ」と呼ぶ。ＲＡＩＤ５において、それぞれのストライプは、Ｎブロックのデータと、そのＮブロックにおけるデータについての冗長情報を含む１つのパリティブロックと、を有している。
【０００６】
ＲＡＩＤ５において、パリティブロックは、ストライプごとに異なるディスクを循環する。例えば、５つのディスクを有するＲＡＩＤ５アーキテクチャにおいて、第1のストライプのパリティブロックは５番目のディスクにあり、第２のストライプのパリティブロックは４番目のディスクにあり、第３のストライプのパリティブロックは３番目のディスクにある、等である。後に続くストライプのパリティブロックは、一般に、螺旋パターン（他のパターンも可能であるが）でディスクドライブを循環する（これを、「precess」と呼ぶ）。ＲＡＩＤ２〜ＲＡＩＤ４アーキテクチャは、どのようにしてパリティブロックをディスクに配置するかにおいてＲＡＩＤ５と異なっている。
【０００７】
ＲＡＩＤ６アーキテクチャは、データがストライプ化されているという点でＲＡＩＤ４および５と同様であるが、元のデータに対し２つの独立した別個のパリティ値（本明細書では、ＰおよびＱと呼ぶ）を利用するという点で異なっている。Ｐパリティは、一般に、元のデータのすべてのディスクからのストライプにおいて、対応するデータ・チャンク（ひとかたまりのデータ）のビット毎の排他的論理和関数を使用して計算される。これは、１つの方程式の１つの未知数の積和演算に対応する。一方、Ｑパリティは、Ｐとは無関係に、積和演算に対して異なるアルゴリズムを使用して線形に計算される。その結果、各パリティ値は独立したアルゴリズムを使用して計算され、それぞれ別個のディスクに格納される。したがって、ＲＡＩＤ６システムは、ストライプにおいて２つの別々のディスクが故障した場合であってもデータを再構築することができるが（再構築空間が使用可能であると仮定する）、ＲＡＩＤ５システムは、ストライプにおいて１つのディスクが故障した場合にのみデータを再構築することができる。
【０００８】
ＲＡＩＤ５と同様に、ＲＡＩＤ６アーキテクチャは、２つのパリティブロックを、ストライプにおけるデータ記憶装置のすべてにわたって分散させる。すなわち、Ｎ＋２個のデータ記憶装置のストライプにおいて、各ストライプは、Ｎブロックの元のデータと２ブロックの独立したパリティデータとを有する。パリティデータ・ブロックのうちの一方は、Ｎ＋２個のデータ記憶装置のうちの１つに格納され、パリティデータ・ブロックのうちの他方は、Ｎ＋２個のデータ記憶装置のうちの別のものに格納される。ＲＡＩＤ５と同様に、ＲＡＩＤ６におけるパリティブロックは、ストライプごとに異なるディスクを循環される。例えば、所定のストライプにおいて５つのデータ記憶装置を使用するＲＡＩＤ６システムにおいて、ブロックの第１のストライプのパリティブロックは、４番目と５番目の装置に書込まれ、ブロックの第２のストライプのパリティブロックは、３番目と４番目の装置に書込まれ、ブロックの第３のストライプのパリティブロックは、２番目と３番目の装置に書込まれる、等である。一般に、この場合も、次に続くブロックについてのパリティブロックの場所は、他のパターンも使用可能であるが、そのストライプにおける次の論理装置にシフトする。
【０００９】
階層型データ記憶システムにより、異なる技術に従ってデータを格納することができる。階層型ＲＡＩＤシステムでは、冗長性技術の利点と欠点との間のトレードオフを可能にするために、データは、ＲＡＩＤ１およびＲＡＩＤ５等の複数のＲＡＩＤアーキテクチャに従って格納されることができる。
【００１０】
さらに、データ記憶システムは、データが。システム内に同時に存在している複数の冗長グループに格納されることを可能にする。ＲＡＩＤシステムでは、それぞれの冗長グループは、同じＲＡＩＤアーキテクチャ（または、階層型ＲＡＩＤシステムについての複数のＲＡＩＤアーキテクチャ）を使用して冗長性を提供する、該ＲＡＩＤシステムにおける一組のディスクである。例として、合計３０個のディスクを有するＲＡＩＤシステムにおいて、１０個のディスクは、第１のＲＡＩＤアーキテクチャを使用して（例えばＲＡＩＤ１を使用して）第１の冗長グループにいることができ、他の１２個のディスクは、第２のＲＡＩＤアーキテクチャを使用して（例えば、ＲＡＩＤ１およびＲＡＩＤ５を使用して）第２の冗長グループにいることができ、残りの８個のディスクは、第３のＲＡＩＤアーキテクチャを使用して（例えばＲＡＩＤ１およびＲＡＩＤ６を使用して）第３の冗長グループにいることができる。
【００１１】
「Ｍｅｍｏｒｙ  Ｓｙｓｔｅｍｓ  ｗｉｔｈ  Ｄａｔａ  Ｓｔｏｒａｇｅ  Ｒｅｄｕｎｄａｎｃｙ  Ｍａｎａｇｅｍｅｎｔ」と題されたＪａｃｏｂｓｏｎ等の米国特許第５，３９２，２４４号は、データ記憶状態および空間要求が変化した場合にデータを１つのＲＡＩＤタイプから他のＲＡＩＤタイプに移行させることができる階層型ＲＡＩＤシステムを記述している。この特許（ヒューレット・パッカード社に譲渡されている）は、物理的記憶空間が、ミラーリングおよびパリティＲＡＩＤ領域（例えば、ＲＡＩＤ１およびＲＡＩＤ５）を有するＲＡＩＤレベルの仮想記憶空間にマップされるマルチレベルＲＡＩＤアーキテクチャを記述している。ＲＡＩＤレベルの仮想記憶空間は、アプリケーションレベルの仮想記憶空間にマップされる。このアプリケーションレベルの仮想記憶空間は、ユーザに対し、記憶空間を、１つの大きい連続してアドレス指定可能な空間として示すものである。動作中、ユーザの記憶要求がアプリケーションレベルの仮想空間で変化すると、データは、その変化に適応するために、ＲＡＩＤレベル仮想空間においてミラーリングＲＡＩＤ領域とパリティＲＡＩＤ領域との間で移行することができる。例えば、ミラーリング冗長性に従っていったん格納されたデータは、シフトされて、パリティ冗長性を使用して格納されることができ、またその逆も可能である。さらなる背景技術の情報を提供するため、この米国特許第５，３９２，２４４号を参照によりこの明細書に取り入れる。
【００１２】
【発明が解決しようとする課題】
ＲＡＩＤシステムにおいてディスクが故障した場合、アレイにおけるデータは「再構築」される。これは一般に、ディスクアレイに対し複数の読出しおよび／または書込み要求を発行することを含むプロセスである。また一般に、ＲＡＩＤシステムは、この再構築プロセス中、ホストコンピュータからの読出しおよび書込み要求に対して使用可能である。しかしながら、これらのホスト要求は、しばしば再構築要求によって使用されるものと同じリソース（資源）にアクセスする必要があり、そのため再構築要求と競合する。
【００１３】
システムによっては、ホスト要求および再構築要求の間のこのような競合は、常に再構築要求を優先してホスト要求を遅延させる（その結果、記憶アレイのデータがより迅速に再構築され、記憶アレイが永久的にデータを失いつつある場合でなくても、ホスト要求に応答するシステムのパフォーマンスが低下する）か、または、常にホスト要求を優先して再構築要求を遅延させる（その結果、ホスト要求に応答するシステムのパフォーマンスは低下しないが、記憶アレイが永久的にデータを失いつつある場合であっても、記憶アレイのデータの再構築に非常に長い時間がかかる可能性がある）ことによって、解決される。記憶アレイは、例えば記憶アレイのもう１つの所定のディスクの故障によってデータが失われる結果となるときに、永久的にデータを失いつつある。
【００１４】
後述されるが、Ｉ／Ｏ要求に優先順位を与えることによる、再構築中のホストのＩ／Ｏパフォーマンスおよび記憶アレイの可用性の向上は、これらおよび他の欠点を解決しようとするものである。
【００１５】
【課題を解決するための手段】
入出力（Ｉ／Ｏ）要求に優先順位を与えることにより、再構築中におけるホストのＩ／Ｏパフォーマンスおよび記憶アレイの可用性を向上することが開示される。
【００１６】
この発明の１つの側面によると、Ｉ／Ｏ要求に優先順位を与える方法が提供され、該方法は、記憶アレイが永久的にデータを失いつつあることを識別するステップと、記憶アレイが永久的にデータを失いつつあることが識別されことに応答して、該記憶アレイの少なくとも一部を再構築するＩ／Ｏ要求に、ホストのＩ／Ｏ要求に対する優先権を与えるステップとを含む。
【００１７】
この発明の１つの側面によると、記憶アレイが永久的にデータを失いつつある（例えば、記憶アレイにおけるもう１つの所定のディスクの故障によってデータが失われる結果となる）とき、再構築Ｉ／Ｏ要求に、ホストＩ／Ｏ要求に対する優先権が与えられる。記憶アレイが永久的にデータを失いつつある状態でなくなるまで、再構築Ｉ／Ｏ要求はホストＩ／Ｏ要求に対する優先権を有し続け、上記状態でなくなった時点で、ホストＩ／Ｏ要求に、再構築Ｉ／Ｏ要求に対する優先権が与えられる。
【００１８】
この発明の他の側面によると、ホストＩ／Ｏ要求および再構築Ｉ／Ｏ要求は、共に処理を待つために待ち行列に入力される。再構築Ｉ／Ｏ要求が優先権を有する時（例えば、「再構築優先」モードの時）、新たなＩ／Ｏ要求（ホストまたは再構築に関わらず）は、待ち行列の最下位に入力されて該待ち行列の最上位に向かって伝搬され、そこで先入れ先出し（ＦＩＦＯ）方式で処理される。しかしながら、ホストＩ／Ｏ要求が優先権を有する（例えば、「ホスト優先」モードである）時、新たな再構築Ｉ／Ｏ要求は待ち行列の最下位に入力され、新たなホストＩ／Ｏ要求は、該待ち行列の他のすべてのホストＩ／Ｏ要求より下であるがすべての再構築Ｉ／Ｏ要求より上に挿入される。これは、ホスト優先モードの場合はホストＩ／Ｏ要求が再構築Ｉ／Ｏ要求の前に処理されるが、再構築優先モードの場合はホストＩ／Ｏ要求および再構築Ｉ／Ｏ要求が受け取られた順序で処理される（その結果、ホストＩ／Ｏ要求よりも再構築Ｉ／Ｏモードに対し、より多くのシステムリソースが割当てられる）、という効果を有する。
【００１９】
この発明の他の側面によると、再構築Ｉ／Ｏ要求が、ホストＩ／Ｏ要求に対する優先権を有するとき、ホストＩ／Ｏ要求に対する１つまたは複数のシステムリソースの割当てが制限される。この場合、ホストＩ／Ｏ要求によるシステムリソースの使用が閾値量を超えない限り、Ｉ／Ｏ要求（ホストまたは再構築に関わらず）は、受け取られた順序で処理される。閾値量を超えると、再構築Ｉ／Ｏ要求がホストＩ／Ｏ要求よりも前に処理される。
【００２０】
この発明の他の側面によると、Ｉ／Ｏ要求（ホストまたは再構築に関わらず）の処理は複数の段階で発生する。より優先順位が高い方を優先するように、ある所定の要求の処理は、２つの段階の間で割り込みをかけられることができる。例として、再構築優先モードの時に新たな再構築Ｉ／Ｏ要求が受け取られた場合、ホストＩ／Ｏ要求の処理に割り込みをかけて、該再構築Ｉ／Ｏ要求の処理を可能にすることができる。
【００２１】
【発明の実施の形態】
図１は、入出力（Ｉ／Ｏ）インターフェースバス２６を介してデータ記憶システム２４に接続されたホストコンピュータ２２を備えるコンピュータシステム２０を示す。ホストコンピュータ２２は、例えばサーバまたはワークステーションとして構成されることができる汎用コンピュータである。コンピュータ２２は、表示装置２８と、中央処理装置（ＣＰＵ）３０と、キーボード３２と、マウス３４と、を有する。また、プリンタ、テープドライブ、ＣＤ−ＲＯＭドライブ、ネットワークインターフェース等、他のデータ入力および出力周辺装置を含んでもよい。図１において、ホストコンピュータ２２は、ネットワーク３６に接続されることにより、データ記憶システム２４から１つまたは複数のクライアント（図示せず）にデータを提供する。
【００２２】
データ記憶システム２４は、ユーザデータおよび他の情報を保持するよう構成された記憶アレイを表す。１つの実施形態によると、データ記憶システム２４は、異なるおよび／または複数の冗長方式に従ってデータを格納することができる階層型ＲＡＩＤシステムである。ホストコンピュータ２２は、診断の実行、パフォーマンスの評価、動作パラメータの設定のように、管理者または他のユーザがＲＡＩＤ記憶システムを管理するためのインターフェースを提供する。説明を簡単にするため、本明細書ではデータ記憶システム２４をＲＡＩＤシステムとして述べるが、代替的に他のタイプの記憶アレイを使用することも可能である。
【００２３】
図２は、ホストコンピュータ２２およびデータ記憶システム２４をより詳細に示す。コンピュータ２２は、プロセッサ４０と、揮発性メモリ（すなわち、ＲＡＭ）４２と、キーボード３２と、マウス３４と、不揮発性メモリ（例えば、ＲＯＭ、ハードディスク、フロッピーディスク、ＣＤ−ＲＯＭ、ＤＶＤ等）４４と、表示装置２８と、を有する。管理モジュール４６は、メモリ４４に格納されており、プロセッサ４０上で実行される。管理モジュール４６は、データ記憶システム２４の種々のパラメータを設定することができると共に、診断、パフォーマンス審査、容量分析等の管理機能を提供する。管理モジュール４６は、表示装置２８に視覚的なインターフェースを提供する記憶マネージャ・ユーザインターフェース（ＵＩ）４８をサポートする。管理者は、後により詳細に説明するように、ＵＩ４８を介して、データ記憶システム２４の種々のパラメータを変更することにより、再構築Ｉ／Ｏ要求対ホストＩ／Ｏ要求に与えられる優先権を制御することができる。
【００２４】
データ記憶システム２４は、複数の記憶ディスク５２、ディスクアレイコントローラ５４ａと５４ｂ、およびＲＡＩＤ管理システム５６を備えたディスクアレイ５０を含む。本明細書で使用される「ディスク」は、あらゆる大容量記憶装置、一般的には不揮発性でランダムアクセス可能な、再書込み可能の大容量記憶装置を言う。ディスクには、不揮発性電子記憶素子（例えば、ＰＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ等）だけでなく、磁気ディスクおよび光ディスクが含まれる。
【００２５】
ディスクアレイコントローラ５４ａおよび５４ｂは、スカジー（ＳＣＳＩ）のような、１つまたは複数のインターフェースバス５８を介して、ディスクアレイ５０に連結されている。ＲＡＩＤ管理システム５６は、インターフェースプロトコル６０を介してディスクアレイコントローラ５４ａおよび５４ｂに連結されている。ＲＡＩＤ管理システム５６を、ソフトウェア、ファームウェア、ハードウェアまたはそれらの組合せによって具現化することができるということに注意されたい。さらに、ＲＡＩＤ管理システム５６を、別個のコンポーネント（図示せず）として、またはディスクアレイコントローラ５４ａおよび５４ｂ内に、またはホストコンピュータ２２内に具現化することもできるということに注意されたい。１つの実施形態によると、ＲＡＩＤ管理システム５６は、データ記憶システム２４の処理装置上で、またはコンピュータ２２のプロセッサ４０上で実行されるソフトウェアモジュールである。代替的に、ＲＡＩＤ管理システム５６は、他の処理装置によって実行されることができ、またはファームウェアにおいて具現化されることができ、またはハードウェア（例えば、ＡＳＩＣ）において具現化されることができる。
【００２６】
ディスクアレイコントローラ５４ａおよび５４ｂは、ディスクアレイ５０へのデータの転送およびディスクアレイ５０からのデータの転送を調整する。１つまたは複数の冗長グループをディスクアレイ５０上で実現することができ、１つまたは複数のＲＡＩＤアーキテクチャレベルを、それぞれの冗長グループにおいて実現することができる。図２において、ディスクアレイコントローラ５４ａおよび５４ｂは、まったく同じコントローラボードである。この並列なコントローラは、一方のコントローラが動作不能となった場合に連続したバックアップおよび冗長性を提供することにより、信頼性を向上させる。並列のディスクアレイコントローラ５４ａおよび５４ｂは、リンク６４を介してそれぞれのミラーリングされたメモリ６２ａおよび６２ｂを有している。１つの実施形態によると、ミラーリングされたメモリ６２ａおよび６２ｂは、バッテリーバックアップ式不揮発性ＲＡＭ（ＮＶＲＡＭ）であるが、代替的に他のタイプのメモリを使用することもできる。ミラーリングされたメモリ６２ａおよび６２ｂは、ディスクアレイ５０における記憶空間のメモリマップ、ディスクアレイ５０から読み出されているデータのための読出しキャッシュ、ディスクアレイ５０に書き込まれる前のデータのための書込みキャッシュのような、数種類の情報を格納する。図２には二重ディスクアレイコントローラ５４ａおよび５４ｂが示されているが、３つ以上のコントローラが使用されるマルチコントローラ構成、または代替的にシングルコントローラ構成のような、異なる構成を使用することもできる。
【００２７】
ＲＡＩＤ管理システム５６は、要求待ち行列６６、待ち行列コントローラ６８、優先順位識別部７０、要求ディスパッチャ７２、再構築コントローラ７４および要求プロセッサ７６を含む。再構築コントローラ７４は、１つまたは複数のディスク５２が故障した場合に、ディスクアレイ５０によって維持される１つまたは複数のＲＡＩＤアーキテクチャレベルのいずれかにおけるデータの再構築を管理する。ディスク５２の故障は、ディスク自体の問題またはディスクのアクセスに使用されるコンポーネント（例えば、バス）の問題に起因して、ディスク５２全体またはディスク５２の一部がアクセス不能になることを示す。ディスク故障の検出は当業者にとって周知であるため、本発明に関連する部分を除いてこれ以上の説明は省略する。
【００２８】
ディスクアレイ５０に異なるＲＡＩＤレベルが格納されることができることに起因して、異なるディスクが故障すると、異なるＲＡＩＤレベルが再構築されることとなる場合がある。記憶アレイのデータが再構築される方法は、故障の原因、アレイに採用されるＲＡＩＤレベル、冗長グループにおけるディスクの数のような多くの要因に依存して変わる。アレイにおいてデータを再構築する例としては、故障したディスクが使用されないように他のディスクおよび／またはＲＡＩＤレベルにデータを移行させること、新たにインストールされたディスクにデータをコピーする（または書込むべきデータを判断してそのデータを書込む）こと、指定されたバックアップまたはスペアディスクにデータを書込むこと、が含まれる。いずれにしても、ＲＡＩＤレベルの再構築は、典型的には、ディスクアレイ５０からのデータの読出しおよび／またはディスクアレイ５０へのデータの書込みを含む。さらに、再構築プロセスは、故障の検出に応じて自動的に実行されることができ、または代替的に、ユーザ（または管理者）の要求に応じて実行されてもよい。ＲＡＩＤレベルの再構築は当業者には周知であるため、本発明に関連する部分を除いてこれ以上の説明は省略する。
【００２９】
図２に要求待ち行列６６が示されているが、本明細書ではこれを、論理待ち行列構造（実際の待ち行列機構の実現を抽象化したもの）として説明する。要求待ち行列６６は、広範囲な様々な方法のいずれによって実現されてもよい。かかる実現の例には、以下のものが含まれる。すなわち、すべてのＩ／Ｏ要求（ホストまたは再構築に関わりなく）が配置される単一の待ち行列を使用してもよい。または、複数の待ち行列を使用して、Ｉ／Ｏ要求を１つの待ち行列に配置し、再構築要求を他の待ち行列に配置するようにしてもよいし、代替的に、優先順位の異なる要求を異なる待ち行列に配置するようにしてもよい。または、要求および各要求の受け取りの時刻の簡単なリストを保持してもよい（このリストに、さらに各要求の優先順位をオプションとして含めてもよい）。
【００３０】
要求待ち行列６６は、コントローラ５４ａおよび５４ｂによって処理されるべき、ディスクアレイ５０に対するＩ／Ｏ要求を格納する。これらのＩ／Ｏ要求は、ホストコンピュータ２２、または代替的に再構築コントローラ７４で発生することができ、さらに、入力および／または出力要求（例えば、読出し要求、書込み要求等）であることができる。示されている実施例では、要求は、待ち行列コントローラ６８によって要求待ち行列６６に入力されるが、代替的に、ホストコンピュータ２２または再構築コントローラ７４によって要求待ち行列６６に直接入力されてもよい。要求は、異なる方法で（たとえば、受け取られた順序で）要求待ち行列６６に入力されることができ、または、後でより詳細に述べるようにいくつかの他の順序方式に従って、要求待ち行列６６に入力されることができる。
【００３１】
要求は、要求ディスパッチャ７２によって要求待ち行列６６から検索され、処理のために要求プロセッサ７６に渡される。要求の処理は、要求の種類に基づいて変わるが、概して、要求を遂行するのに必要な動作を実行することを言う。これら動作には、例えば、パリティ値を計算すること、１つまたは複数のディスクにデータを書込むこと、１つまたは複数のディスクからデータを読出すこと、等が含まれることができる。要求ディスパッチャ７２は、待ち行列に配置された順序で、または代替的に、後でより詳細に述べるような他の順序に従って、要求待ち行列６６から要求を抽出することができる。
【００３２】
優先順位識別部７０は、ホストＩ／Ｏ要求または再構築Ｉ／Ｏ要求のどちらが他方に対する優先権を有するべきかを判断する。待ち行列コントローラ６８および／または要求ディスパッチャ７２の振舞いは、後でより詳細に説明するように、ホストＩ／Ｏ要求または再構築Ｉ／Ｏ要求のどちらが他方に対する優先権を有するべきかに基づいて変わることができる。
【００３３】
概して、ホストＩ／Ｏ要求または再構築Ｉ／Ｏ要求に互いに対する優先権を与えるために、要求待ち行列６６、待ち行列コントローラ６８、優先順位識別部７０および要求ディスパッチャ７２は協調して動作する。ある特定の時刻に、ホスト要求または再構築要求のどちらが優先権を有しているかは、アレイ５０が、永久的にデータを失う状態にどれくらい近い状態にあるかに従って決まる。一方のタイプの要求に、他方のタイプの要求に対する優先権を与えることは、要求ベースで行うことができ（例えば、他のいずれの要求よりも前に処理されるために、優先要求のすべてがディスクアレイコントローラ５４ａおよび５４ｂに渡される）、または代替的に、リソースベースで行うことができる（例えば、優先権を持たない要求は、優先権を持つ要求よりもリソースの使用がより制限される）。
【００３４】
図３は、ホストＩ／Ｏ要求および再構築Ｉ／Ｏ要求を管理する例示的なプロセスを示すフローチャートである。図３のプロセスは、図２のＲＡＩＤ管理システム５６によって実現され、図２の要素を参照しつつ説明される。
【００３５】
最初に、データ記憶システム２４においてディスクの故障が無いとき、ホストＩ／Ｏ要求は優先権を有している（これを、「ホスト優先」と呼ぶ）（９２）。ホストＩ／Ｏ要求は、ＲＡＩＤレベルの低下をもたらすディスク故障が発生するまで、優先権を持ち続ける（９４）。低下したＲＡＩＤレベルとは、１つまたは複数のディスクが故障したＲＡＩＤレベルを言う。１つまたは複数のＲＡＩＤレベルのデータを格納しているディスクが故障した場合、そのディスク故障によってＲＡＤＩレベルが低下する。しかしながら、すべてのディスク故障がＲＡＩＤレベルの低下をもたらすものではない（例えば、ディスクがスペアディスクであってデータをまったく格納していない、またはディスクアレイが新しくまだＲＡＩＤレベルについて初期化されていない、または故障したディスクが別の冗長グループにある、等）。
【００３６】
ＲＡＩＤレベルの低下をもたらすディスク故障が発生すると、優先順位識別部７０は、１つまたは複数のＲＡＩＤレベルが臨界点にあるか否かをチェックする（９６）。臨界点とは、ＲＡＩＤレベルが永久的にデータを失いつつある状態を言う。永久的にデータを失うとは、データを失って、該失ったデータを回復することができないことを言う。データを永久的に失うことは、単純にデータを失うこと（例えば、ディスク故障により）とは異なる。なぜならば、ＲＡＩＤ記憶システムの本質は、いくつかのディスク故障が発生しても、永久的に失うことなく再構築することによって該ディスク上のデータを回復させることのできる冗長性を提供することだからである。
【００３７】
１つの実施形態によると、ＲＡＩＤレベルは、１つ（またはもう１つ）のディスクの故障によってそのＲＡＩＤレベルの少なくとも一部のデータが永久的に失われるであろうという場合、永久的にデータを失いつつあると識別される。ＲＡＩＤアーキテクチャレベルにより、データの喪失無しに持ちこたえることができる故障の数は変化するため、冗長グループにおいて１つのディスクが故障すると、いくつかのＲＡＩＤレベル（例えば、ＲＡＩＤ１またはＲＡＩＤ５）は永久的にデータを失いつつある状態になるが、他のＲＡＩＤレベル（例えば、ＲＡＩＤ６）は、該冗長グループのさらに他のディスク（１つまたは複数）が故障するまで、永久的にデータを失いつつある状態にはならない、ということが、階層型データ記憶システムにおいては可能である。
【００３８】
示されている実施例では、優先順位識別部７０は、各ＲＡＩＤレベルにおいてデータ喪失がもたらされる前にいくつのディスクの故障が許容されるか、および、どのＲＡＩＤレベルおよびどの冗長グループに、アレイ５０のどのディスク５２が使用されているか、に関してプログラムされている。ディスク５２が故障すると、優先順位識別部７０には、どのディスク（１つまたは複数）が故障したか（例えば、直接に、または再構築コントローラ７４を介して）が通知される。同様に、故障したディスクの結果としてシステムがデータの再構築を完了した時も、優先順位識別部７０に（例えば、再構築コントローラ７４によって）通知される。したがって、優先順位識別部７０は、どの冗長グループおよび各冗長グループ内のどのＲＡＩＤレベルが臨界点にあるかを、正確に判断することができる。
【００３９】
優先順位識別部７０が、ディスク故障の結果としていずれのＲＡＩＤレベルも臨界点に無いと判断した場合、ホストＩ／Ｏ要求に優先権が与えられ続ける（９２）。こうして、かかる状況においては、ホストＩ／Ｏ要求は受け取られた順序で処理され、再構築Ｉ／Ｏ要求は、ホストＩ／Ｏ要求によって消費されていない使用可能なリソースがある場合に処理される。
【００４０】
ステップ９６に戻り、１つまたは複数のＲＡＩＤレベルがその臨界点にある場合、それらのＲＡＩＤレベルについて、再構築Ｉ／Ｏ要求にホストＩ／Ｏ要求に対する優先権が与えられる（それらのＲＡＩＤレベルの「再構築優先」と呼ばれる）（９８）。再構築優先である場合、再構築Ｉ／Ｏ要求には、ホストＩ／Ｏ要求よりも優先的処置が与えられる（例えば、最初に処理される、またはより多くのリソースが割当てられる、等）。臨界点にあるＲＡＩＤレベルのそれぞれについてのこの優先順位は、そのＲＡＩＤレベルが臨界点にある限り続き（９６）、臨界点でなくなった時、そのＲＡＩＤレベルについて、ホストＩ／Ｏ要求は再構築Ｉ／Ｏ要求に対する優先権を有する。例えば、冗長グループがＲＡＩＤ１データおよびＲＡＩＤ６データを含み、その冗長グループにおける１つのディスクが故障した場合、その冗長グループのＲＡＩＤ１は臨界点にあるがＲＡＩＤ６は臨界点にない。そのため、ＲＡＩＤ１は再構築優先の状態にあるが、ＲＡＩＤ６はまだホスト優先の状態にある。ＲＡＩＤレベルがその臨界点にある時に、再構築Ｉ／Ｏ要求にホストＩ／Ｏ要求に対する優先権を与えることにより、そのＲＡＩＤレベルのデータをより迅速に再構築して、永久的にデータを失うかもしれないことに対する保護を支援することができる。
【００４１】
代替的な実施形態によると、ステップ９８において、少なくとも１つのＲＡＩＤレベルが臨界点にある場合、そのＲＡＩＤレベルおよび少なくとも１つの他のＲＡＩＤレベル（または、１つの実施例によるとすべてのＲＡＩＤレベル）は、ホストＩ／Ｏ要求に対する優先権が与えられた再構築Ｉ／Ｏ要求を有する。例えば、冗長グループがＲＡＩＤ１データおよびＲＡＩＤ６データを含み、その冗長グループの１つのディスクが故障した場合、その冗長グループのＲＡＩＤ１はその臨界点にあり、そのため、その冗長グループのＲＡＩＤ１およびＲＡＩＤ６は共に、（ＲＡＩＤ６がその臨界点に無い場合であっても）再構築優先の状態になる。この場合、冗長グループ全体が再構築優先の状態にある。
【００４２】
さらに、ステップ９８において、臨界点にあるＲＡＩＤレベルの再構築Ｉ／Ｏ要求に、すべての冗長グループのホストＩ／Ｏ要求に対する優先権が与えられる（ある特定の冗長グループにおけるＲＡＩＤレベルのいずれもが臨界点にない場合であっても）ようにしてもよい。代替的に、臨界点にあるＲＡＩＤレベルの再構築Ｉ／Ｏ要求に、該臨界点にあるＲＡＩＤレベルと同じ冗長グループにおけるホストＩ／Ｏ要求に対してのみ優先権が与えられるようにしてもよい（この場合、その臨界点にあるＲＡＩＤレベルが無い他の冗長グループは、ホスト優先の状態を維持する）。
【００４３】
図４は、ホストＩ／Ｏ要求または再構築Ｉ／Ｏ要求のどちらが優先権を有しているかに基づいて要求待ち行列を管理する例示的なプロセスを示すフローチャートである。図４のプロセスは、図２のＲＡＩＤ管理システム５６によって実現され、図２の要素を参照しながら説明される。
【００４４】
図４のプロセスにおいて、要求は、優先順位に基づいて要求待ち行列６６の、ある場所に配置される。ＲＡＩＤレベルが再構築優先の状態にある場合、要求は、受け取られた順序で要求待ち行列６６に配置され、先入れ先出し（ＦＩＦＯ）方式で処理される。これにより、いくつかの再構築Ｉ／Ｏ要求が取出されて処理される前に、ホストＩ／Ｏ要求が要求待ち行列６６から取出されて処理されることがあるが、通常は、再構築Ｉ／Ｏ要求は、処理においてホストＩ／Ｏ要求よりも多くのシステムリソースを消費するので、再構築Ｉ／Ｏ要求が優先権を有することとなる。
【００４５】
最初に、Ｉ／Ｏ要求（ホストまたは再構築のいずれか）が受け取られ（１０８）、待ち行列コントローラ６８は、（例えば優先順位識別部７０に問い合せることにより）その要求が対応するＲＡＩＤレベル（代替的には、冗長グループ、またはディスクアレイ全体でもよい）が再構築優先の状態にあるかどうかをチェックする（１１０）。ＲＡＩＤレベルが再構築優先の状態にある場合、待ち行列コントローラ６８は、要求がホストＩ／Ｏ要求であるか再構築Ｉ／Ｏ要求であるかに関わらず、受け取られた要求を要求待ち行列６６の最下位に配置する（１１２）。その後、処理は、別のＩ／Ｏ要求（ホストまたは再構築のいずれか）を受け取るため、ステップ１０８に戻る。
【００４６】
一方、ＲＡＩＤレベルがホスト優先状態である場合、待ち行列コントローラ６８は、要求が、ホストＩ／Ｏ要求であるか再構築Ｉ／Ｏ要求であるかをチェックする（１１４）。要求が再構築Ｉ／Ｏ要求である場合、コントローラ６８は、要求を、要求待ち行列６６の最下位に配置する（１１２）。要求がホストＩ／Ｏ要求である場合、待ち行列コントローラ６８は、要求待ち行列６６に再構築要求があるか否かをチェックする（１１６）。要求待ち行列６６に再構築要求が無い場合、コントローラ６８は、要求を、要求待ち行列６６の最下位に配置する（１１２）。一方、要求待ち行列６６に再構築要求がある場合、コントローラ６８は、要求を、待ち行列の他のすべてのホスト要求より下であるがすべての再構築要求よりも上に配置する（１１８）。その後、処理は、他のＩ／Ｏ要求を受け取るため、ステップ１０８に戻る。
【００４７】
図４のプロセスにより、待ち行列コントローラ６８が要求待ち行列６６における要求の順序付けに責任を持つよう動作するため、要求ディスパッチャ７２は、常に要求待ち行列６６の最上位からＩ／Ｏ要求を取出すことができる。代替的に、コントローラ６８に、受け取られた順序で要求を要求待ち行列６６に配置させ、要求ディスパッチャ７２に、要求待ち行列６６から要求を処理のために取り出す順序を変更させることにより、同じ結果を得ることができる（例えば、ホスト優先状態にある場合、要求待ち行列６６のホストＩ／Ｏ要求を探索し、処理のための何らかの再構築Ｉ／Ｏ要求を選択する前に、処理のためのホストＩ／Ｏ要求を（例えばＦＩＦＯ方式で）選択する）。
【００４８】
図５は、ホストＩ／Ｏ要求または再構築Ｉ／Ｏ要求のどちらが優先権を有しているかに基づいて要求待ち行列を管理する代替的なプロセスを示すフローチャートである。図５のプロセスは、図２のＲＡＩＤ管理システム５６によって実現され、図２の要素を参照しつつ説明される。
【００４９】
図５の例において、待ち行列コントローラ６８は、受け取られた順序で要求を要求待ち行列６６に配置する。その後、要求ディスパッチャ７２は、再構築優先の状態にある時に、ある制限されたリソースの再構築Ｉ／Ｏの使用を確実に保証する方法で、要求待ち行列６６から処理のための要求を選択する。再構築優先の状態にある時、制限されたリソースのホストＩ／Ｏによる使用が閾値量を超えた場合、再構築要求は、その閾値量を超えた状態でなくなるまで、ホスト要求よりも前に処理される。これにより、要求待ち行列６６にホストＩ／Ｏ要求が無い場合には、再構築Ｉ／Ｏ要求は、その制限されたリソースを完全に使用することができると同時に、要求待ち行列６６にホストＩ／Ｏ要求がある場合には、その制限されたリソースの再構築Ｉ／Ｏによる使用が特定の量（すなわち、下限）より低下することが防止される。制限されたリソースの再構築Ｉ／Ｏによる使用量をそのように保証することにより、ＲＡＩＤレベルが再構築優先の状態にある時にいくつかのホストＩ／Ｏ要求が処理されるが、再構築Ｉ／Ｏ要求に対するリソースが不足することが防止される。
【００５０】
図５は、制限されたリソースのホストＩ／Ｏによる使用を制限することに関して説明されているが、代替的に、ＲＡＩＤ管理システム５６は、類似した方法で、制限されたリソースの再構築Ｉ／Ｏによる使用を制限してもよい。このような実施形態では、ホスト優先の状態にある時に、制限されたリソースの再構築Ｉ／Ｏによる使用が閾値量を超えた場合、その閾値量を超えた状態でなくなるまで、ホスト要求は再構築要求よりも前に処理される。
【００５１】
図２を参照すると、記憶システム２４は、種々のリソースの任意のものを使用して実現することができる。かかるリソースの例には、メモリ、ＣＰＵ、バス等が含まれる。システム２４のこれらリソースのいずれについても、制限を設けることができる。１つの実施形態によると、ディスクアレイコントローラ５４ａおよび５４ｂ、またはディスクアレイコントローラ５４ａおよび５４ｂとディスク５２との間のバス（または他のチャネル）のように、「ボトルネック」であると考えられるリソースには制限がある。
【００５２】
図５に戻ると、要求ディスパッチャ７２は、ディスクアレイコントローラ５４ａおよび５４ｂが他のＩ／Ｏ要求を処理することができるまで待機する（１２８）。用意ができると、要求ディスパッチャ７２は、要求待ち行列６６における次のＩ／Ｏ要求に対応するＲＡＩＤレベル（代替的には、冗長グループ、またはディスクアレイ全体でもよい）が再構築優先の状態にあるか否かをチェックする（１３０）。要求待ち行列６６における要求のＲＡＩＤレベルは、該要求と共に要求待ち行列６６に格納することができ、または、代替的に要求ディスパッチャ７２が、対応するＲＡＩＤレベルを判断することができる（例えば、要求ディスパッチャ７２を、ＲＡＩＤレベルに対するアドレスのマッピングを持つようプログラムしてもよく、または、要求ディスパッチャ７２が、ＲＡＩＤレベルに対するアドレスのマッピングへのアクセスを持つようにしてもよい）。
【００５３】
要求待ち行列６６における次の要求に対応するＲＡＩＤレベルが再構築優先の状態に無い場合、処理のための次の要求が要求待ち行列６６から選択される（１３２）。ＲＡＩＤレベルが再構築優先の状態にある場合、要求ディスパッチャ７２は、そのＲＡＩＤレベルについて、制限されたリソースのホストＩ／Ｏによる使用が閾値を超えているか否かをチェックする（１３４）。該制限されたリソースのホストＩ／Ｏによる使用が閾値を超えていない場合、要求待ち行列６６における次の要求が、処理のために要求待ち行列６６から選択される（１３２）。しかしながら、該制限されたリソースのホストＩ／Ｏによる使用が閾値を超えた場合、そのＲＡＩＤレベルについての次の再構築Ｉ／Ｏ要求が、処理のために要求待ち行列６６から選択される（１３６）。
【００５４】
代替的に、要求ディスパッチャ７２は、ステップ１３０において、異なるＲＡＩＤレベル間の区別に関与しなくてもよい。例えば、いずれかのＲＡＩＤレベルが再構築優先の状態であると判断されたならば、ステップ１３４における判断は、そのいずれかのＲＡＩＤレベル（または組み合わされたＲＡＩＤレベルのすべて）についてのホストＩ／Ｏによる使用が閾値を超えているか否かに関して行うことができる。
【００５５】
ホスト優先から再構築優先に変更するのに、または再構築優先からホスト優先に変更するのに超えるべき上記閾値をどれくらいにするか、およびどのリソースを制限するか、という決定は、種々の方法で行うことができる。図２のＲＡＩＤ管理システム５６は、どのシステムリソースが制限されるべきかの特定およびそれらの対応する閾値について、事前に構成されることができる。かかるリソースの制限は、管理者または他のユーザにより変更されることにより、または代替的に管理者または他のユーザにより最初に入力されていてもよい。かかる入力は、例えば図２のユーザインターフェース４８を介して受取られることが可能である。例として、ＲＡＩＤ管理システムにおける種々のリソースの識別子がユーザに提示され、それらリソースのうちのいずれが制限されるべきかをユーザが選択することができるようにすることができる。さらに、特定の閾値を入力することもできる（例えば、ユーザが、再構築優先の状態にある時は、ホストＩ／Ｏ要求によって、ある特定のリソースが２５％より多くは使用されるべきではないと示すことにより）。代替的に、特定の値に対応する複数の事前設定が与えられるようにしてもよい（例えば、ユーザは「低」、「中」または「高」という制限を選択することができ、それらの各々が、管理モジュール４６またはＲＡＩＤ管理システム５６によって、それぞれ２５％、５０％および７５％等の特定の値に変換されるようにすることができる）。
【００５６】
図２から図５は、記憶システム２４によってサポートされるすべてのＲＡＩＤレベルおよび冗長グループについて、単一の要求待ち行列６６、待ち行列コントローラ６８、優先順位識別部７０および要求ディスパッチャ７２を有するデータ記憶システム２４に関して述べられている。代替的に、各冗長グループが、それ自身の要求待ち行列６６、待ち行列コントローラ６８、優先順位識別部７０および要求ディスパッチャ７２を有してもよく、および／または各ＲＡＩＤレベル（またはＲＡＩＤレベルの他の組合せ）が、それ自身の要求待ち行列６６、待ち行列コントローラ６８、優先順位識別部７０およびディスパッチャ７２を有してもよい。
【００５７】
さらに、ＲＡＩＤ管理システムは、要求の処理中に、再構築Ｉ／Ｏ要求および／またはホストＩ／Ｏ要求に対して優先権を与えることができる。一般に、Ｉ／Ｏ要求の処理は、それぞれの段階間に種々の遅延がある複数の段階において発生する。例えば、図２の要求プロセッサ７６は、１つの要求を処理するために１つまたは複数のディスク５２からデータを読出す必要があるかもしれない。しかしながら、ディスク５２から実際にデータを読出す際の遅延により、要求プロセッサ７６が該ディスクからデータが取得されるのを単に待っている期間がしばしばある。この期間中、さらなる要求が要求ディスパッチャ７２から受け取られて、先行する要求に割り込みをかけることができ、その結果要求プロセッサ７６は、その新たな要求の処理を開始（および処理を完了する可能性もある）ことができる。
【００５８】
図６は、Ｉ／Ｏ要求の割り込みの一例を示すフローチャートである。図６は、例示的な要求として書込み要求を示しているが、他のタイプのＩ／Ｏ要求に対しても同様の段階が発生する。
【００５９】
最初に、ホスト書込み要求が受け取られる（ブロック１４２）。このホスト書込み要求に基づいて、読出しコマンドが図２のディスク５２のうちの１つまたは複数に対して発行される（ブロック１４４）。ある期間の後、要求したデータがディスクから受け取られる（ブロック１４６）。その後、パリティ演算のような種々の演算が実行される（ブロック１４８）。かかる演算が実行される方法は、要求に関連するＲＡＩＤレベルによって変わりうる。かかる演算が完了すると、ホスト書込み要求に対応するデータを伴う書込みコマンドが、ディスク５２のうちの１つまたは複数に対して発行される。
【００６０】
一方、図６の例では、読出しデータがディスク５２から受取られている間に（ブロック１４６）、再構築の読出し要求が受け取られている（ブロック１５２）。要求プロセッサ７６は、データが受け取られた後（ブロック１４６）、再構築読出し要求を優先してホスト書込み要求に割り込みをかけ、再構築読出し要求をディスク５２のうちの１つまたは複数に対して発行する（ブロック１５４）。ある期間の後、要求したデータがディスクから受取られ（ブロック１５６）、該データが要求側に返される。要求側が再構築読出し要求の処理を完了すると、割り込まれたホスト書込み要求は再開することができ、要求プロセッサ７６は、必要な演算を実行し（ブロック１４８）、ディスクに対して書込みコマンドを発行する（ブロック１５０）。
【００６１】
代替的に、ホスト書込み要求に対して完全に割り込みをかけるのではなく、ホスト書込み要求または再構築読出し要求のどちらかを処理することができる状況の場合に、再構築読出し要求が単に優先されるようにしてもよい。例えば、ディスクに対して再構築読出し要求についての読出しコマンドが発行された後（ブロック１５４）、要求プロセッサ７６は、再構築読出し要求について該要求されたデータをディスクから受け取るのを待っている間に、種々のパリティ演算を実行することができ（ブロック１４８）、それによって、要求プロセッサ７６がアイドル状態である時間を低減することができる。
【００６２】
要求プロセッサ７６は、オプションとして、割り込まれたホストＩ／Ｏ要求が再構築Ｉ／Ｏ要求と同じアドレスおよび／またはディスクの場所を変更するかどうかをチェックしてもよく、データの整合性を保証するために、ホストＩ／Ｏ要求が再構築Ｉ／Ｏ要求の前に処理を終了することができるよにしてもよい。
【００６３】
上記説明は、ホストＩ／Ｏ要求および再構築Ｉ／Ｏ要求が共にＲＡＩＤ管理システムによって待ち行列に入れられるように述べている。代替の実施形態では、かかる待ち行列処理は不要である。例として、ホストコンピュータまたは再構築コントローラが、Ｉ／Ｏ要求を有したときに信号またはメッセージをＲＡＩＤ管理システムに送信し、その後、ＲＡＩＤ管理システムから受入れまたは肯定応答信号あるいは何らかのメッセージを受け取ったときに、処理のためのＩ／Ｏ要求を送信してもよい。
【００６４】
このように、Ｉ／Ｏ要求に優先権を与えることにより再構築中にホストＩ／Ｏパフォーマンスおよび記憶アレイの可用性を向上させることについて説明した。再構築Ｉ／Ｏ要求には、記憶アレイが永久的にデータを失いつつある場合にのみ、ホストＩ／Ｏ要求に対する優先権が与えられるのが有利である。それ以外の場合は、データ喪失の機会を増大させることなく、ホストＩ／Ｏ要求に応答して記憶アレイのパフォーマンスを向上させるために、ホストＩ／Ｏ要求に、再構築Ｉ／Ｏ要求に対する優先権を与える。
【００６５】
上記説明では、構成の特徴および／または方法の動作に特有の言語を用いたが、特許請求の範囲で定義されている発明は、説明された特定の特徴または動作に限定されるものではない、ということは理解されるべきである。この特定の特徴および動作は、本発明を実現する例示的な形態として開示されている。
【００６６】
本発明は、以下の実施態様を含む。
【００６７】
（１）記憶アレイ（２４）が永久的にデータを失いつつあることを識別するステップ（９６）と、
前記記憶アレイ（２４）が永久的にデータを失いつつあると識別したことに応答して、該記憶アレイの少なくとも一部を再構築する入出力（Ｉ／Ｏ）要求に、ホストＩ／Ｏ要求に対する優先権を与えるステップ（９８）と、
を含む方法。
【００６８】
（２）前記識別するステップ（９６）は、前記記憶アレイ（２４）における複数の記憶装置（５０）のうちの１つのさらなる記憶装置（５２）の故障が、該記憶アレイ（２４）において永久的なデータ喪失の結果となる場合に、該記憶アレイ（２４）が永久的にデータを失いつつあると識別するステップを含む上記（１）に記載の方法。
【００６９】
（３）前記記憶アレイ（２４）がＲＡＩＤシステムである上記（１）に記載の方法。
【００７０】
（４）前記ＲＡＩＤシステムは複数のＲＡＩＤレベルを含み、
前記識別するステップは、前記複数のＲＡＩＤレベルのうちの少なくとも１つが永久的にデータを失いつつある時を識別するステップ（９６）を含み、
永久的にデータを喪失しつつある前記少なくとも１つのＲＡＩＤレベルについてのみ、再構築Ｉ／Ｏ要求に、ホストＩ／Ｏ要求に対する優先権を与えるステップ（９８）をさらに含む上記（３）に記載の方法。
【００７１】
（５）前記記憶アレイが永久的にデータを失いつつある状態でない場合、ホストＩ／Ｏ要求に、再構築Ｉ／Ｏ要求に対する優先権を与えるステップ（９２）をさらに含む上記（１）に記載の方法。
【００７２】
（６）前記記憶アレイの少なくとも一部を再構築するＩ／Ｏ要求に、ホストのＩ／Ｏ要求に対する優先権を与える前記ステップ（９８）は、
前記アレイの少なくとも一部を再構築するＩ／Ｏ要求とホストのＩ／Ｏ要求とを共に、受け取られた順序で待ち行列（６６）に配置するステップ（１１２）と、前記再構築のためのＩ／Ｏ要求と前記ホストのＩ／Ｏ要求とを先入れ先出し（ＦＩＦＯ）方式で前記待ち行列から処理するステップと、
を含む上記（１）に記載の方法。
【００７３】
（７）前記記憶アレイの少なくとも一部を再構築するＩ／Ｏ要求に、ホストのＩ／Ｏ要求に対する優先権を与える前記ステップ（９８）は、前記記憶アレイおよび対応するコントローラにおける複数のリソースの間で、前記ホストのＩ／Ｏ要求よりも前記再構築するＩ／Ｏ要求に、より多くのリソースの使用を割当てるステップ（１３４，１３６）を含む上記（１）に記載の方法。
【００７４】
（８）前記記憶アレイ（２４）および対応するコントローラ（５４ａ，５４ｂ）は複数のリソースを有し、
前記記憶アレイ（２４）の少なくとも一部を再構築するＩ／Ｏ要求に、ホストＩ／Ｏ要求に対する優先権を与える前記ステップ（９８）は、ホストのＩ／Ｏによるリソースの使用を閾値量を超えないように制限するステップ（１３４，１３６）を含む上記（１）に記載の方法。
【００７５】
（９）前記閾値量（１３４）はユーザが構成可能である上記（８）に記載の方法。
【００７６】
（１０）前記記憶アレイの少なくとも一部を再構築するＩ／Ｏ要求に、ホストＩ／Ｏ要求に対する優先権を与える前記ステップ（９８）は、再構築Ｉ／Ｏ要求を優先して、ホストＩ／Ｏ要求に割り込みをかけるステップ（１４６，１４８，１５２）を含む上記（１）に記載の方法。
【００７７】
（１１）コンピュータの１つまたは複数のプロセッサによって実行される場合に、該１つまたは複数のプロセッサに動作を実行させるコンピュータプログラムを格納した１つまたは複数のコンピュータ読取り可能媒体であって、
記憶アレイ（２４）が永久的にデータを失いつつあることを識別するステップ（９６）と、
前記記憶アレイ（２４）が永久的にデータを失いつつあることを識別したことに応答して、該記憶アレイの少なくとも一部を再構築する入出力（Ｉ／Ｏ）要求に、ホストＩ／Ｏ要求に対する優先権を与えるステップ（９８）と、
を実行させるためのプログラムを格納した、１つまたは複数のコンピュータ読取り可能媒体。
【００７８】
（１２）前記識別するステップ（９６）は、前記記憶アレイ（２４）における複数の記憶装置（５０）のうちの１つのさらなる記憶装置（５２）の故障が、該記憶アレイ（２４）において永久的なデータ喪失の結果となる場合に、該記憶アレイ（２４）が永久的にデータを失いつつあると識別するステップを含む、上記（１１）に記載の１つまたは複数のコンピュータ読取り可能媒体。
【００７９】
（１３）前記記憶アレイの少なくとも一部を再構築するＩ／Ｏ要求に、ホストＩ／Ｏ要求に対する優先権を与える前記ステップ（９８）は、
前記記憶アレイおよび対応するコントローラにおける複数のリソースの間で、ホストＩ／Ｏ要求よりも再構築Ｉ／Ｏ要求により多くのリソース使用を割当てるステップ（１３４，１３６）を含む上記（１１）に記載の１つまたは複数のコンピュータ読取り可能媒体。
【００８０】
（１４）前記記憶アレイ（２４）および対応するコントローラ（５４ａ，５４ｂ）は複数のリソースを有し、
前記記憶アレイ（２４）の少なくとも一部を再構築するＩ／Ｏ要求に、ホストＩ／Ｏ要求に対する優先権を与える前記ステップ（９８）は、ホストＩ／Ｏによるリソースの使用を閾値量を超えないように制限するステップ（１３４，１３６）を含む、上記（１１）に記載の１つまたは複数のコンピュータ読取り可能媒体。
【００８１】
（１５）記憶アレイ（２４）に対するホストの入出力（Ｉ／Ｏ）要求または再構築のＩ／Ｏ要求のどちらが優先権を有するべきかを判断する優先順位識別部（７０）と、
前記優先順位識別部（７０）に通信可能なように連結されており、前記ホストＩ／Ｏ要求または再構築Ｉ／Ｏ要求のどちらが優先権を有するべきかに少なくとも部分的に基づいて、実行のためのホストＩ／Ｏ要求および再構築Ｉ／Ｏ要求を選択する要求ディスパッチャ（７２）と、
を備える装置。
【００８２】
（１６）前記記憶アレイ（２４）がＲＡＩＤシステムを備えている上記（１５）に記載の装置。
【００８３】
（１７）前記ＲＡＩＤシステムは複数のＲＡＩＤレベルを有しており、
前記複数のＲＡＩＤレベルのそれぞれに関連付けられた優先順位識別部（７０）と、
前記複数のＲＡＩＤレベルのそれぞれに関連付けられた要求ディスパッチャ（７２）と、
をさらに備える上記（１６）に記載の装置。
【００８４】
（１８）前記要求ディスパッチャ（７２）による実行のための選択を待つために、前記再構築Ｉ／Ｏ要求および前記ホストＩ／Ｏ要求が配置される要求待ち行列構造（６６）をさらに備える上記（１５）に記載の装置。
【００８５】
（１９）前記要求ディスパッチャ（７２）は、前記要求がホストＩ／Ｏ要求か再構築Ｉ／Ｏ要求かに関わらず、前記待ち行列構造（６６）の最上位から要求を選択するよう構成されている上記（１８）に記載の装置。
【００８６】
（２０）前記要求待ち行列構造（６６）に通信可能なように連結され、ホストＩ／Ｏ要求が優先権を有するべきである場合にのみホストＩ／Ｏ要求が再構築要求よりも上位にあるように、前記待ち行列構造（６６）における要求を順位付けするよう構成された待ち行列コントローラ（６８）をさらに備える上記（１８）に記載の装置。
【００８７】
（２１）前記要求待ち行列構造（６６）は、複数の待ち行列を含む上記（１８）に記載の装置。
【００８８】
（２２）複数のリソース（６０，５４ａ，５４ｂ，６２ａ，６２ｂ，５８）をさらに備えており、
前記要求ディスパッチャ（７２）は、再構築Ｉ／Ｏ要求が優先権を有するべきである場合に、前記複数のリソース（６０，５４ａ，５４ｂ，６２ａ，６２ｂ，５８）の少なくとも１つの前記ホストＩ／Ｏ要求による使用を制限する上記（１５）に記載の装置。
【００８９】
（２３）前記優先順位識別部（７０）は、前記記憶アレイ（２４）における複数の記憶装置（５０）のうちの１つのさらなる記憶装置（５２）の故障が該記憶アレイ（２４）におけるデータ喪失の結果となる場合に、再構築Ｉ／Ｏ要求が優先権を有するべきであると判断する、上記（１５）に記載の装置。
【００９０】
（２４）前記要求ディスパッチャ（７２）と通信可能なように連結され、Ｉ／Ｏ要求を処理し、再構築Ｉ／Ｏ要求を優先してホストＩ／Ｏ要求に割り込みをかける要求プロセッサ（７６）をさらに備える、上記（１５）に記載の装置。
【００９１】
【発明の効果】
再構築中のホストのＩ／Ｏパフォーマンスおよび記憶アレイの可用性を向上させることができる。
【図面の簡単な説明】
【図１】データ記憶システムに接続されているホストコンピュータを有する例示的なコンピュータシステムを示すブロック図。
【図２】例示的なホストコンピュータおよび例示的なデータ記憶システムをより詳細に示すブロック図。
【図３】ホストＩ／Ｏ要求および再構築Ｉ／Ｏ要求を管理する例示的なプロセスを示すフローチャート。
【図４】ホストＩ／Ｏ要求または再構築Ｉ／Ｏ要求のどちらが優先権を有するかに基づき要求待ち行列を管理する例示的なプロセスを示すフローチャート。
【図５】ホストＩ／Ｏ要求または再構築Ｉ／Ｏ要求のどちらが優先権を有するかに基づき要求待ち行列を管理する代替的なプロセスを示すフローチャート。
【図６】Ｉ／Ｏ要求の割り込みの例を示すフローチャート。
【符号の説明】
２４…データ記憶システム
５０…ディスクアレイ
５２…ディスク
５４ａ，５４ｂ…ディスクアレイコントローラ
５８…インターフェースバス
６２ａ，６２ｂ…ミラーリングされたメモリ
６６…要求待ち行列
【図１】
0004922496.tif 000002
【図２】
0004922496.tif 000003
【図３】
0004922496.tif 000004
【図４】
0004922496.tif 000005
【図５】
0004922496.tif 000006
【図６】
0004922496.tif 000007