(57)【特許請求の範囲】
【請求項１】
冗長性パリティ記憶法に従ってユーザ・データをディスク・アレイに書き込む方法であって、該ディスク・アレイは、複数の記憶ディスクを持ち、複数のストライプに構成されており、各ストライプは、複数の記憶ディスクにわたって延び、それぞれが記憶スペースの複数のセグメントを含み、各セグメントが前記ディスク・アレイの一つの記憶ディスク上にあるストライプの一部分であり、
前記方法は、
(a)ユーザ・データまたはパリティ情報を持つセグメントと空のセグメントとを区別するステップと、
(b)上記空のセグメントを持つ、上記ディスク・アレイにおける満たされていないストライプを部分ストライプ・ポインターを用いて同定するステップと、
(c) セグメント・フィル・ポインターを用い、前記満たされていないストライプにおける空のセグメントを見つけるステップと、
(d)上記満たされていないストライプの上記空のセグメントにユーザ・データを書き込むステップと、
(e)上記ステップ(d)で前記セグメントにユーザ・データが書き込まれたあと、書き込み済みのセグメントだけに含まれるユーザ・データに対するパリティ値を決定するステップと、
(f)前記(e)のステップの後、前記パリティ値を前記ディスク・アレイとは別に設けられた不揮発性メモリーに一時的にキャッシュ記憶するステップと、を含み、
前記(e)のステップは、前記キャッシュ記憶されたパリティ値と、今回、前記ストライプの空のセグメントに書き込まれたユーザ・データとの論理関数に基づいて新しいパリティ値を計算することを含み、
(g)前記ストライプの他のセグメントの一つまたは複数を満たすために上記ステップ(c)から(f)を繰り返すステップと、
(h)前記ストライプの全セグメントがユーザ・データを格納するために満たされた後に、前記パリティ値を該ストライプの一つのセグメントに書き込むステップと、
を含む前記方法。
【請求項２】
上記不揮発性メモリーに前記部分的ストライプ・ポインターおよび前記セグメント・フィル・ポインターを格納することを含む、請求項１に記載の方法。
【請求項３】
複数の記憶ディスクを有するディスク・アレイからなるデータ記憶システムであって、
前記ディスク・アレイは、各ストライプが上記複数の記憶ディスクにわたって延びる複数のストライプに構成されており、該各ストライプが複数の記憶スペース・セグメントを含み、各セグメントが前記ストライプの一つの記憶ディスクにおける部分であり、
記憶ディスクへのおよび記憶ディスクからのデータ転送を調整するために上記ディスク・アレイに結合されたディスク・アレイ・コントローラと、
パリティ冗長法に従ってユーザ・データを格納するメモリ割当てを管理するために上記ディスク・アレイ・コントローラに結合されたメモリ・マネージャーとを備え、
上記メモリ・マネージャーは、ユーザ・データをデータ・セグメントに、パリティ情報をパリティ・セグメントに配置し、これにより少くとも一つのパリティ・セグメントおよび一つまたは複数のデータ・セグメントが各ストライプに含まれ、
上記メモリ・マネージャーは、i)上記ディスク・アレイにおける個々のストライプを参照する部分的ストライプ・ポインター、およびii)参照されたストライプにおける個々のセグメントを参照するセグメント・フィル・ポインターを備え、上記メモリ・マネージャは、前記二つのポインターを使って満たされていないストライプ、およびそのストライプにおける空のセグメントを選ぶよう構成されており、
さらに、前記パリティ値が決定される都度、該パリティ値をキャッシュ記憶するための不揮発性メモリーを備え、
上記メモリ・マネージャは、選ばれた前記空のセグメントにユーザ・データを書き込み、各セグメントが書き込まれる都度、該ストライプの書き込み済みの複数のセグメントに含まれるユーザ・データだけに基づくそのストライプのパリティ値を増分的に生成し、その際、前記メモリ・マネージャは、前にキャッシュ記憶されたパリティ値と、今回前記空のセグメントに書かれたユーザ・データとの論理関数に基づいて新しいパリティ値を計算するよう構成されている、
データ記憶システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、ディスク・アレイに、より具体的には、冗長性記憶能力を持つ冗長で階層的なディスク・アレイ・データ記憶システムに関する。この発明は、またデータがディスク・アレイに書き込まれる際に、冗長性を増加的に生成する方法に関する。
【０００２】
ディスク・アレイ・データ記憶システムは、一つの大容量記憶システムを形づくるよう配列され、コーディネートされる複数の記憶ディスク・ドライブ装置を持つ。そのような記憶装置のための3つの主要な設計基準がある。それは、費用、パフォーマンスおよび可用性である。メガバイトあたりの費用が小さく、高い入出力パフォーマンスおよび高いデータ可用性を持つ記憶装置を生産することが最も望ましい。「可用性」が、その記憶装置に格納されたデータをアクセスする能力およびなんらかの故障の場合に継続操作を保証する能力である。典型的に、データ可用性は、データ、またはデータ間の関係が複数のロケーションに格納される冗長性の使用を通して提供される。ディスク・アレイにおける記憶ディスクが部分的、あるいは完全に故障する場合、ユーザ・データは、残っているディスクに格納された冗長データを通して再建されることができる。
【０００３】
【従来の技術】
冗長データを格納するには2つの共通の方法がある。第１の方法、すなわち「 ミラー」法によると、データは、複製され、その記憶装置の2つの別々の領域に 格納される。例えば、ディスク・アレイにおいて、同じデータがディスク・アレイの2つの別々のディスクに提供される。ミラー法は、二重記憶技術によって高 いパフォーマンスおよび高いデータ可用性の利点を持っている。しかし、ミラー法は、データを格納する費用を実質的に２倍にするので比較的高価である。
【０００４】
第２の方法、すなわち「パリティ」法では、記憶領域の一部分が、冗長データを格納するために使われるが、冗長な記憶領域のサイズは、オリジナルのデータを格納するのに使われた残りの記憶スペースより小さい。例えば、5つのディス クを持つディスク・アレイにおいて、4つのディスクが、データを格納するのに 使われ、5番目のディスクが冗長データを格納するのに使われる。パリティ法は 、ミラー法より低コストだという利点があるが、ミラー法に比べるとパフォーマンスおよび可用性特性において劣る。
【０００５】
【発明が解決しようとする課題】
この発明は、特にデータをパリティ技法に従って格納することに向けられる。従来のディスク・アレイにおいて、記憶ディスク上の記憶スペース（空間）は、各ストライプが複数の記憶ディスクにわたって延びる複数のストライプに構成されている。各ストライプは、記憶スペースの複数のセグメントから成り、各セグメントは、ディスク・アレイの一つの記憶ディスク上にある、ストライプの一部分である。
【０００６】
先行技術のディスク・アレイの初期設定の間に記憶ディスクが、フォーマットされ、各ストライプのためのパリティがセットされる。初期設定の後、ディスク・アレイにデータを書くのに4つのI/Oアクセスが必要とされる。すなわち、選ばれたストライプから更新されるべきデータを読む第１のI/O、そのストライプにおけるデータのための対応するパリティを読むための第２のI/O、新しいデータをそのストライプに書き戻すための第３のI/O、および、新しいデータのための新しいパリティをそのストライプに書き込む第４のI/Oである。ディスク・アレイのストライプにデータを書くのに必要なI/Oの数を減らすことが望ましい。
【０００７】
先行技術のディスク・アレイで使われた一つの技法は、パリティ値をキャッシュ記憶することである。これによって、各書込みプロセスの間にディスク・アレイから、パリティを読みとる必要性が減らされ、I/Oの数が３に減らされる。しかし、さらにディスク・アレイのストライプにデータを書くのに必要なI/Oの数を減らす必要性が残っている。
【０００８】
【課題を解決するための手段】
この発明は、パリティ書き込みの間、必要とされるI/Oの数が少ない改善された書込み性能を持つディスク・アレイ・データ記憶システムを提供する。ディスク・アレイは、好ましくは一度に一つのセグメントの逐次的な態様でストライプの個々のセグメントにデータを書く。メモリ・マネージャーが、提供されるストライプのサイズ、およびそのセグメントが、関連したストライプのパリティ値の一部分であるデータを含むどうかに関する、ストライプの各セグメントのパリティ状態を知っている。
【０００９】
好ましい実施例において、メモリ・マネージャーは、2種類のポインターの使用を通して、各セグメントのパリティ状態を追跡する。これらは、満たされているストライプを追跡し続ける１つまたは複数の部分的ストライプ・ポインター、および満たされているストライプの特定のセグメントを参照する１つまたは複数のセグメント・フィル・ポインターである。選ばれたストライプに関し、セグメント・フィル・ポインターの前のセグメントは、ストライプ・パリティに編入されるデータを含むことが知られており、そしてセグメント・フィル・ポインターに続くセグメントは空で、ストライプ・パリティにまだ編入されない。部分的ストライプ・ポインターによって参照されないストライプに関しては、データを含むストライプは、ストライプ・パリティによって代表されるすべてのデータ・セグメントを持つと考えられ、そしてすべての空のストライプは、データを含まないか、これらのセグメントを代表するパリティ値を持たないと理解される。
【００１０】
ひとたびストライプが選ばれれば、データはセグメント・フィル・ポインターによって参照されたセグメントに書かれる。このデータ書込みの間に、選ばれたストライプにおけるすべての満たされたセグメントに含まれるデータに対応するパリティ値が、増分的に生成され、NVRAMのような別々の不揮発性メモリにキャッシュ記憶される。ストライプにおける空のセグメントは、書込みプロセスの間、管理されず、増分的パリティ生成に含まれない。ストライプにおけるすべてのデータ・セグメントが満たされたあと、最終的なパリティ値は、そのストライプのパリティ・セグメントに書かれる。次いで、プロセスは、次の満たされていないストライプまたは部分的に満たされたストライプについて繰り返される。
【００１１】
この発明に従って、逐次的なセグメント書込み、増分的パリティ生成およびパリティのキャッシュ記憶で実行されるディスク・アレイは、古いデータを読み古いパリティを読む先行技術のI/Oを削減する。さらに、パリティ値がディスク・アレイに書かれる回数をストライプ全体が満たされたあとの一つの書込みに減らすことができる。これにより書込み性能が大きく改善される。
【００１２】
【発明の実施の形態】
図1は、この発明に従ってつくられたデータ記憶システム10を示す。データ記 憶システム10は、複数の記憶ディスク1 2、および記憶ディスク１2およびRAID管理システム16との間でデータ転送を協調させるために、ディスク・アレイ１１に結合したディスク・アレイ・コントローラ14を有する階層的なディスク・アレイ1１を備える、ディスク・アレイ・データ記憶システムであるのが好ましい。
【００１３】
説明上、「ディスク」は、それ自身の記憶装置故障を発見する能力を持つ、不揮発性でランダムにアクセス可能な、再書き込み可能な大容量記憶装置である。それは、回転する磁気ディスクおよび光ディスク、ならびにソリッドステートのディスクまたは不揮発性電子記憶素子（PROM、EPROMとEEPROMのような）を含む。「ディスク・アレイ」という用語は、ディスクの集合をいい、それらを一つまたは複数のホスト・コンピュータに接続するために必要なハードウェア、および物理的なディスクの操作を制御するために使われ、ホスト操作環境へそれらを一つまたは複数の仮想ディスクとして提供する管理ソフトウェアを含んでいる。すべての仮想ディスクは、管理ソフトウェアによってディスク・アレイの中で実現される抽象的な構成要素である。
【００１４】
用語「RAID」(Redundant Array of Independent Disks)は、記憶容量の残りの部分に格納されたユーザ・データに関する冗長情報を格納するために、物理的な記憶容量の一部分が使われるディスク・アレイを意味する。そのアレイの構成ディスクの一つが故障するかそれへのアクセス経路が故障した場合、冗長情報がユーザ・データの再生を可能にする。RAIDシステムのより詳細な説明は、The RAID Book: A Source Book for RAID Technology, the RAID Advisory Board, Lino Lakes, Minnesota、1993 年6月9日、に記載されている。
【００１５】
ディスク・アレイ・コントローラ14は、小型コンピュータ・システム・インターフェース（SCSI）のような１つまたは複数のインターフェース・バス13を通してディスク・アレイ11に結合されている。RAID管理システム16は、インターフェース・プロトコル15を通して動作的にディスク・アレイ・コントローラ14に結合されている。また、データ・メモリ・システム10は、I/Oインターフェース・バ ス17を通してホスト・コンピュータ（図示しない）に結合される。RAID管理システム16は、ディスク記憶および信頼性のレベルを制御するため、およびいろいろな信頼性記憶レベルの間でデータを転送するためにデータ・マネージャー手段を提供するよう、別々のコンポーネントとして具体化されることも、ディスク・アレイ・コントローラ14内で、あるいはホスト・コンピュータ内で構成されることもできる。これらの信頼性記憶レベルは、後述するようにミラーまたはパリティ冗長レベルであるのが好ましいが、全く冗長性なしの信頼性記憶レベルを含むことができる。
【００１６】
ディスク・アレイ・コントローラ14は、ディスク・アレイ・コントローラA、14aとディスク・アレイ・コントローラB、14bから成る二重のコントローラとして実施するのが好ましい。二重のコントローラ14aと14bは、連続的なバックアップと冗長性を提供することによって、一つのコントローラが動作不能になるときの信頼性を高める。しかし、この発明は、一つのコントローラその他のアーキテクチャーでも実施することができる。
【００１７】
階層的なディスク・アレイは、その物理的な記憶スペースおよび１つまたは複数の仮想記憶スペースを含めて、異なる記憶スペースとして特徴づけることができる。記憶装置のこれらのいろいろな見方は、マッピング技法を通して関係づけられる。例えば、そのディスク・アレイの物理的な記憶スペースは、いろいろなデータの信頼度レベルに従って記憶領域を画定する仮想記憶スペースにマップすることができる。仮想記憶スペース内のいくつかの領域が、ミラーまたはRAIDレベル1のような第１の信頼性記憶レベルのために割り当てられ、他の領域がパリ ティまたはRAIDレベル5のような第２の信頼性記憶レベルのために割り当てられ ることができる。いろいろなマッピング技術およびRAIDレベルに関する仮想スペースについて、以下に詳細を説明する。
【００１８】
データ記憶システム10は、異なる記憶スペースを互いにマップするために使われるる仮想マッピング情報を持続的に記憶するためのメモリ・マップ・ストア21を含む。メモリ・マップ・ストアは、ディスク・アレイに対して外部にあり、ディスク・アレイ・コントローラ14に常駐するのが好ましい。異なるビューの間でいろいろなマッピング構成が変わるにつれて、メモリ・マッピング情報がコントローラまたはRAID管理システムによって連続的に、あるいは定期的に更新されることができる。
【００１９】
メモリーマップ・ストア21は、それぞれのコントローラ14aと14bに位置する2 つの不揮発性RAM (Random Access Memory) 21aおよび21bとして具体化されるの が好ましい。不揮発性RAM（NVRAM）の一例は、バッテリで支援されたRAMである 。バッテリ支援RAMは、データ記憶システム10への電力供給が損なわれた場合、 ある時間の間メモリの中のデータを維持するために独立のバッテリ源からのエネルギーを使う。一つの好ましい構造は、自己リフレッシュ型のバッテリ支援DRAM（Dynamic RAM）である。
【００２０】
二重のNVRAM 21aおよび21bが、メモリ・マッピング情報の冗長な記憶を行う。仮想マッピング情報が、ミラー冗長技術に従って複製され、両方のNVRAM 21aお よび21bに格納される。このように、NVRAM 21aが、オリジナルのマッピング情報を格納することに専用され、NVRAM 21bが冗長なマッピング情報を格納すること に専用されることができる。代替構造において、ミラーされたメモリーマップ・ストアは、そのデータを二重に記憶するに十分なスペースを持つ単一の不揮発性RAMを使って構成することができる。
【００２１】
図1に示されるように、ディスク・アレイ11は、複数の記憶ディスク・ドライ ブ装置12を持っている。これらの記憶ディスクのサイズの例は、1ないし3ギガバイトである。記憶ディスクは、SCSIバス13とのインターフェイスを提供する機械的ベイに、独立に接続されたり切り離したりされることができる。一つの実施例において、データ記憶システムは、12の機械的ベイを持つよう設計される。4つ のSCSIバスが、これらのベイとディスク・アレイ・コントローラ14とをインターフェイスするのに使われる（すなわち、3つの機械的ベイにつき一つのバス）。 活動ベイがいっぱいにロードされるならば、データ記憶システムは、12ないし36ギガバイトの結合された容量を持つ例になる。ディスク・アレイ・コントローラ14は、どのベイに接続されたかとは関係なく記憶ディスク12を認識する。データ記憶システム10は、ディスク・アレイが運転中である間に、ディスク・アレイの利用可能な機械的ベイに付加的ディスクを「ホットプラグ」（稼働中にプラグ接続する）することができるよう設計されている。
【００２２】
ディスク・アレイ11の中の記憶装置ディスク12は、説明の目的のために、複数のディスク20のミラー・グループ18および複数のディスク24のパリティ・グループ22に配列されているものと観念することができる。ミラー・グループ18は、データを第１の、すなわちミラー冗長レベルに従って格納する、ディスク・アレイの第１の記憶ロケーションすなわちRAID領域を表わす。また、このミラー冗長レベルは、RAIDレベル1と考えられる。RAIDレベル1、あるいはディスク・ミラーリングは、データのあらゆるビットがデータ記憶システム内で複製され記憶される点で１対１の保護を与え、最も高いデータ信頼性を提供する。ミラー冗長性は、図１において３対のディスク20によって表わされている。オリジナルのデータが、第１組のディスク26に格納されることができ、重複して冗長データが対になった第２組のディスク28に格納される。
【００２３】
図2は、RAIDレベル1に従ったデータの記憶を図示する。垂直な列は、個々のディスク（ディスク0、1、2および3が図示される）を表現する。4つのディスクの ディスク・アレイに含まれる物理的な記憶スペースは、水平な行によって表現されるように、複数のストライプに構成することができる。「ストライプ」は、記憶ディスクを横切って広がり、一つのセグメントがそのアレイの中のそれぞれのディスクと関連する、多数の等しい大きさの記憶スペースのセグメントを含む。すなわち、セグメントは、一つのディスク上にあるストライプの部分である。各ストライプは、記憶ディスクを横切って分配されるあらかじめ決められた量のデータを持つ。ストライプのセグメントのあるものは、オリジナルのデータのために使われ、他のセグメントが冗長データのために使われる。
【００２４】
ミラー冗長性（RAIDレベル1）のこの例において、ディスク0上でストライプ0 のセグメント0に格納されたデータは、複製され、ディスク1上でストライプ0の セグメント0'に格納される。同様に、ディスク2上でストライプ2のセグメント5 に格納されたデータは、ディスク3上でストライプ2のセグメント5'にミラー（複製）される。このように、データの各部分は、複製されてディスク上に格納される。図2の冗長性レイアウトは、説明の目的で用意されている。冗長データは、 図示しているのと同じストライプにきちんと置かれる必要はない。例えば、ディスク0上でストライプ1の中のセグメント2に格納されたデータは、複製されて、 ディスク3上でストライプSのセグメントT'に置かれてもよい。
【００２５】
再び図1を参照すると、ディスク24のパリティ・グループ22は、データがRAID レベル5のような第２の冗長レベルに従って格納される第２の記憶ロケーション すなわちRAID領域を表わす。6つのディスクを用いた説明的なイラストにおいて 、オリジナルのデータは、5つのディスク30に格納され、冗長な「パリティ」デ ータが6番目のディスク32に格納される。
【００２６】
図3は、パリティRAID領域のレイアウトをより詳しく示す。図２のミラーRAID 領域レイアウトと同様に、ディスク0、1、2、3の物理的な記憶スペースは、複数の等しい大きさのストライプに構成されることができる。図の例において、データがRAIDレベル5に従って格納され、セグメントに格納された冗長データは、文 字Pによって参照される。冗長なPセグメントは、他のセグメントのパリティをそのストライプに格納する。たとえば、ストライプ0において、ディスク3上の冗長なPセグメントは、ディスク0、1および2のパリティを格納する。各ストライプのためのパリティが、次の式の中の記号によって表わされる排他的ＯＲ機能のようななんらかの機能によって計算される。第１の4つのストライプのためのパリテ ィ（下付き添字数字が対応するストライプを表わす）は、次のようである：
【００２７】
【数１】
0003753461.tif 000002
パリティ冗長性は、ディスクの一つで利用できなくなるデータの再生を可能にする。例えば、セグメント5のデータが利用できなくなったならば、その内容は 、セグメント3および4ならびにセグメントPの中のパリティ・データから確かめ ることができる。パリティ記憶は、ミラー記憶より経済的であるが、相対的に信頼性が低く、パフォーマンスが低い。
【００２８】
図1のディスク構成は、概念上の目的で用意されている。実際上、ディスク・ アレイ11は、データをミラーおよびパリティ冗長性に従って格納することができる単に複数のディスク12を持っていてよい。すべてのディスク12によって提供される利用可能な記憶スペースの中で、その記憶スペースの一部がミラー冗長性のために割り当てられ、他の部分がパリティ冗長のために割り当てられる。ディスク12は、個々の区域が複数のセグメントを持つ、複数の等しい大きさに作られた記憶区域（図４において数字35で参照される）を含むよう構成されるのが好ましい。その区域は、記憶スペースの一つの仮想ビューにおいて、RAID領域を形成するようグループ化される。さらに、記憶スペースのもう一つの（ホストで規定される）ビューがユーザまたはホストに提示されるので、RAID領域およびデータ冗長性記憶技術はユーザまたはホストに透明である。これらの機構は、図4を参照 してより詳しく説明する。
【００２９】
データ記憶システム10は、ミラーおよびパリティ記憶法の間でデータの「移行」を管理する。両方の型の冗長性の管理は、RAID管理システム16（図1）で協調 される。RAID管理システム16は、ディスク・アレイの2つの異なる型のRAID領域 を、ミラーRAID領域がパリティRAID領域のためのキャッシュに似た動作をするメモリ・ハイアラーキとして管理する。RAID管理システム16は、規定されたパフォーマンス・プロトコルに従って、ミラーおよびパリティRAID領域の間でデータをシフトし、組織するなど管理する。ミラーおよびパリティRAID領域の間でデータを動かすプロセスは、「移行」と呼ばれる。
【００３０】
データ記憶システム10は、ミラー冗長性が最も高いパフォーマンスと信頼性の余裕を持っているから、よりパフォーマンスに厳格なデータをミラーRAID領域に置こうとする。RAID管理システムによって実行されるパフォーマンス・プロトコルは、2つの好ましい移行方針の一つを含む。「アクセス頻度」として知られる 第１の移行方針によると、階層的なディスク・アレイ上の最も頻繁にアクセスされるデータがミラーRAID領域18に維持される。アクセスされる頻度の小さいデータは、パリティRAID領域22に維持される。「アクセスの最近度」として知られている第２の移行方針によると、最も最近アクセスされたデータがミラーRAID領域18に維持され、アクセス最近度の低いデータがパリティRAID領域22に格納される。他のパフォーマンス・プロトコルを使うこともできる。理想的には、そのようなプロトコルは、特定のコンピュータ・アプリケーションおよびユーザのニーズに基づいて規定される。
【００３１】
さらに、RAID管理システム16は、2つのパラメーターの関数に従って、データ 記憶システムの記憶資源を自動的に「調整する」。この２つのパラメータは、物理的な記憶容量のサイズ、およびデータ記憶システムに格納つつあるユーザ・データの現在量のサイズである。最初は、最も高いパフォーマンスおよび信頼性を持つので、すべてのデータがミラーRAID領域に格納される。より多くのデータがデータ記憶システムに加えられるにつれて、データは、パフォーマンスおよび信頼性を最適化するために、ミラーRAID領域およびパリティRAID領域の間で移行される。データ記憶システムが容量いっぱいに近づくと、冗長性を通しての信頼性を提供しながらユーザのすべての要求に応ずるために、より多くのデータがパリティRAID領域に移行される。それゆえに、この発明のデータ記憶システムは、最大の融通性と順応性を持つ。この発明の記憶システムは、ユーザに特定の記憶体制を選ぶことを要求せず、ユーザの要求に適応することができる。
【００３２】
図4は、データ記憶システム10の利用可能な記憶スペースのメモリ・マッピン グを、マップされた仮想記憶スペースの複数の段として図示する。図の中の垂直に伸びたそれぞれの長方形は、物理的な記憶スペースのビューを表現する。この図の中で、物理的記憶スペース34が２つの仮想記憶装置のビュー40および50で参照される。物理的記憶スペース34は、数字0、1、2、および3で参照される4つの ディスク（図1の中のディスク12のような）によって表現される。そのディスク に関連した4つの長方形は、ディスク1、2および3がほぼ等しい記憶容量を持ち、ディスク0がわずかに小さい記憶容量を持つ物理的な記憶スペースのビュー50を 表わす。そのようなディスクの例としての記憶容量は、1-3ギガバイトである。 記憶スペース34は、領域A0、A1、A2、その他に区分される。個々の領域は、領域A0にストライプ0-Qのような多数のストライプを含む。個々の領域も、多数の区 域35を含む。区域35は、区域が全ディスク・アレイにわたって同じ大きさであるように、あらゆる記憶ディスク上で選ばれた数の均一な大きさのセグメントから成るのが好ましい。区域35の例としてのサイズは、１メガバイトである。
【００３３】
ディスクの記憶スペースは、物理的な記憶スペース34の第１の、中間の、RAIDレベルの仮想ビュー40にマップされる。この第１の仮想ビューは、観念的には、連続してアドレス可能な記憶スペースを表現する第２のアプリケーション・ビューにマップされることができる一組のRAID領域である。その物理的構成およびその記憶スペースのRAIDビューは、アプリケーション・ビューから隠されている。  RAID領域記憶スペース40は、ミラーおよびパリティ記憶スペースを識別する記憶装置のビューである。たとえば、RAID領域42が、M割当てブロック43のミラーRAID領域を表現し、RAID領域44がN割当てブロック45のパリティRAID領域を表現してもよい。割当てブロック43および45は、同じ大きさであるのが好ましい。例としての大きさは、64キロバイトである。これらのRAID領域は、物理的な記憶スペース34上の対応する物理的な領域A0、A1、A2などに関連する。例として、RAID仮想ビューにおける16の64K割当てブロック43または45は、一つの1M区域35の上へ マップすることができる。
【００３４】
ミラーおよびパリティRAID領域は、ディスク・アレイの全記憶スペース34を消費するかもしれず、消費しないかもしれない。したがって、ある種のアプリケーションの間、特定のRAID領域に対応しない、不使用の指定されていない記憶スペースがあることがある。しかし、そのような記憶スペースは、ミラーまたはパリティRAID領域に変換されることができる。また、RAID領域は、ディスク・アレイ上で連続する領域にマップされ、各RAID領域に関連したそれぞれの区域が各記憶ディスクの同じ物理アドレスに位置するものとして示されている点に注意されたい。代わりに、RAID領域は、ディスク・アレイ上の連続しない領域にマップされてもよい。
【００３５】
RAID領域で利用可能な記憶スペースは、ユーザまたはホスト・アプリケーション・プログラムによって規定され、それらに提示される記憶装置のビューである、第２の、フロントエンドの、アプリケーション・レベルの仮想ビュー50にマップされる。ユーザまたはホスト・アプリケーション・プログラムから見るとき、アプリケーション・レベルの仮想ビュー50は、記憶ディスク12上の利用可能な記憶スペースを示す一つの大きい記憶容量を表わすことができる。仮想記憶スペース50は、個別に0、1、2、...、J-1、J、J+1、...、Lー1、L、L+1、...、などとして参照される等しい大きさの記憶仮想ブロック52および53の線形セットのビューを提示する。仮想ブロック52および53は、RAID領域40における割当てブロックと同じサイズであることが好ましい。サイズの例は、64キロバイトである。仮想ブロック記憶スペース50は、RAID領域40で表されるビューの割当てブロックへの参照すなわちポインタ（矢印54によって表現されるように）のテーブルによって 表わされる。したがって、アプリケーション仮想ビュー50における仮想ブロック52および53は、仮想ブロック・テーブルに維持されるポインタを通してRAID仮想ビュー40における割当てブロック43および45と関連する。仮想ブロック・テーブルから参照することができる少くとも2つ型のRAID領域、ミラーおよびパリティ がある。
【００３６】
RAID管理システム16は、物理的な記憶スペースにわたって動的にRAID領域の構成を変えることができる。それぞれの型についてRAID領域の数が、システムで格納されるユーザ・データの量および物理的なディスク記憶スペースのサイズに依存して増やされまたは減少されうる。この結果、RAIDレベルの仮想ビュー40におけるRAID領域のディスクへのマッピング、およびアプリケーション・レベルの仮想ビュー50のRAIDビュー40へのマッピングは、概して変化状態にある。NVRAM 21aおよび21b（図１）におけるメモリ・マップ・ストアは、RAID領域をディスクへマップするためにRAID管理システム16によって使われる現在のマッピング情報を、2つの仮想ビューの間でマップするために使われる情報と同様に維持する。RAID管理システムは、動的にRAIDレベルのマッピングを変えるにつれて、その変更 を反映するために、メモリ・マップ・ストアのマッピング情報を更新する。
【００３７】
メモリ・システム10の移行操作を図1および4を参照して説明する。
【００３８】
説明を続ける目的で、アプリケーション・レベルの仮想記憶スペース50の仮想ブロック53は、物理的記憶スペース34の領域A1に格納されたパリティRAID領域44における関連した割当てブロック45を参照する。そのような仮想ブロック53は、パリティ仮想ブロックと呼ぶことができ、関連した割当てブロック45は、パリティ割当てブロックと呼ぶことができる。同様に、仮想ブロック52は、物理的記憶スペース34の領域AOに格納されたミラーRAID領域42における関連した割当てブロック43を参照する。そのような仮想ブロック52は、「ミラー仮想ブロック」と呼ばれ、関連した割当てブロック43が「ミラー割当てブロック」と呼ばれる。
【００３９】
一般に、一つのRAID領域から別の領域に移行するために、第１のRAIDレベル型（ミラーまたはレベル1のような）の割当てブロックに関連した仮想ブロックが 選ばれる。次いで、第２のRAIDレベル型（パリティまたはレベル5のような）を 表す不使用の割当てブロックが見いだされる。不使用の割当てブロックを見いだすことができないならば、一つが作成される。データは、選ばれた仮想ブロックと関連する割当てブロックから不使用の割当てブロックに移され、データは冗長レベルを変更される。例えば、ミラー冗長性に従って格納されていたデータは、パリティ冗長性に従って格納され、また、その逆が行われる。最終的なステップとして、RAIDレベルの仮想記憶スペース40へのアプリケーション・レベルの仮想記憶スペース50のマッピング54は、データのシフトを反映するために修正され、更新される。以前に第１のRAIDレベル型の割当てブロックと関連していた、選ばれた仮想ブロックが、更新されたポインタを介して、移行されたデータを含む第２のRAIDレベル型の割当てブロックを参照する。この処理の間に生じるマッピング変化は、メモリ・マップ・ストア21において更新される。
【００４０】
この発明の好ましい方法と順序に従って、ミラーおよびパリティ記憶領域の間を移行するデータのより詳細な説明を続ける。データをパリティ記憶からミラー記憶に移行するために、次のシーケンスが使われる。
【００４１】
1.  RAID管理システムは、ミラーRAID領域42における、不使用のミラー割当てブロック43を見つける。
2.  何も見つけられることができなければ、RAID管理システムは、ミラー割当てブロック（下で説明する）を作り出す。
3.  RAID管理システムは、移行すべき仮想ブロックへの新しい記憶要求を中断する。
4.  RAID管理システムは、仮想ブロックへのすべての有効なデータ記憶要求が完了されるまで待つ。
5.  仮想ブロック53に関連したパリティ割当てブロック45からのデータが、一時記憶バッファに読み込まれる。
6.  データは、次いで、ステップ2において選ばれたミラー割当てブロックに書 き込まれる。
7.  仮想ブロック・テーブルは、ミラー割当て43ブロックにおけるそのデータの新しいロケーションを参照するよう修正される。
8.  中断されていた記憶要求が、再開される。
【００４２】
上記の手順によると、アプリケーション・レベルの仮想ビュー50における仮想ブロック53は、パリティ記憶からミラー記憶に移行した。中間の仮想ビュー40に関し、データは、パリティRAID領域44におけるパリティ割当てブロック45からミラーRAID領域42におけるミラー割当てブロック43に移行されている。物理的な記憶スペースにおいて、データは領域A1から領域A0に動いている。
【００４３】
不使用のミラー割当てブロックを見いだすことができないならば（上のステップ1）、RAID管理システムは、次の3つの技法の好ましいシーケンスをためす。第１に、RAID管理システムは、不使用のRAIDレベルの記憶のシステムしきい値を破ることなくミラーRAID領域に変換されることができる、不使用の（したがって指定されていない）RAID領域を見つけるよう試みる。これは、移行を常に進めることができることを保証するために必要とされる。これが失敗し、そして保留量の不使用のRAIDレベル記憶より多くをシステムが持っているならば、システムは、不使用のパリティ割当てブロックを不使用のRAID領域に集めるためにパリティ記憶装置内でデータを移行させる。この移行によって、上述のようにミラーRAID領域に変換されることができる不使用のRAID領域が生じれば、システムは、それをミラーRAID領域に変換する。さもなければ、システムは、不使用のミラー割当てブロックを見いだすに十分か、または不使用のRAID領域をミラーRAID領域に変換するに十分に、不使用のRAIDレベルの記憶装置をシステムが増やすまで、データをミラー記憶装置からパリティ記憶装置へ移行し、ミラー記憶装置をパックし、不使用のRAIDレベルの記憶をパリティに変換する。ミラー割当てブロックがパリティ割当てブロックより大きな物理的な記憶スペースを占めるから、この最後の技法によって、不使用のRAIDレベル記憶装置の量が正味増加する。
【００４４】
不使用のミラー割当てブロックを見つけるためおよび確立するために使われる創設/変換プロトコルは、RAID管理システムがユーザ・データの量および物理的 な記憶スペースのサイズに従ってパリティおよびミラー領域の間で記憶割当てを選択的に調節することを可能にするので、有利である。データ使用および記憶容量が変化するにつれて、RAID管理システムは、ミラー記憶装置に保持されるデータの量を最大にするために上記の3つの技法の１つまたは複数を使う。
【００４５】
RAID管理システムは、スペース作成シーケンスがアイドル時間に不使用RAID領域をつくることによって不使用のミラー割当てブロックを創設するのを、記憶装置要求が待たなければならない状況を避けようとする。しかし、いくらかの状況において、記憶装置要求はスペース作成シーケンスの間、中断されることがある。RAID管理システムは、仮想スペースがRAIDビューより小さくなるような形態で、仮想ブロック記憶スペースを構成する。これは、少くとも1つのRAID領域と等 しい自由スペースが移行その他の目的のためにとっておかれることを保証する。このように、この技法は、常に不使用のミラー割当てブロックを生む。
【００４６】
データをミラー記憶装置からパリティ記憶装置へ移行させるために、以下の順序が使われる：
1．RAID管理システムは、アクセス最近度またはかアクセス頻度のような移行方 針に従ってミラー記憶装置からパリティ記憶装置へ移行させるために仮想ブロックを52から選ぶ。
2.  RAID管理システムは、パリティRAID領域44に不使用のパリティ割当てブロック45を見つける。
3．そのようなブロックが見つけられないならば、移行用に保留されたスペース が上述の創設技法に従ってパリティRAID領域に変換される。
4.  移行されるべき仮想ブロックへの新しい記憶装置要求が中断される。
5.  RAID管理システムは、仮想ブロックへのすべての有効な記憶装置要求が完了するまで待つ。
6.  データは、仮想ブロック52に関連したミラー割当てブロック43から一時記憶バッファに読込まれる。
7.  そのデータは、選ばれたパリティ割当てブロック45に書込まれる。
8.  仮想ブロック・テーブルが、パリティ割当てブロック45におけるデータの新しいロケーションを参照するよう修正される。
9.  仮想ブロックへのデータ要求が再開される。
【００４７】
上述の2つの番号を付けたシーケンスは、この発明のメモリシ・ステムが異な る2つの冗長性レベルの間でデータを移行する方法の例を提供する。
【００４８】
以上の説明はミラーおよびパリティ記憶の間でのデータの移動に焦点を当てたが、この発明は、特にパリティ技法に従って記憶ディスクにデータを書き込むプロセスに向けられる。上述の記憶管理技法は、この発明がセグメント・サイズの部分におけるパリティRAID領域の活動を管理するのを可能にし、増分的なパリティ生成を可能にする。
【００４９】
従来技術の説明の部分で触れたように、従来のディスク・アレイは、典型的には、繰り返しビットまたはバイト・パターンからなるデフォルト・パターンを書き込む。例としてのパターンは、ディスク・アレイにすべて「１」を書き込むことである。従来のディスク・アレイは、また各ストライプのためのパリティを初期設定手順の間にセットする。
【００５０】
この初期設定プロセスの後、従来のディスク・アレイは、ユーザ・データを書き込む準備ができている。この明細書では、ユーザ・データなる用語は、コンピューティング・システムのアプリケーションに従って情報を含むデータ・バイトを意味するものとして使われている。たとえば、ユーザ・データは、アプリケーションの結果、ホストコンピューターから得られるデータから成っていてよい。ユーザ・データは、記憶ディスクから取り出された以前の計算アプリケーションの結果であるデータであってもよい。。
【００５１】
「ユーザ・データ」は、すべての「1」のパターンのような初期設定の間に使われる単純なフォーマット・パターンをカバーすることを意図しない。従来のディスク・アレイにおいては、ユーザ・データをディスク・アレイに書き込むために4つのI/Oアクセスが必要とされる。すなわち、更新すべきデータを選ばれたストライプから読む第１のI/O、そのストライプにおけるデータに対応するパリティを読むための第２のI/O、そのストライプに新しいデータを書き戻す第３のI/O、および新しいデータのための新しいパリティをそのストライプに書き戻す第４のI/Oである。この発明のディスク・アレイによると、メモリ・マネージャーがストライプに順に一度に一つのセグメントにユーザ・データを書き、各データ書込みの間、パリティ値を増加的に生成する。ストライプ全体のためのパリティが計算されるまで、メモリ・マネージャーが、パリティ値をキャシュ記憶する。この最終的なパリティ値がその後ストライプに書かれる。ディスク・アレイは、書込みプロシージャの間、かなりI/Oの数を減らす。
【００５２】
メモリ・マネージャーは、どのデータ・セグメントが、ストライプ・パリティに編入され、どれがされないかを決定するための手段を含む。すなわち、メモリ・マネージャーは、ストライプのサイズ、および個々のセグメントが、関連したストライプのパリティ値の一部分であるデータを含むどうかに関する、ストライプの各セグメントのパリティ状態を知っている。好ましい実施例において、メモリ・マネージャーは、2つの種類のポインターの使用を通して、各セグメントのパリティ状態を追跡する。すなわち、満たされつつあるストライプを追跡する１つまたは複数の部分的ストライプ・ポインター、および満たされつつあるストライプにおける特定のセグメントを参照する１つまたは複数のセグメント・フィル・ポインターである。これらのポインターは、メモリ・マネージャーによってすぐに使えるように不揮発性メモリーに保持されるのがよい。
【００５３】
図5は、部分的ストライプ・ポインター62およびセグメント・フィル・ポインター64を含むるNVRAM 21aを示す。図の例において、ポインターは、ディスク・アレイ11のディスク0-4にわたって延びるストライプ66内でセグメントを参照するのに使われる。NVRAM 21aは、またアプリケーション・レベルの仮想記憶スペース、およびRAIDレベルの仮想記憶スペースを追跡するメモリーマップ60を含む。ミラーNVRAM 21bは、この図に示されていないが、NVRAM 21aで示したのと同じ情報を含んでいる。
【００５４】
部分的ストライプ・ポインター 62は、個々のストライプ、より具体的にはディスク・アレイにおける満たされていないストライプを参照する。最初に部分的ストライプ・ポインターは、ユーザ・データを含まない空のストライプを識別する。セグメント・フィル・ポインター64は、部分的ストライプ・ポインター62によって選ばれたストライプ内の個々のセグメントを参照する。セグメント・フィル・ポインター64は、ユーザ・ーデータで満杯にされる準備ができている空のセグメントを見つける。図5において、部分的ストライプ・ポインター62は、矢印68で表されるように満たされていないストライプ66を参照し、セグメント・フィル・ポインター64は、（矢印70で表現されるように）ストライプ66における次の空セグメントであるセグメント2を参照する。セグメント・フィル・ポインターは、順にそのストライプをステップし、それぞれの空のセグメントをセグメント1から始まりセグメント5で終わる連続した態様で参照する。
【００５５】
好ましい実施例によると、メモリ・マネージャーは、これらの2つのポインターの助けにより、ディスク・アレイのすべてのセグメントのパリティ状態を効果的に追跡する。部分的ストライプ・ポインター62によって選ばれたストライプに関し、セグメント・フィル・ポインター64の前のセグメントは、ストライプ・パリティに編入されるデータを含むことが知られており、そして、セグメント・フィル・ポインターに続くセグメントは、空でまだストライプ・パリティに編入されないことが知られている。部分的ストライプ・ポインター64で参照されないストライプに関しては、データを含むストライプは、ストライプ・パリティによって代表されるすべてのデータ・セグメントを持つと考えられる。空のストライプは、データを含まず、これらのセグメントを表わすパリティ値を持たないと理解される。
【００５６】
ひとたび空のストライプが部分的ストライプ・ポインターによって識別されるならば、ユーザ・データはセグメント・フィル・ポインターによって参照されたセグメントに書かれる。図5において、ユーザ・データはストライプ66の第１のセグメント1に書かれている。セグメント・フィル・ポインター64が残りのセグメントを順に進むにつれて、パリティのために割り当てられているセグメント以外のストライプの各セグメントにユーザ・データが書き込まれる。この場合、パリティは最後のセグメント5に書かれる。パリティ・セグメントがそのストライプにおける最後のものでないならば、セグメント・フィル・ポインターは、そのストライプを順次通る間、パリティ・セグメントをスキップし、ユーザ・データがそのストライプのすべてのデータ・セグメントに置かれたあと、戻ってパリティをパリティ・セグメントに書き込む。そのストライプにおけるパリティ・セグメントの位置は、当技術分野で一般的であるパリティ配置方法によって決定される。ユーザ・データがポインター64で参照されたセグメントだけに書かれ、他のデータ・セグメントは、参照されるまで放っておかれる点に注意されたい。
【００５７】
この発明の一つの面によると、パリティ値は、ストライプにおけるセグメントへの各データ書込みに続いて、増加的に生成される。図3に関して説明したように、パリティ値は、排他的論理和（XOR）作用のような論理関数に従って計算される。一つのセグメントだけが満たされるとき、図5における示されるように、パリティ値は、そのユーザ・データと同じである。しかしより多くのセグメントが満たされると、パリティ値は、すべての満たされたセグメントに含まれるユーザ・データのためのパリティを反映するよう増加的に変化する。そのストライプにおける空のすなわち不使用のセグメントは、逐次的な書込みプロセスの間、管理されず、したがって増加的パリティ生成に含まれない。
【００５８】
NVRAM 21aは、増加するパリティ値を一時的に格納するパリティ・キャッシュ72を含む。新しいセグメントが書かれるにつれて、メモリ・マネージャーは、前にキャシュされたパリティ値および次のセグメントに書かれたばかりのユーザ・データの論理関数（すなわち、XOR）に基づいて、新しいパリティ値を計算する。すべてのデータを有するセグメントが満たされるまで、逐次的セグメント書込みおよび増加的キャッシングが、セグメントごとに繰り返される。
【００５９】
パリティ・キャッシングの結果、パリティ値は、各書込みの後、ディスク・アレイに書かれる必要はない。その代わり、パリティ値は、すべてのデータ・セグメントが満たされたあと、ディスク・アレイに書かれるだけである。すなわち、セグメント・フィル・ポインター64が最後のセグメント5に達するとき、RAID管理システムがストライプ66用のパリティ・セグメントにパリティ値を書き込む。パリティを格納するためにそのストライプ内の任意のセグメントを使うことができるけれども、いまの場合、書き込まれるセグメントは、セグメント5である。
【００６０】
この発明のディスク・アレイは、書込みプロセスの間、ディスク・アレイからユーザ・データおよびパリティを読む必要性を排除し、それによって従来のディスク・アレイの最初の2つのI/Oを排除する。さらに、パリティ値をキャッシングすることによって、ディスク・アレイは、パリティが各ストライプについてディスクに書かれる回数を効果的に減らす。より具体的には、先行技術のディスク・アレイがユーザ・データをパリティで書き込むのに4つのI/Oを必要としたのに対して、この発明のディスク・アレイは、ユーザ・データをパリティで書き込むのに、1＋１/(N-1) だけのI/Oを必要とする（ここで、Nはストライプにおけるディスクの数である）。
【００６１】
上で述べたように、部分的ストライプ・ポインター62、セグメント・フィル・ポインター64およびパリティ・キャッシュ72は、メモリ・マネージャーによって管理され、維持される。好ましい実施例において、メモリ・マネージャーは、ディスク・アレイ上でユーザ・データ、冗長性データおよび不使用のスペースを追跡し続けるRAID管理システム16（図1）として具体化される。しかし、単にパリティ記憶に従ってメモリ割当てを管理するためだけに構成されたメモリ・マネージャーを、この発明において使うことができる。
【００６２】
図6および7は、パリティ冗長技法に従ってディスク・アレイにユーザ・データを書くための好ましい方法を図示する。プロセスは、部分的ストライプ・ポインター62がヌル（無効）で、満たされていないストライプを現在参照していないことを意味しているかどうかを判断するステップ100（図6）から始まる。部分的ストライプ・ポインターがストライプを指しているならば（すなわち、ステップ100から[NO」分岐）、ユーザ・データは、セグメント・フィル・ポインター64で参照された次の不使用のセグメントに書かれる（ステップ102）。満たされたセグメントに含まれるすべてのユーザ・データに対する増加的なパリティ値が、新しいユーザ・データをキャッシュ記憶するされたパリティとXORし（ステップ104）することにより計算され、再びキャッシュ記憶される（ステップ106）。
【００６３】
ステップ108で、セグメント・フィル・ポインター64がそのストライプにおける最後のセグメントを参照しているかどうか判断される。RAID管理システムは、ストライプにおける新しいスペースの割当てを追跡する。それは、どれくらいのセグメントがストライプにあるかということと、ストライプにおいてまだ割り当てられていないすべての不使用のセグメントを知っている。上で示したように、RAID管理システムは、セグメント・フィル・ポインターの前のすべてのセグメントがストライプ・パリティに反映されており、そのポインターの後ろのすべてのセグメントが空で、ストライプ・パリティには考慮されてないと、仮定する。さらに、RAID管理システムは、データを含み参照されないストライプが、すべてのセグメントをそのストライプ・パリティに編入してもらっており、そして、すべての空の参照されないストライプは、パリティの一部でないセグメントを持つと、仮定する。
【００６４】
これらの操作パラメーターの結果、RAID管理システムは、アレイにおけるポインターの位置と同様にディスク・アレイにおけるおける任意のセグメントのパリティ状態を知っている。したがって、RAID管理システムは、セグメント・フィルポインターがそのストライプの終わりに着いたかどうかを知る。ポインターが最後のセグメントにまだ届いていないならば（すなわち、ステップ108から「NO」分岐）、セグメント・フィル・ポインターは、次のデータ・セグメントに動かされる（ステップ110、図7）。ステップ104で計算されたパリティ値は、次いでそのストライプのパリティ・セグメントに書かれうる（ステップ112）。
【００６５】
再び図6を参照すると、セグメント・フィル・ポインターが最後のセグメントに達していると、全ストライプのためのパリティを表わすキャッシュされたパリティ値は、そのストライプのパリティ・セグメントに書かれる（ステップ114）。この点で、そのストライプは、完全にユーザ・データおよび冗長情報でいっぱいにある。
【００６６】
したがって、下により詳しく説明するように、部分的ストライプ・ポインターは、次の空のストライプ（ステップ116）を識別するために再び使われるまで、無効にされることができる。ステップ118で、RAID管理システムは、ストライプのセグメントに書かれたばかりのユーザ・データが以前にディスク・アレイのどこか別のところに割り当てられていたかどうかを評価する。例えば、RAID管理システムがディスク・アレイ上でユーザ・データを再編成しユーザ・データを一つのロケーションから他に移動させるとき、そのような状況が生じる。それが書き直されたユーザ・データであるならば（すなわち、ステップ118からの「YES」分岐）、RAID管理システムは、その古いロケーションからユーザ・データを割り当て解除し、それによって、前のストライプに「穴」（すなわち、空のセグメント）をつくる。ステップ122で、メモリーマップ60は、新しいデータ・ロケーションを反映するよう更新される。
【００６７】
再び最初のステップ100を参照すると、部分的ストライプ・ポインターは、一つのストライプの完成と新しい空ストライプの識別の間の間隔においてヌルである。部分的ストライプ・ポインターがヌル（すなわち、ステップ100から「YES」分岐）であるならば、RAID管理システムが新しい空ストライプを探索する（ステップ124、図7）。空のストライプが識別できない場合（すなわち、ステップ124から「NO」分岐）、RAID管理システムは、「穴」を有する部分的に満たされたストライプを見つけ、それを空にする（ステップ126）。このプロセスは、ごみ集め（ガーベッジ・コレクション；garbage collection）として知られており、その例が図8に示される。
【００６８】
図8は、ディスク・アレイのディスク0ないし4にわたるストライプ150ないし156を示す。ユーザ・データを含んでいるセグメントは、数字が続く文字「D」で示される。空か不使用のセグメントは、文字「U」によって示される。不使用のセグメントUがストライプ150ないし156に「穴」をつくることに注意されたい。例示の目的で、RAID管理システムがストライプ150を空にすると決めたとする。ディスク0上のセグメントにおけるユーザ・データD０は、ストライプ154の不使用セグメントに動かされ、ディスク2上のセグメントにおけるユーザ・データDlは、ストライプ152の不使用セグメントに動かされる。このデータ移動によってストライプ150が空にされ、このストライプは、いまや不使用のデータ・セグメントおよびパリティ・セグメントから成る。同時に、データ移動は、他のストライプにおける「穴」を満たし、それらのストライプをよりいっぱいにする。
【００６９】
ごみ集めプロセスのこの例示の型は、空にすべきストライプからユーザ・データを他のストライプの穴にランダムに移動させる。別の実施例においては、ごみ集めプロセスは、ユーザ・データをセグメントごとに順に書く上述の方法と同じ態様で、指定のストライプから新しい空ストライプに順にユーザ・データを書く。他のごみ集め技法を、図7のステップ126でストライプを空にするために同様に使うことができる。
【００７０】
再び図7を参照すると、RAID管理システムは、空のストライプを選んで（ステップ128）、そのストライプを参照するよう部分的ストライプ・ポインターをセットする（ステップ130）。セグメント・フィル・ポインターは、そのストライプの始めを参照するよう初期状態にされる（ステップ132）。それから、ユーザ・データは第１の不使用セグメントに書かれる（ステップ134）。ステップ136で、最初のパリティ値は、そのユーザ・データと等しく設定されて、キャッシュされる。それ後、セグメント・フィル・ポインターが、次のデータ・セグメントに動かされ（ステップ110）、プロセスは、そのストライプの残りのセグメントについて続けられる。
【００７１】
上述の実施例は、空のストライプおよびこれらのストライプ内のをセグメントを識別する2つの種類のポインターを使う。別の具体化においては、一つのRAID領域につき一対のようにNVRAMに複数の対のポインターを保持してもよい。キャッシュ記憶されたパリティの管理は、複数のストライプの増分的充填で調整される。複数の対のポインターが使われるならば、調整は、異なるストライプからの複数のパリティ・セグメントをキャッシュ記憶すること、および／またはキャッシュ・パリティを、各データ・セグメントが書かれたあとパリティを示すなどのように、キャッシュ資源の適時の再利用を許すパターンで、示すことを含みうる。
【００７２】
別のオプションの実施例においては、RAID管理システムは、ストライプの終わりのセグメントが空であり、ストライプの初めの１つまたは複数の連続したセグメントにユーザ・データを含む部分的に満たされたストライプを選ぶよう構成することができる。RAID管理システムは、セグメント・フィルポインターを部分的に満たされたストライプにおける最初の空セグメントに初期設定し、それから上述したのと同じ技法に従って、順次書込みを続ける。
【００７３】
このプロセスは、全RAID領域を書き込むためにストライプごとに続けることができることに注意されたい。別の好ましい実施例において、ポインターの各対が、ストライプおよびその中のセグメントの両方を識別する一つのポインターに結合される。
【００７４】
２つの型のポインターを使う別の具体化例として、RAID管理システムは、どのデータ・セグメントが、ストライプ・パリティに編入され、どれが編入されないかを決定する手段として、ビットマップを使うことができる。そのビットマップは、ディスク・アレイのあらゆるセグメントについての情報を含む。ポインターと比較してこの具体化例は、NVRAMにより多くのメモリースペースを必要とするが、データ・セグメントのパリティを追跡するのに効果的である。
【００７５】
法規に従って、この発明を具体的な構造に関して説明した。しかし、この発明が、記述された特定の特長に限定されないことが理解されねばならない。したがって、この発明は、特許請求の範囲に従って均等論に従って解釈される適正な範囲でのあらゆる形態および変更を含むものである。
【００７６】
この発明は、例として次の実施形態を含む。
1. 複数の記憶ディスク（12）を持ち、複数のストライプに構成されているディスク・アレイ(11)で、各ストライプが複数の記憶ディスク（12）にわたって延び、記憶スペースの複数のセグメントを含み、各セグメントがディスク・アレイの一つの記憶ディスク上のストライプの一部分であるディスク・アレイに、冗長なパリティ記憶技法に従ってユーザ・データを書くための方法であって、
(a)ユーザ・データまたはパリティ情報を持つセグメントと空のセグメントとを区別するステップと、
(b)ディスク・アレイ（12）における空のセグメントを持つ満たされていないストライプ(66)を同定するステップと、
(c)同定されたストライプ(66)において空のセグメントを見つけるステップと、
(d)そのストライプの他のセグメントにユーザ・データを書くことなくストライプの空のセグメントにユーザ・データを書き込むステップと、
(e)ステップ(d)でセグメントにユーザ・データが書き込まれたあと、書かれたストライプのセグメントだけに含まれるユーザ・データに対するパリティ値を決定するステップと、および(f)ストライプの他のセグメントの１つまたは複数を満たすために上記ステップ(c)ないし(e)を繰り返すステップと、
を含む方法。
【００７７】
2. 上記同定するステップは、満たされていないストライプ(66)を参照するために部分的ストライプ・ポインター(62)を使うことを含み、上記見つけるステップは、ストライプに書き込むべきセグメントを参照するためにセグメント・フィル・ポインター(64)を使うことを含み、
さらに、ディスク・アレイ（11）と別に不揮発性メモリー(21)を提供するステップ、および不揮発性メモリー(21)に部分的ストライプ・ポインターおよびセグメント・フィル・ポインターを格納するステップを含む蒸気の方法。
3. 上記見つけるステップが満たされていないストライプ内の順に従って空のセグメントを連続的に参照することを含む上記１の方法。
4. さらに、ディスク・アレイ（11）とは別に不揮発性メモリー(21)を提供するステップ、および上記決定するステップの後に、上記パリティ値を上記不揮発性メモリーに一時的にキャッシュ記憶するステップを含む上記１に記載の方法。
5. さらに、以下のステップを含んでいる上記1の方法：
一時的に、上記決定するステップ(e)の都度、上記パリティ値をキャッシュ記憶するステップ；および
上記決定するステップは、前にキャッシュ記憶されたパリティ値、およびストライプの空のセグメントに最も最近書かれたユーザ・データの論理関数に基づいて新しいパリティ値を計算するステップ。
6. さらに、上記決定するステップ(e)の都度、ディスク・アレイ（11）にパリティ値を書くステップを含む上記1の方法。
【００７８】
7. 複数の記憶ディスク（12）を持ち、複数のストライプに構成されているディスク・アレイ（11）であって、各ストライプが複数の記憶ディスクにわたって延び、記憶スペースの複数のセグメントを含み、各セグメントがディスク・アレイ（11）の一つの記憶ディスクにあるストライプの一部分であるディスク・アレイに、冗長なパリティ記憶技法に従ってユーザ・データを書く次のステップを含む方法：
(a) ディスク・アレイ（11）とは別に不揮発性メモリー(21)を用意するステップ；
(b)不揮発性メモリー(21)にディスク・アレイの個々のストライプを参照する部分的ストライプ・ポインター(62)を提供するステップ；
(c)不揮発性メモリー(21)に参照されたストライプの個々のセグメントを参照するセグメント・フィル・ポインター(64)を提供するステップ；
(d)部分的ストライプ・ポインター(62)を空のストライプにセットすることによって空のストライプ(66)を選ぶステップ；
(e)セグメント・フィル・ポインター(64)を最初のセグメントにセットすることによって選ばれたストライプの最初のセグメントを選ぶステップ；
(f)そのストライプの他のセグメントを空のまま残して上記最初のセグメントにユーザ・データを書き込むステップ；
(g)ストライプの最初のセグメントだけについてパリティ値を計算するステップ；
(h)パリティ値を不揮発性メモリー(21)にキャッシュ記憶するステップ；
(i)セグメント・フィル・ポインター(64)を使ってストライプの次のセグメントを選ぶステップ；
(j)ストライプの次のセグメントにユーザ・データを書き込むステップ；および(k)キャッシュ記憶されたパリティ値および次のセグメントに書かれたユーザ・データに基づいて別のパリティ値を計算するステップ。
【００７９】
8. 各ストライプが複数の記憶ディスクにわたって延び、記憶スペースの複数のセグメントを含む、複数のストライプに構成された、複数の記憶ディスク（12）を有するディスク・アレイ（11）であって、
各セグメントがディスク・アレイ（11）の一つの記憶ディスクのストライプの一部分であるディスク・アレイ(11)と、
記憶ディスクへのおよび記憶ディスクからのデータ転送を調整するためにディスク・アレイ(11)に結合されたディスク・アレイ・コントローラ（14）と、
パリティ冗長技法に従ってがユーザ・データを冗長に格納するためにメモリ割当てを管理するためにディスク・アレイ・コントローラ（14）に結合されたメモリ・マネージャー（I6）とを備え、
メモリ・マネージャーは、ユーザ・データをデータ・セグメントに、パリティ情報をパリティ・セグメントに配置し、これにより少くとも1つのパリティ・セグメントおよび一つまたは複数のデータ・セグメントが各ストライプに含まれ、メモリ・マネージャー(16)は、どのデータ・セグメントが、ストライプのパリティ情報に編入されるか決定するための手段を持ち、満たされていないストライプ(66)およびそのストライプにおける空のセグメントを選び、また、メモリ・マネージャーは、選ばれたセグメントにユーザ・データを書き込み、各セグメントが書き込まれた後、書き込まれたストライプのセグメントに含まれるユーザ・データに基づくそのストライプのパリティ値を増分的に決定するようにしたデータ記憶システム。
9. 上記8のデータ記憶システムであって、上記メモリ・マネージャーの上記決定する手段は、
ディスク・アレイ（11）における個々のストライプを参照する部分的ストライプ・ポインター(62)と、
参照されたストライプにおける個々のセグメントを参照するセグメント・フィル・ポインター(64)と、
そのポインターを使って満たされていないストライプ、およびそのストライプにおけるセグメントを選ぶメモリ・マネージャー（16）と、
を備えるデータ記憶システム。
10. パリティ値が決定される都度、パリティ値をキャッシュ記憶するために常駐する不揮発性メモリー(21)と、前にキャッシュ記憶されたパリティ値、および最も最近ストライプの空のセグメントに書かれたユーザ・データの論理関数に基づいて新しいパリティ値を計算するメモリ・マネージャー(16)と、を備える上記8のデータ記憶システム。
【００８０】
【発明の効果】
この発明によると、パリティ書き込みの間、必要とされるI/Oの数が少ない改善された書込み性能を持つディスク・アレイ・データ記憶システムが得られる。
【図面の簡単な説明】
【図１】この発明に従う冗長な階層的なディスク・アレイ・データ記憶システムの図表のブロック図である。
【図２】複数の記憶ディスク上の記憶スペースを示す図表で、RAIDレベル1によ るデータ記憶を示している。
【図３】複数の記憶ディスク上の記憶スペースの図表で、RAIDレベル５によるデータ記憶を示す。
【図４】2つの仮想記憶スペースが物理的な記憶スペースの上へマップされてい る、この発明のメモリーマッピング取り決めの図表である。
【図５】不揮発性メモリおよびディスク・アレイの記憶スペースに維持されるポインター間の相互作用を示すブロック図である。
【図６】パリティ冗長技法によってディスク・アレイにデータを書き込むステップを示す流れ図である。
【図７】パリティ冗長技法によってディスク・アレイにデータを書き込むステップを示す流れ図である。
【図８】ゴミ集め技法を示すための複数の記憶ディスクの記憶スペースの図表である。
【符号の説明】
１０        データ記憶システム
１１        ディスク・アレイ
１２        記憶ディスク
１３        インターフェイス・バス
１４        ディスク・アレイ・コントローラ
１８        ミラー・グループ
２２        パリティ・グループ
【図１】
0003753461.tif 000003
【図２】
0003753461.tif 000004
【図３】
0003753461.tif 000005
【図４】
0003753461.tif 000006
【図５】
0003753461.tif 000007
【図６】
0003753461.tif 000008
【図７】
0003753461.tif 000009
【図８】
0003753461.tif 000010