(57)【要約】複数の異なる読み出しストリームに対して推測的先読みを同時に実施するように構成されたストレージオペレーティングシステムを実施するストレージシステム。従来の実施形態とは異なり、このオペレーティングシステムは、複数の読み出しストリームのそれぞれについて個別の先読みメタデータセットを保持する。そのため、このオペレーティングシステムは、受信したクライアント読み出し要求を対応する読み出しストリームに一致させ、読み出し要求に関連する先読みメタデータセットに従って、その要求に対する先読み処理を実施することができる。受信したクライアント読み出し要求が、要求ごとに対応する読み出しストリームに一致しているので、オペレーティングシステムは、読み出しストリーム中のファイル読み出し要求がストレージシステムによって順番に受信されるか、ほぼ順番に受信されるか、無作為に受信されるかに関わらず、複数の読み出しストリームに対して先読み処理を同時に実施することができる。更に、読み出しストリームが異なる先読みアルゴリズムを使用している場合であっても、オペレーティングシステムは、複数の異なる読み出しストリームに対して推測的先読みを同時に実施することができる。本発明は、ファイルベースのストレージシステムによっても、ブロックベースのストレージシステムによっても、それらの組み合わせによっても実施することができる。
2007519088.tif 000002
【特許請求の範囲】
【請求項１】
ストレージシステムに記憶された１以上のファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮにおいて確立された複数の異なる読み出しストリームに対して先読み処理を同時に実施するように構成された、ストレージシステムにおいて実施されるストレージオペレーティングシステムのための方法であって、
ストレージシステムにおいてクライアント読み出し要求を受信するステップであって、該クライアント読み出し要求が、ストレージシステムに記憶されたファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮからのクライアント要求データの読み出しをストレージオペレーティングシステムに知らせるものである、クライアント読み出し要求を受信するステップと、
受信した前記クライアント読み出し要求が、前記クライアント要求データを有する前記ファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮに割り当てられた複数のリードセットデータ構造（「リードセット」）のうちのいずれかに一致するか否かを判定するステップと、
受信した前記クライアント読み出し要求に一致するものと判定されたリードセットに記憶された先読みメタデータのセットに従って、先読み処理を実施するステップと
からなる方法。
【請求項２】
複数の異なる読み出しストリームが内部に確立された１以上のファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮのそれぞれに対し、少なくとも１つのリードセットを割り当てるステップと、
前記複数の異なる読み出しストリームのそれぞれについて個別の先読みメタデータのセットを生成するステップと、
生成された前記先読みメタデータのセットのそれぞれを、その先読みメタデータのセットに関連する読み出しストリームが内部に確立された前記ファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮに割り当てられた異なるリードセットに記憶するステップと
を更に含む、請求項１に記載の方法。
【請求項３】
割り当てられたリードセットをそれぞれ、所定の値のセットを記憶するように初期化するステップを更に含む、請求項１に記載の方法。
【請求項４】
ファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮに割り当てられる前記リードセットの数は、そのファイル、ディレクトリ、又は、ＬＵＮのサイズによって決まる、請求項２に記載の方法。
【請求項５】
ファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮに割り当てられる前記リードセットの数は、そのファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮのサイズが増大するのに応じて動的に増加される、請求項４に記載の方法。
【請求項６】
第１のリードセットが、前記クライアント要求データによって延長される読み出しストリームに関連する先読みメタデータのセットを記憶している場合、該第１のリードセットは、受信したクライアント読み出し要求に一致するものと判定される、請求項１に記載の方法。
【請求項７】
前記クライアント要求データが、第２のリードセットに関連する所定の曖昧な範囲内に位置している場合、該第２のリードセットは、受信したクライアント読み出し要求に一致するものと判定される、請求項１に記載の方法。
【請求項８】
前記曖昧な範囲は、受信したクライアント読み出し要求の中に指定されたクライアントが要求するデータブロックの数の倍数に基づいて導出される、請求項７に記載の方法。
【請求項９】
前記曖昧な範囲は、前記第２のリードセットに関連する読み出しストリームにおいて読み出された最後のデータブロックに対して、前進方向と後退方向の両方に延びる、請求項７に記載の方法。
【請求項１０】
第３のリードセットが未使用であるものと判定された場合、該第３のリードセットは、受信したクライアント要求に一致するものと判定される、請求項１に記載の方法。
【請求項１１】
前記第３のリードセットに記憶されたレベル値が特殊な指示値に等しい場合、前記第３のリードセットは未使用であるものと判定される、請求項１０に記載の方法。
【請求項１２】
前記クライアント要求データを有するファイル、ディレクトリ、又は、ＬＵＮが、ランダムアクセススタイルを使用してアクセスされることを、前記ストレージオペレーティングシステムが判定した場合、先読み処理は実施されない、請求項１に記載の方法。
【請求項１３】
受信した前記クライアント読み出し要求に含まれるＤＡＦＳキャッシュヒントが、前記クライアント要求データを有するファイル、ディレクトリ、又は、ＬＵＮが、ランダムアクセススタイルを使用してアクセスされることを示す、請求項１２に記載の方法。
【請求項１４】
(i)リードセットが、受信したクライアント読み出し要求に一致するものと判定され、且つ
(ii)その一致するリードセットが、前記クライアント要求データによって所定のデータブロック又はメモリアドレスを越えて延長されるリードストリームに関連する先読みメタデータのセットを記憶している場合を除き、
先読み処理は実施されない、請求項１に記載の方法。
【請求項１５】
受信した前記クライアント要求が、前記クライアント要求データを有するファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮに割り当てられたリードセットのうちのいずれにも一致しない場合、
受信したクライアント読み出し要求を新たな読み出しストリームにおける前記第１の読み出し要求として識別するステップと、
前記新たな読み出しストリームに関連する先読みメタデータのセットを生成するステップと、
前記クライアント要求データを有するファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮに割り当てられたリードセットのうちの１つを再使用のために選択するステップと、
生成された前記新たな読み出しストリームに関連する先読みメタデータのセットを、前記再使用のために選択されたリードセットに記憶するステップと
を実施することを更に含む、請求項１に記載の方法。
【請求項１６】
前記再使用のために選択されたリードセットは、前記クライアント要求データを有するファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮに関連する残りのリードセットのそれぞれに記憶されたレベル値以下のレベル値を記憶する、請求項１５に記載の方法。
【請求項１７】
前記ストレージシステムにおいて受信される前記クライアント読み出し要求は、ファイルベースのクライアント読み出し要求である、請求項１に記載の方法。
【請求項１８】
前記ストレージシステムにおいて受信される前記クライアント読み出し要求は、ブロックベースのクライアント読み出し要求である、請求項１に記載の方法。
【請求項１９】
ストレージオペレーティングシステムを実施するための命令を記憶するように構成され、更に、ファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮに関連する少なくとも１つのリードセットデータ構造（「リードセット」）を記憶するように構成されたメモリと、
前記メモリにおいて実施される他のリードセットに対する前記リードセットの相対年齢を示すレベル値であって、所定の上限レベル値と所定の下限レベル値の間の範囲内の値に等しいレベル値と、
前記リードセットに関連する読み出しストリームにおいて処理されたクライアント読み出し要求の数を示すカウント値と、
所定のファイルオフセット又はメモリアドレスを示すネクスト先読み値であって、前記リードセットに関連する読み出しストリームが、該所定のファイルオフセット又はメモリアドレスを越えて延長される場合に、前記ストレージオペレーティグシステムによって先読み処理が実施される、ネクスト先読み値と、
前記リードセットに関連する読み出しストリームに対して先読み処理が実施される場合に、前記ストレージオペレーティングシステムによってプリフェッチされるデータ量を示す先読みサイズ値と
からなる、マルチプロトコル・ストレージ・アプライアンス。
【請求項２０】
プロセッサと、
１以上のファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮを記憶するように構成された少なくとも１つのストレージデバイスと、
少なくとも１つのクライアント読み出し要求を受信するように構成されたネットワークアダプタであって、該クライアント読み出し要求が、前記少なくとも１つのストレージデバイスに記憶されたファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮに格納されたクライアント要求データを示すものである、ネットワークアダプタと
を更に含む、請求項１９に記載のマルチプロトコル・ストレージ・アプライアンス。
【請求項２１】
前記カウント値は、最初はゼロに等しくなるよう設定される、請求項１９に記載のマルチプロトコル・ストレージ・アプライアンス。
【請求項２２】
前記リードセットが最初に割り当てられたときに、前記レベル値は特殊な指示値に等しくなるように設定され、前記特殊な指示値は、前記所定の上限レベル値と前記所定の下限レベル値によって規定される値の範囲外の値である、請求項１９に記載のマルチプロトコル・ストレージ・アプライアンス。
【請求項２３】
受信した前記クライアント読み出し要求が前記リードセットに一致するものと判定された場合に、前記レベル値は第１のステップサイズだけインクリメントされ、受信した前記クライアント要求により、前記ストレージオペレーティングシステムが、前記メモリ内の異なるリードセットデータ構造を再使用させられる場合、前記レベル値は第２のステップサイズだけデクリメントされる、請求項１９に記載のマルチプロトコル・ストレージ・アプライアンス。
【請求項２４】
前記第１のステップサイズ及び前記第２のステップサイズは１に等しい、請求項２３に記載のマルチプロトコル・ストレージ・アプライアンス。
【請求項２５】
前記レベル値が所定の初期レベル値未満である場合、前記レベル値をインクリメントされる場合、前記レベル値は、所定の初期レベル値に等しくなるように設定される、請求項２３に記載のマルチプロトコル・ストレージ・アプライアンス。
【請求項２６】
受信した前記クライアント読み出し要求が前記リードセットに一致するものと判定された場合、前記カウント値は、１だけインクリメントされる、請求項１９に記載のマルチプロトコル・ストレージ・アプライアンス。
【請求項２７】
(i)前記リードセットに記憶された前記レベル値が、前記クライアント要求データを有するファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮに関連する全てのリードセットのうちの最小レベル値である場合、又は、(ii)前記リードセットが、前記クライアント要求データを有するファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮに関連する最も最近アクセスされたリードセットであり、前記リードセットが、１に等しいカウント値を記憶している場合、前リードセットは再使用に適するものと判定される、請求項２０に記載のマルチプロトコル・ストレージ・アプライアンス。
【請求項２８】
前記クライアント要求データを有するファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮに関連する最も最近アクセスされたリードセットは、前記クライアント要求データを有するファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮに関連するリードセットの連結リストの先頭に配置される、請求項２７に記載のマルチプロトコル・ストレージ・アプライアンス。
【請求項２９】
ストレージオペレーティングシステムを使用して、ストレージシステムに記憶された１以上のファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮにおいて確立された複数の異なる読み出しストリームに対し、先読み処理を同時に実施するストレージシステムであって、該方法が、
ストレージシステムにおいてクライアント読み出し要求を受信する手段であって、該クライアント読み出し要求が、ストレージシステムに記憶されたファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮからのクライアント要求データの読み出しをストレージオペレーティングシステムに知らせるものである、クライアント読み出し要求を受信する手段と、
受信した前記クライアント読み出し要求が、前記クライアント要求データを有する前記ファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮに割り当てられた複数のリードセットデータ構造（「リードセット」）のうちのいずれかに一致するか否かを判定する手段と、
受信した前記クライアント読み出し要求に一致するものと判定されたリードセットに記憶された先読みメタデータのセットに従って、先読み処理を実施する手段と
からなるストレージシステム。
【請求項３０】
ストレージシステムに記憶された１以上のファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮにおいて確立された複数の異なる読み出しストリームに対し、先読み処理を同時に実施するストレージシステムにおいて実施される、ストレージオペレーティングシステムのための方法を実施するための、プロセッサで実施するための命令を含むコンピュータ読取可能媒体であって、該方法が、
ストレージシステムにおいてクライアント読み出し要求を受信するステップであって、該クライアント読み出し要求が、ストレージシステムに記憶されたファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮからのクライアント要求データの読み出しをストレージオペレーティングシステムに知らせるものである、クライアント読み出し要求を受信するステップと
受信した前記クライアント読み出し要求が、前記クライアント要求データを有する前記ファイル、ディレクトリ、ｖｄｉｓｋ、又は、ＬＵＮに割り当てられた複数のリードセットデータ構造（「リードセット」）のうちのいずれかに一致するか否かを判定するステップと、
受信した前記クライアント読み出し要求に一致するものと判定されたリードセットに記憶された先読みメタデータのセットに従って、先読み処理を実施するステップと
からなる、コンピュータ読取可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
本発明はストレージシステムに関し、特に、複数の読み出しストリームの先読み処理を同時に実施するストレージシステムのための技術に関する。
【背景技術】
【０００２】
発明の背景
ストレージシステムは、ディスクのような記憶装置における情報の編成に関するストレージサービスを提供するコンピュータである。ストレージシステムは、情報をディスクに記憶される一連のデータブロックとして論理編成するためのストレージオペレーティングシステムを有する。従来のストレージ・エリア・ネットワーク（ＳＡＮ）のようなブロックベースのデプロイメントでは、データブロックは、ストレージシステムにおいて直接アドレス指定される場合がある。しかしながら、ネットワーク・アタッチド・ストレージ（ＮＡＳ）のようなファイルベースのデプロイメントでは、オペレーティングシステムは、ディスク上でアドレス指定可能なファイルやディレクトリの階層構造としてデータブロックを論理編成するためのファイルシステムを実施する。この場合、ディレクトリは、他のファイルやディレクトリに関する情報を記憶する特殊形式のファイルとして実施される場合がある。
【０００３】
ストレージシステムはクライアント／サーバモデルの情報配送に従って動作するように構成される場合があり、それによって多数のクライアントシステム（クライアント）が、そのストレージシステムに記憶されたファイルのような共有資源にアクセスすることができる。ストレージシステムは通常、地理的に分散されたイーサネット(R)リンクのような相互接続通信リンクの集まりからなるコンピュータネットワーク上に配備され、それによってクライアントはストレージシステム上の共有情報（例えば、ファイル）に遠くからアクセスすることができる。クライアントは通常、トランスミッション・コントロール・プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）のような所定のネットワーク通信プロトコルに従ってフォーマットされた個々のデータフレーム又はデータパケットをやりとりすることにより、ストレージシステムと通信する。この場合、プロトコルは、相互接続されたコンピュータシステムが互いに交信する方法を規定するルールの集まりから構成される。
【０００４】
ファイルベースのデプロイメントでは、クライアントは、セマンティックレベルのアクセスを使用して、ストレージシステムに記憶されたファイルやファイルシステムにアクセスする。例えば、クライアントは、ストレージシステム上の特定のファイルに記憶された情報の取り出し（「読み出し」）や、そのファイルへの情報の記憶（「書き込み」）を要求する場合がある。クライアントは通常、コモン・インターネット・ファイル・システム（ＣＩＦＳ）プロトコル、ネットワーク・ファイル・システム（ＮＦＳ）プロトコル、及び、ダイレクト・アクセス・ファイル・システム（ＤＡＦＳ）プロトコルといった従来のファイルベースのアクセス・プロトコルに従ってフォーマットされたファイルシステム・プロトコル・メッセージ（パケットの形をしている）を発行することにより、そうしたサービスをファイルシステムベースのストレージシステムに要求する。クライアントは、要求するデータがディスク上に記憶されている例えばデータブロックのような特定の位置を考慮することなく、アクセスしようとする１以上のファイルの識別を要求する。クライアント要求が「読み出し」要求である場合、クライアントが要求したデータが格納されているデータブロックが取り出され、要求されたデータがクライアントに返される。
【０００５】
ブロックベースのデプロイメントでは、クライアント要求は、ストレージシステムにおける特定の具体的なデータブロックを直接アドレス指定することができる。ブロックベースのストレージシステムの中には、データブロックをデータベースの形に編成するものもあれば、ファイル指向の構造に内部的にデータブロックを格納するものもある。データがファイルとして編成される場合、クライアントが要求する情報は、その独自のマッピングを有し、ファイルセマンティックを管理する一方、ストレージシステムへのその要求（及び、応答）は、要求された情報をディスク上のブロックアドレスとしてアドレス指定する。このように、ブロックベースのストレージシステムにおけるストレージ・バスは、リモート・クライアント・システムにまで拡張されているように見える場合がある。この「拡張バス」は通常、ＳＣＳＩ  ｏｖｅｒ  ＦＣ（ＦＣＰ）プロトコルや、ＳＣＳＩ  ｏｖｅｒ  ＴＣＰ／ＩＰ／イーサネット(R)（ｉＳＣＳＩ）プロトコルのようなブロックベースのアクセスプロトコルを使用するように構成されたファイバ・チャネル（ＦＣ）やイーサーネット(R)メディアとして実施される。
【０００６】
ブロックベースのシステムにおける各記憶装置には通常、一意の論理ユニット番号（ＬＵＮ）が割り振られ、例えばリモートクライアントは、その論理ユニット番号を使用して記憶装置を指定することができる。従って、「イニシエータ」クライアントシステムは、「ターゲット」のＬＵＮに記憶された特定範囲のデータブロックのデータ転送を要求する場合がある。例えば、クライアントは、目標記憶装置における開始データブロックや、クライアント要求に従って記憶又は取り出しすべき連続したブロックの数を指定することができる。例えば、クライアント要求が「読み出し」要求である場合、要求された範囲のデータブロックが取り出され、要求元のクライアントへ返される。
【０００７】
一般に、ファイルシステムは、「ディスク上」のデータブロック、例えば、ディスクブロック番号アドレス空間において割り当てられた個々のディスク番号（ｄｂｎ）にはアクセスしない。そうではなく、例えばｄｂｎアドレス空間においてディスク上に記憶される幾つかのデータブロックと、例えばボリュームブロック番号（ｖｂｎ）空間においてファイルシステムによって編成される同じ幾つかのデータブロックとの間には、一対一のマッピングが存在する。例えば、ファイルシステムにおいて、ディスク上のＮ個のデータブロックは、各データブロックにゼロからＮ−１までの一意のｖｂｎを割り当てることによって管理される場合がある。また、ファイルシステムは、幾つかのデータブロック（すなわち、ｖｂｎ）のセットをファイルシステムによって管理されるファイルやディレクトリに関連付ける場合がある。その場合、ファイルシステムは、ファイル又はディレクトリ内の各データブロックに対し、対応する「ファイルオフセット」又はファイルブロック番号（ｆｂｎ）を与える場合がある。例えば、ファイル又はディレクトリにおけるファイルオフセットは、固定サイズの幾つかのデータブロックを単位として、例えば、４キロバイト（ｋＢ）を単位として測定される場合がある。従って、ファイルオフセットはそのファイル又はディレクトリにおけるｆｂｎ番号に一対一にマッピングすることができる。従って、各ファイル又はディレクトリは、ファイルシステムにおいて連続した番号の幾つかのｆｂｎが割り当てられた一連のデータブロックとして定義される。例えば、各ファイル又はディレクトリにおける最初のデータブロックには、ゼロのような所定の開始ｆｂｎ番号が割り当てられる。ただし、ファイルシステムは、一連のｆｂｎ番号をファイルごとに割り当てるのに対し、ファイルシステムは、さらに広いボリュームアドレス空間全体にわたってｖｂｎ番号を割り当てる。
【０００８】
読み出しストリームは、要求ファイル内における幾つかのファイルオフセットからなる論理的に連続した範囲からデータを取り出すことをストレージシステムに対して命じる、１以上のクライアント要求のセットとして定義される。換言すれば、読み出しストリームの最初の要求が受信された後、その読み出しストリームにおけるその後の要求はすべて、そのストリームの前回の要求によりアクセスされるファイルにおけるファイルオフセットの連続的シーケンスを論理的に「延長」する。従って、読み出しストリームは、連続した番号の幾つかのｆｂｎが割り当てられた一連のデータブロックの読み出しをストレージシステムに対して命じる一連のクライアント要求として、ファイルシステムによって構成される場合がある。例えば、読み出しストリームにおける第１の要求は、ｆｂｎ１０〜１９が割り当てられたデータブロックの第１の集合を読み出し、読み出しストリームの第２の要求は、ｆｂｎ２０〜２５を有するデータブロックを読み出し、第３の要求は、ｆｂｎ２６〜４２が割り当てられたデータブロックを読み出す、等々である。なお、読み出しストリーム中のクライアント要求は、その要求が読み出しストリームの論理的に連続した範囲のファイルオフセットからのデータの読み出しをストレージシステムに対して命じるものであれば、ファイルベースのセマンティックを使用するものであっても、ブロックベースのセマンティックを使用するものであってもよい。
【０００９】
動作上、ストレージオペレーティングシステムは通常、同じファイルに対する幾つかのクライアントアクセスからなる順序付きシーケンスに基づいて、読み出しストリームを識別する。以下で使用されるように、ファイルとは、ゼロ以上の読み出しストリームを確立することが可能な任意のデータセットとして解釈される。従ってファイルは、ファイルベースのストレージシステム上に記憶された従来のファイルやディレクトリである場合もある。そのためストレージシステムは、クライアントの現在の要求ファイルデータを得るために、ストレージシステムが、ファイル内に既に確立された読み出しストリームを論理的に延長するデータブロックのセットを読み出さなければならないか否かを判定する。そうであれば、そのクライアント要求は読み出しストリームに関連付けられ、読み出しストリームは、読み出したデータブロックの数だけ延長される場合がある。
【００１０】
ストレージシステムは、読み出しストリームを識別すると、推測的先読み処理を使用して、将来のクライアント読み出し要求によって要求される可能性があるデータブロックを読み出す。このような「先読み」ブロックは通常、ストレージシステムのディスクやメモリ（すなわち、バッファキャッシュ）から読み出され、各読み出しデータブロックは、異なるファイルシステムｆｂｎに関連付けられる。従来の先読みアルゴリズムは、読み出しストリームを延長する所定数のデータブロックを「プリフェッチ」するように構成されることが多い。例えば、連続した番号のｆｂｎが割り当てられた一連のデータブロックを読み出すためのクライアント読み出し要求を含む読み出しストリームの場合、その読み出しストリーム中のクライアント要求が先読みブロックをまだ要求していない場合であっても、ファイルシステムは、先読み処理を実施し、一連のデータブロックをさらに延長するｆｂｎが割り当てられたデータブロックを更に読み出す場合がある。
【００１１】
一般に、先読み処理は、ファイルの読み出しストリームが、１セットのファイルオフセット又はメモリアドレスのうちの１つに到達したときに常に、それを「トリガ」として開始される。例えば、ファイルオフセットの所定のセットが、ファイル内の３２番目ごと（３１個置き）にあるファイルオフセット（すなわち、ファイルブロック番号０、３２、６１、・・・）から構成されるものと仮定する。さらに、既存の読み出しストリームが、ｆｂｎ番号４から始まり、ｆｂｎ番号２７まであるものと仮定する。ｆｂｎ番号２８〜３４の読み出しをストレージシステムに命じるクライアント読み出し要求を受信した場合、その要求は、所定のｆｂｎ番号３２を超えて延長され、それに応じて先読み処理が開始される。従って、従来の先読みアルゴリズムは、読み出しストリームにおける将来の読み出し要求を見込んで、ｆｂｎ番号３５から始まる所定数のデータブロック、例えば２８８個のデータブロックをディスクからキャッシュに記憶する。
【００１２】
現在のストレージシステムの１つの欠点は、他のクライアント要求によって「中断」された読み出し要求の順序付きシーケンスを含む読み出しストリームを識別する機能を持たないことである。例えば、１以上のランダム読み出し要求や他の読み出しストリームにおける要求によって順序付きシーケンスが中断された場合でも、ストレージシステムは、読み出しストリームに含まれる要求を非読み出しストリーム要求から区別することができない。従って、ストレージシステムは、識別されていない読み出しストリームについて、先読み処理を実施することができない。例えば、クライアントが、異なる読み出しストリームにおいて「重複する」読み出し要求を発行するものと仮定する。従来のストレージシステムにとって、そのインタリーブされたクライアント要求は、個別の読み出しストリームに属しているようには見えず、ランダムで無秩序な要求であるかのように見える。その場合ストレージシステムは、インタリーブされたいずれの読み出しストリームに対しても、先読み処理を実施することができない。同様に、ストレージシステムは、ランダムクライアント書き込み要求によってインタリーブされた要求を含む読み出しストリームに対して、先読み処理を実施しない場合がある。
【００１３】
従来のストレージシステムの別の欠点は、「ほぼ連続して」受信された複数の読み出し要求を含む読み出しストリームを識別する機能を持たないことである。読み出しストリーム中の要求のうちの１以上の無秩序化は、種々の理由から発生する。例えば、クライアントは、ストリーム読み出し要求を非連続に発行する場合がある。あるいは、ストレージシステムはクライアント要求を連続的に受信していても、クライアントが要求するデータを読み出す際の生来的な待ち時間によって、ストリーム読み出し要求を非連続的に処理する場合がある。一般に、ストレージシステムは、ほぼ連続した複数の読み出し要求を同じ読み出しストリームに属するものとして識別するようには構成されていない。従って、まだ識別されていない読み出しストリームに対しては、先読み処理が実施されない。
【００１４】
従って、要求が非読み出しストリーム要求とインタリーブされていたり、ほぼ連続的に並んでいたりする場合であっても、読み出し要求の順序付きシーケンスを識別するストレージシステムが必要とされている。また、ストレージシステムは、システムの性能に悪影響を及ぼすことなく、複数の読み出しストリームに対する先読み処理を同時に管理できるものでなければならない。
【発明の開示】
【課題を解決するための手段】
【００１５】
発明の概要
本発明は、各ファイルについて複数の異なる読み出しストリームの推測的先読みを同時に実施するように構成されたファイルシステムを実施するストレージシステムを提供する。従来の実施形態とは異なり、このファイルシステムは、複数の読み出しストリームのそれぞれについて、先読みメタデータの独立したセットを管理する。同時に、このファイルシステムは次いで、読み出しストリームに含まれる関連メタデータのセットに従って、要求の先読み処理を実施する。要求ごとに、受信したクライアント読み出し要求が、読み出しストリームに対応付けられるので、読み出し要求が非読み出し要求とインタリーブされていたり、ほぼ連続的に並んでいる場合であっても、ファイルシステムは先読み処理を実施することができる。
【００１６】
一実施形態によれば、先読みメタデータの各セットは、対応するリードセットデータ構造に記憶される。ファイルシステムは、ストレージシステムにおける各要求ファイルに対し、ゼロ以上のリードセットからなる異なるセットを割り当てる。このように、各要求ファイルは、そのファイルに割り当てられたリードセット（すなわち、リードセット１つあたり１つ）の数に等しい数の同時読み出しストリームをサポートする。例示的実施形態において、ファイルのリードセットは、ファイルのデータを読み出すための初期要求の受信に応答して、動的に割り当てられる。割り当てられるリードセットの数は、ファイルサイズが大きくなるのに従って増大させることが望ましい。
【００１７】
ファイルシステムは、ファイル読み出し要求を受信すると、その要求を、要求されたファイルに関連するリードセットに対応付けようとする。そのため、要求はファイルのリードセットと次々と比較される。この比較は好ましくは、最も最近アクセスされたリードセットから始めて、少なくとも１つの判断基準を満たすリードセットが見つかるまで続けられる。第１の判断基準は例えば、受信した要求が、そのファイルの前回識別された読み出しストリームのうちの１つを延長するものであるか否かのテストである。そうであれば、その延長された読み出しストリームに関連するリードセットは、「完全一致」であるものと判定される。第２の判断基準は例えば、受信した要求が、前回識別された読み出しストリームにおいて実施された最後の読み出しから所定の距離内に位置するデータを読み出すものであるか否かのテストである。第２の基準を満たしている場合、その読み出しストリームに関連するリードセットは、「曖昧一致」であるものと判定される。さらに第３の判断基準は例えば、要求ファイルのリードセットのうちのいずれかが「空」（すなわち、未使用）であるか否か、従って「空一致」であるとみなしてよいか否かを判定するものである。一致するリードセット（完全、あいまい、空）を見付けた後、ファイルシステムは、一致するリードセットに記憶された先読みメタデータに基づいて、先読み処理を実施する。
【００１８】
ファイルシステムは、受信した読み出し要求に対して一致するリードセットが見付からなかった場合、要求ファイルの既存のリードセットのうちのどれが「再使用」できるかを判定するように構成される。その場合、受信した読み出し要求は、新たな読み出しストリームを開始することを仮定し、再使用されるリードセットは、その新たな読み出しストリームに関連する先読みメタデータを記憶するように構成される。各リードセットは、リードセットが再使用に適しているか否かの判定に使用されるエージング手段を有する。例えば、受信したクライアント読み出し要求が、クライアントが要求するファイルに関連するいずれのリードセットにも、完全一致、曖昧一致、又は空一致しないものと判定された場合常に、そのクライアント要求ファイルは、他のリードセットに対して「古い」。既存のリードセットの過剰な「スラッシング」を防止するために、エージング手段は、リードセット再使用ポリシーとともに使用される場合がある。例えば、再使用ポリシーは、ファイルに関連する少なくとも所定数の他のリードセットが再使用されるまで、リードセットが再使用されないことを保証するものである。従って、再使用ポリシーによれば、リードセットの内容が時期尚早に上書きされることが防止される。
【００１９】
有利なことに、本発明によれば、ファイルシステムは、読み出しストリームに含まれるファイル読み出し要求が、ストレージシステムによって順番に受信されているか、ほぼ順番に受信されているか、それとも、無作為な順番で受信されているかに関わらず、複数の読み出しストリームに対して、先読み処理を同時に実施することができる。また、ファイルシステムは、読み出しストリームが異なる先読みアルゴリズムを使用する場合であっても、複数の異なる読み出しストリームに対して推測的先読みを同時に実施することができる。本発明は、ファイルベースのストレージシステムによっても、ブロックベースのストレージシステムによっても、あるいは、それらの組み合わせによっても実施することができる。
【００２０】
本発明の上記の利点及び他の利点は、添付の図面とともに下記の説明を読むことにより、よりよく理解できるであろう。図中、同じ参照符号は機能的に同一の要素又は類似の要素を示している
【発明を実施するための最良の形態】
【００２１】
実施例の詳細な説明
Ａ．ストレージシステム
図１は、ディスク１６０のような記憶装置上での情報の編成に関するストレージサービスを提供するように構成された、マルチプロトコル・ストレージ・アプライアンス１００を示すブロック図である。ストレージディスクは、ＲＡＩＤ(Redundant Array of Independent disks)のような種々の構成で配置される場合がある。ストレージ・アプライアンス１００は例えば、システムバス１１５によって相互接続されたプロセッサ１１０、メモリ１５０、複数のネットワークアダプタ１２０、１４０、及び、ストレージ・アダプタ１３０からなるストレージシステムとして実施される。
【００２２】
図示の実施形態において、メモリ１５０は、本発明に関連するソフトウェアプログラムコードやデータ構造を記憶するために、プロセッサ１１０やアダプタ１２０〜１４０によってアドレス指定可能な記憶場所を有する。例えば、メモリは、１以上のinodeデータ構造を格納するinode「プール」１５２を記憶する場合がある。同様に、このメモリは、リードセットデータ構造を格納するリードセットプール１５４、及び、データバッファを格納するバッファプール１５６を記憶する場合がある。プロセッサ及びアダプタは、ソフトウェアコードを実行し、メモリ１５０に記憶されたデータ構造を操作するように構成された処理要素、及び／又は、論理回路を含む場合がある。ストレージオペレーティングシステム２００は、通常その一部がメモリに常駐し、処理要素によって実行され、とりわけストレージアプライアンスによって実施されるストレージサービスを支援する記憶処理を実施することにより、ストレージアプライアンスの機能を構成する。当業者には明らかなように、本明細書に記載する本発明のシステムに関連するプログラム命令の記憶及び実行には、他の処理手段や、種々のコンピュータ読取可能媒体を含む他の記憶手段を使用してもよい。
【００２３】
ディスク１６０に対するアクセスを容易にするために、ストレージオペレーティングシステム２００は、仮想化モジュールと協働するwrite-anywhereファイルシステムを実施し、ディスク１６０によって得られる記憶空間を「仮想化」する。ファイルシステムは、情報を名前付きディレクトリ及びファイルの階層構造としてディスク上に編成する。「ディスク上」の各ファイルは、データのような情報を記憶するように構成された一連のデータブロックとして実施される一方、ディレクトリは、他のファイルやディレクトリの名前やそれらへのリンクが記憶される特殊形式のファイルとして実施される場合がある。仮想化モジュールによれば、ファイルシステムは、情報をブロックの階層構造としてディスク上でさらに論理編成し、それを名前付き論理ユニット番号（ＬＵＮ）としてエキスポートすることができる。
【００２４】
本明細書で使用されるように、「ストレージオペレーティングシステム」という用語は、コンピュータ上で動作するコンピュータ実行可能コードであって、データアクセスを管理し、さらに、マルチプロトコル・ストレージ・アプライアンスの場合は、データ・アクセス・セマンティックを実施するコンピュータ実行可能コードを一般に意味する。ストレージオペレーティングシステムは、カリフォルニア州サニーベイルにあるネットワーク・アプライアンス・インコーポレイテッドから市販されているData ONTAPオペレーティングシステムのように、マイクロカーネルとして実施される場合がある。また、ストレージオペレーティングシステムは、ＵＮＩＸやＷｉｎｄｏｗｓ（Ｒ）  ＮＴのような汎用オペレーティングシステム、あるいは、本明細書に記載するストレージ・アプリケーションのために構成された、設定機能を備えた汎用オペレーティングシステム上で動作するアプリケーションプログラムとして実施してもよい。当然ながら、本明細書に記載する本発明の原理に従って使用するために、任意の適当なストレージオペレーティングシステムに拡張を施してもよい。
【００２５】
ストレージアダプタ１３０は、ストレージアプライアンス上で実行されるストレージオペレーティングシステム２００と協働し、クライアント１９０によって要求された情報にアクセスする。情報は、ディスク１６０に記憶される場合もあれば、情報を記憶するように構成された他の同様の媒体に記憶される場合もある。ストレージアダプタは、従来のファイバ・チャネル（ＦＣ）シリアル・リンク・トポロジのようなＩ／Ｏ相互接続構成を介してディスクに接続された入出力（Ｉ／Ｏ）インタフェース回路を含む。情報はストレージアダプタによって取得され、システムバス１１５を介してネットワークアダプタ１２０、１４０へ転送される前に、必要であれば、プロセッサ１１０（又はアダプタ１３０自体）によって処理される。ネットワークアダプタ１２０、１４０において、情報はパケット又はメッセージとしてフォーマットされ、クライアントへ返される。
【００２６】
ネットワークアダプタ１２０は、例えば、ポイント・ツー・ポイントリンク、ワイドエリアネットワーク（ＷＡＮ）、公共ネットワーク（例えば、インターネット）上で実施される仮想私設ネットワーク（ＶＰＮ）、又は、図示のイーサネット（Ｒ）ネットワーク１７５のような共有ローカルエリアネットワーク（ＬＡＮ）を介して、ストレージアプライアンス１００を複数のクライアント１９０ａ，ｂに接続する。従って、ネットワークアダプタ１２０は、ストレージアプライアンスを従来のイーサネット（Ｒ）スイッチ１７０のようなネットワークスイッチに接続するのに必要とされる機械的、電気的、又は、信号回路を備えたネットワークインタフェースカード（ＮＩＣ）からなる場合がある。このＮＡＳベースのネットワーク環境の場合、クライアントは、マルチプロトコルアプライアンス上に格納されたファイルのような情報にアクセスするように構成される。クライアント１９０は、トランスミッション・コントロール・プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）のような所定のプロトコルに従って個々のフレームデータ又はパケットデータをやりとりすることにより、ネットワーク１７５を介してストレージアプライアンスと通信する。
【００２７】
クライアント１９０は、ＵＮＩＸオペレーティングシステムやＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（Ｒ）オペレーティングシステムのような種々のオペレーティングシステム上でアプリケーションを実行するように構成された汎用コンピュータであってもよい。クライアントは一般に、ＮＡＳベースのネットワークを介して情報（ファイルやディレクトリの形をしている）にアクセスする場合、ファイルベースのアクセスプロトコルを使用する。従って、各クライアント１９０は、ネットワーク１７５を介してストレージアプライアンス１００にファイルアクセスプロトコルメッセージ（パケットの形をしている）を発行することにより、ストレージアプライアンス１００のサービスを要求する。例えば、Ｗｉｎｄｏｗｓオペレーティングシステムを実行しているクライアント１９０ａは、ＣＩＦＳ  ｏｖｅｒ  ＴＣＰ／ＩＰプロトコルを使用してストレージアプライアンス１００と通信する場合がある。一方、ＵＮＩＸオペレーティングシステムを実行しているクライアント１９０ｂは、ＮＦＳ  ｏｖｅｒ  ＴＣＰ／ＩＰプロトコル、又は、ＲＤＭＡ  ｏｖｅｒ  ＴＣＰ／ＩＰプロトコルによるＤＡＦＳ  ｏｖｅｒ  ＶＩプロトコルを使用して、マルチプロトコル・アプライアンスと通信する場合がある。当業者には明らかなように、他のタイプのオペレーティングシステムを実行するクライアントは、他のファイルアクセスプロトコルを使用して、統合マルチプロトコルストレージアプライアンスと通信する場合もある。
【００２８】
ストレージネットワーク「ターゲット」アダプタ１４０は、マルチプロトコル・ストレージ・アプライアンス１００をクライアント１９０に接続する。クライアント１９０は、ブロック、ディスク又は論理ユニットとして記憶された情報にアクセスするように構成される場合がある。ＳＡＮベースのネットワーク環境の場合、ストレージアプライアンスは、図示のＦＣネットワーク１８５に接続される。ＦＣは、ＳＡＮデプロイメントに主に見られるプロトコル一式及び媒体を記載するネットワーク規格である。ネットワークターゲットアダプタ１４０は、アプライアンス１００を従来のＦＣスイッチ１８０のようなＳＡＮネットワークスイッチに接続するのに必要とされる機械的、電気的、又は、信号回路を備えたＦＣホストバスアダプタ（ＨＢＡ）からなる場合がある。ＦＣ  ＨＢＡによれば、ＦＣアクセスが可能になる上、ストレージアプライアンスのファイバーチャネル・ネットワークプロセス・オペレーションの負荷も軽減される場合がある。
【００２９】
クライアント１９０は一般に、ＳＡＮベースのネットワークを介して例えばブロックやディスクの形をした情報にアクセスするときに、スモールコンピュータ・システム・インタフェース（ＳＣＳＩ）プロトコルのようなブロックベースのアクセスプロトコルを使用する。ＳＣＳＩは、ディスク１６０のような種々の周辺機器をストレージ・アプライアンス１００に取り付けることが可能な標準的なデバイス非依存のプロトコルを備えた周辺機器Ｉ／Ｏインタフェースである。ＳＣＳＩ用語において、ＳＡＮ環境で動作しているクライアント１９０は、データの要求およびコマンドを開始する「イニシエータ」である。従って、マルチプロトコル・ストレージ・アプライアンスは、要求／応答プロトコルに従ってイニシエータにより発行された要求に対して応答する「ターゲット」である。クライアントがＳＡＮベースのデータアクセス要求をストレージ・アプライアンスに送信するとき、クライアントは通常、ディスク１６０に記憶された個々のデータブロックに対応する論理ブロックアドレスを使用する。
【００３０】
マルチプロトコル・ストレージ・アプライアンス１００は、ＴＣＰ／ＩＰ上にカプセル化されたＳＣＳＩプロトコル（ｉＳＣＳＩ）や、ＦＣ上にカプセル化されたＳＣＳＩ（ＦＣＰ）のような、ＳＡＮデプロイメントにおいて使用される種々のＳＣＳＩベースのプロトコルをサポートする。従ってイニシエータ（以後クライアント１９０）は、ネットワーク１７５、１８５を介してｉＳＣＳＩメッセージやＦＣＰメッセージを送信することにより、ディスクに記憶された情報にアクセスする。当業者には明らかなように、クライアントは、他のブロックアクセスプロトコルを使用して、統合マルチプロトコルストレージアプライアンスのサービスを要求する場合もある。複数のブロックアクセスプロトコルをサポートすることにより、マルチプロトコル・ストレージ・アプライアンスは、異種ＳＡＮ環境におけるディスクや論理ユニットに対する統一的で整然としたアクセス手段を提供する。
【００３１】
Ｂ．ストレージオペレーティングシステム
図２は、本発明と共に使用するのに都合がよいストレージオペレーティングシステム２００の一例を示す略ブロック図である。ストレージオペレーティングシステムは、統合ネットワークプロトコルスタック、すなわち、より一般的には、マルチプロトコルエンジンを形成するように編成された一連のソフトウェア層から構成され、ブロックアクセスプロトコルとファイルアクセスプロトコルを使用して、マルチプロトコル・ストレージ・アプライアンス１００に記憶された情報にアクセスするためのデータパスをクライアントに提供する。プロトコルスタックは、ＩＰ層２１２のネットワークプロトコル層、並びに、ＩＰ層が支えている搬送手段であるＴＣＰ層２１４及びユーザ・データグラム・プロトコル（ＵＤＰ）層２１６とのインタフェースとして機能するネットワークドライバ（例えば、ギガビット・イーサネット（Ｒ）・ドライバ）のメディアアクセス層２１０を含む。ファイルシステムプロトコル層はマルチプロトコルファイルアクセスを提供し、その目的のためにＤＡＦＳプロトコル２１８、ＮＦＳプロトコル２２０、ＣＩＦＳプロトコル２２２、及び、ハイパーテキスト・トランスファー・プロトコル（ＨＴＴＰ）プロトコル２２４を含む。ＶＩ層２２６は、ＤＡＦＳプロトコル２１８に必要とされるようなダイレクト・アクセス・トランスポート（ＤＡＴ）機能を提供するＶＩアーキテクチャを実施する。
【００３２】
ｉＳＣＳＩドライバ層２２８は、ＴＣＰ／ＩＰネットワークプロトコル層を介したブロックベースのプロトコルアクセスを提供する一方、ＦＣドライバ層２３０は、ＦＣ  ＨＢＡ１４０と共に動作し、ブロックアクセス要求の送受信を行うとともに、クライアント１９０ａ，ｂとの間で応答のやりとりをする。ＦＣドライバ及びｉＳＣＳＩドライバは、ＦＣ固有のアクセス制御及びｉＳＣＳＩ固有のアクセス制御をストレージディスク１６０及び他の論理ユニットに提供する。更に、ストレージオペレーティングシステム２００は、ＲＡＩＤプロトコルのようなディスクストレージプロトコルを実施するだけでなく、例えばＳＣＳＩプロトコルのようなディスクアクセスプロトコルに従ってストレージディスク１６０からデータブロックを読み出すための、ディスクドライバサブシステム２５０も実施する。
【００３３】
ディスクソフトウェア層２４０及び２５０を統合ネットワークプロトコルスタック層２１０〜２３０に橋渡しするのは、仮想化システムである。仮想化システムは、例えば仮想ディスク（「ｖｄｉｓｋ」）モジュール２７０及びＳＣＳＩターゲットモジュール２３５として実施される仮想化モジュールと交信するストレージマネージャ又はファイルシステム２６０によって実施される。ｖｄｉｓｋモジュール２７０は、ファイルシステム２６０の上に層として形成され、ユーザがストレージシステムに対して発行したコマンドに応答して、ユーザインタフェース（ＵＩ）２７５のような管理インタフェースによってアクセスすることができる。ＳＣＳＩターゲットモジュール２３５は、ＦＣ２３０及びｉＳＣＳＩ２２８と、ファイルシステム２６０との間に配置され、ブロック（ＬＵＮ）空間とファイルシステム空間との間に仮想化システムの変換層を提供する。ファイルシステム空間において、ＬＵＮは仮想ディスクとして表わされる。ＵＩ２７５は、ストレージオペレーティンスシステムの上に配置され、種々の層、及び、ＲＡＩＤサブシステム２４０のようなサブシステムに対する管理アクセスやユーザアクセスを可能にする。
【００３４】
ファイルシステム２６０は例えば、ディスク１６０のような記憶装置に記憶された情報にアクセスするためのボリューム管理機能を提供する。すなわち、ファイルシステム２６０は、ファイルシステムセマンティックを提供する他に、ボリュームマネージャに通常関連する機能も提供する。そうした機能には、（ｉ）ディスクの集合化、（ｉｉ）ディスクのストレージ帯域幅の集合化、（ｉｉｉ）ミラーリング、及び／又は、パリティの信頼性確保（ＲＡＩＤ）などがある。ファイルシステム２６０は例えば、Write Anywhere File Layout (WAFL)ファイルシステムを実施し、「ディスク上」のデータを固定サイズのブロック、例えば４キロバイト（ｋＢ）のブロックを使用して編成する。図示のファイルシステム２６０は、インデックスｉｎｏｄｅ（「ｉｎｏｄｅ」）を使用してファイルを識別し、ファイル属性（作成時刻、アクセス許可、サイズ、ブロック位置など）を記憶する。ｉｎｏｄｅファイルを含めて、ｉｎｏｄｅの使用の詳細については、１９９８年１０月６日に発行されたDavid Hitz他による「Method for Maintaining Consistent Status of a File System and for Creating User-Accessible Read-Only Copies of a File System」と題する米国特許第５，８１９，２９２号に記載されており、この文献は参照により、本明細書の中で完全に説明されたものとして本明細書に援用される。
【００３５】
図３は、ファイル３３０のバッファツリーを示す略ブロック図である。このバッファツリーは、メモリに記憶されたファイルのブロックの内部表現である。バッファツリーは、ファイル３３０を表わすメタデータ及びファイルのサイズに係るメタデータを含み、更にそのファイルの実際のデータが格納された例えば４キロバイトブロックのデータブロック３２０を参照するポインタを含む最上位ｉｎｏｄｅ３００を有する。特に、大きなファイル（例えば、６４ｋＢよりも大きなデータ）の場合、ｉｎｏｄｅ３００にある各ポインタは、最大１０２４個のポインタが格納される間接（レベル１）ブロック３１０を参照する場合があり、各ポインタはデータブロック３２０を参照することができる。一例として、間接ブロック３１０にある各ポインタは、ファイルシステム２６０におけるデータブロック３２０に対応するｖｂｎを識別する値を記憶する場合がある。
【００３６】
動作に関し、ファイルシステム２６０は、統合ネットワークプロトコルスタックの種々のソフトウェア層によって処理されたクライアント要求を受信する。例えば、ネットワークアダプタ１２０又は１４０において受信されるクライアント要求は、（層２１０又は２３０）のネットワークドライバによって処理され、適宜、その要求が更にネットワークプロトコル及びファイルアクセス層２１２〜２２８へ転送され、処理される。次にクライアント要求はファイルシステム２６０へ渡すことが可能なファイルシステム「メッセージ」としてフォーマットされる。このメッセージは、とりわけ、クライアントが要求したファイル又はディレクトリ（例えば、通常はｉｎｏｄｅ番号によって表される）、要求されたファイル又はディレクトリ内の開始オフセット、及び、開始オフセットの後に書き込み又は読み出しするデータの長さを指定するものである。
【００３７】
ファイルシステム２６０は、ディスク上のデータを固定サイズのデータブロック、例えば４キロバイトブロックを単位として操作するため、受信したファイルシステムメッセージがまだフォーマットされていない場合、その中の値（ｉｎｏｄｅ、オフセット、長さ）をデータブロック（例えば、ｆｂｎ）単位に変換しなければならない場合がある。例えば、８キロバイトのクライアント要求ファイルが、ディスク上で、ｆｂｎ１１及び１２がそれぞれ割り当てられた２つの連続した４キロバイトブロックを占めるものと仮定する。更に、それら２つのデータブロックが、ｉｎｏｄｅ番号１７を有するｉｎｏｄｅに記憶された１セットのポインタを使用してアクセス可能であるものと仮定する。そして、クライアントは、そのファイルデータのうちの後ろ６キロバイト分に対するアクセス、すなわち、ｆｂｎ番号１１における最後の２キロバイトとｆｂｎ番号１２における４キロバイト全部に対するアクセスを要求しているものと仮定する。その場合、ファイルシステム２６０は、要求データが（ｉｎｏｄｅ＝１７、ファイルオフセット＝２ｋＢ、長さ＝６ｋＢ）として指定されたファイルシステムメッセージを受信する場合がある。ファイルシステムはデータブロック単位でデータを操作するため、受信したファイルオフセットおよび長さ値をデータブロック単位に変換し、どのデータブロックがクライアントの要求するデータを有しているかを識別できるようにする。例えば、（ｉｎｏｄｅ＝１７、開始データブロック＝ｆｂｎ１１、読み出すべきデータブロック＝２ブロック）というように。
【００３８】
どのデータブロックがクライアントの要求データを記憶しているかを識別した後（例えば、ｆｂｎ１１及び１２といったように）、ファイルシステム２６０は、クライアントの要求するデータブロックが、「コア内」バッファのうちの１以上から得られるか否かを判定する。得られる場合、ファイルシステムは、要求されたデータをメモリ１５０から読み出し、読み出したデータをクライアント要求に従って処理する。しかしながら、要求されたデータがコアメモリ内にない場合、ファイルシステム２６０は、要求されたデータをストレージディスク１６０からロード（読み出し）する処理を発生する。ファイルシステムは、クライアントの要求するデータブロックに割り当てられたｖｂｎ番号（すなわち、ｖｂｎ１１と１２）をＲＡＩＤサブシステム２４０に渡し、ＲＡＩＤサブシステム２４０は、それらのｖｂｎを対応するディスクブロック番号（ｄｂｎ）にマッピングし、後者をディスクドライバサブシステム２５０のディスクドライバのうちの適当なドライバ（例えばＳＣＳＩドライバ）に送信する。ディスクドライバはディスク１６０の要求されたｄｂｎにアクセスし、要求されたデータブロック（複数の場合もあり）をメモリ１５０にロードし、それをファイルシステム２６０によって処理する。
【００３９】
また、ファイルシステム２６０は、クライアントが要求するデータを含むデータブロックの読み出しの他に、更に、ディスクソフトウェア層２４０及び２５０に対し、ディスク１６０からの「先読み」データブロックの読み出しを命じる場合がある。こうした先読みデータブロックは、受信したクライアント要求に含まれる読み出しストリームを論理的に延長する範囲のデータブロック（例えば、ｆｂｎ）に対応する。ただし、それらの先読みブロック自体はまだ要求されてはいない。クライアントが要求するデータブロックと同様に、先読みデータブロックも、ディスクソフトウェア層２４０及び２５０によって読み出され、ファイルシステム２６０にとってアクセス可能な適当なメモリバッファにコピーされる。そのようなメモリバッファは、バッファプール１５６から得ることができる。ファイルシステムは、クライアントの要求に従って読み出されたデータブロックにおけるクライアントの要求するデータにアクセス（すなわち、読み出し又は書き込み）し、適宜、要求されたデータ、及び／又は、受領応答メッセージを要求元クライアント１９０に返すことができる。
【００４０】
Ｃ．リードセット
本明細書で使用されるように、「読み出しストリーム」は、要求されたファイル内の論理的に連続した範囲の幾つかのファイルオフセット（例えば、ｆｂｎ）からのデータの読み出しをストレージオペレーティングシステム２００に対して命じる１以上のクライアント要求のセットとして定義される。オペレーティングシステムは、将来のクライアント読み出し要求による読み出しストリームにおいて要求される可能性がある１以上のデータブロックをプリフェッチするための推測的先読み処理を使用する場合がある。一実施形態によれば、ストレージオペレーティングシステム２００は、同時に管理される複数の読み出しストリームのそれぞれについて個別に、先読みメタデータのセットを有する。例示的実施形態において、ストレージオペレーティングシステムは、各読み出しストリームのメタデータを個別の「リードセット」データ構造に記憶する（すなわち、１つのリードセットあたり１つの読み出しストリーム）。従って、複数の読み出しストリームを同時にサポートするファイルやディレクトリは、複数の異なるリードセットに関連する場合があり、例えば、ファイルやディレクトリに関連するｉｎｏｄｅを使用してアクセスされる場合がある。
【００４１】
図４は、例示的なｉｎｏｄｅ４００及びそれに関連するリードセット６００ａ〜ｃのセットを示している。ｉｎｏｄｅ４００は、とりわけ、ｉｎｏｄｅ番号４０２（又は、他の識別子）、リードセットポインタ４０４、読み出しアクセススタイル４０６、デフォルト先読み値４０８、ファイルメタデータ４１０、及び、データセクション４１２を含む。ｉｎｏｄｅ４００は、そのｉｎｏｄｅに関連するファイルやディレクトリ中のデータに対するアクセスを求めるクライアント要求をストレージシステム２００が受信するのに応じて、ｉｎｏｄｅプール１５２から割り当てられ、すなわち、取得される。ｉｎｏｄｅ４００に関連するファイルやディレクトリを一意に識別するために、ｉｎｏｄｅ番号４０２（例えば、この例では１７）が使用される場合がある。例えば、クライアント要求は、クライアントがアクセスを要求している特定範囲のデータを含むファイルやディレクトリに関連するｉｎｏｄｅ番号を指定する場合がある。クライアントが指定するｉｎｏｄｅ番号は、そのファイル内の開始オフセットの指示、又は、その開始オフセットから始まるアクセスしたいデータの長さに結合される場合がある。
【００４２】
リードセットポインタ４０４は、ゼロ以上のリードセットデータ構造６００の記憶場所を指定する値を記憶する。動作に関し、ファイルシステム２６０は、リードセットを動的に割り当ててもよいし、あるいは、リードセットプール１５４から事前に割り当てられたリードセットを取得してもよい。ｉｎｏｄｅ４００に割り当てられる各リードセットは、所定の値のセットを記憶するように初期化される場合がある。例えば、ｉｎｏｄｅ４００に関連するリードセット６００ａ〜ｃは、連結リストとして構成され、各リードセットは、リスト上の隣りのリードセットの記憶場所を示す値を記憶する。リストに含まれる最後のリードセット、例えばリードセット６００ｃにおけるネクストポインタは、そのリードセットがリスト上で末尾に位置することを示す所定の「ヌル（空）」値を記憶する場合がある。図示の実施形態におけるリードセットは連結リストとして構成されているが、当業者であれば、リードセットをサーチツリーのような他の構成にしてもよいことは明らかであろう。
【００４３】
読み出しアクセススタイル４０６は、ｉｎｏｄｅ４００に関連するファイルやディレクトリからデータを読み出す方法を表わす読み出しアクセスパターンを示す値を記憶する。例えば、読み出しアクセススタイルは、例えば、通常アクセスパターン、連続アクセスパターン、又は、ランダムアクセスパターン等に従って、ｉｎｏｄｅのファイル又はディレクトリにあるデータが読み出されることを示す場合がある。ストレージオペレーティングシステム２００は、クライアント読み出し要求を処理する際に、読み出しアクセスパターンを動的に識別し、更新する場合がある。あるいは、ストレージオペレーティングシステムは、受信したクライアント読み出し要求に含まれる「キャッシュヒント」等に基づいて、その読み出しアクセス値を設定する場合がある。キャッシュヒントは、要求元クライアントがファイルやディレクトリからのデータの読み出しに使用する可能性がある読み出しアクセスパターンを示す。例えば、ストレージオペレーティングシステムは、クライアントから送信されたＤＡＦＳ読み出し要求からキャッシュヒントを得る場合がある。ＤＡＦＳキャッシュヒントを含むＤＡＦＳキャッシュプロトコルの詳細については、２００１年９月１日に出版された「DAFS: Direct Access File System Protocol, Version 1.00」に記載されており、この文献は、参照により完全に説明されたものとして本明細書に援用される。
【００４４】
デフォルト先読み値４０８は、ｉｎｏｄｅ４００に関連するファイルやディレクトリに記憶されたデータを読み出すための将来のクライアント読み出し要求を想定してプリフェッチ（例えば、前もっての読み出し）されることがある所定数のデータブロックを示す。例えば、デフォルト先読み値４０８は、クライアントが要求するデータを有する１以上のデータブロックを読み出した後、将来のクライアント読み出し要求を想定して、ファイルシステムがデータブロック、例えば２８８個のデータブロックを更に読み出さなければならないことを示す場合がある。当業者には分かるように、クライアント読み出し要求がある度に「先読み」データブロックを読み出す必要はなく、先読みデータブロックは、所定の先読みアルゴリズムに基づいて取得してもよい。図示の実施形態によれば、デフォルト先読み値４０８は、読み出しアクセススタイル４０６に応じて決まる場合がある。例えば、ランダム読み出しアクセスパターンの場合、デフォルト先読み値はゼロに設定され、通常読み出しアクセスの場合よりも、連続読み出しアクセスの場合の方が、デフォルト先読み値は大きな値に設定される。
【００４５】
ファイルメタデータ４１０は、ｉｎｏｄｅ４００に関連するファイルやディレクトリに関連する他のメタデータ情報を記憶する。こうしたメタデータ情報には、とりわけ、ユーザ識別子、グループ識別子、アクセス制御リスト、フラグ、及び、他のデータ構造へのポインタ等のようなセキュリティ証明がある。ｉｎｏｄｅ４００は、そのｉｎｏｄｅに関連するファイルやディレクトリを含むデータブロック３２０の記憶場所を（直接的又は間接的に）示す１セットのポインタを含むデータセクション４１２を更に有する。この例の場合、データセクション４１２にあるポインタは１以上の間接データブロック（図示せず）を指し、更に、それらの間接データブロックが、ファイルやディレクトリを含む１セットの連続したデータブロックの記憶場所を示すポインタを有する。以後、ｉｎｏｄｅ４００からアクセス可能な各データブロックには、対応するｆｂｎが割り当てられ、ｉｎｏｄｅ４００に関連するファイル（又はディレクトリ）は、連続的なｆｂｎ値が割り当てられた１セットのデータブロックからなるものと仮定する。例えば、データセクション４１２にある幾つかのポインタは、ファイルのうち、ｆｂｎ９〜１８が割り当てられたデータブロックに記憶された部分を指す場合がある。
【００４６】
有利なことに、ｉｎｏｄｅ４００のファイルやディレクトリを含む複数のデータブロック３２０において、複数の読み出しストリームを同時に確立することができる。例えば図示のように、データブロック９〜１８のセットには、並列な２本の読み出しストリーム４３０及び４３５が識別される。読み出しストリーム４３０は、ファイルシステム２６０によって読み出されたファイルブロック番号９まで（ただし９は含まない）のｆｂｎの論理的に連続したシーケンスに対応する。図示の実施形態によれば、各読み出しストリームは、リードセット６００ａ〜ｃのうちの異なる１つに記憶された対応する先読みメタデータのセットに関連する場合がある。
【００４７】
上記のように、各リードセットは、対応する読み出しストリームに関連するメタデータを記憶するように構成される。従って、図示のｉｎｏｄｅ４００は３つのリードセット６００ａ〜ｃに関連しているため、このｉｎｏｄｅに関連するファイルやディレクトリは、最大で３つの異なる読み出しストリームをサポートする。ただし、当然ながら、ｉｎｏｄｅには、０以上の任意数のリードセットを割り当ることが可能であるものと考えられる。ｉｎｏｄｅ４００に割り当てられるリードセットの数は、そのｉｎｏｄｅに関連するファイルやディレクトリのサイズに基づいて決定されることが好ましい。例えば、ファイルのサイズが増大するほど、ｉｎｏｄｅに割り当てられるリードセットの数も増大するといったように。
【００４８】
図５は、列５１０に記憶されたファイルサイズを列５２０に記憶された対応する割り当てリードセット数に関連付けるために使用されるテーブル５００の例を示している。この例の場合、「非常に小さな」ファイル（例えば６４ｋＢ未満）は、読み出しストリームを形成できるほどのデータを有していないので、ゼロのリードセットが関連付けられる。一方「小さな」ファイル（例えば６４ｋＢ〜５１２ｋＢ）は、１つの読み出しストリームを形成することが可能なサイズを有しているので、単一のリードセットが関連付けられる。一般に、ファイルサイズが大きくなるほど、ファイルがサポートする読み出しストリームの数も多くなるので、そのファイルのｉｎｏｄｅに割り当てられるリードセットの数も増える。例えば、１以上のクライアント「書き込み」要求を処理した結果、ファイルサイズが動的に増大するのに従って、ファイルシステム２６０は更なるリードセットを動的に割り当てることができる。
【００４９】
図６は、リードセットポインタ４０４によってアクセス可能なリードセット６００の例を示している。このリードセットは、読み出しストリーム４３０又は４３５のような対応する読み出しストリームに関連するメタデータを有する。リードセット６００は、とりわけ、ネクストポインタ６０２、レベル値６０４、カウント値６０６、最終読み出しオフセット値６０８、最終読み出しサイズ６１０、ネクスト先読み値６１２、先読みサイズ６１４、及び、種々のフラグ６１６を含む。当業者には分かるように、リードセット６００は、図示したものの他にも、他の情報を更に記憶するように構成される場合がある。既に説明したように、ネクストポインタ６０２は、リードセットのリスト（又は他のデータ構造）上にある次のリードセットの記憶場所を示す値を記憶する。
【００５０】
レベル値６０４は、リードセット６００の相対的「古さ」を示す。好ましくは、レベル値は、所定の上限値と所定の下限値を境界とする範囲内の整数値である。例えば、レベル値６０４は、所定のゼロの下限値と所定の２０の上限値の間の整数に制限される場合がある。リードセット６００を最初に割り当てるとき、レベル値６０４は、リードセット６００が未使用（すなわち、空）であることを示す例えばマイナス１のような特殊な指示値に設定される。新たに識別された読み出しストリームにリードセットを割り当てるとき、レベル値６０４は、上限値と下限値の間の範囲内の所定の「初期」値に設定される。例えば、所定下限値と所定の上限値がそれぞれ０と２０である場合、初期レベル値は、それらの間にある１０のような任意の値に設定される。リードセットが時期尚早に古くなることを防止するために、リードセット６００に関連する大きなファイル（又は、ディレクトリ）に使用される初期レベル値は、小さなファイルに使用される初期レベル値よりも大きくすることが望ましい。例えば、非常に大きなファイル（例えば１０ＧＢよりも大）の場合、初期レベル値は１５に設定され、他の場合は１０に設定される場合がある。当然ながら、本発明のコンテキストでは、他の上限値、下限値、及び、初期レベル値を使用してもよい。
【００５１】
クライアント読み出し要求がファイルシステム２６０によって処理されるたびに、ファイルシステムは、そのクライアント読み出し要求を含む読み出しストリームに関連するリードセットにおけるレベル値６０４をインクリメントする。例えば、レベル値６０４をインクリメントする場合、レベル値０６４は、例えば１に等しい第１の所定ステップサイズだけ増加される。また、後で説明するようにリードセットを「再使用」する場合、ファイルシステムは、各リードセットに記憶されたレベル値が再使用のために選択されていないものと判断する。レベル値６０４は、例えば１に等しい第２の所定ステップサイズだけデクリメントされる場合がある。
【００５２】
例えば、リードセット６００が、１２に等しいレベル値６０４を記憶し、ファイルシステム２６０が、クライアント読み出し要求に対応するファイルシステムメッセージを受信するものと仮定する。ファイルシステムは、そのクライアント要求がリードセット６００に関連する読み出しストリームに属しているものと判断した場合、レベル値６０４を１３にインクリメントする。一方、そのクライアント要求が、別の読み出しストリーム、すなわち、リードセット６００に関連しない読み出しストリームに属しているものと判断した場合、ファイルシステムは、レベル値６０４を変更せずに１２のまま維持する。更に、受信したクライアント読み出し要求によって、ファイルシステムが別のリードセットを再使用しなくればならなくなった場合、ファイルシステムは、レベル値６０４を例えば１１にデクリメントする。このように、クライアント読み出し要求がファイルシステム２６０によって処理されるたびにレベル値６０４は調節され、以下で説明するように、リードセット６００が割り当て解除、又は、再使用されるまで調節され続ける。このエージングプロセスは、種々の条件の影響を受ける場合がある。例えば、レベル値６０４が、所定の初期値（例えば、１０）よりも小さいものと判定された場合、次回、レベル値はインクリメントされ、レベル値が所定の初期レベル値に等しくなるように設定される場合がある。さらに、ファイルシステム２６０は、レベル値６０４が、所定の上限値を超えてインクリメントされたり、所定の下限値を超えてデクリメントされたりしないようにする。
【００５３】
カウント値６０６は、リードセット６００に関連する読み出しストリームにおいて処理されたクライアント読み出し要求の数を記憶する。図示の実施形態の場合、カウント値は最初にゼロに設定される。次に、そのリードセットに関連する読み出しストリームに含まれるクライアント読み出し要求をファイルシステム２６０が一回処理するたびに、そのカウント値はインクリメントされる。レベル値６０４の場合と同様に、マルチプロトコル・ストレージ・アプライアンス１００のメモリリソースを節約するために、カウント値６０４は、所定の上限値、例えば２１６によって制限される。
【００５４】
最終読み出しオフセット６０８と最終読み出しサイズ６１０は合わせて、リードセット６００に関連する読み出しストリームにおいて最後に処理された（すなわち、最も最近処理された）クライアント読み出し要求を表わす。最終読み出しオフセット６０８及び最終読み出しサイズ６１０は、リードセット６００に関連する読み出しストリームにおいて受信された最後のクライアント読み出し要求の処理に応答して、ファイルブロック番号６から始まる３つのデータブロック（すなわち、ｆｂｎ番号６、７及び８）を読み出すことが望ましい。その場合、最終読み出しオフセット６０８はｆｂｎ番号６に設定され、最終読み出しサイズ６１０は３データブロックに設定される。従って、将来のクライアント読み出し要求がファイルシステムに対し、ファイルブロック番号９から始まる論理的に連続したデータブロックの他のシーケンスの読み出しを要求するものである場合、そのクライアント読み出し要求は、リードセット６００に関連する読み出しストリームを「延長」する場合がある。
【００５５】
ネクスト先読み値６１２は、リードセット６００に関連する読み出しストリームに対し、ファイルシステム２６０が次の先読み処理のセットを実施する場所である所定のファイルオフセット又はメモリアドレスの指示を記憶する。具体的には、クライアント読み出し要求が、ネクスト先読み値６１２が示すファイルオフセット又はメモリアドレスを越えて読み出しストリームを延長するものである場合、ファイルシステムは、将来のクライアント読み出し要求を見越して、読み出しストリームを更に延長する先読みデータブロックのセットを更に推測的に読み出す場合がある。先読みサイズ値６１４は、プリフェッチされる先読みデータブロックの数を記憶する。先読みサイズ値６１４は、デフォルト先読み値４０８であってもよいし、あるいは、先読みアルゴリズムに従って決定されるものであってもよい。先読みデータブロックを読み出した後、ファイルシステム２６０は、その読み出しストリームに対して先読み処理が実施される場所であるネクストファイルオフセット又はメモリアドレスを示すようにネクスト先読み値６１２を更新する。先読みデータブロックを読み出した後、ファイルシステムは、それらをメモリ１５０における適当なコア内メモリバッファにコピーし、ファイルシステムはそのクライアント読み出し要求の処理を完了する。
【００５６】
各リードセットは、フィルシステム２６０がそのリードセットに関連する読み出しストリームに対して特殊な先読み処理を実施できるようにするための１以上のフラグ値６１６を含む場合がある。例えば、そうしたフラグ値の１つは、ファイルシステムがその読み出しストリームに対して推測的にデータブロックを読み出すべき「方向」を示すものである場合がある。すなわち、ファイルシステムは、論理的に「前進」方向（すなわち、データブロック番号が増大する方向）にデータブロックを読み出すように構成される場合もあれば、論理的に「後退」方向（すなわち、データブロック番号が減少する方向）にデータブロックを読み出すように構成される場合もある。他のフラグ値６１６は、先読みデータブロックが「一回読み出し」データを有している否か、すなわち、延長された時間の間メモリ１５０に記憶しておかなければならないか否かを示すものである場合がある。
【００５７】
Ｄ．リードセットに対するクライアント要求のマッチング
クライアント読み出し要求を受信すると、ファイルシステム２６０は、その要求が既存のリードセット６００に「一致」するものであるか否かを判定する。例示的な実施形態によれば、要求が少なくとも１つの所定の基準を満たす場合、その要求はリードセットに一致するものであると判定される。例えば、受信した要求が既に識別された読み出しストリームの「延長」を要求するものであるか否かを調べるために、第１の基準をテストする場合がある。延長を要求するものである場合、延長読み出しストリームに関連するそのリードセットは、「完全一致」であるものと判定される。受信した要求が既に識別された読み出しストリーム中で実施された最後の読み出しから所定の距離内に位置するデータの読み出しを要求するものであるか否かを調べるために、第２の基準をテストする場合がある。第２の基準を満たしている場合、読み出しストリームに関連するリードセットは、「曖昧一致」であるものとみなされる。クライアントが要求するファイル又はディレクトリに関連するリードセットのうちのいずれかが「空」（すなわち、未使用）であるか否か、すなわち、「空一致」であるか否かを判定するために、さらに第３の基準をテストする場合がある。一致するリードセット（完全、曖昧、又は、空）を見付けた後、オペレーティングシステムは、一致するリードセットに記憶された先読みメタデータに基づいて、先読み処理を実施する。
【００５８】
図７は、読み出しストリーム４３５を論理的に延長する例示的なクライアント読み出し要求７００を示している。具体的には、クライアント読み出し要求は、マルチプロトコル・ストレージ・アプライアンス１００において受信され、ストレージオペレーティングシステム２００により実施される統合ネットワークプロトコルスタックの１以上の層によって処理される。プロトコルエンジン２１８〜２３０のうちの１つのようなファイルシステムプロトコルエンジンは、受信したクライアント要求を、ファイルシステム２６０へ転送されるファイルシステムメッセージとしてフォーマットする。ファイルシステムメッセージは、ファイルシステムがクライアントの要求するデータを読み出すための種々の情報を含む。例えば、ファイルシステムメッセージは、とりわけ、ｉｎｏｄｅ番号の指示、ファイルオフセット、及び、読み出すべきデータの長さを含む場合がある。この例では、ファイルシステムメッセージがクライアント読み出し要求７００として実施され、その中に、ファイルオフセットや読み出すべきデータの長さがデータブロック単位で指定される。具体的には、読み出し要求７００は、とりわけ、ｉｎｏｄｅ番号７０２、開始データブロック７０４、及び、読み出すべきデータブロックの数７０６を含む。
【００５９】
説明のために、ｉｎｏｄｅ番号は１７、開始データブロック番号（例えばｆｂｎ）は１５、読み出すべきデータブロック数は２であるものと仮定する。従って、クライアント読み出し要求７００はファイルシステム２６０に対し、ｉｎｏｄｅ番号１７に関連するファイル又はディレクトリ内のファイルデータブロック１５及び１６を探すように命じる。ファイルシステムはまず、自分のコア内のメモリバッファにあるデータブロックを調べ、以前に処理されたクライアント要求の結果としてそれらのデータブロックが読み出されたか否かを判定する。データブロック１５及び１５のうちの一方又は両方がメモリバッファに存在しない場合、ファイルシステム２６０は、ストレージサブシステム２５０（例えば、ＲＡＩＤ層及びディスクドライバ層）と協働し、見付からなかったデータブロックをストレージディスク１６０から読み出す。その場合、ディスクから読み出したデータブロックは、例えばバッファプール１５６から得られる１以上のメモリバッファにコピーされる。
【００６０】
図７は、読み出しストリーム４３５に関連するリードセット６００の部分を示している。リードセットに記憶された値６０８及び６１０によって示されるように、読み出しストリーム４３５において処理された最後のクライアント読み出し要求の結果、ファイルシステムは、ファイルブロック番号１３から始まる論理的に連続した並びの２つのデータブロック（すなわち、ｆｂｎ番号１３と１４）を読み出している。クライアント読み出し要求７００における開始データブロック値７０４が、ファイルシステムに対してｆｂｎ番号１５及び１６の読み出しを命じるものであることから、ファイルシステムは、その要求が、読み出しストリーム４３５を論理的に延長するものであることを判断することができる。従って、読み出しストリーム４３５に関連するリードセット６００は、クライアント読み出し要求７００に対して完全一致であるものとみなされる。
【００６１】
ファイルシステムが、受信したファイルシステム読み出し要求７００に応答して、ファイルブロック番号１５及び１６（影付きデータブロックとして描かれている）を読み出すため、読み出しストリーム４３５は、ネクスト先読み値６１２によって指定されたｆｂｎ番号の開始点１６を超えて延長される。従って、ファイルシステム２６０は、読み出しストリーム４３５における次の論理データブロック（すなわち、ｆｂｎ番号１７）から開始して、先読みサイズ値６１４によって指定されるような５０個の先読みデータブロックを読み出す。読み出される先読みデータブロックの数は先読みサイズ値６１４を使用して決定することが好ましいが、先読みデータブロックの数は代わりに、ｉｎｏｄｅ番号１７に記憶されたデフォルト先読みサイズ４０６のような他の情報を使用して決定してもよい。
【００６２】
ファイルシステム２６０は、クライアントが要求するデータブロック１５及び１６を読み出すときと同じ又は同様のやり方で、先読みデータブロックを読み出す。すなわち、ファイルシステムはまず、コア内メモリバッファからの先読みデータブロックの読み出しを試行し、次に、コア内バッファに存在しない先読みデータブロックを、ストレージサブシステム２５０と協働して、ストレージディスク１６０から読み出す。ディスクから読み出されたクライアントの要求するデータブロックと同様に、先読みデータブロックも、コア内データバッファにコピーされる。ただし、先読みデータブロックの推測的性質から、すなわち、先読みデータブロックはクライアント１９０によって明示的に要求されたものではないので、先読みデータを保持するコア内メモリバッファは、クライアントから明示的に要求されたデータブロックを保持する時間に比べて短い時間しか先読みデータブロックをメモリ１５０に保持しないように構成される場合がある。
【００６３】
また、ファイルシステム２６０は、先読みデータブロックを読み出す際に、読み出しストリーム４３５に関連する他の情報にも依存する場合がある。例えば、読み出しストリーム４３５がネクスト先読み値６１２によって指定されたデータブロック番号又はメモリアドレスを超えて延長された場合でも、フラグ６１６の値は、先読みデータブロックの読み出しの省略をファイルシステムに伝える場合がある。この状況の場合、フラグ６１６の値は、クライアントの要求するファイル又はディレクトリに関連する読み出しアクセススタイル４０６が、そのファイル又はディレクトリが、例えばランダムアクセススタイルを使用してアクセスされていることを示すものであることを反映する場合がある。
【００６４】
ファイルブロック番号１５及び１６並びに対応する先読みデータブロックの読み出しに加えて、ファイルシステムは、読み出しストリーム４３５に関連するリードセット６００の内容の更新も行う。例えば、開始データブロック番号７０４に対応して、最終読み出しオフセット値６０８を変更する場合がある。同様に、読み出し要求７００において指定されたデータブロック数７０６に等しくなるように、最終読み出しサイズ値６１０を更新する場合がある。更に、例えば、読み出しストリーム４３５に関連する所定の先読みアルゴリズムに従って、先読み値６１２〜６１６を変更する場合がある。
【００６５】
図８は、リードセット６００が、受信したクライアント読み出し要求７００に対して完全一致するか否かを判定するための一連のステップを示している。シーケンスはステップ８００から開始され、ステップ８１０へ進み、そこで、クライアント読み出し要求がファイルシステム２６０によって受信される。ステップ８２０では、受信したクライアント要求において指定された開始データブロック７０４を、リードセット６００に記憶された最終読み出しオフセット６０８と最終読み出しサイズ６１０の合計と比較する。それらの値が等しいと判定された場合、シーケンスはステップ８４０へ進む。この場合、要求はリードセット６００に関連する読み出しストリームを論理的に延長するものであるから、ファイルシステムは、リードセット６００が、受信したクライアント読み出し要求７００に対して完全一致するものと判定する。ステップ８２０における判定が否であった場合、ステップ８３０において、リードセット６００は受信した要求７００に対して完全一致するものとは判定されない。後者の場合、完全一致が見付かるまで、又は、テストすべきリードセットがなくなるまで、クライアントの要求したファイル又はディレクトリに関連する他のリードセット６００について、ステップ８２０〜８４０が行われる。
【００６６】
図９は、読み出しストリーム４３５を論理的に延長するものではないが、代わりに、「ほぼ連続的」なクライアント読み出し要求に対応するクライアント読み出し要求９００の例を示している。すなわち、要求９００は、連続読み出し要求のように読み出しストリーム４３５を正確に延長しないが、ほぼ連続であるとみなせるくらいに読み出しストリームの延長に似ている。例示的な実施形態によれば、ファイルシステム２６０は、読み出しストリーム４３５において読み出された最後のデータブロック（すなわち、ファイルブロック番号１４）に対して前進方向と後退方向の両方に延びる「曖昧」範囲９１０を識別する場合がある。曖昧範囲９１０は、読み出し要求９００において指定された読み出すべき複数のブロック９０６に基づいて導出されることが望ましい。例えば図示のように、曖昧範囲９１０は、クライアントが要求するデータブロック数の３倍の数にわたって、前進方向と後退方向の両方に広がる場合がある。具体的には、要求９００では２つのデータブロックが要求されているので、曖昧範囲は後退方向に６データブロック（例えばファイブロック番号９〜１４）にわたって広がり、前進方向に６データブロック（例えばファイルブロック番号１５〜２０）にわたって広がる。
【００６７】
図示の実施形態は、読み出しストリーム４３５において読み出された最終データブロック（すなわち、ファイルブロック番号１４）を中心とした対称な曖昧範囲９１０になっているが、当然ながら、曖昧範囲は、最後に読み出されたデータブロックを中心として非対称な形であってもよいと考えられる。換言すれば、曖昧範囲９１０は通常、後退方向に第１の数のデータブロックだけ延び、前進方向に第２の数のデータブロックだけ延びる。例えば、クライアントが要求するデータブロック数９０６に他の乗算係数を使用して、前進方向と後退方向のそれぞれにおける曖昧範囲９１０の長さを導出してもよい。
【００６８】
図９に示すように、クライアント読み出し要求９００は、ｉｎｏｄｅ番号＝１７、開始データブロック番号＝１６、及び、読み出すべきデータブロック数＝２を指定する。このクライアント要求に応答して、ファイルシステム２６０は、ｉｎｏｄｅ番号１７に関連するファイル又はディレクトリにおいてｆｂｎ１６及び１７を探す。図７に関して説明したように、ファイルシステムはまず、コア内メモリバッファにおけるそれらのデータブロックの探索を試みる。次にファイルシステムはストレージサブシステム２５０（例えば、ＲＡＩＤ層及びディスクドライバ層）と協働し、コア内メモリバッファにおいて見付からなかったデータブロックをストレージディスク１６０から読み出す。
【００６９】
リードセット６００は、読み出しストリーム４３５において処理された最後の読み出し要求によって、ファイルシステム２６０が、ファイルブロック番号１３から始まる２つのデータブロック（例えば、ファイルブロック番号１３と１４）を読み出すことになることを示しているので、読み出されるｆｂｎ番号１６と１７は、読み出しストリーム４３５を延長しない。実際、ファイルブロック番号１５は、読み出しストリーム４３５において事実上「スキップ」される。従って、読み出し要求９００は、読み出しストリーム４３５に関連するリードセット６００に対して完全一致にはならない。ただし、要求９００において指定された開始ブロック番号１６は、図示の曖昧範囲９１０内にある。そのため、要求９００は、読み出しストリーム４３５に関連するリードセット６００に「曖昧」一致するものと判定され、次いでファイルシステム２６０は、そのクライアント読み出し要求を完全一致であったかのように処理する。
【００７０】
ファイルシステム２６０は、クライアント読み出し要求９００が、読み出しストリーム４３５に関連するリードセット６００に対して曖昧一致であるものと判定した場合、その要求をトリガとして読み出しストリームにおける先読み処理を開始するか否かを決定する。例えば、読み出されたデータブロック１６及び１７が、ネクスト先読み値６１２によって指定されたｆｂｎ番号１６を上回る場合、ファイルシステムは、たとえクライアント要求が曖昧一致であり、完全一致ではない場合であっても、読み出しストリーム４３５に対する先読み処理を実施する。ファイルシステムは、読み出しストリーム中の次の論理データブロック（すなわち、ファイルブロック番号１８）から開始して、先読みサイズ値６１４によって指定された数のデータブロックをプリフェッチする。読み出される先読みデータブロックの数は先読みサイズ値６１４によって決定されることが好ましいが、先読みデータブロックの数は、代わりに、ｉｎｏｄｅ番号１７に記憶されたデフォルト先読みサイズ４０６のような他の情報を使用して決定してもよい。
【００７１】
ファイルシステムは、ｆｂｎ番号１６及び１７に対応するデータブロック並びに対応する先読みデータブロックの読み出しの他に、読み出しストリーム４３５に関連するリードセット６００の内容の更新も行う。例えば、開始データブロック番号９０４に対応して、最終読み出しオフセット値６０８を更新する場合がある。同様に、読み出し要求９００において指定されたデータブロック数に等しくなるように、最終読み出しサイズ値６１０を更新する場合がある。更に、例えば、読み出しストリーム４３５に関連する所定の先読みアルゴリズムに従って、先読み値６１２〜６１６を更新する場合がある。
【００７２】
図１０は、リードセット６００が受信したクライアント読み出し要求９００に曖昧一致するか否かを判定するための一連のステップを示している。シーケンスはステップ１０００から開始され、ステップ１０１０へ進み、そこで、クライアント要求がファイルシステム２６０によって受信される。ステップ１０２０では、受信した読み出し要求における指定された開始データブロック９０４を、曖昧範囲９１０に含まれる所定範囲のブロック番号と比較する。この曖昧範囲は、読み出し要求９００において指定されたデータブロック数９０６の倍数として導出される場合がある。開始データブロック値が所定の曖昧範囲内にあるものと判定された場合、シーケンスはステップ１０４０へ進み、そこで、ファイルシステムは、受信したクライアント読み出し要求が曖昧一致であるものと判定する。そうでなければ、ステップ１０３０において、受信したクライアント読み出し要求は、リードセット６００に曖昧一致しないものと判定される。後者の場合、曖昧一致が見付かるか、又は、テストすべきリードセットが無くなるまで、クライアントの要求したファイル又はディレクトリに関連する他のリードセット６００に対し、ステップ１０２０〜１０４０が繰り返し実施される。
【００７３】
受信したクライアント読み出し要求が、クライアントの要求するデータに関連するリードセット６００に対して、完全一致でも曖昧一致でもない場合、ファイルシステム２６０は、受信した要求を新たな読み出しストリームに関連付ける。従って、ファイルシステム２６０は、その新たな読み出しストリームに関連するメタデータの記憶に使用可能な未使用の、すなわち「空き」のリードセット６００があるか否かをチェックする。この例の場合、リードセットのレベル値６０４が、リードセットが使用されていないことを示すマイナス１のような特殊な指示値に等しい場合、そのリードセットは空であるものと判断される。既に述べたように、レベル値６０４が特殊な指示値に設定されるのは、それが割り当てられたときだけである。リードセット６００が読み出しストリームメタデータの記憶に最初に使用された後、レベル値６０４はそれ以後、所定の上限値及び所定の下限値によって制限される。
【００７４】
図１１は、リードセット６００が空であるか否か、従って、リードセット６００が新たな読み出しストリームを開始する受信したクライアント要求に一致するか否かを判定するための一連のステップを示している。シーケンスはステップ１１００から始まり、ステップ１１１０へ進み、そこで、クライアント読み出し要求がファイルシステム２６０によって受信される。ステップ１１２０において、ファイルシステムは、リードセット６００に記憶されたレベル値６０４が特殊な指示値（例えば、−１）であるか否かを判定する。特殊な指示値であれば、シーケンスはステップ１１４０へ進み、そこで、ファイルシステムは、リードセット６００が空であるか否か、従って、リードセット６００が新たな読み出しストリームに関連するメタデータの記憶に使用可能であるか否かを判定する。その場合、リードセット６００に記憶されたメタデータは、そのカウント値６０６が１になるように増加させるといったように、クライアント読み出し要求に基づいて適切に更新される。ただし、ステップ１１２０において、リードセットにおけるレベル値６０４が特殊な指示値ではない場合、ステップ１１３０において、受信したクライアント読み出し要求は、リードセット６００に対して空一致であるものと判定される。後者の場合、空一致が見付かるまで、又は、テストすべきリードセットが無くなるまで、クライアントの要求するファイル又はディレクトリに関連する他のリードセット６００について、ステップ１１２０〜１１４０が繰り返し実施される。
【００７５】
Ｅ．リードセットの再使用
ファイルシステム２６０は、受信した読み出し要求に一致（すなわち、完全、曖昧、又は、空）するリードセットが見付からなかった場合に、要求されたファイルのリードセットのうちのいずれかが再使用できるか否かを判定するように構成される場合がある。具体的には、再使用されるリードセット６００におけるメタデータを上書きすることにより、受信した読み出し要求に関連する新たなメタデータのセットを記憶するように、そのリードセットを再構成する場合がある。一実施形態によれば、各リードセット６００に記憶されるレベル値６０４は、そのリードセットが再使用に適しているか否かを判定するためのエージング手段として使用される場合がある。具体的には、受信したクライアント要求がリードセット６００に完全一致又は曖昧一致する場合は常に、レベル値６０４がインクリメントされる。また、受信したクライアント要求がリードセット６００に対して空一致である場合は、レベル値６０４をレベル値の所定の初期レベル値に設定する。クライアント要求がリードセットに対して完全一致でも、曖昧一致でも、空一致でもない場合、ファイルシステムは、あるリードセットを再使用のために選択し、再使用のために選択されていないあらゆるリードセットにおけるレベル値６０４をデクリメントする場合がある。既存のリードセットの過剰な「スラッシング」を防止するために、リードセット再使用ポリシーを使用してもよい。再使用ポリシーによれば、リードセットの内容が時期尚早に上書きされることが防止される。
【００７６】
図示の実施形態に関連し、ファイルシステム２６０は、リードセット６００が次の条件のうちのいずれかを満たした場合に、そのリードセットを再使用すべきものとして選択する。(i)リードセットが、クライアントの要求するファイル又はディレクトリに関連する全てリードセットの中で最小レベルの値６０４を記憶している場合、又は、(ii)リードセットが、クライアントの要求するファイル又はディレクトリに関連する最も最近アクセスされたリードセットであり、そのリードセットが１に等しいカウント値６０６を記憶している場合。ファイルシステムは、リードセット６００がそれらの条件のうちのいずれかを満たしていることを識別すると、そのリードセットを再使用し、それによってそのリードセットの内容を上書きし、受信したクライアント読み出し要求を開始する新たな読み出しストリームに関連するメタデータが記憶されるようにする。例えば、再使用されるリードセットのカウント値６０６はゼロで上書きされ、そのリードセットのレベル値６０４は、所定の上限レベル値（例えば、２０）と所定の下限レベル値（例えば、ゼロ）の間の所定の初期値（例えば、１０）で上書きされる場合がある。
【００７７】
図１２Ａ〜図１２Ｂは、ｉｎｏｄｅ４００の例、及び、そのｉｎｏｄｅに割り当てられたリードセット６００ａ、６００ｂ及び６００ｃを示す略ブロック図である。説明のために、リードセット６００ａ及び６００ｃは当初、読み出しストリームＡとＣのそれぞれについて、レベル値６０４のようなメタデータ、及び、カウント値６０６を記憶しているものとする。また、リードセット６０６ｂは、まず、そのレベル値６０４がゼロに設定されてから「時間が経っている」ものとする。従って、リードセット６００ｂに記憶されたメタデータは、少なくとも所定数のクライアント要求（例えば１０個の要求）の結果、ファイルシステム２６０が他のリードセット６００ａ又は６００ｃを再使用した後、新たなクライアント読み出し要求を何も受信していない読み出しストリームに対応する。図示の実施形態の場合、最も最近アクセスされたリードセット、例えばリードセット６００ａは、ｉｎｏｄｅ４００に最も近い位置にある。
【００７８】
ステップ(i)において、ファイルシステムは、ｉｎｏｄｅ４００に関連するファイル又はディレクトリに格納されたデータを求めるクライアント読み出し要求を受信し、ファイルシステムは、受信した要求が、読み出しストリームＡに関連するリードセット６００ａに対して完全一致であるか、又は、曖昧一致であるかを判定する。それに応じて、ファイルシステムは、リードセット６００ａにおけるカウント値６０６をインクリメントし、更に、リードセット６００ａにおけるレベル値６０４のインクリメントを試みる。ただし、リードセット６００ａのレベル値６０４は、所定の上限値（例えば、２０）に等しいので、このレベル値は、それ以上インクリメントされない。受信したクライアント要求がリードセット６００ａに関連する読み出しストリームに一致したので、リードセット６００ｂ及び６００ｃにおけるレベル値６０４及びカウント値６０６は変更されることなく維持される。なお、図示の実施形態におけるファイルシステムは、レベル値６０４のインクリメントやデクリメントを１づつ試行しているが、本発明の他の実施形態では、他のインクリメントステップサイズ又はデクリメントステップサイズを使用して、レベル値をインクリメント又はデクリメントする場合もある。
【００７９】
ステップ(ii)において、ファイルシステムは、ｉｎｏｄｅ４００に関連するファイル又はディレクトリにおいて、新たな読み出しストリームＢに関連するクライアント読み出し要求を受信する。この場合、受信する要求は、リードセット６００ａ〜ｃのうちのいずれかに完全一致するものでも、曖昧一致するものでもない。また、図示のリードセット６００ａ〜ｃの中には、マイナス１に等しいレベル値６０４（すなわち、図示の実施形態における空のリードセットの特殊な指示値）を記憶しているものがないので、受信した要求は更に、リードセット６００ａ〜ｃのいずれかに空一致することもない。要求がリードセット６００のいずれにも一致しないので、ファイルシステム２６０は、リードセット再使用ポリシーを使用して、内容を上書きして新たに識別された読み出しストリームＡ及びＢに関するメタデータを記憶してもよいリードセットを探す。
【００８０】
ファイルシステムはまず、最も最近アクセスされたリードセット６００ａにおけるカウント値６０６が１に等しいか否かを判定する。この場合、リードセット６０６ａにおけるカウント値は１ではなく１３である。次にファイルシステムは、どのリードセット６００ａ〜ｃが最小レベル値６０４を記憶しているか、すなわち、他のリードセットに記憶されたレベル値以下のレベル値を有するリードセットを判定する。リードセット６００ｂに記憶されたレベル値６０４が、リードセット６００ａ〜ｃの中で最小であるから、リードセット６００ｂが再使用のために選択される。従って、リードセット６００ｂにおけるレベル値６０４は、所定の初期レベル値（例えば、１０）に初期化され、そのカウント値６０６は１に等しくなるように上書きされる。更に、リードセット６００ｂにおけるメタデータが、新たな読み出しストリームＢに対応するように更新される。ファイルシステムは、残りのリードセット６００ａ及び６００ｃに記憶されたレベル値６０４をデクリメントし、リードセット６００ｂをｉｎｏｄｅ４００に関連するリードセットの連結リストの先頭に移動させることにより、そのリードセット６００ｂが現在、リスト上にある最も最近アクセスされたリードセットであることを示す。
【００８１】
ステップ(iii)において、ファイルシステムは、ｉｎｏｄｅ４００に関連するファイル又はディレクトリにおいて、新たな読み出しストリームＤに関連するクライアント読み出し要求を受信する。受信した要求は、リードセット６００ａ〜ｃのうちのいずれにも一致（完全、曖昧、又は、空）しないので、ファイルシステムは、その新たな読み出しストリームＤのために再使用可能なリードセットを探す。ファイルシステムはまず、最も最近アクセスされたリードセット６００ｂにおけるカウント値が１に等しいか否かを判定する。最も最近アクセスされたリードセット６００ｂが１に等しいカウント値を記憶しているので、ファイルシステムは、そのリードセット６００ｂを再使用のために再び選択する。従って、リードセット６００ｂにおけるレベル値６０４は、所定の初期レベル値（例えば、１０）に設定され、そのカウント値６０６は１に等しくなるように設定される。この場合、リードセット６００ｂにおけるメタデータは、新たな読み出しストリームＤに対応するように更新される。次にファイルシステムは、残りのリードセット６００ａ及び６００ｃに記憶されたレベル値６０４をデクリメントする。リードセット６００ｂは既にｉｎｏｄｅ４００に関連するリードセットの連結リストの先頭にあるので、リスト上のリードセットの順番は変更されずに維持される。
【００８２】
ステップ(iv)において、ファイルシステムは、ｉｎｏｄｅ４００に関連するファイル又はディレクトリに格納されたデータを求めるクライアント読み出し要求を受信し、ファイルシステムは、その受信した要求が、読み出しストリームＣに関連するリードセット６００ｃに完全一致又は曖昧一致するか否かを判定する。リードセット６００ｃにおけるレベル値６０４は所定の初期レベル値（例えば、１０）よりも小さいので、リードセット６００ｃにおけるレベル値６０４は初期レベル値に等しくなるように設定される。更に、リードセット６００ｃにおけるカウント値６０６がインクリメントされ、リードセット６００ｃがリードセットリストの先頭に移動され、そのリードセット６００ｃがｉｎｏｄｅ４００に関連する最も最近アクセスされたリードセットであることが示される。一致しないリードセット６００ａ及び６００ｂにおけるレベル値６０４及びカウント６０６は変更されずに維持される。
【００８３】
最後にステップ(v)において、ファイルシステムは、ｉｎｏｄｅ４００に関連するファイル又はディレクトリにおいて、新たな読み出しストリームＥに関連するクライアント読み出し要求を受信する。この場合も、受信したクライアント要求は、リードセット６００ａ〜ｃのうちのいずれにも一致（完全、曖昧、又は、空）しないので、ファイルシステムは、その新たな読み出しストリームＥに関するメタデータを記憶するために再使用可能なリードセットを探す。ファイルシステムはまず、最も最近アクセスされたリードセット６００ｃにおけるカウント値６０６が１に等しいか否かを判定する。図示のように、リードセット６００ｃにおけるカウント値は３であるから、次にファイルシステムは、リードセット６００ａ〜ｃのうちのいずれが最小レベル値６０４を記憶しているかを判定する。この場合、リードセット６００ｃと６００ｂが両方とも１０に等しい最小レベル値６０４を記憶している。例えば、ファイルシステムは、リードセット６００ｃが最も最近アクセスされたリードセットであるため、リードセット６００ｃを再使用のために選択することができる。ただし、他の実施形態では、２以上のリードセットがそれぞれ最小レベル値を記憶している場合、他の基準を使用する場合がある。リードセット６００ｃにおけるメタデータは、新たな読み出しストリームＥに対応するように更新される。リードセット６００ｃは既にリードセットのリスト上の先頭に位置しているので、ファイルシステムは、リードセット６００ｃを移動させる必要はない。リードセット６００ｃにおけるレベル値６０４は、所定の初期レベル値に等しくなるよう設定され、そのカウント値６０６は１に等しくなるよう設定される。残りのリードセット６００ａ及び６００ｂにおけるレベル値６０４は適宜デクリメントされる。
【００８４】
図１３Ａ〜図１３Ｂは、フィルシステム２６０がクライアント読み出し要求を受信したときに実施される一連のステップを含むフロー図である。ここで、受信したクライアント読み出し要求は、少なくとも１つのリードセットに関連するファイル又はディレクトリに含まれるデータセットを指定するものと仮定する。ただし、クライアントの要求するデータがゼロリードセットに関連するファイル又はディレクトリに格納されている場合、例えば、ファイルサイズが小さすぎて読み出しストリームを形成することができない場合、ファイルシステム２６０は、受信したクライアント読み出し要求を、例えば従来の先読み技術を使用して、従来のやり方で処理する。
【００８５】
シーケンスはステップ１３００から開始され、ステップ１３０５へ進み、そこで、ファイルシステムはクライアント読み出し要求を受信する。ただし、受信したクライアント要求が既にデータブロック単位にフォーマットされている場合、ファイルシステムは、例えば開始データブロックと、読み出すべき連続したデータブロックとを指定することにより、その要求をデータブロック単位に再フォーマットする場合がある。また、受信した要求がファイルシステム２６０に対し、新たに（すなわち、最近）作成されたファイル又はディレクトリに記憶されたデータの読み出しを命じるものである場合、ファイルシステムは、そのファイル又はディレクトリに対して新たなｉｎｏｄｅを割り当てなければならない場合がある。さらに、ファイルシステムは、新たに割り当てられたｉｎｏｄｅに対し、ゼロ以上のリードセットを割り当てる場合がある。このリードセットの数は、クライアントが要求するファイル又はディレクトリのサイズに応じて決まる。例えば、新たなｉｎｏｄｅはｉｎｏｄｅプール１５２から得られ、それに対応するリードセットのセットはリードセットプール１５４から得られる場合がある。
【００８６】
ステップ１３１０において、ファイルシステムは、受信した要求が、クライアントが要求したファイル又はディレクトリに関連するリードセット６００に対して完全一致、曖昧一致、又は、空一致するか否かを判定する。一致するリードセットが見付かると、ステップ１３１５においてファイルシステム２６０は、一致するリードセットに記憶されたカウント値をインクリメントする。次に、ステップ１３２０においてファイルシステムは、その一致するリードセットに記憶されたレベル値６０４が所定の上限値（すなわち、最大値）に等しいか否かを判定する。上限値に等しい場合、シーケンスはステップ１３５５へ進み、一致するリードセットに記憶されたレベル値６０４を変更せずにそのまま維持する。そうでなければ、ステップ１３２５においてファイルシステムは、そのレベル値６０４が所定の初期レベル値（例えば、１０）未満であるか否かを判定する。未満であれば、ステップ１３３０においてレベル値６０４は所定の初期値に設定され、シーケンスはステップ１３６０へ進む。ステップ１３２５においてレベル値６０４が初期レベル値以上であると判定された場合、次にステップ１３３５において、一致するリードセットにおけるレベル値６０４が、例えば１だけインクリメントされる。そしてシーケンスは、以下で説明するようなステップ１３６０へ進む。
【００８７】
ステップ１３１０において、受信したクライアント要求がいずれのリードセットにも一致しなかった場合、ステップ１３４０〜１３５５に記載したように、ファイルシステム２６０は、クライアントが要求したファイル又はディレクトリに関連するリードセットの中から再使用可能なものを探す。具体的には、ステップ１３４０において、ファイルシステムは、リードセットの連結リストの例えば先頭に位置している最も最近アクセスされたリードセットが、１に等しいカウント値を記憶しているか否かを判定する。記憶している場合、その最も最近アクセスされたリードセットが、再使用のために選択される。一方、最も最近アクセスされたリードセット６００におけるカウント値６０６が１に等しくなかった場合は、ステップ１３４５において、最小レベル値６０４を記憶しているリードセットが、再使用のために選択される。最小レベル値６０４が２以上のリードセットに記憶され、それらのリードセットのうちの１つが最も最近アクセスされたリードセットであった場合、その最も最近アクセスされたリードセットが、再使用のために選択される。そうでなければ、ファイルシステムは、最小レベル値を記憶している複数のリードセットの中から、任意の１つを単純に選択する。
【００８８】
次に、ステップ１３５０において、再使用のために選択されたリードセット６００に記憶されたレベル値６０４を所定の初期レベル値に等しくなるよう設定し、そのリードセットのカウント値６０６を１に等しくなるよう設定する。ステップ１３５５において、ファイルシステムは、再使用のために選択されなかったリードセット、すなわち、受信したクライアント要求に一致しなかったリードセットに記憶された全ての非ゼロのレベル値６０４をデクリメントする。ステップ１３６０において、ファイルシステムは、必要であれば、最も最近アクセスされたリードセット（すなわち、一致する、すなわち再使用されるリードセット）を、クライアントが要求したファイル又はディレクトリに関連するリードセットのリストの先頭に移動させる。
【００８９】
ステップ１３６５において、ファイルシステムは、一致する、すなわち再使用されるリードセットにおける最終読み出しオフセット値６０８、最終読み出しサイズ値６１０、ネクスト先読み値６１２等のリードヘッド情報を更新する。ステップ１３７０において、ファイルシステムは、クライアントが要求するデータを有するデータブロック３２０を読み出す。また、受信したクライアント読み出し要求が既存の読み出しストリームに対して完全一致又は曖昧一致し、その要求が、例えば一致するリードセット６００に記憶された先読みサイズ６１４によって指定されるような所定のファイルオフセット又はメモリアドレスを越えて既存の読み出しストリームを延長するものである場合、ファイルシステムは、１以上の先読みデータブロックを更に読み出す場合がある。読み出される先読みデータブロックの数は、一致するリードセット６００に記憶される先読みサイズ６１４によって指定することができる。ファイルシステムはまず、メモリ１５０に記憶された１以上のコア内メモリバッファにおいてクライアントが要求するデータブロック及び先読みデータブロックを探す。ただし、それらのデータブロックがメモリバッファ中に見付からない場合、ファイルシステムはストレージサブシステム２５０と協働し、それらのデータブロックをストレージディスク１６０から読み出し、読み出したブロックを例えばバッファプール１５６から取得した１以上のコア内メモリバッファにコピーする。そして、クライアントの要求したデータは、ストレージオペレーティングシステム２００によってパケット化され、要求元クライアント１９０へ返される。シーケンスは１３７５にて終了する。
【００９０】
Ｄ．むすび
上記が、本発明の例示的実施形態に関する詳細な説明である。本発明の思想及び範囲から外れることなく、種々の変更をや追加を行うことが可能である。例えば、ファイルシステム２６０は、クライアント読み出し要求を受信したときに、クライアントが要求するファイル又はディレクトリに関連するリードセットの連結リスト（又は、他の検索可能なデータ構造）の中を１以上の回数だけ「走査」し、それらのリードセットの中に、受信した要求に完全一致、曖昧一致、又は、空一致するものがあるか否かを判定するように構成してもよい。例えば、ファイルシステムは、リストを一回だけ走査することにより、完全一致、曖昧一致、又は、空一致するリードセットが見付かるまで、リスト内の各リードセットを順番にテストしてもよい。この実施形態の場合、ファイルシステムが、リードセットが完全一致、曖昧一致、又は、空一致するか否かに関するテストを行う順序は、様々であってよい。代替実施形態では、リードセットのリスト全体にわたって個別の走査を実施し、完全一致するリードセットと、曖昧一致するリードセットと、空一致するリードセットとを個別に探してもよい。
【００９１】
例示したｉｎｏｄｅ４００に関連するリードセットのリストは、最も最近アクセスされたリードセットがリストの「先頭」にくるように構成されているが、フィルシステムは、代わりに、最も最近アクセスされたリードセットを別の方法で探すように構成してもよい。例えば、リードセットがリスト上で最も最近アクセスされたリードセットである場合に第１の値を有し、それ以外の場合に第２の値を有するフラグ６１６を各リードセット６００に含めてもよい。また、ファイルシステム２６０は、あらゆるクライアント読み出し要求が処理された後に、レベル値６０４をインクリメント又はデクリメントすることにより、リードセットを老化させているが、当然ながら、レベル値６０４は所定の時間間隔の後に適宜老化させてもよい。このシナリオの場合、レベル値６０４は、処理されたクライアント要求の数に対する相対年齢ではなく、時間に対するリードセットの相対年齢を示すものであってもよい。
【００９２】
上記のように、例示したファイルやディレクトリは、ゼロ以上の読み出しストリームを確立することが可能な任意のデータセットとして広く定義される。従って、この文脈におけるファイルは、ブロックベースのクライアント１９０ｂに対して単一の論理ユニット番号（ＬＵＮ）としてエキスポートすることが可能な所定のデータブロックのセットに対応する「仮想ディスク」（ｖｄｉｓｋ）として実施される場合がある。ただし、仮想ディスクにおけるデータブロックは、マルチプロトコル・ストレージ・アプライアンス１００内部のファイルベースのセマンティックを使用してアクセスされる場合もある。従って、ブロックベースのクライアントは、ＦＣＰやｉＳＣＳＩプロトコルのような従来のブロックベースのプロトコルに従って自分の要求をフォーマットすることができ、それらの要求は、ストレージオペレーティングシステム２００によって実施される仮想化システムにより、ファイルベースのセマンティックを使用して処理される。
【００９３】
図示の実施形態は、例えば読み出しストリーム４３０及び４３５のように、「前方」方向（すなわち、データブロック番号が増大する方向）に延びる読み出しストリームを示しているが、当業者には明らかなように、本明細書に記載した本発明の概念は、「後退」方向（すなわち、データブロック番号が減少する方向）に延びる読み出しストリームにも等しく適用可能である。その目的のために、各リードセットにおけるフラグ６１６は、そのリードセットに関連する読み出しストリームが前方方向に延びていることを示す第１の値に等しくなるよう設定されるか、又は、そのリードセットに関連するリードストリームが後退方向に延びていることを示す第２の値に等しくなるよう設定される。それに従ってファイルシステムは、読み出しストリームに対する先読みデータブロックを、読み出しストリームが延びている方向、例えば、適当なフラグ６１６によって指定されるような方向に読み出す。
【００９４】
本明細書の説明は、マルチプロトコル・ストレージ・アプライアンスを参照して書かれているが、その原理は、ブロックベースのストレージシステム（ストレージ・エリア・ネットワーク等）、ファイルベースのストレージシステム（ネットワーク・アタッチド・ストレージ・システム等）、両方のタイプのストレージシステムの組み合わせ（マルチプロトコル・ストレージ・アプライアンス等）、又は他の形態のコンピュータシステムとして構成されるものを含めて、あらゆるタイプのコンピュータに等しく適用される。また、当然ながら、本発明の教示は、コンピュータ上で実行されるプログラム命令を含むコンピュータ読取可能媒体を含めて、ソフトウェア、ハードウェア、ファームウェア、又は、それらの組み合わせのいずれの形でも実施できるものと考えられる。更に、当業者には分かるように、本明細書に記載する教示は、特定のオペレーティングシステム（ＯＳ）実施形態に限定されることなく、種々のＯＳプラットフォームによって実施することができる。従って、本明細書の説明は、単なる例として解釈すべきものであり、本発明の範囲を制限するものではない。
【図面の簡単な説明】
【００９５】
【図１】本発明に従って使用可能なマルチプロトコル・ストレージ・アプライアンスの例を示す略ブロック図である。
【図２】本発明とともに有利に使用されるストレージオペレーティングシステムの例を示す略ブロック図である。
【図３】例示的なマルチプロトコル・ストレージ・アプライアンスにおいてファイル又はディレクトリに関連付けられるバッファツリーの例を示す略ブロック図である。
【図４】ｉｎｏｄｅに関連するファイル又はディレクトリに確立される読み出しストリームのための先読みメタデータの記憶に使用されるリードセットデータ構造のセットの例を示す略ブロック図である。
【図５】ファイルやディレクトリのサイズに基づいてファイルやディレクトリに割り当てられるリードセットの数を決めるために使用される表の例を示す略ブロック図である。
【図６】本発明に従って有利に使用されるリードセットの例を示す略ブロック図である。
【図７】既存の読み出しストリームに関連するリードセットに対して「完全一致」するものと判定された受信したクライアント要求を示す略ブロック図である。
【図８】受信したクライアント要求が既存の読み出しストリームに関連するリードセットに対して完全一致するか否かを判定するために実施される一連のステップを示すフロー図である。
【図９】既存の読み出しストリームに関連するリードセットに対して「曖昧一致」であるものと判定された受信したクライアント要求を示す略ブロック図である。
【図１０】受信したクライアント要求が既存の読み出しストリームに関連するリードセットに対して曖昧一致するか否かを判定するために実施される一連のステップを示すフロー図である。
【図１１】既存の読み出しストリームに関連するリードセットに対して「空一致」であるものと判定された受信したクライアント要求を示す略ブロック図である。
【図１２Ａ】クライアント読み出し要求を処理する際に使用される例示的な老化手段、及び、再使用ポリシーを示す略ブロック図である。
【図１２Ｂ】クライアント読み出し要求を処理する際に使用される例示的な老化手段、及び、再使用ポリシーを示す略ブロック図である。
【図１３Ａ】図示のマルチプロトコル・ストレージ・アプライアンスにおいて受信したクライアント読み出し要求を処理するために実施される一連のステップを示すフロー図である。
【図１３Ｂ】図示のマルチプロトコル・ストレージ・アプライアンスにおいて受信したクライアント読み出し要求を処理するために実施される一連のステップを示すフロー図である。
【図１】
2007519088.tif 000003
【図２】
2007519088.tif 000004
【図３】
2007519088.tif 000005
【図４】
2007519088.tif 000006
【図５】
2007519088.tif 000007
【図６】
2007519088.tif 000008
【図７】
2007519088.tif 000009
【図８】
2007519088.tif 000010
【図９】
2007519088.tif 000011
【図１０】
2007519088.tif 000012
【図１１】
2007519088.tif 000013
【図１２Ａ】
2007519088.tif 000014
【図１２Ｂ】
2007519088.tif 000015
【図１３Ａ】
2007519088.tif 000016
【図１３Ｂ】
2007519088.tif 000017
【国際調査報告】
2007519088.tif 000018
2007519088.tif 000019
2007519088.tif 000020