(57)【要約】【課題】ＲＡＩＤシステムにおけるパリティ計算、及びディスクＩ／Ｏの負荷の低減。【解決手段】  本発明は、各々が複数の記憶ブロックを有する複数の記憶装置、例えばＲＡＩＤアレイにおけるデータの格納を制御するための方法を特徴とする。本方法は、データに関する複数の書き込み要求を受信し、それらの書き込み要求をバッファリングすることを含む。ファイルシステムは、ディスク接続形態情報に応じて、記憶ブロックのグループを定義する。このグループには、前記複数の記憶装置の各々における複数の記憶ブロックが含まれる。書き込みを行なうデータの各データブロックは、それらの記憶ブロックのうちの各々１つに関連していて、その関連が複数の記憶装置に送信される。【選択図】図４
2010079928.tif 000002
【特許請求の範囲】
【請求項１】
ストレージシステムに接続された複数の記憶装置におけるデータの格納を管理するためにコンピュータで実施される方法であって、前記記憶装置の各々が、複数のディスク記憶ブロックからなり、前記データが、複数の前記記憶装置にわたってストライプ状に編成されるものにおいて、
前記記憶装置における複数のストライプについて書込みトランザクションに備えて前記ストレージシステムのファイルシステムによりバッファリングされるデータブロックを未割り当てのディスク記憶ブロックに関連付ける、ブロックレイアウト情報を、前記ストレージシステムのファイルシステムにより生成するステップと、
前記書込みトランザクションのバッファリングされたデータブロック、及び生成された前記ブロックレイアウト情報を、前記ファイルシステムから前記ストレージシステムのＲＡＩＤ層へ転送するステップと、
減算方法と再計算方法の両方について、前記書込みトランザクションの全てのストライプについてパリティを計算するために、読み出す必要があると思われる前記記憶装置における割当て済みディスク記憶ブロックを、前記ＲＡＩＤ層により識別するステップと、
識別された前記割当て済みディスク記憶ブロックから、前記減算方法と前記再計算方法の両方について、読み出しの総数、及び１つの記憶装置当たりの１以上の連続した読み出しチェーン長を、前記ＲＡＩＤ層により判定するステップと、
必要とされる割当て済みディスク記憶ブロックの読み出し総数が最も少なく、且つ書込みトランザクションの全てのストライプについて読み出しチェーン長が最大となるパリティ計算方法を、前記ＲＡＩＤ層により選択するステップと
からなる、コンピュータで実施される方法。
【請求項２】
前記ストレージシステムのファイルシステムにおいて、前記ストレージシステムに接続されたクライアントから複数の書込み要求を受信するステップと、
受信した書込み要求を要求バッファに記憶するステップと、
複数の前記受信した書込み要求を前記書込みトランザクションの中に収集するステップと
をさらに含む、請求項１に記載のコンピュータで実施される方法。
【請求項３】
前記記憶装置のディスク記憶ブロックに関する記憶ブロック識別子を含む、前記記憶装置を識別するディスクトポロジ情報を、前記ファイルシステムにおいて受信するステップをさらに含み、
前記ファイルシステムは、受信したディスクトポロジ情報を使用して、前記ブロックレイアウト情報を生成する、請求項１に記載のコンピュータで実施される方法。
【請求項４】
前記ファイルシステムによって生成されるブロックレイアウト情報により、前記記憶装置に書き込まれる前記バッファリングされたデータブロックの書込みチェーン長が、最大化される、請求項１に記載のコンピュータで実施される方法。
【請求項５】
前記ファイルシステムから受信した前記書込みトランザクションを前記ＲＡＩＤ層によって実行するステップをさらに含み、
前記書込みトランザクションのバッファリングされたデータブロックは、前記ファイルシステムから受信した前記ブロックレイアウト情報に従って前記記憶装置に書き込まれ、
読み出しの総数が最小になり、且つ読み出しチェーン長が最大になる選択されたパリティ計算方法に従って、前記書込みトランザクションの全ストライプについてパリティが計算される、請求項１に記載のコンピュータで実施される方法。
【請求項６】
前記ブロックレイアウト情報は、複数の行、及び列を有する二次元アレイとして構成され、
各列は、前記記憶装置の１つに対応し、
各行は、複数の前記記憶装置にわたる前記ストライプの１つに対応する、請求項１に記載のコンピュータで実施される方法。
【請求項７】
各記憶装置が複数のディスク記憶ブロックを有する、複数の記憶装置と、
前記記憶装置に接続され、ファイルシステム、要求バッファ、及びディスクアレイマネージャを有するストレージシステムと
からなるシステムであって、
前記ファイルシステムは、
書込みトランザクションのデータブロックを前記要求バッファに記憶し、
前記記憶装置における複数のストライプについて前記書込みトランザクションのデータブロックを未割当てのディスク記憶ブロックに関連付ける、ブロックレイアウト情報を生成し、
前記書込みトランザクション、及び前記ブロックレイアウト情報を前記ディスクアレイマネージャへ転送するように構成され、
前記ディスクアレイマネージャは、
減算方法と再計算方法の両方について、前記書込みトランザクションの全てのストライプについてパリティを計算するために、読み出す必要があると思われる前記記憶装置における割当て済みディスク記憶ブロックを識別し、
前記減算方法と前記再計算方法の両方について、読み出しの総数、及び１つの記憶装置当たりの１以上の連続した読み出しチェーン長を判定し、
必要とされる割当て済みディスク記憶ブロックの読み出し総数が最も少なく、且つ書込みトランザクションの全てのストライプについて読み出しチェーン長が最大となるパリティ計算方法を選択するように構成される、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概してデータ記憶装置に関し、詳しくは、ディスクドライブアレイにおける高信頼性電子データ記憶装置に関する。
【背景技術】
【０００２】
コンピュータシステムには情報（例えばデータやアプリケーションプログラムなど）を格納するための大量の二次記憶装置が必要であり、二次記憶装置はディスクドライブ等によって提供されるのが一般的である。コンピュータおよびそれに関連するプロセッサの性能が向上するのにつれて、ディスクドライブの性能も向上してきた。例えば、データ密度及びトラック密度が向上し、磁気媒体が改良され、一台のディスクドライブあたりのヘッド数及びプラッタ数を大きくすることで、より高いデータ転送速度が得られるようになった。
【０００３】
大型ディスクドライブは極めて高価であるので、さらに大きな容量や性能を得るためにドライブを交換する場合、高いコストの追加が生じることになる。また、単一ドライブシステムには、格納データの冗長性に関して制限もある。システムの損害や置換は、ストレージサービスに対するアクセスの一時的な損失や、データの永久的損失を引き起こす可能性がある。
【０００４】
複数のドライブをまとめて並列に接続することによって、単一ディスクドライブシステムの欠点を緩和することができる。データファイルを複数の塊に分断して、並列にした複数のドライブから同時にアクセスできるようにする場合がある。ディスクドライブを並列に接続するこうしたシステムの１つは、「ＲＡＩＤ」（Redundant Array of Inexpensive/independent disks）と呼ばれる。ＲＡＩＤシステムは、低コスト、高信頼性ながら、大型の単一ディスクドライブシステムよりも大きな記憶容量を提供することができ、かつ、アレイの並列性によって高データ転送速度になっている。
【０００５】
データブロックはストライプの形態でＲＡＩＤシステムに書き込まれ、１ストライプはシステムのディスクドライブアレイにおいて各ディスクドライブ上に１つの記憶ブロックを有している。データブロックは各ドライブから同時に読み出すことができ、大きなファイルについても高速なデータアクセスを提供する。また、ＲＡＩＤシステムは、ディスクドライブをアレイに追加することで、記憶容量を徐々に増加させてゆくことができる。ＲＡＩＤシステムでは、ディスクが故障した場合、システム全体をシャットダウンすることなくそのディスクを交換することができる。故障したディスク上のデータは誤り訂正技術を用いて復元することができる。
【０００６】
ＲＡＩＤシステムは、それに関連するディスクドライブの集まりを、ディスクドライブの１以上のグループにおけるストライプの集まりとして見る。ドライブのグループは、一般に「ＲＡＩＤグループ」と呼ばれる。ストライプは、グループ内に所定の幾何配置で実現されるのが通常である。すなわち、ストライプ内の各ブロックは、そのディスクに対する同じオフセット（ディスクブロック番号）に配置される。
【０００７】
ＲＡＩＤシステムは、ＲＡＩＤレベル０〜ＲＡＩＤレベル５と呼ばれる基本構成に関して定義されるのが通常である。各レベルには、利点もあれば欠点もある。例えば、ＲＡＩＤレベル４のシステムは、複数のブロックからなるデータを、Ｎ台のデータディスク上にＮ個の記憶ブロックからなる「ストライプ」として格納する。ＲＡＩＤレベル４は、システム内の各ストライプに関する誤り訂正情報を格納する１台の特別なパリティディスクドライブを追加する。
【０００８】
ストライプ書き込みは、ファイルシステムにとってもディスクドライバにとっても混乱を招くものである。ファイルシステムは通常、１つのファイルから取り出したような関連データの格納のために、単一ドライブ上の空間を割り当てることを好む。これによって、その後の要求を予測することによりファイルアクセス時間を削減する「先読み」動作が可能になる。ディスクドライバは、回転速度や、読み出し／書き込みのヘッドアクセス時間など、ディスクの物理特性の利点が得られるように最適化される傾向にある。この場合も、関連データブロックを同一ディスクドライブに格納することが有利である。
【０００９】
ＲＡＩＤシステムは、ディスク記憶ブロックをストライプの観点から参照し、書き込み要求をストライプの観点から取り扱う傾向がある。典型的には、パリティ計算のオーバヘッドを低減するため、１つのストライプ書き込みになるまで複数のデータブロックを蓄積する。ＲＡＩＤディスクアレイマネージャがストライプ書き込みを処理する場合、関連ブロックデータは複数のドライブ上に分散される。
【発明の概要】
【課題を解決するための手段】
【００１０】
発明の概要
本発明は、概して、複数の記憶装置を用いるストレージシステムのアクセスタイム及び転送速度の効率を向上させるための方法および装置に関する。一実施形態において、本発明は、ストレージシステムを有するとともに複数の記憶装置と通信するストレージシステムによるデータの格納を管理するための方法に関する。各記憶装置は、データを格納するための複数のブロックを有する。
【００１１】
一実施形態において、本方法は、ストレージオペレーティングシステムのファイルシステム層によってデータを記憶するための書き込み処理に複数のブロックのうちのいずれの記憶ブロックを用いるかを識別することによりブロックレイアウト情報を生成するステップを含み、その識別されるブロックは、高度の局所性を有するか、あるいは各々のディスク上で連続していることが好ましい。本方法は、前記ブロックレイアウト情報をストレージオペレーティングシステムのファイルシステム層からＲＡＩＤ層へ転送するステップをさらに含み、前記ブロックレイアウト情報に応じてＲＡＩＤ層が書き込み処理の実行を制御することで、パリティ計算のコストを実質的に最小限にする。パリティ計算のコストは、例えば、実施される読み出し処理の数を最小にすることや、パリティ計算のために読み出されるブロックのチェーン長を実質的に最大にすることによって、実質的に最小にすることができる。
【００１２】
一実施形態では、書き込み処理を制御してパリティ計算コストを実質的に最小にするステップは、書き込み処理を検査するステップと、読み出しブロック数を実質的に最小にするかそれとも読み出しブロックのチェーン長を実質的に最大にするかを選択するステップと、前記ブロックレイアウト情報に応じて前記選択を実施するステップとを含む。前記選択が読み出しブロック数を実質的に最小にする方であった場合、前記書き込み制御ステップは、１ストライプごとに、減算方法に基づいてパリティを計算するかそれとも再計算方法に基づいてパリティを計算するかを判定し、選択されたその方法をサポートする何らかの適当な読み出し処理を実施し、パリティを計算するステップを含む。この判定は、いずれの計算方法が最小の読み出し処理で済むかを検査することによって行なわれる。一方、前記選択が読み出しブロックのチェーン長を実質的に最大にする方であった場合、前記書き込み制御ステップは、前記減算方法または前記再計算方法をサポートするために読み出される記憶ブロックの数を最小にしつつチェーン長を実質的に最大にするため、いずれの記憶ブロックを読み出すべきかを判断し、それらのブロックに対して読み出し処理を実施し、パリティを計算するステップをさらに含む。
【００１３】
一実施形態では、ＲＡＩＤ層はディスク接続形態情報をファイルシステム層に公開する。ファイルシステム層は接続形態情報のデータベースを保持する。ファイルシステム層は、ディスク記憶ブロック番号および記憶ブロックの割り当てに関する情報を用いて、書き込み処理のためのブロックレイアウト情報を作成する。
【００１４】
他の実施形態において、本発明は、複数のブロックにおける記憶ブロックへのデータの格納を管理するための方法に関する。この方法は、ブロックレイアウト情報を生成するステップと、前記ブロックレイアウト情報に応じて、ストライプ集合における利用可能な記憶ブロックすべてを実質的に用いることで誤り訂正パラメタの計算コストを実質的に最小限にしつつ、書き込み処理に用いられる記憶ブロックのグループを識別することで複数の記憶装置のうちの一記憶装置内のチェーン長を実質的に最大にするように、書き込み処理の実行を制御するステップとを含む。一実施形態では、この誤り訂正パラメタにはパリティの計算値が含まれる。
【００１５】
さらに他の実施形態において、本発明は、複数の記憶装置を有するストレージシステムであって該記憶装置の各々が複数の記憶ブロックを有するストレージシステムにおいてデータの格納を管理するための方法に関する。この方法は、複数のストライプにまたがる所定の記憶ブロック、及び、各記憶装置内の所定の記憶ブロックを含む記憶ブロックのグループにデータを書き込むステップを含む。この書き込みは、複数のストライプについての誤り訂正パラメタの計算コストを実質的に最小にしつつ、各記憶装置内の記憶ブロックのチェーン長を実質的に最大にするような方法で行なわれる。一実施形態では、チェーン長は、データの書き込みに関して最大にされるとともに、パリティ計算をサポートするための読み出しに関して最大にされる。
【００１６】
さらに他の実施形態において、本発明は、複数の記憶ブロックを有する複数の記憶装置、及び、前記複数の記憶装置と通信するストレージマネージャを有するストレージシステムに関する。このストレージマネージャは、複数のストライプにまたがる所定の記憶ブロック、及び、各記憶装置内の所定の記憶ブロックを含む複数の記憶ブロックからなるグループにデータを書き込み、誤り訂正パラメタの計算コストを実質的に最小にしつつ、記憶装置内の記憶ブロックのチェーン長を実質的に最大にするようにして、データの格納を処理するものである。
【００１７】
さらに他の実施形態において、本発明は、データの格納を管理するためのシステムに関する。このシステムは、複数の記憶ブロックを有する複数の記憶装置と、前記複数の記憶ブロックと通信するストレージマネージャと、前記ストレージマネージャおよび前記複数の記憶ブロックと通信するブロックレイアウト情報生成器と、前記複数の記憶ブロックおよび前記ストレージマネージャと通信する誤り訂正パラメタ計算器とを含む。前記ストレージマネージャは、前記ブロックレイアウト情報生成器からのブロックレイアウト情報に応じて、書き込み処理に用いられる記憶ブロックのグループを識別することによりその書き込み処理の実行を制御し、誤り訂正パラメタ計算器によるそれらのストライプについての誤り訂正パラメタの計算コストを最小にしつつ、記憶装置内のチェーン長が最大になるようにするものである。
【００１８】
さらに他の実施形態において、本発明は、記憶ブロックへのデータの格納を管理するための方法に関する。この方法は、ブロックレイアウト情報を生成するステップと、誤り訂正計算の第１の数を動的に判定するステップと、チェーン長に対応する第２の数を判定するステップと、前記ブロックレイアウト情報に応じて、書き込み処理に用いられる記憶ブロックのグループを識別することによってその書き込み処理の実行を制御し、１ストライプにわたる誤り訂正パラメタの計算を第１の数だけ実施しつつ、記憶装置内が第２の数のチェーン長になるようにするステップとを含む。
【００１９】
ＲＡＩＤのコンテクストにおいて、実施形態の中には、書き込み要求をバッチ処理することによってそれらの利点を実現しているものもあり、バッチ要求のデータを記憶するために複数のストライプに空間を割り当て、データをそれらのストライプのチェーン全体に書き込むものがある。このように、本発明の特徴は、各ディスクドライブに対して垂直に書き込みを行ないたいという要求と、パリティ判定の際の効率を求めるためにストライプ全体に書き込みを行ないたいという要求とのバランスをとることである。
【００２０】
本発明の上記のおよびその他の目的、態様、特徴及び利点は、下記の説明および特許請求の範囲の記載から、さらに明らかになるであろう。
【図面の簡単な説明】
【００２１】
【図１ａ】本発明に従って構成されたデータストレージシステムの一実施形態を示すブロック図である。
【図１ｂ】本発明に従って攻勢されたディスクドライブアレイの一実施形態を示すブロック図である。
【図２】クライアント及びディスクドライブアレイと通信するストレージシステムの一実施形態を示すブロック図である。
【図３】図１の実施形態に対応するストレージシステムの一実施形態を示すブロック図である。
【図４】図１のストレージシステムによって実施されるような記憶装置アレイへのデータの格納を制御するための方法の一実施形態を示すフロー図である。
【図５】ＲＡＩＤ４ディスクドライブアレイの一実施形態を示すブロック図である。
【図６】全１６個の記憶ブロックからなり４ストライプを含む記憶ブロックグループの一実施形態を示すブロック図である。
【図７】バッファリングされた４つの書き込み要求の一実施形態を示すブロック図である。
【図８】図６のデータブロックとディスクドライブアレイにおける記憶ブロックグループとの関係の一実施形態を示すブロック図である。
【図９】３つの記憶ブロックグループに格納されたデータブロックを含むディスクドライブアレイの一実施形態を示すブロック図である。
【図１０】ミラーリングを含むＲＡＩＤアレイの一実施形態の論理的グループ分けの一実施形態を示すブロック図である。
【図１１】図１０のアレイに実施されるようなデータ書き込みを処理するための方法の一実施形態を示すフロー図である。
【図１２】図１のストレージシステムに含まれるストレージオペレーティングシステムの一実施形態を示すブロック図である。
【発明を実施するための形態】
【００２２】
「ファイル」、「データ」及び「データファイル」という用語は、本明細書では、アナログ手段またはデジタル手段を介して記憶及び／又は転送可能なデータの任意のエンティティを指すものと考える。エンティティは、アナログ形態で生成される場合もデジタル形態で生成される場合もあり、様々な時点でアナログ形態やデジタル形態で格納される。エンティティは、電気的手段、電気磁気的手段、電気光学的手段、光学的手段、及び、その他の手段に記憶する能力をもち、２つの異なる物理的位置間で、特に電気、無線、及び光学ベースの通信を介して、転送する能力を持つ。
【００２３】
概要として図１ａを参照すると、本発明に従って構成されたデータ記憶システムの一実施形態には、複数のデータ記憶装置すなわちディスク９０Ａ、９０Ａ'、９０''（まとめて９０と呼ぶ）、及び、パリティ記憶装置すなわちディスク９２Ａが含まれる。各記憶装置には、複数の記憶ブロックすなわち記憶位置が含まれる。この図では装置が記憶ディスクとして図示されているが、固体ディスクなど、任意のランダムアクセス持続性記憶装置を用いることができる。そのようなディスクのグループの一実施形態が、ＲＡＩＤアレイである。
【００２４】
このアレイに書き込まれるデータは、複数のデータディスクにわたって一連のストライプ９４Ａ、９４Ａ'、９４''（まとめて９４と呼ぶ）として書き込まれ、それらのストライプに関するパリティ値がパリティディスク９２Ａ上に書き込まれる。さらに、本発明では、チェーン９６Ａと呼ばれる同一ディスク９０上の一連のブロックに対して、データの書き込みが可能である。同一ディスク９０に複数のデータブロックを書き込むことによって、そのデータに関するアクセスタイムが短くなる。
【００２５】
本発明の特徴は、記憶装置アクセスおよびパリティ計算オーバヘッドの最適化を可能にする。記憶装置アクセスの最適化は、書き込み処理に関するチェーン長を最大にすることによって行なうことができる。パリティ計算オーバヘッドの最適化は、書き込み処理の際にパリティディスク９２Ａを更新するために読み出す必要がある記憶ブロックの数を最小にすること、または、パリティ計算に必要な読み出しのチェーン長を最大にすることによって、行なうことができる。
【００２６】
本明細書で用いられるように、一実施形態において、「チェーニング」とは、ディスクドライブ上の連続したデータ、即ち、ＤＢＮが連続しているブロックに対する単一Ｉ／Ｏのための読み出し／書き込みデータである。他の実施形態では、チェーニングは、介在記憶ブロックがすでに割り当てられていたり、Ｉ／Ｏに利用できなかったりする場合もある連続ではないが可能な限り互いに近接している（「局所性」と呼ばれる）ブロックに対する単一Ｉ／Ｏにおける読み出し／書き込みデータである。
【００２７】
「チェーン長」は、１チェーン内に含まれるブロック数を意味する。「チェーン長の最大化」は、ディスク上で可能な限り長いチェーンを得るための処理であり、チェーン長はそのディスク上の記憶ブロック数までに限られ、例えば、チェーンの組み立てやＩ／Ｏの実行の際の過度の待ち時間を避けるため、あるいは、Ｉ／Ｏを実施するために必要なリソースの利用可能性に対する制約から、もっと小さい妥当な数に制限される場合もある。チェーン長の最大化は、各ディスクについて個別に実施することもできるし、アレイ全体のすべてのディスクの結合について実施することもできる。
【００２８】
最大チェーン長の書き込み処理を可能にし、最大数の完全ストライプが書き込まれるようにするため、データ書き込み要求はファイルシステム層によって収集、すなわちバッファリングされる。同一ファイルのファイルシステムレイアウトブロックは、順番に（即ち、ファイル内の順番と同じ順番で）、現在の書き込み処理の後に処理される読み出し処理の際の先読み性能を最適化する。
【００２９】
ファイルシステム層は、ディスク９０を管理するＲＡＩＤ層から受信したディスク９０接続形態情報を用いて、収集したデータ書き込み要求に関する書き込み処理について、ストライプ９４の記憶ブロックを選択する。この接続形態情報には、ディスクドライブのサイズ、アレイ内のディスクドライブ数、その他の情報を含めることができる。ファイルシステム層は、ブロックレイアウト情報を生成する際にこの接続形態情報を利用して、バッファリングした書き込み要求のデータブロックを選択されたストライプにおける空き記憶ブロックに関連付け、次いでそのストライプが書き込み処理を割り当てる。
【００３０】
ファイルシステム層は、書き込み処理に用いるべき記憶ブロックを選択し、チェーン９６Ａの最大長を提供する。これは、データブロックの「関連」集合（すなわち、単一書き込み処理のために収集され、データバッファに保持されたデータブロック）は、ディスクの近接した記憶ブロックに書き込まれることが多いということを意味している。パリティ計算を最小限にするため、ファイルシステム層は、バッファリングした書き込み要求のデータブロックを、選択されたストライプ内の可能な限り多くの空きブロックに関連づけ、好ましくは選択されたストライプ内のすべての空き記憶ブロックに関連付ける。
【００３１】
書き込み処理を完了するため、記憶するデータブロック（あるいは、そのデータブロックに対するメモリ参照）、及び、ブロックレイアウト情報がＲＡＩＤ層に転送される。このようにして、ＲＡＩＤ層には、全書き込み処理を処理できることが通知される。さらに、パリティ計算のコストを最小限にするため、ＲＡＩＤ層は、ブロックレイアウト情報に応じてその書き込み処理を実行し、Ｉ／Ｏ処理を効率的にすることができる。
【００３２】
ＲＡＩＤ層は、例えば減算方法や再計算方法など、適当なパリティ計算方法を選択し、選択したストライプの各々について、いわゆる「最小コストのパリティ計算方法」を用いることができる。この選択は、各ストライプにおけるデータ書き込み先の記憶ブロックの数および位置、並びに、接続形態情報に応じて行なわれる。「減算方法」とは、書き込みを行なうデータブロック（例えばＷ１、Ｗ２）の前の内容、及びそのストライプについてのパリティデータ（Ｐ）を読み出し、そのストライプに書き込む新たなデータブロック（例えばＷ１'、Ｗ２'）をデータバッファから取得するような、ストライプのパリティ計算方法を意味している。次いで、そのストライプに関する新たなパリティデータ（Ｐ'）を、次の式に従って計算する：
Ｐ'  ＝  Ｗ１  ＸＯＲ  Ｗ２  ＸＯＲ  Ｐ  ＸＯＲ  Ｗ１'  ＸＯＲ  Ｗ２'
ただしＸＯＲは排他的論理和演算とする。
【００３３】
「再計算方法」とは、ストライプのデータブロックのうち、書き込みを行なうデータブロック以外のデータブロック（例えばＷ３、Ｗ４）の内容を読み出し、そのストライプに新たに書き込むデータブロック（例えばＷ１'、Ｗ２'）をデータバッファから取得するような、ストライプのパリティ計算方法を意味している。次いで、そのストライプについての新たなパリティデータ（Ｐ'）を次の式：
Ｐ'  ＝  Ｗ１'  ＸＯＲ  Ｗ２'  ＸＯＲ  Ｗ３  ＸＯＲ  Ｗ４
に従って計算する。
【００３４】
図１ｂは、ディスクアレイの一例を示すものであり、最小コストのパリティ計算方法を例示するために用いられる。図１ｂは、ＲＡＩＤレベル４に従う例として、４台のデータ記憶ディスクと１台のパリティディスクとで構成されたＲＡＩＤアレイを図示したものである。この図では、頭に１から４まで数字を付したデータディスクとＰで示されるパリティディスクとを用いて、ディスクが列として図示されている。アレイと交差するストライプは行として表現され、左側に１から６まで数字が付けられている。このように、４×６の格子は２４個のデータ記憶ブロックを表わしていて、各ストライプは、そのストライプに関するパリティブロックを有し、パリティブロックは対応するストライプ内のデータブロックの内容から計算されたパリティデータを格納している。便宜上、各々の記憶ブロックは、それがデータ用であってもパリティ用であっても、Ｘをアレイ内のブロックの行の番号とし、Ｙをアレイ内のブロックの列の番号としたとき、ＸＹによって一意に識別できるものとする。
【００３５】
図１ｂには、書き込み処理の保留に関するデータ格納に割り当てられた記憶ブロックも図示されている。図面において、割り当てられた記憶ブロックは「Ｗ」で示し、パリティを格納しているブロックは「Ｐ」で示し、保留中の処理に割り当てられたブロックは「−」（ハイフン）で示している。従って、次のブロック：１１、２１、３１、３２、３３、４１、５１および６１が書き込まれていて、パリティブロックの各々にはパリティデータＰが格納されている。
【００３６】
この例において最小コストのパリティ計算方法を実施する場合、パリティ計算をサポートするために必要なデータ及びパリティをアレイから取得するため、多数の読み出し処理が必要である。この読み出し処理は、多数の代替方法のうちのいずれを用いて実施することもできる。実施形態は、それらの方法のうちの１つまたは他の方法を用いるように設計することもできるし、書き込み処理実行中にいずれの方法を使用するかの選択を動的に実施することもできる。
【００３７】
第１の方法は、１つの方法で可能である場合は常に同一記憶装置からの複数の読み出しをまとめてチェーニングしつつ、パリティ計算を効率的にするために必要な読み出し処理の最小数を１ストライプごとに判定することを伴う。この場合、アレイを検査して、各ストライプにおける書き込みを行なうべき記憶ブロックの数を確認する。各ストライプにおいて、書き込みを行なうべきブロック数が記憶ブロックの総数の半分を超える場合は再計算方法を選択して使用し、その数が半分を超えない場合は減算方法を選択する。ちょうど半分であった場合、複数のパリティ計算方法のうちの１つまたはその他を実施形態に選択することができる。図示の例では、行１および２については減算方法が選択され、行３については再計算方法が選択され、行４〜６については減算方法が選択される。
【００３８】
その選択を行なった後、選択したパリティ計算方法を実施する。図示の例では、記憶ブロックからデータ及びパリティを次のように読み出すことにより、最小回数の読み出し処理を実現することができる：
Ｒｅａｄ  １１、２１
Ｒｅａｄ  ３４
Ｒｅａｄ  ４１、５１、６１
Ｒｅａｄ  １Ｐ、２Ｐ
Ｒｅａｄ  ４Ｐ、５Ｐ、６Ｐ
このように、この例の場合、新たに書き込むパリティを計算するため、５つのチェーンで構成された１２回の読み出し処理を用いて、アレイからデータ及びパリティを効率よく取得することができる。このような読み出し処理を実施することによって、プロセッサ及びメモリリソースの消費が最小限で済む。
【００３９】
第２の方法は、読み出しを行なうブロック数を最小限にし、減算方法でも再計算方法でもすべての読み出しストライプにおけるパリティを計算できるようにしつつ、チェーン長を実質的に最大にするように、読み出しを行なうべき記憶ブロックを識別する。選択されたパリティ計算方法（すなわち減算または再計算）は、１ストライプ当たりの読み出し回数とは無関係に、必要な読み出し処理がアレイ全体中の最大チェーン長になるようにして、実施される。図示の例では、それらの読み出し処理についての最大チェーン長は、次の読み出し処理によって得られる：    Ｒｅａｄ  １１、２１、３１、４１、５１、６１
Ｒｅａｄ  ３２
Ｒｅａｄ  ３３
Ｒｅａｄ  １Ｐ、２Ｐ、３Ｐ、４Ｐ、５Ｐ、６Ｐ
このように、この例の場合、新たに書き込むパリティを計算するため、最大平均チェーン長を有する４つのチェーンで構成された１４回の読み出し処理を用いて、アレイからデータ及びパリティを効率よく取得することができる。このような読み出し処理を実施することによって、ディスクアクセスのための総合的なオーバヘッドが最小になる。
【００４０】
本発明の好ましい実施形態は、パリティ計算の最小コストが得られる方法を選択して読み出し処理を実施するため、それら２つの代替方法のうちの一方または両方を使用する。例えば、システムがメモリに制限をもつ場合は第１の方法を選択することによってメモリの使用量が最小することができ、システムがディスクバンド幅に制限をもつ場合は第２の方法を選択することによってバンド幅使用量を低減させることができる。このように、本発明は、システム構成にとっていずれが適していると判定されたとしても、最小回数読み出しの方法または最大チェーン長の方法のいずれかに従って読み出し処理を実行するように実施することができる。
【００４１】
従って、ディスクバンド幅には制限があるがＣＰＵやメモリには制限のないシステムの場合、ＲＡＩＤ層は、ファイスシステム層によって作成されたブロックレイアウト情報を評価することにより、パリティ計算に必要な読み出しについてのチェーン長を最大にすることが好ましい。それを行なうため、一実施形態では、ＲＡＩＤ層が異なるディスク上にあるブロックチェーンの様々な組み合わせを識別し、各組み合わせについて平均チェーン長を計算し、最大平均チェーン長の組み合わせに属するブロックを読み出し処理の際に読み出すブロックとして指定する場合がある。このようにして、アレイ全体の全ディスクの組み合わせについて、チェーン長の最大化が実施される。
【００４２】
好ましい実施形態において、本発明は、複数のストライプに対する同時書き込みをサポートしたファイルシステムを特徴とする。このファイルシステムは、書き込み要求及び接続形態情報を受信する。このファイルシステムは、ディスク接続形態情報および書き込み要求に応じてブロックレイアウト情報を作成し、ＲＡＩＤ層によって処理される単一Ｉ／Ｏ書き込みトランザクションを作成する。
【００４３】
ブロックレイアウト情報は、複数のストライプを前記書き込みＩ／Ｏトランザクションによって書き込まれるデータに関連付ける。この複数のストライプには、記憶ブロックのマトリクスすなわち２次元アレイとして定義することができる一群の記憶ブロックが含まれる。一実施形態において、このファイルシステムは、複数の書き込み要求を１つの書き込みＩ／Ｏトランザクションにまとめる。他の実施形態において、本発明は、ＲＡＩＤ層が、ファイルシステムと協働して記憶ブロックのアレイに対する書き込み処理を可能にするように構成されたストレージマネージャを有していることをさらに特徴とする。例えば、ＲＡＩＤ層は、書き込みを行なうデータと２以上のストライプに分散された一群の記憶ブロックとの関係を指定するブロックレイアウト情報に応じて、単一書き込みトランザクションを処理することができる。
【００４４】
一実施形態において、ＲＡＩＤ層は、ファイルシステムに接続形態情報を公開することによって、ファイルシステムが書き込みトランザクションのためにブロックレイアウト情報を作成できるようにする。さらに、好ましい実施形態におけるファイルシステムは、割り当てられた記憶ブロックおよび未割り当ての記憶ブロックに関する情報を受信及び／又は維持する。ファイルシステムは、この情報を検査し、それを用いてＲＡＩＤグループに書き込むためのブロック位置を最適化する。
【００４５】
図２は、ストレージアクセス要求、すなわち、ディスクドライブ２１を含むディスクドライブアレイ２０に対する書き込み要求および読み出し要求を管理するストレージシステム１０の実施形態を示すものである。ストレージシステム１０には、ファイルシステム１１、記憶要求バッファ１２、ディスクアレイマネージャ１３、ストレージディスク接続形態情報１４、及び、データブロックを一群の記憶ブロックに関連付けるブロックレイアウト情報１５が含まれる。アレイ２０には、ディスクドライブ２１のうちの少なくとも１台がパリティを格納しているＲＡＩＤアレイを用いることができる。
【００４６】
クライアント３１は書き込み要求４１をストレージシステム１０に送信する。書き込み要求４１は、格納すべきデータを識別するものであったり、あるいは、格納すべきデータを含むものである。
【００４７】
ストレージシステム１０のファイルシステム１１は、書き込み要求４１などのクライアントＩ／Ｏ要求を評価および管理する。一実施形態における書き込み要求４１は、ディスクアレイ２０に対する単一書き込み処理を実施する前に、要求バッファ１２に格納される。
【００４８】
ディスクアレイマネージャ１３は、ファイルシステム１１とアレイ２０の中間に示されているように、ディスクアレイ２０に対するアクセス要求を管理する。また、ディスクアレイマネージャ１３は、ファイルシステム１１に対するディスクアレイ接続形態すなわちディスクアレイ構成の更新も行なう。ディスク接続形態情報１４には例えば、ディスクドライブ２１のＩＤやドライブ２１の記憶空間に関する情報（例えばディスクサイズなど）、あるいは、アレイ内のディスクドライブのＩＤや順番に関する情報などが含まれる。
【００４９】
ディスク接続形態情報１４には、記憶ブロック番号などの記憶ブロック識別子を含めることが好ましい。実施形態の中には、接続形態情報１４に記憶ブロックの仮想ブロック番号（ＶＢＮ）を含めて、ディスクアレイマネージャ１３がＶＢＮからディスクブロック番号（ＤＢＮ）へのマッピングを管理するものがある。ディスクドライブの各々は、複数の同時マッピングをサポートできることが好ましいが、ディスクドライブの記憶空間すべてをマッピングする必要はない。
【００５０】
書き込み要求４１は、単一書き込みトランザクションによって記憶装置に書き込むのに十分なだけのデータブロックが収集されるまでバッファリングされる。好ましい実施形態では、書き込み要求４１は、単一書き込みトランザクションを行なうため、ファイルシステム１１によって決められているような１以上の基準が満たされるまでバッファリングされる。例えば、書き込み要求４１は、最適な書き込みトランザクションが実行できるようになるまでバッファリングされたり、システムタイマーがその書き込みトランザクションを実行すべきことを示すまでバッファリングされる場合がある。
【００５１】
次に、ファイルシステムマネージャ１１は、単一書き込み処理を行なうため、ディスク接続形態情報１４を用いて、バッファリングされたデータブロックをディスク記憶ブロックに関連付けるブロックレイアウト情報１５を構成する。ブロックレイアウト情報１５は、バッファリングされた書き込み要求４１の各データブロックを、記憶ブロックグループにおける記憶ブロックに関連付ける。グループには各ディスクドライブ２１の２以上の記憶ブロックを含めることができ、チェーンを最大にするため、最適には、少なくとも複数のディスクドライブ２１の２以上の記憶ブロックが含められる。
【００５２】
書き込みトランザクションの処理のため、ブロックレイアウト情報は、ディスクアレイマネージャ１３に転送される。ディスクアレイマネージャ１３は、ブロックレイアウト情報１５を含む書き込みトランザクション要求を受信し、その単一書き込みトランザクションに関する１以上のストライプを識別する。これに対して従来のシステムは一般に、単一のストライプ書き込みトランザクションをＲＡＩＤ層に送信している。このように、本発明の特徴は、完全な書き込みトランザクションをＲＡＩＤ層に転送することが可能であるということである。
【００５３】
次に図３を参照すると、ファイルシステム１１及びディスクアレイマネージャ１３は、ソフトウェアでもファームウェアでも実施することができ、例えばソフトウェアアプリケーション、コンピュータオペレーティグシステムの一部、あるいは、入出力制御装置としても実施することができる。これらは、ストレージシステム１０の単一の構成要素内で実施することもできるし、個別の構成要素内で実施することもできる。
【００５４】
図３は、図１の実施形態に対応するストレージシステム１０Ａの実施形態を示している。ストレージシステム１０Ａには、ネットワークアダプタ３１０、メモリ３３１を有するプロセッサ３３０、メモリ３２０、及び、ストレージアダプタ３４０が含まれる。プロセッサは、ファイルシステム１１を実現するオペレーティングシステム及び／又はアプリケーションをサポートすることができる。
【００５５】
メモリには、オペレーティングシステム、アプリケーションプログラム、及び、その他データを格納することができる。プロセッサ３３０及びアダプタ３１０、３４０には、処理要素及び／又は論理回路が含まれる。例えば、このプロセッサは、コンピュータマイクロプロセッサ集積回路である場合がある。電子記憶技術分野の当業者であれば、本発明の特徴を実現するための他のハードウェア手段、ファームウェア手段、及び、ソフトウェア手段も考えつくであろう。
【００５６】
ネットワークアダプタ３１０は、ネットワークを介してストレージシステム１０Ａをクライアント３１に接続するための構成要素を有する。このネットワークは、直接接続を提供するものである場合も、共有通信路を提供するものである場合もある。クライアント３１及びストレージシステム１０Ａは、クライアント／サーバ通信モデルを実施することができる。パケットの交換によって、クライアント３１はストレージサービスを要求することができ、ストレージシステムはクライアント３１に応答することができる。これらのパケットは、例えばインターネットプロトコルやネットワークファイルシステムプロトコルを用いてカプセル化することができる。
【００５７】
クライアント３１には任意の種類のコンピュータシステムが含まれ、例えば、パーソナルコンピュータ、ワークステーション、サーバ、メインフレームコンピュータ、あるいは、その他コンピュータ装置が含まれる。あるいは、クライアント３３１は、ＰＤＡや携帯電話など、可搬式コンピュータ装置であってもよい。また、クライアント３１は、サーバベースのコンピューティングモデルに従って動作する任意の端末（ｗｉｎｄｏｗｓ(R)ベースまたは非ｗｉｎｄｏｗｓ(R)ベースの）やシン・クライアント装置であってもよい。
【００５８】
クライアント３１及び／又はディスクドライブ２１は、インターネットなどのワイドエリアネットワーク（ＷＡＮ）を介してストレージシステム１０と通信することができる。ストレージシステム１０は、ファイルサーバ（ファイラーとも呼ばれる）として実施され、クライアント３１サイトに存在する場合もあるし、ローカルエリアネットワーク（ＬＡＮ）などのサイトネットワークを介してクライアント３１にネットワーク接続される場合もある。また、サーバは、サイト外に存在させ、クライアント３１及び／又はディスク装置２１から取り除くこともできる。
【００５９】
ストレージアダプタ３４０は、ディスクアレイ２０に対するインタフェースを提供するものである。あるいは、アダプタは、他の種類の記憶媒体を含む記憶装置に対するインタフェースである場合もある。記憶媒体には、例えば、光ディスク、磁気テープ、バブルメモリ、及び、トランジスタベースのランダムアクセスメモリなどが含まれる。
【００６０】
ストレージアダプタ３４０は、プロセッサ３３０上で実行されているストレージオペレーティングシステム及び／又はアプリケーションソフトウェアと協働して、クライアント３１からのデータ要求を処理する。ストレージアダプタ３４０は、例えば、高性能ファイバーチャネルシリアルリンク接続形態によって、アレイ２２０とのインタフェースをとる。ディスクドライブ２１に対するデータ書き込みやデータ読み出しは、プロセッサ３３０及び／又はアダプタ３４０によって処理される。その後、読み出されたデータは、ネットワークアダプタを介してクライアント３１に転送される。
【００６１】
ディスクドライブアレイ２０は１以上のボリュームとして実施することができ、ボリュームの各々はディスク記憶空間の論理配置を定義する記憶ディスクを含む。各ボリュームは、それ独自のファイルシステムに関連付けられている。ボリューム内のディスクドライブは通常、１以上のグループのＲＡＩＤディスクとして編成される。ボリューム内のディスクドライブは、ディスクドライブの集まりである２以上のミラー、すなわち「プレックス」に編成することができる。プレックスは、ミラーデータを他のプレックス（単数の場合も複数の場合もある）に格納することにより、データの信頼性を向上させるものである。ミラー構成については、図１１を参照してさらに説明する。
【００６２】
図４は、例えば図２のストレージシステム１０のファイルシステム１１によって実現されるような記憶装置アレイに対するデータの格納を制御するための方法の一実施形態を示すフロー図である。処理の後、例えばバッファリングした要求を除去することにより、要求バッファ１２を初期化する（ステップ７１）。クライアント３１から書き込み要求４１を受信し（ステップ７２）、それを要求バッファ１２にバッファリングする（ステップ７３）。例えばミラー再同期のため、ストレージシステム内で他の書き込み要求を生成することもできる。書き込み要求４１には、格納すべきデータ、及び／又は、格納すべきデータに対する参照が含まれる。参照には、例えば、ポインタや、複数レベルの間接参照が含まれる。データには、ディスクドライブ２１の記憶ブロックに対応するサイズの複数のデータブロックが含まれる。このデータには、ブロックの一部だけしか埋められていないデータも含まれる場合がある。
【００６３】
最終的に、十分な量のデータブロックが要求バッファ１２にバッファリングされ、バッファ参照によって参照される（ステップ７４）。この十分な量のデータというのは、１以上の基準に従って判定される。一実施形態において、この基準は、書き込みトランザクションに十分なサイズである場合がある。例えば、書き込み要求４１は、書き込みトランザクションがファイルシステム１１によって処理することができる最適な長さになるまでバッファリングされる場合がある。他の基準としては、利用可能な書き込みバッファの枯渇などがある。
【００６４】
本発明の一実施形態は、書き込み用バッファを論理的にグループ分けする。バッファのグループ分けは、例えば、ファイルシステム層により所定の基準に基づいて実施される。基準には、例えば、書き込みトランザクションのためにバッファリングしている（書き込みすべき）データブロックの数やサイズが効率的なディスクアクセスを行なうために十分な程度の短い待ち時間及び／又はチェーン長を維持するように選択された所定のしきい値に達することや、利用可能な書き込みバッファの数が所定の低いしきい値に達することなどが含まれる。
【００６５】
ＲＡＩＤ層が個別の装置としてそれらのグループに作用し、そのチェーン読み出し及びチェーン書き込みをそれらのグループに基づいて行なう場合、実質的に最適なチェーン長が保証される。このように、ファイルシステム層とＲＡＩＤ層は、従来技術の方法のように各々のタスクを別々に実施するのではなく、書き込み要求の最適な実行を促進するように協調動作する。
【００６６】
従来の方法では、ファイルシステム層がストライプ書き込みを個別にＲＡＩＤ層へ送信し、ＲＡＩＤ層（この目的ではディスクドライバも含まれると考える）は複数のストライプ書き込みについて読み出し及び書き込みのチェーン長がより長くなる関連付け方法を判定する際に、独自の発見方法を使用していた。このような方法では一般に、最適チェーン長が短くなってしまい、得られる結果も確定的でなくなる。
【００６７】
ファイルシステム１１は、ディスクドライブアレイ２０の一群の記憶ブロックにおいてデータブロックを未割り当ての記憶ブロックに関連付けるためのブロックレイアウト情報１５を生成する（ステップ７５）。このブロックレイアウト情報１５は、例えば、一群の記憶ブロックにおけるデータブロックと空き記憶ブロックとの関係などにすることができる。
【００６８】
一実施形態において、ブロックレイアウト情報は、（ａ）データブロックの書き込み先にあたるディスクのＤＢＮ及びＩＤを用いてそれらの記憶ブロックを指定するとともに、（ｂ）その書き込みに必要な最小オフセットストライプ及び最大オフセットストライプを指定する。
【００６９】
ブロックレイアウト情報を生成するための実施形態は、次の重要な目的を実現するように試みるものでなければならない、即ち：（１）ディスク上の連続した空きブロックを選択して１ファイル内の連続したブロックにレイアウトすること（これは、後続の読み出しＩ／Ｏトランザクションにおけるファイルの先読み能力を向上させることを意図している）、（２）満杯のストライプを書き出して、ＲＡＩＤ層がパリティを効率よく計算および更新できるようにすること、（３）書き込みに関する長いチェーン長をＲＡＩＤ層に与えること、及び、（４）すべての空きブロックを使いきり、ファイルシステム空間が完全に利用されるようにすることである。
【００７０】
連続したディスクブロックへの書き込みは同一ディスク内の複数ブロックへの割り当てを意味している一方、満杯のストライプの書き出しはＲＡＩＤグループにまたがる割り当てを意味しているので、目的（１）と目的（２）は、互いに対立するものであるということに注意すべきである。これら２つの要件のバランスをとるために、ファイルシステム層は、特定ディスクに割り当てられるファイルのブロック数を所定数に制限し、そのしきい値に達した場合、それ以上の書き込みについては別のディスクを選択する場合がある。また、特定空きブロックの割り当てによって最適チェーン長でなくなる可能性があるので、目的（３）と目的（４）も対立する場合がある。従って設計者は、それらの目的が対立した場合、それらの実現を妥協してそれらの目的に優先順位をつけた実施形態を作成することができる。
【００７１】
次にそれらの目的を達成するための一例示的実施形態について説明する。この実施形態では、ファイルシステム層における書き込み割り当てが一度に１ファイルづつ実施され、各ファイルについて、そのファイルに「属する」バッファがそのファイル内のブロック番号（「ＦＢＮ」）の順番で割り当てられる。ステップは次のようになる：
（１）書き込み割り当てに対して次のファイルを選択するステップ。
（２）特定ベースオフセットに対する最小の空きＤＢＮを有するディスクであって、その領域にもっと空き空間を割り当てることが選択されているディスクを選択するステップ。そのような相対的空き具合の判定は、いくつかの代替手段によって行なうことも可能である。この実施形態の場合、ファイルシステム層がディスクの各領域について空きブロックのカウントを保持している。この一連のカウントをサーチすることにより、比較的空いている領域を見付けることができる。
（３）現在のファイルの次のバッファを、選択されたディスクの２番目に空きが少ないＤＢＮに割り当てるステップ。
（４）ブロックレイアウト「全体」が書き込み割り当てされているか否かをチェックするステップ。ブロックレイアウト「全体」は、ストライプの所定範囲にある全ての空きブロックの割り当てとして定義される。すでに割り当てられている場合、ブロックレイアウト情報をＲＡＩＤ層に渡す。
（５）現在のファイルについてバッファがなくなるまで、または、ＦＢＮが所定の境界に達するまで、ステップ（３）及び（４）を繰り返し、そうでなければステップ（６）へ進むステップ。
（６）現在のファイルがまだバッファを有している場合はステップ（２）へ進み、そうでない場合、書き込み割り当てすべきファイルがまだあればステップ（１）へ進むステップ。それ以上ファイルが無い場合、アルゴリズムは終了する。
【００７２】
この実施形態は、あらゆる状況において最大書き込みチェーン長を可能にしているだけでなく、利用可能な空間を埋める処理に優先順位も設けている点にも注意してほしい。代替実施形態は、これと逆のことを行って、チェーン長を最大にするための選択を与える場合もある。しかしながら、この実施形態でも良好なチェーン長が得られる理由は、書き込み割り当て器がより空き空間の多いＲＡＩＤグループの領域を優先的に選択するからである。従って、上記アルゴリズムに従って、あるブロックが大量の空き空間を有するディスク領域の書き込み割り当てに選択された場合、後続の近隣ブロックがそのファイルの後続ブロックに書き込み割り当てされるように選択される。
【００７３】
図４を参照すると、ブロックレイアウト情報１５を生成した後、本方法は、レイアウト情報１５に従って例えば複数のストライプに対してチェーン書き込みすることにより、バッファリングしたデータブロックの記憶ブロックに対する書き込みを実行する（ステップ７６）。具体的には、この方法は、少なくともいくつかのデータブロックを一台のディスクドライブに書き込む一方で、他の関連データブロックを他のディスクドライブに書き込み、好ましくは同じストライプ内に書き込む。従って、同一ドライブ上の複数の記憶ブロックに書き込むこと、及び、ストライプ内に複数の記憶ブロックに書き込むことの利点を実現することができる。ブロックレイアウト情報１５に従ってデータブロックを一群の記憶ブロックに格納するため、データブロックがディスクドライブアレイ２０に送信される（ステップ７６）。従って、ＲＡＩＤ層は、書き込みについて最適チェーン長を有する完全な書き込みトランザクションＩ／Ｏ要求を受信する。
【００７４】
従って、ストレージシステム１０は、ＲＡＩＤアレイ内の連続したストライプを含む記憶ブロックの２次元グループに対するバッファリングしたデータの書き込みを処理することができる。また、チェーン読み出しを最適化することにより、パリティ計算オーバヘッドを低減させることもできる。さらに、好ましい実施形態では、ＲＡＩＤ層は、ブロックレイアウト情報１５を用いてパリティ計算方法を選択することで、パリティ計算に必要な読み出しに関するチェーン長を最大にすることができる。
【００７５】
次に図５〜９を参照すると、図４の方法の実施が図示されている。分かりやすくするため、パリティドライブは図示されていないか、あるいは、影で図示されている。図５は、ディスクドライブのＲＡＩＤ４アレイ２０Ａの一実施形態を示すものである。当業者であれば、本発明の特徴が他のＲＡＩＤ構成を用いたストレージシステムで実施することもできることは、明らかであろう。アレイ２０Ａには、データブロックを格納するための４台のディスクドライブ（１から４までラベルを付加）、及び、パリティデータ用の５番目のドライブ（影で図示）が含まれる。これらのディスクドライブ中の記憶ブロックは、記憶ブロック番号で識別される。現在割り当てられている記憶ブロックは、「×」で図示されている。残りの空き記憶ブロックは、データブロックの格納に利用することができる。
【００７６】
ＲＡＩＤ層から受信した接続形態情報およびブロック割り当て情報に応じて、バッファリングされた書き込み要求に対応する数のデータブロック数を格納するため、アレイ２０Ａにおいて未割り当ての記憶ブロックが選択される。好ましくは、これらの未割り当てのブロックは、アレイ２０Ａの最適数のストライプにおける空きブロックを満たすように選択される。
【００７７】
従って、書き込み要求のあったデータが書き込まれる先のストライプには、一群の記憶ブロックが含まれ、この例の場合、記憶ブロックの２次元アレイが含まれる。１次元の場合、列次元がディスクドライブ番号に対応する。他方の次元、すなわち行次元は、記憶ブロック番号に対応する。
【００７８】
図６は、記憶ブロックのグループ１２０の他の実施形態を示すものであり、この実施形態は、全１６個の記憶ブロックの４つのストライプを含み、ファイルシステム１１についての単一書き込みトランザクションを処理する。グループ１２０は、１４個の空き記憶ブロックを有する。
【００７９】
書き込みトランザクションについてバッファリングされた書き込み要求４１は、ブロックレイアウト情報によってグループ１２０に関連付けられた１４個のデータブロックを提供する。これらのデータブロックおよびその関連は、ディスクアレイマネージャ１３に送信されて処理され、各データブロックがグループ１２０内のそれに関連する記憶ブロックに格納されるようになっている。
【００８０】
一群の記憶ブロックにおける４つの書き込み要求４１に関連するデータブロックの格納に関する書き込みトランザクションの特定の例について、図７及び図８を参照して説明する。図７は、バッファリングされた４つの書き込み要求５０を示している。書き込み要求Ａには、データブロックＡ１〜Ａ６が含まれる。書き込み要求Ｂには、データブロックＢ１〜Ｂ４が含まれる。書き込み要求Ｃには、データブロックＣ１及びＣ２が含まれる。書き込み要求Ｄには、データブロックＤ１〜Ｄ７が含まれる。バッファリングされた４つの要求５０は、例えば、一群の記憶ブロックに格納するための１９個のデータブロックを提供する。
【００８１】
図８はブロックレイアウト情報１５を示すものであり、この例では、図７のデータブロックとディスクドライブアレイ２０における記憶ブロックグループとの関係を示している。このグループの中には、アレイ２０の６つのストライプが含まれ、１９個の空きブロックとバッファリングされた要求４１の１９個のデータブロックとの間に１対１の関係を提供している。次いで、ストレージシステム１０は１つの書き込みを複数のストライプに誘導し、グループ内の空きブロックを埋めてゆく。関連付け１５Ａの代替実施形態では、一群の記憶ブロックにおける空き記憶ブロックのすべてがバッファリングされたデータブロックに関連付けられるのではない場合もある。
【００８２】
この記憶ブロックグループ内の空きブロックへの最終的なデータ転送は、ディスクアレイマネージャ１３、例えばＲＡＩＤ層によって実施される際に、各ドライブ上の書き込みが行なわれる複数の記憶ブロックを用いて、各ディスクドライブに対して同時書き込みで進めることができる。従って、１つの書き込み処理には、複数ストライプへのデータの同時格納が含まれる場合もある。
【００８３】
ディスクアレイマネージャ１３は、こうした書き込み要求を解釈して実行するように構成される。これに対して、従来技術のＲＡＩＤシステムは一度に１ストライプしか処理しないのが一般的であり、典型的な従来技術のＲＡＩＤインタフェースはデータブロックをアレイ内の記憶ブロックの行・列に関連付ける書き込みコマンドを解釈することができない。
【００８４】
好ましい実施形態において、ディスクアレイマネージャ１３は、書き込みに関するチェーン長を最大にするように試みる。従来のシステムとは違い、ＲＡＩＤ層は、ストライプの全集合に関するブロックレイアウト情報１５を含む書き込みトランザクション要求を受信する。ディスクアレイマネージャ１３は、さらなる書き込み要求を待つ必要なく、ディスク２１に対する書き込みを最適なチェーン長にする準備を試みる。
【００８５】
ＲＡＩＤ層は、ファイルシステム１１から書き込みトランザクションを受信するのに応じて、その書き込みトランザクションを検査することができる。ＲＡＩＤ層は、書き込みを行なうストライプについて、パリティ計算方法、例えば、減算ベースの方法や再計算ベースの方法を選択する。この選択は、例えば、読み出し処理についての連続した記憶ブロックの実現を最適化するように、読み出しや書き込みの高度の局所性を維持するように（即ち、ディスクのデータにアクセスする際のヘッドシークタイムを減らすように）、あるいは、プロセッサやメモリのリソース使用量を最小限にするように行なわれる。上記のようにブロックレイアウト情報１５が作成されるので、クライアント３１のアクセス要求に対応するデータブロックの書き込みについて、チェーン長を最適化することができる。さらに、ＲＡＩＤ層は、ブロックレイアウト情報を検査して読み出しについて１以上の最大チェーン長を選択することにより、パリティ関連目的で実施される読み出しを最適化することもできる。
【００８６】
このように、ＲＡＩＤ層は、連続ブロック判定のため、選択されたパリティ計算方法と、ファイルシステム１１から受信したブロックレイアウト情報１５とを用いる。さらに、例えばＩ／Ｏリソースやバッファリソースなどを含むリソースの割り当てを最適化することもできる。
【００８７】
さらに、ファイルシステム１１は、各書き込みトランザクションに優先順位レベルを関連付けることができる。ディスクアレイマネージャ１３は、書き込みトランザクションの実行のスケジューリングの判断にこの優先順位レベルを利用することができる。例えば、この優先順位は、クライアント３１によって選択される場合もあるし、内部システム管理プロセスに与えられる場合もある。
【００８８】
図９は、３つの記憶ブロックグループ１２０Ａ、１２０Ｂ、１２０Ｃに格納されたデータブロックＷ１、Ｗ２、Ｗ３を有するディスクドライブアレイ２０Ｂの一実施形態を示すものである。３つの記憶ブロックグループ１２０Ａ、１２０Ｂ、１２０Ｃは、ファイルシステム１１によって作成された３つの書き込みトランザクションに対応する。この実施形態の場合、各記憶ブロックグループ１２０Ａ、１２０Ｂ、１２０Ｃには、４台のディスクドライブ×４ブロックグループの記憶ブロック、即ち１６個の記憶ブロックが含まれる。記憶ブロックグループ１２０Ａ、１２０Ｂ、１２０Ｃの各々についてデータブロックＷ１、Ｗ２、Ｗ３の数が異なる理由は、未割り当ての記憶ブロックの数が異なるからである。
【００８９】
記憶ブロックグループ１２０Ａ、１２０Ｂ、１２０Ｃの各々は、現在空きブロック数が最も少ないストライプ（即ち、ストライプ１、５及び９）で始まる。各記憶ブロックグループ内におけるすべての未割り当ての記憶ブロックは書き込み処理に用いられ、その書き込み処理のため、各記憶ブロックグループには各ディスクの連続した未割り当ての記憶ブロックのチェーンが含まれる。従って、未割り当ての記憶ブロックはすべて書き込み要求が処理されるときに埋められることになる。従って、記憶空間が効率的に使用され、関連データブロックを一台または限られた数のディスクドライブに対して書き込みまたは読み出しすることができ、パリティ計算オーバヘッドを最小にすることができる。
【００９０】
好ましい実施形態において、あるグループについての最小番号のストライプは、あらゆる空きブロックのうちの、最も小さい値、すなわちブロック番号（図５の実施形態ではブロック番号１、図９の実施形態ではブロック番号１、５及び９）の空きブロックを有するストライプとして選択される。さらに、好ましい実施形態では、記憶ブロックグループの各ストライプにおけるすべての未割り当ての記憶ブロックが格納に用いられる。上記のように、この最小ブロック番号は、最小空きブロックオフセット値に対応する場合がある。
【００９１】
しかしながら、ＲＡＩＤ記憶装置の当業者であれば、本発明のその特徴がグループの原点を別な位置に定義して実施することも可能であることは、明らかであろう。例えば、書き込み処理を行なうための記憶ブロックグループは、記憶ブロックに何も割り当てられていない一連の連続したストライプの中から選択することもできる。さらに、本発明の特徴は、記憶ブロックグループ内のすべての未割り当ての記憶ブロックにデータブロックを格納することなく、実施することも可能である。また、記憶ブロックグループを完全に埋めるのに十分なだけのデータブロックが利用できない状況、すなわち部分的なデータブロックだけを格納しなければならない状況も起こり得る。
【００９２】
ディスクアレイ２０には、２以上のＲＡＩＤグループが含まれる場合もある。好ましい実施形態において、これらのＲＡＩＤグループは、個別すなわち別々に機能する。各書き込み処理、すなわち、バッファリングされた要求の記憶ブロックグループへの各書き込みは、単一ＲＡＩＤグループ内で実施される。従って、ＲＡＩＤグループを分離することにより、同時書き込み処理を別のＲＡＩＤグループとして扱うことができる。
【００９３】
各ＲＡＩＤグループは、独立したベースブロック、及び、現在の最小空きブロックを有することが好ましい。各ＲＡＩＤグループについての最小空きブロックオフセットは、各ＲＡＩＤグループについて、最小空きブロックとベースブロックとの差分ブロック数として定義することができる。ＲＡＩＤグループ内の次の書き込み位置は、この最小空きブロックによって判定され、あるいは、記憶空間の効率的使用を達成するように判定される場合もある。
【００９４】
さらに、次の書き込み処理についてＲＡＩＤグループを選択するため、各ＲＡＩＤグループについて、ベースブロックに対する最小空きブロックのオフセットを判定することができる。次の書き込み処理について、現在最小のオフセットを有しているＲＡＩＤグループが選択される。各ＲＡＩＤグループは、互いに独立に処理することができる。
【００９５】
図１０は、ミラーリングを含むＲＡＩＤアレイの一実施形態の論理的グループ分けを示している。この論理的グループ分けは、例えば、本発明の特徴のオブジェクト指向ソフトウェア実施形態について適している。この論理的グループ分けは、例えばディスクアレイマネージャ１３によって実施することができる。ＲＡＩＤアレイには、ディスクドライブの接続を階層構造で示す一連の論理オブジェクト２００が含まれる。一連のオブジェクト２００には、ボリュームオブジェクト２０５、ミラーオブジェクト２１０、及び、プレックスオブジェクト２１５ａ、２１５ｂが含まれる。一連のオブジェクト２００には更に、ＲＡＩＤグループオブジェクト２２０ａ、２２０ｂ、２２０ｃ及び２２０ｄ、並びに、ディスクオブジェクト２２５ａ、２２５ｂ、２２５ｃ、２２５ｄ、２２５ｅ、２２５ｆ、２２５ｇ、２２５ｈ、２２５ｉ、２２５ｊ、２２５ｋ、２２５ｌが含まれる。
【００９６】
一連のオブジェクト２００は、ボリュームオブジェクト２０５をルートノードとした階層ツリーで構成される。ファイルシステム１１は、ディスクアレイマネージャ１３を介してボリュームオブジェクト２０５と対話する。「オブジェクト」という用語は、オブジェクト指向ソフトウェアのオブジェクトを指す場合もあるし、あるいはもっと一般的に、機能的振る舞いの定義を容易にするため、物理装置（即ちディスク）の論理的組み合わせを表す抽象エンティティを指す場合もある。
【００９７】
例示的実施形態は、混成ＲＡＩＤレベルを表している。ＲＡＩＤグループオブジェクト２２０ａ、２２０ｂ、２２０ｃ、２２０ｄは、データを２台のディスク（例えば２２５ａ及び２２５ｂ）に分割し、第３のパリティディスク（例えば２２５ｃ）を有するＲＡＩＤレベル４の実施形態を表している。ミラーオブジェクト２１０はＲＡＩＤレベル１の実施形態を表している。しかしながら、本発明の技術は、この実施形態に限られるのではなく、他のＲＡＩＤレベルや混成ＲＡＩＤレベルも同様に一連のオブジェクトで表すことができる。また、プレックスオブジェクト２１５同士の対称性も必須ではない。図示の実施形態は２つのプレックスを有しているが、当業者には明らかなように、本発明は、任意数のプレックスを用いて実施することも可能である。
【００９８】
ＶＢＮの範囲２３０ａ、２３０ｂは、アレイ内のディスクドライブに配置された実際の記憶空間の論理表現である。一実施形態において、ブロックサイズは４キロバイトである。ＶＢＮの範囲２３０ａ、２３０ｂの判定は下から上に向かって行なわれ、一連のオブジェクト２００における各オブジェクトはそれに関連するＶＢＮの範囲を有する。ＲＡＩＤグループオブジェクト２２０ａ、２２０ｂ、２２０ｃ、２２０ｄは、そのディスクオブジェクト２２５ａ、２２５ｂ、２２５ｃ、２２５ｄ、２２５ｅ、２２５ｆ、２２５ｇ、２２５ｈ、２２５ｉ、２２５ｊ、２２５ｋ、２２５ｌの集合に関連付けられる。例えば、ＲＡＩＤグループ２２０ａのＶＢＮ範囲は、ディスクオブジェクト２２５ａ、２２５ｂ及び２２５ｃの集合である。プレックスオブジェクト２１５ａ、２１５ｂは、それらのＲＡＩＤグループオブジェクト２２０ａ、２２０ｂ、２２０ｃ、２２０ｄのＶＢＮの集合に関連付けられる。例えば、プレックスオブジェクト２１５ａのＶＢＮ範囲は、ＲＡＩＤグループオブジェクト２２０ａ及び２２０ｂの集合である。
【００９９】
この実施形態の場合、ミラーオブジェクト２１０はプレックス２１５ａをプレックス２１５ｂにミラーリングし、あるいはその逆を行なうので、ミラーオブジェクト２１５のＶＢＮ範囲は、そのプレックスオブジェクト２１５ａ、２１５ｂの合計ではない。そうではなく、ミラーオブジェクト２１０のＶＢＮ範囲は、そのプレックスオブジェクト２１５のＶＢＮの結合になる。このように、各プレックスオブジェクト２１５ａ、２１５ｂに関連するディスクの実施形態が同じであり、かつ、範囲のマッピングも同じである場合、ＶＢＮ範囲２３０ａ、２３０ｂは一致し、ミラーオブジェクト２１０のＶＢＮ範囲は２３０ａと同じになる。ボリュームオブジェクト２０５のＶＢＮ範囲がミラーオブジェクト２１０のＶＢＮ範囲になる。
【０１００】
ミラーリングされるデータは、たとえ非対称であっても、ＶＢＮ２３０ａ及び２３０ｂの各々において同一ブロック番号にしなければならない。例えば、ＶＢＮ範囲２３０ａのＶＢＮ０〜１０に書き込まれるデータは、ＶＢＮ範囲２３０ｂのＶＢＮ０〜１０に書き込まなければならない。他の実施形態では、一方のプレックスが他方のプレックスよりも大きい場合がある。ミラーオブジェクト２１０のＶＢＮ範囲の大きさは、そのミラーリングされたＶＢＮ範囲にミラーリングされていないＶＢＮを加えた大きさである。
【０１０１】
各階層におけるＶＢＮ範囲とオブジェクトとの関連付けは、ＲＡＩＤマップと呼ばれることがある。ディスクアレイマネージャ１３は、一連のオブジェクト２００のＲＡＩＤマップを含むディスク構成情報をファイルシステム１１に送信する。従って、ファイルシステム１１は、ディスクアレイ接続形態を知ることができ、データをそのＶＢＮに割り当てることにより、ディスク書き込み及び／又はディスク読み出しを最適化することができる。
【０１０２】
ファイルシステム１１は、ディスク接続形態情報１４を用いてブロックレイアウト情報１５を作成することができる。ファイルシステム１１は、書き込みトランザクションを、ブロックレイアウト情報１５及び格納用データを含むオブジェクトに成形し、そのオブジェクトをボリューム２０５に渡す。
【０１０３】
ファイルシステム１１は、ミラー２１０の存在を知っている必要がない。ボリューム２０５のミラーオブジェクト２１０またはミラーレイヤは、ファイルシステム１１から受信したアクセス要求をどのように管理するかを判定する。ミラー書き込みは、各プレックス２１５ａ、２１５ｂの中で実施される。効率を高めるため、パリティ判定はプレックス２１５ａ、２１５ｂのうちの一方でしか実施されない場合があり、その結果が他方のプレックス２１５ａ、２１５ｂと共用され、両プレックスが同じＲＡＩＤグループレイアウトを有するようにし、パリティ計算も同様に行い、両プレックスのデータが同じになるようにする場合がある。あるいは、パリティ判定は両方のプレックスの各々について実施される場合もある。
【０１０４】
例えば、ファイルシステム１１は、アクセス要求、すなわちバッファリングしたデータブロックをボリューム２０５のＶＢＮ範囲２６〜２９に書き込むための書き込みオブジェクトを成形することができる。次に、ミラー２１０は、そのミラーの両側について１つ、すなわち、各プレックス２１５ａ、２１５ｂについて１つ、ミラー書き込みオブジェクトを作成することができる。プレックス２１５ａ、２１５ｂの一方でパリティ判定をサポートするためにＶＢＮ範囲２６〜２９の記憶ブロックの読み出しが実行され、他方のプレックス２１５ａ、２１５ｂは、記憶ブロックに書き込みを行なうだけでよい。ミラー２１０は、一台のディスクドライブで実施することもできるし、複数台のディスクドライブにわたって実施することもできる。
【０１０５】
このように２つの書き込みオブジェクトの間にはマスター／スレーブの関係があり、マスターの方がパリティ判定を担当する。このような実施形態によれば、ミラーの両側にあるＶＢＮ範囲が好ましく一致する。
【０１０６】
図１１は、ディスクアレイマネージャ１３がファイルシステム１１から受信した書き込みトランザクションを処理するための方法の他の実施形態を示すフロー図であり、この実施形態ではディスクアレイマネージャ１３がＲＡＩＤ層に存在する。この方法は、図１１のストレージアレイと通信するＲＡＩＤ層によって実施することができる。図１１の目的のため、このストレージアレイは非ミラー構成で説明する。この方法には、次のようなステップが含まれる。
【０１０７】
ステップ５００）ディスク２１へのデータ書き込みについて最大チェーン長を有することが好ましいブロックレイアウト情報１５を、ファイルシステム１１によって生成する。
【０１０８】
ステップ５０１）書き込みオブジェクトおよびその書き込みオブジェクトに割り当てられたリソースに関する情報を保持するための書き込みオブジェクト状態モニタのインスタンスを作成し、そのＲＡＩＤグループがオンラインでありその書き込みトランザクションのサービスに利用可能であることを確認する。書き込みオブジェクトの一実施形態は、Srinivasan Viswanathan他によって本件と同日に出願された「Method and Apparatus for Decomposing I/O Tasks in a RAID System」と題する同譲受人の同時係続特許出願に記載されているようなarray_writeＩ／Ｏタスクであり、その開示はここで参照することによって本明細書に取り込まれる。
【０１０９】
ステップ５０２）ブロックレイアウト情報１５に対応するストライプの範囲についてストライプロックを得る。「ストライプロック」とは、例えばＲＡＩＤ層によって行なわれるロック要求に応じて、データ格納の前にアクセスをその記憶ブロックグループに制限するため、リソースマネージャによってロックを与えることを指す。ロックが与えられる場合、そのロックは、強制的なものである場合もあるし、勧告的なものである場合もあり、他の書き込みトランザクションによるそれらの記憶ブロックに対する同時アクセスができないようにするものである。ロックがすぐに与えられない場合（例えば、同じ記憶ブロックのうちの少なくともいくつかに対して別の書き込みトランザクションが進行中である場合など）、その書き込みトランザクションはロックが与えられるまで保留される。
【０１１０】
ステップ５０３）上記のように、各ストライプについてパリティ計算方法を判定し、その計算をサポートするために必要なブロックすべてを識別する。ストレージアレイがミラー構成である場合、本方法は、前記ステップを実施する前に、パリティの計算を担当するＲＡＩＤアレイのＩＤを判定するステップを実施し、そのアレイによってこのパリティ計算判定ステップを実施する場合がある。ミラー構成におけるこの担当アレイは、下記のステップ５０４〜５０８も実施する。
【０１１１】
ステップ５０４）パリティ計算をサポートするために必要な読み出しにバッファを割り当てる（書き込みを行なうデータを保持するデータバッファは、ファイルシステムによってすでに割り当てられている）。
【０１１２】
ステップ５０５）上記のように、パリティ計算をサポートする読み出しを実施する。
【０１１３】
ステップ５０６）パリティ計算要求をストライプパリティデータの計算を担当するスレッドまたは他の処理エンティティに発行する。
【０１１４】
ステップ５０７）タスク特有の中間状態情報を含めてパリティデータの不揮発性記憶装置へのログ記録を開始し、パリティデータが失われた場合やパリティデータの不一致が生じた場合に、復旧できるようにする。
【０１１５】
ステップ５０８）システム構成として不揮発性記憶装置のミラーリングが行なわれている場合、ステップ５０７のログ記録が完了するたびに、前記パリティログデータの複製を不揮発性記憶装置のミラーに作成する。
【０１１６】
ステップ５０９）ブロックレイアウト情報１５およびそのパリティデータに対応するストライプの範囲に対して、好ましくはチェーン書き込みによるディスク書き込みを開始する。ストレージアレイがミラー構成であった場合、担当アレイは、ディスク書き込みを開始するこのステップの前に、ミラーデータの複製の代わりにステップ５０９へ進むことができることをスレーブアレイに示す。次いでＲＡＩＤアレイの各々は、各ＲＡＩＤアレイのこのステップに関連するデータブロックにディスク書き込みを開始する。
【０１１７】
ステップ５１０）データ書き込みが無事に完了したあと、ストライプに関するパリティログデータを除去する（このようなデータが使用される場合、不揮発性記憶装置ミラーにある）。ストレージアレイがミラー構成である場合、両アレイに対するデータ書き込みは、このステップを実施する前に無事に完了していなければならない。
【０１１８】
ステップ５１１）ストライプロックを解除し、その書き込みトランザクションに割り当てられたすべてのバッファおよびその他リソースを開放する。
【０１１９】
ディスクアレイマネージャ１３がファイルシステム１１から受信した書き込みトランザクションを処理するための方法の代替実施形態の中には、上記方法に類似しているがステップの集合が異なるものや、ステップの順序が異なるものも存在する。
【０１２０】
図１２を参照すると、本発明のファイルシステムの中には、write-anywhereファイルシステムの修正として実施されるものもある。本発明の特徴に応じて修正を施すのに適したファイルシステムの１つは「ＷＡＦＬ」ファイルシステムであり、同譲受人の米国特許第６０３８５７０号に記載されているように、このファイルシステムはストレージオペレーティングシステムの一部になっている。
【０１２１】
図１２を参照すると、一実施形態では、例えばネットワーク取り付けされたストレージ環境、ストレージエリアネットワーク、及び／又は、クライアントまたはホストコンピュータに直接取り付けられたディスクアセンブリにおいて、サーバは記憶装置と対話する。
【０１２２】
図１２は、ストレージシステム１０の内部で有利に使用されるストレージオペレーティングシステム８００を示す略ブロック図である。ストレージオペレーティングシステム８００は、ネットワークドライバ（例えば、イーサネット(登録商標)ドライバ）のメディアアクセス層８１０を含む、一連のソフトウェア層から構成される。オペレーティングシステム８００は、インターネットプロトコル（ＩＰ）層８１２などのネットワークプロトコル層、並びに、それがサポートする搬送手段であるトランスポート・コントロール・プロトコル（ＴＣＰ）層８１４及びユーザ・データグラム・プロトコル（ＵＤＰ）層８１６をさらに含む。
【０１２３】
ストレージオペレーティングシステム８００は、マルチプロトコルデータアクセスを可能にするファイルシステムプロトコル層を含み、共通インターネットファイルシステム（ＣＩＦＳ）プロトコル８１８、ネットワークファイルシステム（ＮＦＳ）プロトコル８２０及びハイパーテキスト・トランスファー・プロトコル（ＨＴＴＰ）８２２についてのサポート構成要素を含む。またファイルシステムプロトコル層には、例えばダイレクトアクセスファイルシステム（ＤＡＦＳ）プロトコルについてのサポートも含まれる場合がある。
【０１２４】
ストレージオペレーティングシステム８００には、ＲＡＩＤプロトコルなどのディスクストレージプロトコルを実施するディスクストレージ層８２４（即ちＲＡＩＤ層）、及び、スモールコンピュータ・システム・インタフェース（ＳＣＳＩ）プロトコルなどのディスクアクセスプロトコルを実施するディスクドライバ層８２６がさらに含まれる。ディスクストレージ（ＲＡＩＤ）層８２４は、例えば、何らかの実施形態のディスクアレイマネージャ１３によって実施することができる。
【０１２５】
ディスクソフトウェア層とネットワーク層・ファイルシステムプロトコル層との橋渡しをするのは、ファイルシステム１１の何らかの実施形態によって実施されるファイルシステム層８８０である。ファイルシステム１１のディスク上の表現は、例えば４キロバイト（ｋＢ）ブロックを用いて、ブロックベースになっている。実施形態の中には可変ブロックサイズのものも含まれるが、一般的には固定ブロックサイズの方がストレージシステムの柔軟性が高くなる。
【０１２６】
一実施形態では、クライアント３１からの読み出し要求は、コンピュータネットワークを介して例えば従来のＣＩＦＳプロトコルまたはＮＦＳプロトコルのパケットとしてストレーシステム１０に転送され、ネットワークアダプタ３１０で受信される。メディアアクセス層８１０のネットワークドライバは、そのパケットを処理し、ファイルシステム層８８０へ転送する前に、そのパケットをネットワークプロトコル層８１２、８１４、８１６並びにＣＩＦＳ層８１８またはＮＦＳ層８２０に渡してさらに処理を行なう。
【０１２７】
ファイルシステム１１は、要求されたデータがメモリ、例えばメモリ３１０になかった場合、そのデータをディスク２１からロード（取得）するための処理を行なう。その情報がメモリになかった場合、ファイルシステム層８８０はＶＢＮを取得する。次いでファイルシステム層８８０は、そのＶＢＮをディスクストレージ（ＲＡＩＤ）層８２４に渡し、ディスクストレージ（ＲＡＩＤ）層８２４がその論理番号をディスクブロック番号にマッピングし、そのディスクブロック番号をディスクドライバ層８２６の適当なドライバ（例えばＳＣＳＩ）に送信する。ディスクドライバはディスク２１のそのディスクブロック番号にアクセスして、要求されたデータブロック（単数または複数）をメモリ３２０、３３１に読み出し、ストレージシステム１０によってそれを処理する。要求が完了すると、ストレージシステム１０は、ネットワークを介してクライアント３１に返答を返す。
【０１２８】
ストレージシステム１０で受信されたクライアント要求についてデータストレージアクセスを実施する必要がある上記ストレージオペレーティングシステムを通るソフトウェア「パス」はハードウェアで実施することも可能であることに注意して欲しい。従って、本発明の代替実施形態では、ストレージアクセス要求データパスは、例えば、フィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ）や特定用途向け集積回路（ＡＳＩＣ）の内部に実現された論理回路として実施することもできる。この種のハードウェア実施形態は、クライアント３１によって発行されたファイルシステム要求パケットに応答してストレージシステム１０により提供されるファイルサービスの能力を向上させる。
【０１２９】
さらに、本発明の他の代替実施形態では、パケット処理及びストレージアクセス処理の各々について、プロセッサからその負荷の一部またはすべてを低減するようにアダプタ３１０、３４０の処理要素を構成することによって、ストレージシステム１０の性能を向上させる場合がある。本明細書に記載される様々な処理、アーキテクチャ及び手順は、ハードウェアでもファームウェアでもソフトウェアでも実施できるものとして、広い意味で考えることができる。
【０１３０】
本明細書で用いられるように、「ストレージオペレーティングシステム」という用語は通常、ストレージシステム上で動作し、データアクセスを管理するとともに、ファイルサーバの場合ファイルシステムセマンティックを実施する場合もあるコンピュータ実行可能なコードを意味している。しかしながら、本発明はファイルサーバに限定されるものと考えてはならない。ストレージオペレーティングシステムはマイクロカーネルとして実施することができ、ファイルシステム１１セマンティックを実施し、データアクセスを管理するためのファイルシステム層８８０を含む。また、ストレージオペレーティングシステムは、ＵＮＩＸ(R)やｗｉｎｄｏｗｓ(R)などの汎用オペレーティングシステム上で動作するアプリケーションプログラムとして実施することもできるし、本明細書に記載するようなストレージアプリケーションについて構成された設定可能な機能を有する汎用オペレーティングシステムとして実施することもできる。
【０１３１】
さらに、当業者であれば、本明細書に記載された本発明の技術は、スタンドアロンのコンピュータやストレージシステムとして実現されたコンピュータの一部を含めて、任意のタイプの専用コンピュータ（例えばサーバ）や汎用コンピュータに適用できることが分かるであろう。ファイルシステム層およびＲＡＩＤ層（またはその構成要素）は、同じコンピュータシステム上で実施することもできるし、互いに通信する別のコンピュータ上で実施することもできる。レイアウト情報生成器及び、ストレージデバイスマネージャ（またはその構成要素）にも同じことが言える。ストレージオペレーティングシステムは、単一のコンピュータシステムまたは装置上で実行することもできるし、複数のコンピュータシステムまたは装置上に分散させることもできる。さらに本発明の教示は、限定しないが、ネットワーク取り付けされたストレージ環境、ストレージエリアネットワーク、及び、クライアントまたはホストコンピュータに直接取り付けられたディスクアセンブリなどを含む様々なストレージシステムアーキテクチャに適用することができる。そのため、「ストレージシステム」という用語は、こうした構成を含むように広い意味で解釈しなければならない。
【０１３２】
当業者であれば、特許請求の範囲に記載した本発明の思想及び範囲から外れることなく、本明細書に記載した実施形態の変形、修正及びその他の実施形態を作成するであろう。従って、本発明は、例示した実施形態によって規定されるのではなく、特許請求の範囲に記載された発明の思想と範囲によって規定される。
【０１３３】
本発明の例示的実施形態を以下に列挙する。
１．複数の記憶装置におけるデータの格納を管理するための方法であって、該記憶装置の各々が複数の記憶ブロックからなり、前記データが複数の前記記憶装置にわたってストライプ状に編成されているものにおいて、
ブロックレイアウト情報を生成するステップと、
前記ブロックレイアウト情報に応じて、前記複数の記憶ブロックのうちのＩ／Ｏ処理で使用するための記憶ブロックを識別することによって、誤り訂正パラメタの計算コストを実質的に最小にしつつ、誤り訂正パラメタを計算するための読み出しのチェーン長及びストライプにわたるデータ書き込み処理の書き込みのチェーン長を最大にするように前記Ｉ／Ｏ処理の実行を制御するステップと、
からなる方法。
２．前記誤り訂正パラメタの計算がパリティの計算を含む、１に記載の方法。
３．前記パリティの計算は、減算方法およびパリティ再計算方法からなるグループの中から一方のパリティ計算処理を選択することを含む、２に記載の方法。
４．前記Ｉ／Ｏ処理で使用する記憶ブロックを識別することは、記憶装置上の連続した物理レイアウトのブロック数を実質的に最大にすることによって、前記チェーン長を実質的に最大にする、１に記載の方法。
５．前記Ｉ／Ｏ処理で使用するための記憶ブロックに関連する連続ＶＢＮを有するブロック数を実質的に最大にすることにより、前記チェーン長を実質的に最大にするようにして、前記Ｉ／Ｏ処理で使用するための記憶ブロックを識別するステップをさらに含む、１に記載の方法。
６．記憶装置のブロックの局部性を実質的に最大にすることにより、前記チェーン長を実質的に最大にするようにして、Ｉ／Ｏ処理で使用するための記憶ブロックを識別するステップをさらに含む、１に記載の方法。
７．前記制御するステップは、
書き込み処理の前にデータ書き込み先のブロックを検査するステップと、
読み出しブロック数の最大化を含む第１の方法とパリティ計算のために読み出されるブロックのチェーン長の最大化を含む第２の方法とを含む複数のパリティ計算方法のうちの１つを選択するステップと、
を含む、１に記載の方法。
８．前記記憶ブロックの識別は、少なくとも部分的に利用可能なリソースに基づいて実施される、１に記載の方法。
９．複数の記憶装置を有し該記憶装置の各々が複数の記憶ブロックからなるストレージシステム用のコンピュータ読み取り可能な媒体であって、
前記記憶ブロックに関するブロックレイアウト情報を取得するステップと、
複数のストライプにわたって所定の記憶ブロックにデータを書き込むとともに、各記憶装置内の所定の記憶ブロックにデータを書き込み、複数のストライプの各ストライプにわたる誤り訂正パラメタの計算コストを実質的に最小にしつつ、各記憶装置内の記憶ブロックのチェーン長を実質的に最大にするステップと、
を実施するコンピュータ読み取り可能な媒体。
１０．前記誤り訂正パラメタの計算がパリティの計算を含む、９に記載のコンピュータ読み取り可能な媒体。
１１．前記パリティの計算が減算方法およびパリティ再計算方法からなるグループの中からパリティ計算処理を選択することを含む、１０に記載のコンピュータ読み取り可能な媒体。
１２．Ｉ／Ｏ処理に使用するための記憶ブロックに関連する連続したＶＢＮを有するブロック数を実質的に最大にすることにより、前記チェーン長を実質的に最大にするようにして、前記Ｉ／Ｏ処理に使用するための記憶ブロックを識別するステップをさらに含む、９に記載のコンピュータ読み取り可能な媒体。
１３．記憶装置のブロックの局所性を実質的に最大にすることにより、前記チェーン長を最大にするようにして、Ｉ／Ｏ処理で使用するための記憶ブロックを識別するステップをさらに含む、９に記載のコンピュータ読み取り可能な媒体。
１４．複数の記憶装置の各々が複数の記憶ブロックを有する、複数の記憶装置と、
前記複数の記憶装置の各々と通信し、データを複数のストライプにわたって所定の記憶ブロックに書き込むとともに、データを各記憶装置内の所定の記憶ブロックに書き込み、複数のストライプの各ストライプにわたる誤り訂正パラメタの計算を実質的に最小にしつつ、記憶装置内の記憶ブロックのチェーン長を最大にする、ストレージマネージャと、
からなるストレージシステム。
【図１ａ】
2010079928.tif 000003
【図１ｂ】
2010079928.tif 000004
【図２】
2010079928.tif 000005
【図３】
2010079928.tif 000006
【図４】
2010079928.tif 000007
【図５】
2010079928.tif 000008
【図６】
2010079928.tif 000009
【図７】
2010079928.tif 000010
【図８】
2010079928.tif 000011
【図９】
2010079928.tif 000012
【図１０】
2010079928.tif 000013
【図１１】
2010079928.tif 000014
【図１２】
2010079928.tif 000015