JP4494420B2 - 複数ファクタに基づく適応ファイル先読み - Google Patents

複数ファクタに基づく適応ファイル先読み Download PDF

Info

Publication number
JP4494420B2
JP4494420B2 JP2006549366A JP2006549366A JP4494420B2 JP 4494420 B2 JP4494420 B2 JP 4494420B2 JP 2006549366 A JP2006549366 A JP 2006549366A JP 2006549366 A JP2006549366 A JP 2006549366A JP 4494420 B2 JP4494420 B2 JP 4494420B2
Authority
JP
Japan
Prior art keywords
read
data
client
amount
file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2006549366A
Other languages
English (en)
Other versions
JP2007520812A (ja
Inventor
フェアー,ロバート,エル
Original Assignee
ネットアップ,インコーポレイテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ネットアップ,インコーポレイテッド filed Critical ネットアップ,インコーポレイテッド
Publication of JP2007520812A publication Critical patent/JP2007520812A/ja
Application granted granted Critical
Publication of JP4494420B2 publication Critical patent/JP4494420B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/172Caching, prefetching or hoarding of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]

Description

発明の分野
本発明はストレージシステムに関し、特に、ストレージシステムにおいて複数の読み出しストリームに対してそのファイル先読み処理を適宜調節する技術に関する。
発明の背景
「ストレージシステム」とは、ディスクのようなストレージデバイス上での情報の編成に関するストレージサービスを提供するコンピュータである。ストレージシステムは、情報をディスク上に記憶されるデータブロックのセットとして論理編成するためのストレージシステムを有する。従来のストレージ・エリア・ネットワーク(SAN)のようなブロックベースのデプロイメントでは、ストレージシステムにおいてデータブロックが直接アドレス指定される場合がある。しかしながら、ネットワーク・アタッチド・ストレージ(NAS)環境のようなファイルベースのデプロイメントでは、オペレーティングシステムは「ファイルシステム」を実施し、データブロックをアドレス指定可能なファイルやディレクトリの階層構造としてディスク上に論理編成する。この文脈において、ディレクトリは、他のファイルやディレクトリに関する情報を記憶する特殊な形式のファイルとして実施される場合がある。
ストレージシステムはクライアント/サーバモデルの情報配送に従って動作するように構成され、それによって、多数のクライアントシステム(クライアント)が、ストレージシステムに記憶されたファイルのような共有リソースにアクセスすることができる。ストレージシステムは通常、地理的に分散されたイーサネット(R)リンクのような相互接続通信リンクの集まりからなるコンピュータネットワーク上に配置され、クライアントは、遠隔からストレージシステム上の共有情報(例えば、ファイル)にアクセスすることができる。クライアントは通常、トランスミッション・コントロール・プロトコル/インターネット・プロトコル(TCP/IP)のような所定のネットワーク通信プロトコルに従ってフォーマットされた個々のデータフレーム又はデータパケットをやりとりすることにより、ストレージシステムと通信する。この文脈において、「プロトコル」は、相互接続されたコンピュータが互いに交信する方法を規定する一連のルールから構成される。
ファイルベースのデプロイメントでは、クライアントは、セマンティックレベルのアクセスを使用して、ストレージシステム上に記憶されたファイルやファイルシステムにアクセスする。例えば、クライアントは、ストレージシステム上に記憶された特定ファイルに対する情報のリード(「読み出し」)又はライト(「書き込み」)を要求する場合がある。クライアントは通常、コモン・インターネット・ファイル・システム(CIFS)プロトコル、ネットワーク・ファイル・システム(NFS)プロトコルやダイレクト・アクセス・ファイル・システム(DAFS)プロトコルのような従来のファイルベースのアクセスプロトコルに従ってフォーマットされたファイルシステム・プロトコル・メッセージ(パケットの形をしている)を発行することにより、ファイルベースのストレージシステムにサービスを要求する。クライアント要求は、要求するデータがディスク上に記憶されている具体的な場所、例えばデータブロックとは無関係に、アクセスすべき1以上のファイルを指定する。ストレージシステムは、受信したクライアント要求をファイルシステムセマンティックからストレージディスク上のデータブロックの対応範囲に変換する。クライアント「リード」要求の場合、クライアントの要求したデータを含むデータブロックが読み出され、要求されたデータはクライアントへ返される。
ブロックベースのデプロイメントでは、クライアント要求は、ストレージシステムにおける特定のデータブロックを直接アドレス指定することができる。ブロックベースのストレージシステムの中には、自分が有するデータブロックをデータベースの形に編成するものもあれば、自分が有するデータブロックをファイル指向構造として内部的に記憶するものもある。データはファイルとして編成されるが、クライアント要求情報は、独自のファイルマッピングを維持し、ファイルセマンティックを管理すると共に、ストレージシステムに対するクライアントの要求(及び、対応する応答)は、要求する情報をディスク上のブロックアドレスとしてアドレス指定する。このように、ブロックベースのストレージシステムにおけるストレージバスは、遠くのクライアントシステムにまで延びているように見える場合がある。この「拡張バス」は通常、FC(FCP)又はTCP/IP/イーサネット(R)上にカプセル化されたスモール・コンピュータ・システム・インタフェース(SCSI)プロトコル(iSCSI)のようなブロックベースのアクセスプロトコルを使用して動作するように構成されたファイバ・チャネル(FC)またはイーサネット(R)媒体として実施される。
ブロックベースのシステムにおける各ストレージデバイスには通常、一意に定められた論理ユニット番号が割り当てられ、遠隔のクライアントは、論理ユニット番号を使用して各ストレージデバイスをアドレス指定することができる。すなわち、「イニシエータ」クライアントシステムは、「ターゲット」LUNに記憶された特定範囲のデータブロックのデータ転送を要求することができる。例えば、クライアント要求は、ターゲット・ストレージデバイスにおける開始データブロックと、そのクライアント要求に従って記憶又は読み出しされる連続したブロックの数とを指定する場合がある。例えば、クライアント「リード」要求の場合、要求された範囲のデータブロックが読み出され、それらが要求元のクライアントに返される。
一般に、ファイルシステムは、「ディスク上」のデータブロック、例えば、dbnアドレス空間において割り当てられた個々のディスクブロック番号(dbn)に直接アクセスはしない。代わりに、ディスク上に記憶されたデータブロック、例えばdbnアドレス空間におけるデータブロックと、ファイルシステムによって編成された同じデータブロック、例えばボリュームブロック番号(vbn)空間における同じデータブロックとの間には、一対一のマッピングが存在する。例えば、ファイルシステム内において、N個のディスク上のデータブロックは、各データブロックにゼロからN−1までの間の一意に定められたvbnを割り当てることによって管理される場合がある。さらに、ファイルシステムは、ファイルシステムによって管理されるファイルやディレクトリに、データブロックのセット(すなわち、vbn)を関連付ける場合がある。この場合、ファイルシステムは、そのファイル又はディレクトリ内の各データブロックに、対応する「ファイルオフセット」又はファイルブロック番号(fbn)を属性として与える場合がある。例えば、ファイル又はディレクトリにおけるファイルオフセットは、固定サイズのデータブロック、例えば、4キロバイト(kB)ブロックを単位として測定され、従って、そのファイル又はディレクトリにおけるfbn番号に一対一にマッピングすることができる。したがって、各ファイル又はディレクトリは、ファイルシステムにおいて連続した番号のfbnが割り当てられた一連のデータブロックとして定義され、その場合、例えば、各ファイル又はディレクトリ内の最初のデータブロックには、ゼロのような所定の開始fbn番号が割り当てられる。なお、ファイルシステムは、ファイルごとに一連のfbn番号を割り当てる一方、ファイルシステムは通常、より広いボリュームアドレス空間全体にわたってvbn番号を割り当てる。
「読み出しストリーム」は、要求ファイル内の論理的に連続した範囲のファイルオフセットからのデータの読み出しをストレージシステムに命じるための1以上のクライアント要求のセットとして定義される。換言すれば、読み出しストリームの最初の要求が受信された後、その読み出しストリーム内の後続のクライアント要求は全て、そのストリームの前回の要求によってアクセスされたファイル内の連続した一連のファイルオフセットを論理的に「拡張」する。したがって、読み出しストリームは、連続した番号のfbnが割り当てられた一連のデータブロックの読み出しをストレージシステムに命じるための一連のクライアント要求として、ストレージシステムによって構文解釈される場合がある。例えば、読み出しストリーム中の最初の要求は、fbn10〜19が割り当てられたデータブロックの第1のセットを読み出し、読み出しストリーム中の第2の要求は、fbn20〜25が割り当てられたデータブロックの第2のセットを読み出し、読み出しストリーム中の第3の要求は、fbn26〜42が割り当てられたデータブロックの第3のセットを読み出す場合がある等である。なお、読み出しストリーム中のクライアント要求は、読み出しストリームの論理的に連続した範囲のファイルオフセットからのデータの読み出しをストレージシステムに明示するものであればよく、ファイルベースのセマンティックを使用する場合もあれば、ブロックベースのセマンティックを使用する場合もある。
動作上、ストレージシステムは通常、同じファイルに対する順番に並んだ一連のクライアントアクセスに基づいて、読み出しストリームを識別する。以下で使用されるように、「ファイル」という用語は、ゼロ以上の読み出しストリームを確立することが可能な任意のデータセットとして広く解釈される。したがって、ファイルは、ファイルベースのストレージシステムに記憶されたファイル又はディレクトリであってもよい。従来、ストレージシステムは、一度に1つのファイルしかモニタリングすることができない。その目的のために、ストレージシステムは、クライアントが現在要求しているファイルデータのために、ストレージシステムが、そのファイル内にすでに確立されている読み出しストリームを論理的に拡張するデータブロックのセットを読み出す必要があるか否かを判定する。必要である場合、そのクライアント要求は読み出しストリームに関連付けられ、読み出しストリームは、読み出されたデータブロックの数だけ拡張される場合がある。
読み出しストリームを識別すると、ストレージシステムは推測的「先読み」処理を使用して、将来のクライアント読み出し要求によって要求される可能性があるデータブロックを読み出す。これらの「先読み」ブロックは通常ディスクから読み出され、ストレージシステムのメモリ(すなわち、バッファキャッシュ)に記憶され、その際、各先読みデータブロックは異なるファイルシステムvbnに関連付けられる。従来の先読みアルゴリズムはしばしば、読み出しストリームを論理的に拡張する所定数のデータブロックを「プリフェッチ」するように構成される。例えば、読み出しストリームが、連続的な番号のfbnが割り当てられた一連のデータブロックを読み出すためのクライアント読み出し要求を含む場合、ファイルシステムは、その読み出しストリーム内のクライアント要求によって先読みブロックがまだ要求されていない場合であっても先読み処理を実施し、その読み出しシーケンスをさらに拡張するfbnが割り当てられたデータブロックを更に読み出す場合がある。
通常、或るファイルの読み出しストリームが、ファイルオフセット又はメモリアドレスの所定のセットのうちの1つに到達すると常に、それを「トリガ」として先読み処理が実施される。例えば、ファイルオフセットの所定のセットが、ファイル内の32番目ごとのオフセット(すなわち、ファイルブロック番号0、32、64など)から構成されるものと仮定する。また、既存の読み出しストリームがfbn番号4から開始され、fbn番号27まで拡張されるものと仮定する。fbn番号28〜34の読み出しをストレージシステムに命じるクライアント要求が受信されると、そのクライアント要求は、所定のfbn番号32を超えてその読み出しストリームを拡張し、それをトリガとして先読み処理が開始される。したがって、従来の先読みアルゴリズムは、fbn番号35から始まる所定数のデータブロック、例えば288個のデータブロックをディスクから読み出し、その読み出しストリーム内の将来の読み出し要求に備えてキャッシュに記憶する。
従来の先読みアルゴリズムは特定状況下では良好に機能するが、それらは一般に、種々の欠点を有している。例えば、従来のアルゴリズムは、所定数の先読みデータブロック、例えば288個のデータブロックを読み出すが、これらのデータブロックは、読み出しストリームによっては不適当な数のデータブロックである場合がある。すなわち、ファイル読み出しストリームが比較的小さい場合、この固定数の先読みデータブロックは、余剰な読み出しデータ量である場合がある。一方、ファイル読み出しストリームのサイズを大きくすると、先読みサイズの積極性が増すことから、恩恵が得られる場合がある。また、固定数の先読みデータブロックは、他の理由からも不適当である場合がある。例えば、先読みストリームが、比較的少量のデータを要求するクライアント読み出し要求を含む場合、大きな固定数の先読みデータブロックの読み出しは、クライアント要求データが比較的少量である場合、不釣合いになる場合がある。
また、比較的大きな固定数の先読みデータブロックを使用する従来の先読みアルゴリズムは、ストレージシステムにおいて余分な量のバッファメモリを消費する場合がある。この余分なメモリ使用量、すなわち、「キャッシュポルーション」によって、ストレージシステムは他のシステム処理に必要なメモリやリソースが消費され、その結果、システムの性能に悪影響が及ぶ場合がある。例えば、そのようなキャッシュポルーションは、バッファメモリからのデータ読み出しの待ち時間を増加させることがある。なぜなら、ストレージシステムは、先読みデータを記憶している多数の「コア内」バッファを検索しなければならなくなるからである。
従って、1以上の読み出しストリームに対し、読み出す先読みデータの量を調節可能な先読みアルゴリズムを実施することが、ストレージシステムにとって望ましい。先読みアルゴリズムは、ストレージシステムにおけるキャッシュポルーションを低減するように構成されなければならない。
発明の概要
本発明は、ファイルシステムによって管理される各読み出しストリームに対し、読み出される先読みデータの量を最適化するように構成されたファイルシステムを実施するストレージシステムを提供する。このファイルシステムは、種々のファクタに応じて、各読み出しストリームに対して最適な読み出しサイズを選択する。こうしたファクタには、読み出しストリームにおける処理される読み出し要求の数、読み出しストリームにおいて要求されるクライアント要求データの量、読み出しストリームに関連する読み出しアクセススタイルなどがある。また、ファイルシステムは、各読み出しストリームに対して先読み処理が実施される場合を減らすとともに、各読み出しストリームによって読み出されたデータがメモリに保持されている時間を判定することにより、キャッシュポルーションを最小限に抑えるように構成される。
一実施形態によれば、ファイルシステムは、各読み出しストリームに対し、先読みメタデータの個別のセットを管理する。その結果、ファイルシステムは、読み出しストリームに関連するメタデータのセットに記憶された設定パラメータを変更することによって、各読み出しストリームについて、先読み処理を個別に調節することができる。例えば、各読み出し処理に関連する先読みメタデータのセットは、とりわけ、先読み処理が実施されるタイミングを示す指示、読み出す先読みデータの量、及び、読み出された先読みデータをバッファキャッシュに保持していなければならない時間を含む。有利なことに、読み出しストリームに関連する先読みメタデータのセットの中身は、クライアント要求の処理に応じて動的に調節することができ、プリフェッチされる先読みデータの量を最小限に抑え、ストレージシステムにおけるキャッシュポルーションを最小限に抑えるように調節することができる。
他の実施形態によれば、先読みメタデータの各セットは、対応する「リードセット」データ構造に記憶される。ファイルシステムは、ストレージシステム内の要求された各ファイルに対し、ゼロ以上のリードセットの異なるセットを割り当てる。このようにすると、各要求ファイルは、そのファイルに割り当てられたリードセットの数に等しい数の同時読み出しストリームを有することが可能になる。例示的実施形態において、ファイルのリードセットは、そのファイル内のデータを読み出すための最初の要求の受信に応じて動的に割り当てられる。割り当てられるリードセットの数は、ファイルのサイズが増加するのに従って増加させることが望ましい。
本発明の上記の利点及び他の利点は、添付の図面と合わせて下記の説明を参照すると分かりやすいであろう。図中、同じ参照符号は同様の要素または機能的に同様の要素を示している。
A.ストレージシステム
図1は、ディスク160のようなストレージデバイス上での情報の編成に関するストレージサービスを提供するように構成されたマルチプロトコル・ストレージ・アプライアンス100を示す略ブロック図である。ストレージディスクは、RAID(Redundant Array of Independent Disks)のような種々の構成で構成される場合がある。図示のストレージ・アプライアンス100は、システムバス115によって相互接続されたプロセッサ110、メモリ150、複数のネットワークアダプタ120、140、及び、ストレージアダプタ130を含むストレージシステムとして実施される。
図示の実施形態において、メモリ150は、本発明に関係するソフトウェアプログラムコードやデータ構造を記憶するために、プロセッサ110やアダプタ120、140によってアドレス指定可能な複数の記憶場所を有する。メモリの一部は、1以上のinodeデータ構造を記憶するinode「プール」154、及び、リードセットデータ構造を記憶するリードセットプール152として編成される。メモリの他の部分は、データバッファ1200を格納するバッファキャッシュ156としてさらに編成される場合がある。プロセッサ及びアダプタは、ソフトウェアコードを実行し、メモリ150に記憶されたデータ構造を操作するように構成された処理要素、及び/又は、論理回路を含む場合がある。ストレージオペレーティングシステム200は、その一部が通常、メモリに常駐し、処理要素によって実行され、とりわけ、ストレージアプライアンスによって実施されるストレージサービスを支えるストレージオペレーションを実施することにより、ストレージアプライアンスの機能を構成する。当然ながら、当業者であれば、本明細書に記載する本発明のシステム及び方法に関係するプログラム命令の記憶及び実行のために、他の処理手段や、種々のコンピュータ読取可能媒体を含む他の記憶手段を使用してもよいことは明らかであろう。
ディスク160に対するアクセスを可能にするために、ストレージオペレーティングシステム200は、仮想化モジュールと協働するwrite−anywhereファイルシステムを実施し、ディスク160によって提供される記憶空間を「仮想化」する。ファイルシステムは、情報を名前付きのディレクトリやファイルの階層構造としてディスク上に論理編成する。「ディスク上」の各ファイルは、データのような情報を記憶するように構成されたディスクブロックのセットとして実施され、ディレクトリは他のファイルやディレクトリの名前やそれらへのリンクが記憶された特殊な形式のファイルとして実施される場合がある。仮想化モジュールによれば、ファイルシステムは、情報をブロックの階層構造として更に論理編成し、それを名前付きの論理ユニット番号(LUN)としてエキスポートすることが可能になる。
本明細書で使用されるように、「ストレージオペレーティングシステム」という用語は通常、データアクセスを管理するコンピュータ上で動作するコンピュータ実行可能コードを指し、マルチプロトコル・ストレージ・アプライアンスの場合、データアクセス・セマンティックを実施する場合がある。ストレージオペレーティングシステムは、カリフォルニア州サニーベイルにあるネットワーク・アプライアンス・インコーポレイテッドから市販されているData ONTAPオペレーティングシステムと同様に、マイクロカーネルとして実施することができる。また、ストレージオペレーティングシステムは、UNIXやwindows NTのような汎用オペレーティングシステム上で実施してもよいし、本明細書に記載するストレージアプリケーションのために構成された設定可能な機能を有する汎用オペレーティングシステムとして実施してもよい。一般に、任意の適当なストレージオペレーティングシステムが、本明細書に記載する本発明の原理に従って使用するために拡張可能であるものと考えられる。
ストレージアダプタ130は、ストレージアプライアンス上で実行されるストレージオペレーティングシステム200と協働し、クライアント190によって要求された情報を取得する。この情報は、ディスク160上に記憶されている場合もあれば、情報を記憶するように構成された他の同様の媒体に記憶されている場合もある。ストレージアダプタは、従来のファイバチャネル(FC)シリアルリンク・トポロジのようなI/O相互接続構成を介してディスクに接続された入出力(I/O)インタフェース回路を有する。情報はストレージアダプタによって読み出され、必要に応じて、プロセッサ110(または、アダプタ130自体)によって処理された後、システムバス115を介してネットワークアダプタ120、140へと転送され、そこで、パケット又はメッセージとして成形され、クライアントへ返される。
ネットワークアダプタ120は、例えば、ポイント・ツー・ポイントリンク、ワイドエリアネットワーク(WAN)、公衆網を介して実施される仮想施設ネットワーク(VPN)、又は、図示のイーサネット(R)ネットワーク175のような共有ローカルエリアネットワーク(LAN)を介して、ストレージアプライアンス100を複数のクライアント190a,bに接続する。したがって、ネットワークアダプタ120は、アプライアンスを従来のイーサネット(R)スイッチ170のようなネットワークスイッチに接続するために必要な機械的、電気的、及び、信号回路を含む場合がある。NAS系ネットワーク環境の場合、クライアントは、マルチプロトコル・アプライアンスに記憶された情報をファイルとしてアクセスする。クライアント190は、トランスミッション・コントロール・プロトコル/インターネット・プロトコル(TCP/IP)のような所定のプロトコルに従って、個々のデータフレーム又はデータパケットをやりとりすることにより、ネットワーク175を介してストレージアプライアンスと通信する。
クライアント190は、UNIXオペレーティングシステムや、Microsoft windowsオペレーティングシステムのような種々のオペレーティングシステム上でアプリケーションを実行するように構成された汎用コンピュータであってもよい。クライアントシステムは一般に、NAS系ネットワークを介して情報(ファイルやディレクトリの形をしている)を取得するときに、ファイルベースのアクセスプロトコルを使用する。したがって、各クライアント190は、ネットワーク175を介してファイルアクセスプロトコルメッセージ(パケットの形をしている)をストレージアプライアンスに対して発行することにより、ストレージアプライアンスにサービスを要求することができる。例えば、Windowsオペレーティングシステム上で実行されているクライアント190aは、「TCP/IP プロトコル over CIFS(コモン・インターネット・ファイル・システム)」を使用してストレージアプライアンス100と通信する場合がある。一方、UNIXオペレーティングシステム上で実行されているクライアント190bは、「RDMA(リモート・ダイレクト・メモリ・アクセス)プロトコル over TCP/IP」に従って「NFS(ネットワーク・ファイル・システム)プロトコル over TCP/IP」または「DAFS(ダイレクト・アクセス・ファイル・システム)プロトコル over VI(仮想インタフェース)トランスポート」を使用して、マルチプロトコルアプライアンスと通信する場合がある。当業者には明らかなように、他のタイプのオペレーティングシステム上で動作しているクライアントも、他のファイルアクセスプロトコルを使用して、一体型マルチプロトコル・ストレージアプライアンスと通信することができる。
ストレージネットワーク「ターゲット」アダプタ140は、マルチプロトコル・ストレージ・アプライアンス100をクライアント190に接続する。クライアント190は、記憶された情報をブロック、ディスク、又は、論理ユニットとしてアクセスするように構成される場合がある。このSAN系ネットワーク環境の場合、ストレージアプライアンスは図示のFCネットワーク185に接続される。FCは、SANデプロイメントにおいて主に見られるプロトコルや媒体の適合性に関するネットワーク規格である。ネットワークターゲットアダプタ140は、アプライアンス100を従来のFCスイッチ180のようなSANネットワークスイッチに接続するために必要な機械的、電気的、及び、信号回路を有するFCホストバスアダプタ(HBA)を有する場合がある。FCアクセスを可能にする他に、FC HBAは、ストレージアプライアンスのファイバーチャネルネットワーク処理の負荷を低減する場合がある。
クライアント190は一般に、SAN系ネットワークを介してブロックやディスクの形をした情報を取得する際に、SCSI(スモール・コンピュータ・システム・インタフェース)プロトコルのようなブロックベースのアクセスプロトコルを使用する。SCSIは、ディスク160のような異なる周辺機器をストレージアプライアンスに取り付けることが可能な、標準的なデバイス非依存のプロトコルを備えた周辺機器I/Oインタフェースである。SCSI用語において、SAN環境で動作するクライアント190は、データを求める要求及びコマンドを発行する「イニシエータ」である。したがって、マルチプロトコル・ストレージ・アプライアンスは、イニシエータによって発行される要求に対して要求/応答プロトコルに従って応答するように構成された「ターゲット」である。クライアントがSAN系データアクセス要求をストレージアプライアンスに送信する場合、クライアントは通常、ディスク160上に記憶された個々のデータブロックに対応する論理ブロックアドレスを使用する。
マルチプロトコル・ストレージ・アプライアンス100は、「SCSI encapsulated over TCP/IP」(iSCSI)や「SCSI encapsulated over FC」(FCP)のような、SANデプロイメントで使用される種々のSCSI系プロトコルをサポートする。したがって、イニシエータ(以下、クライアント190)は、ネットワーク178、185上にiSCSIメッセージやFCPメッセージを発行することにより、ターゲット(以下、ストレージアプライアンス100)にサービスを要求し、ディスク上に記憶された情報を得ることができる。当業者には明らかなように、クライアントは、他のブロックアクセスプロトコルを使用して、一体型マルチプロトコル・ストレージ・アプライアンスにサービスを要求することもできる。複数のブロックアクセスプロトコルをサポートすることにより、マルチプロトコル・ストレージ・アプライアンスは、異種SAN環境におけるディスク及び論理ユニットに対する統一された首尾一貫としたアクセス手段を提供する。
B.ストレージオペレーティングシステム
図2は、本発明で使用するのに都合がよいストレージオペレーティングシステムの例を示す略ブロック図である。ストレージオペレーティングシステムは、一体型ネットワークプロトコルスタック、すなわち、より一般的には、ブロックアクセスプロトコルやファイルアクセスプロトコルを使用してクライアントがマルチプロトコル・ストレージアプライアンス100上に記憶された情報にアクセスするためのデータパスを提供するマルチプロトコルエンジンを形成するように構成された一連のソフトウェア層を含む。プロトコルスタックは、IP層212やそれを支える搬送メカニズムのようなネットワークプロトコル層に対するインタフェースであるメディアアクセス層210、TCP IP層214、及び、ユーザ・データグラム・プロトコル(UDP)層216を含む。ファイルシステムプロトコル層は、マルチプロトコルファイルアクセスを可能にし、その目的のために、DAFSプロトコル218、NFSプロトコル220、CIFSプロトコル222、及び、ハイパーテキストトランスファープロトコル(HTTP)224を含む。VI層226は、DAFSプロトコル218によって必要とされるような、RDMAのようなダイレクト・アクセス・トランスポート(DAT)機能を提供するためのVIアーキテクチャを実施する。
iSCSIドライバ層228は、TCP/IPネットワークプロトコル層を介したブロックベースのプロトコルアクセスを可能にし、FCドライバ層230は、FC HBA140と協働し、クライアント190a、bに対してブロックアクセス要求及び応答を送受信する。FCドライバ及びiSCSIドライバは、ストレージディスク160及び他の論理ユニットに対するFC特有のアクセス、及び、iSCSI特有のアクセスを可能にする。また、ストレージオペレーティングシステム200はRAIDサブシステム240を有する場合があり、RAIDサブシステム240は、RAIDプロトコルのようなディスクストレージプロトコルを実施するだけでなく、例えばSCSIプロトコルのようなディスクアクセスプロトコルに従ってストレージディスク160からデータブロックを読み出すためのディスクドライバサブシステム250を更に実施する場合がある。
ディスクソフトウェア層240及び250を一体型ネットワークプロトコルスタック層210〜230に橋渡ししているのは仮想化システムである。仮想化システムは図示のように、例えば、仮想ディスク(「vdisk」)モジュール270及びSCSIターゲットモジュール235として実施される仮想化モジュールと交信するストレージマネージャ又はファイルシステム260によって実施される。vdiskモジュール270は、ファイルシステム260の上に層として形成され、ユーザ(システム管理者)がストレージシステムに対して発行するコマンドに応答して、ユーザインタフェース(UI)275のような管理インタフェースによってアクセスすることができる。SCSIターゲットモジュール235は、FC/iSCSIドライバ228、230と、ファイルシステム260の間に配置され、ブロック(LUN)空間とファイルシステム空間との間における仮想化システムの変換層として機能する。ただし、LUNは仮想ディスクとして表現される。UI275はストレージオペレーティングシステムの上に配置され、管理者又はユーザが、RAIDサブシステム240のような種々の層及びサブシステムにアクセスできるような形で配置される。
図示のファイルシステム260は、ディスク160のようなストレージディスク上に記憶された情報にアクセスするためのボリューム管理機能を備えたメッセージベースのシステムである。すなわち、ファイルシステム260は、ファイルシステムセマンティックを提供する他に、通常はボリュームマネージャに関係する機能も更に有する。こうした機能には、(i)ディスクの集合化、(ii)ディスクの記憶帯域幅の集合化、及び、(iii)ミラーリング、及び/又は、パリティ(RAID)のような信頼性保証などがある。図示のファイルシステム260は、ネットワーク・アプライアンス・インコーポレイテッドから市販されているWrite Anywhere File Layout(WAFL)ファイルシステムを実施し、固定サイズの、例えば4キロバイト(kB)のブロックを使用して、ディスク上のデータを編成する。図示のファイルシステム260は、インデックスノード(「inode」)を使用してファイルを識別し、ファイル属性(例えば、作成時刻、アクセス権、サイズ、及び、ブロック位置など)を記憶する。inodeファイルを含めて、inodeファイルの使用の詳細については、1998年10月6日に発行されたDavid Hitz他による「Method for Maintaining Consistent States of a File System and for Creating User-Accessible Read-Only Copies of a File System」と題する米国特許第5,819,292号に記載されており、この特許は参照により本明細書の中で完全に説明されたものとして援用される。
図3は、ファイル330のバッファツリーを示す略ブロック図である。バッファツリーは、メモリに記憶されたファイルのブロックの内部表現である。バッファツリーは、ファイル330を表わすメタデータを含む最上位inode330を含み、サイズによっては更に、そのファイルの実際のデータを記憶するデータブロック220、例えば4kBデータブロックを参照するポインタを更に含む。特に、大きなファイル(例えば、64KBよりも大きなデータ)の場合、inode300における各ポインタは、最大で1024個までのポインタを記憶する間接(レベル1)ブロック310を参照する場合があり、各間接ブロックは、データブロック320を参照することができる。例えば、間接ブロック310における各ポインタは、ファイルシステム260におけるデータブロック320に対応するvbnを識別する値を記憶する場合がある。
動作上、ファイルシステム260は、一体型ネットワークプロトコルスタックの種々のソフトウェア層によって処理されたクライアント要求を受信する。例えば、ネットワークアダプタ120又は140において受信されるクライアント要求は、(層210及び230の)ネットワークドライバによって処理された後、更なる処理のために、必要に応じて、ネットワークプロトコル層及びファイルアクセス層212〜228に転送される場合がある。次に、クライアント要求は、ファイルシステム260に渡すことが可能なファイルシステム「メッセージ」としてフォーマットされる。このメッセージは、とりわけ、クライアントの要求するファイル、又はディレクトリ(例えば、通常はinode番号によって表わされる)、要求されたファイル又はディレクトリ内における開始オフセット、及び、その開始オフセットの後に続いて書き込み又は読み出しするデータの長さを指定する場合がある。
ファイルシステム260は、ディスク上のデータを固定サイズのデータブロック、例えば4kBブロック単位で操作するので、ファイルシステムは、ファイルシステムメッセージに入れて受信された値(inode、オフセット、長さ)がまだフォーマットされていない場合、それらの値をデータブロックの単位(例えば、fbn)に変換しなければならない場合がある。例えば、8kBのクライアント要求ファイルが、fbn11〜12にそれぞれ割り当てられたディスク上のデータブロックを占めているものと仮定する。また、それらのデータブロックは、inode番号17を有するinodeに記憶されたポインタのセットによってアクセス可能であるものと仮定する。そして、クライアントが、そのファイルのデータのうちの後ろ6kB、すなわち、fbn番号11における最後の2kB及びfbn番号12における4kB全体に対するアクセスを要求するものと仮定する。この場合、ファイルシステム260は、要求データを(inode=17、ファイルオフセット=2kB、長さ=6kB)として識別するファイルシステムメッセージを受信する。このファイルシステムメッセージは、受信されたファイルオフセット及び長さの値をデータブロックの単位に変換し、どのデータブロックが、クライアントの要求するデータ、例えば、(inode=17、開始データブロック=fbn11、読み出すデータブロック=2ブロック)を有しているかを識別する。
どのデータブロックがクライアントの要求するデータを記憶しているか(例えばfbn11と12)を識別した後、ファイルシステム260は、クライアントの要求するデータブロックが、「コア内」バッファのうちの1以上においてアクセス可能であるか否かを判定する。可能であれば、ファイルシステムは、要求されたデータをメモリ150から読み出し、読み出したデータをクライアントの要求に従って処理する。ただし、要求されたデータがコア内メモリ150に存在しない場合、ファイルシステム260は、要求されたデータをストレージディスク160からロードする(読み出す)ための処理を生成する。ファイルシステムは、クライアントの要求するデータブロックに割り当てられたvbn番号(例えば、fbn11及び12)を識別するメッセージ構造をRAIDサブシステム240に渡し、RAIDサブシステム240は、そのvbnを対応するディスクブロック番号(dbn)にマッピングし、後者をディスクドライバサブシステム250の適当なドライバ(例えば、SCSI)に送る。ディスクドライバは、要求されたdbnをディスク260から取得し、ファイルシステム260による処理に備えて、要求されたデータブロック(複数の場合もあり)をメモリ150にロードする。
ファイルシステム260は、クライアントの要求するデータを有しているデータブロックの読み出しの他に、ディスクソフトウェア層240及び250に対し、ディスク160からの「先読み」データブロックの更なる読み出しを命じる場合がある。先読みブロック自体がまだ要求されていなくても、それらの先読みデータブロックは、受信したクライアント要求を含む読み出しストリームを論理的に拡張する範囲のデータブロック(例えば、fbn)に対応する場合がある。先読みデータブロックは、クライアントの要求するデータブロックと同様に、ディスクソフトウェア層240及び250によって読み出され、ファイルシステム260によってアクセス可能な適当なメモリバッファにコピーされる。これらのメモリバッファはバッファキャッシュ156から得られる。ファイルシステムは、読み出したデータブロック内のクライアントが要求するデータを、クライアントの要求に従ってアクセスし、必要に応じて、要求されたデータ、及び/又は、受領確認メッセージを要求元のクライアント190に返す。
C.リードセット
本明細書で使用されるように、「読み出しストリーム」という用語は、要求されたファイル内の論理的に連続した範囲のファイルオフセット(例えば、fbn)からのデータの読み出しをストレージオペレーティングシステム200に命じる1以上のクライアント要求のセットとして定義される。オペレーティングシステムは、将来のクライアント読み出し要求によって読み出しストリーム中で要求される可能性がある1以上のデータブロックをプリフェッチするための推測的先読み処理を使用する場合がある。一実施形態によれば、ストレージオペレーティングシステム200は、同時に処理される複数の読み出しストリームのそれぞれについて個別に、先読みメタデータのセットを管理する。また、ストレージオペレーティングシステムは、各読み出しストリームが有するメタデータを個別の「リードセット」データ構造に記憶する(すなわち、1つのリードセットあたり1つの読み出しストリーム)。したがって、複数の同時読み出しストリームをサポートするファイル又はディレクトリは、複数の異なるリードセットに関連する場合があり、例えば、ファイル又はディレクトリに関連するinodeによってアクセス可能である場合がある。
図4は、例示的なinode400、及び、それに関連するリードセット600a〜cのセットを示している。inode400は、とりわけ、inode番号402(または他の識別子)、リードセットポインタ404、読み出しアクセススタイル406、デフォルト先読み値408、ファイルメタデータ410、及び、データセクション412を含む。inode400は、そのinodeに関連するファイル又はディレクトリ内のデータにアクセスするためのクライアント要求をストレージオペレーティングシステム200が受信すると、inodeプール154から動的に割り当てられ、又は、取得される。inode番号402(例えば、この例では17)は、inode400に関連するファイル又はディレクトリを一意に識別するために使用される。例えば、クライアント要求は、クライアントがアクセスすることを望む特定範囲のデータを有するファイル又はディレクトリに関連するinode番号を指定する。クライアントが指定するこのinode番号は、そのファイル内の開始オフセットの指示、及び、開始オフセットから開始してアクセスするデータの長さによって占められる場合がある。
リードセットポインタ404は、ゼロ以上のリードセットデータ構造600の記憶場所を示す値を記憶する。動作上、ファイルシステム260は、リードセットを動的に割り当てる場合もあれば、リードセットプール152から前回割り当てられたリードセットを取得する場合もある。inode400に割り当てられた各リードセットは、所定の値のセットを記憶するために初期化される。図示のように、inode400に関連するリードセット600a〜cはリンクリストとして構成され、各リードセットは、リスト上の次のリードセットの記憶場所を示す値を記憶する「ネクスト」ポインタ602を含む。リストの最後のリードセット、例えばリードセット600cにおけるネクストポインタは、そこがリストの終わりであることを示す所定の値「空値(ゼロ)」を記憶する場合がある。図示の実施形態におけるリードセットはリンクリストとして構成されているが、当業者には明らかなように、リードセットはサーチツリーのような他の構成で構成される場合もある。
読み出しアクセススタイル406は、inode400に関連するファイル又はディレクトリからデータをどのように読み出すかを示す読み出しアクセスパターンを示す値を記憶する。例えば、読み出しアクセススタイルは、そのinodeを有するファイル内のデータが、例えば、通常パターン、シーケンシャルパターン、又は、ランダムパターンに従って読み出されることを示す場合がある。ストレージオペレーティングシステム200は、クライアント読み出し要求を処理する際に、読み出しアクセスパターン値406を識別し、それを動的に更新する場合がある。あるいは、オペレーティングシステムは、受信されたクライアント読み出し要求に含まれる「キャッシュヒント」等に基づいて、この読み出しアクセス値を設定する場合がある。キャッシュヒントは、要求元クライアントがファイル又はディレクトリからデータを読み出す際に使用する可能性がある読み出しアクセスパターンを示すものである。例えば、オペレーティングシステムは、クライアントによって転送されたDAFS要求から、このキャッシュヒントを得る場合がある。DAFSキャッシュヒントを含めて、DAFSプロトコルの詳細については、2001年9月1日に出版された「Direct Access File System Protocol, Version 1.00」に記載されており、この文献は参照により本明細書の中で完全に説明されたものとして援用される。
デフォルト先読み値408は、inode400に関連するファイル又はディレクトリに記憶されたデータに対する将来のクライアント読み出し要求に備えて、プリフェッチ(すなわち、前もっての読み出し)することが可能な所定数のデータブロックを示す。例えば、デフォルト先読み値408は、クライアントの要求するデータを有する1以上のデータブロックを読み出した後、将来のクライアント読み出し要求に備えて、ファイルシステムがデータブロックを、例えば、288個のデータブロックを更に読み出さなければならないことを示す場合がある。当業者には明らかなように、「先読み」データブロックは、クライアント要求のたびに毎回読み出す必要はなく、所定の先読みアルゴリズムに基づいて取得すればよい。図示の実施形態によれば、デフォルト先読み値408は、読み出しアクセススタイル406によって異なる場合がある。例えば、ランダム読み出しアクセスパターンの場合、デフォルト先読み値はゼロであり、通常読み出しアクセスの場合よりも、シーケンシャル読み出しアクセスの場合の方が、デフォルト先読み値は大きい場合がある。
ファイルメタデータ410は、inode400に関連するファイル又はディレクトリに関連する他のメタデータを記憶する。そのようなメタデータには、とりわけ、ユーザID、グループID、アクセス・コントロール・リスト、フラグ、他のデータ構造へのポインタ等のようなセキュリティ信用証明がある。また、inode400は、そのinodeに関連するファイル又はディレクトリを含むデータブロック320の記憶場所を(直接的又は間接的に)示す1セットのポインタを有するデータセクション412をさらに含む。この例では、データセクション412におけるポインタは1以上の間接ブロック(図示せず)を指し、それらの間接ブロックは、そのファイル又はディレクトリを含む1セットの連続的なデータブロックの記憶場所を指すポインタを有する。以後、inode400からアクセス可能なデータブロックにはそれぞれ、対応するfbnが割り当てられ、inode400に関連するファイル(又はディレクトリ)は、連続的なfbn値が割り当てられた1セットのデータブロックを含むものと仮定する。例えば、データセクション412におけるポインタの幾つかは、fbn番号9〜18が割り当てられたデータブロックに記憶されたファイルの部分を指す場合がある。
有利なことに、inode400が有するファイル又はディレクトリを含む複数のデータブロック320の間に、複数の読み出しストリームを同時に確立することができる。例えば、図示のように、データブロック9〜18のセットにおいて、2つの同時読み出しストリーム430及び435が識別される。読み出しストリーム430は、ファイルシステム260によって読み出される論理的に連続した一連のfbnに対応し、最大でファイルブロック番号9までの(ただし9は含まない)fbnに対応する。同様に、読み出しストリーム435も、論理的に連続した一連のfbnに対応し、最大でファイルブロック番号15までの(ただし15は含まない)fbnに対応する。図示の実施形態において、それら2つの読み出しストリームはそれぞれ、リードセット600a〜cのうちの異なる1つに記憶された対応する先読みメタデータのセットに関連する場合がある。
上記のように、各リードセットは、対応する読み出しストリームに関連するメタデータを記憶するように構成される。したがって、図示のinode400は3つのリードセット600a〜cに関連しているので、このinodeに関連するファイル又はディレクトリは、最大で3つの異なる読み出しストリームをサポートする。ただし、当然ながら、inodeは、ゼロ以上の任意数のリードセット600に関連する場合がある。inode400に関連するリードセットの数は、そのinodeに関連するファイル又はディレクトリのサイズに基づいて決定されることが望ましい。例えば、ファイルのサイズが増加すれば、そのinodeに割り当てられるリードセットの数も増やされる場合がある。
図5は、列510に記憶されたファイルサイズを、列520に記憶された割り当てられるリードセットの数に関連付けるのに使用されるテーブル500の例を示している。この例では、「非常に小さい」ファイル(例えば、<64kB)は、読み出しストリームを確立するだけの十分なデータを持たないため、ゼロ個のリードセットに関連付けられる。一方、「小さい」ファイル(例えば、64kB〜512kB)は、単一の読み出しストリームを確立するのに十分な広さであるため、単一のリードセットに関連付けられる。一般に、ファイルサイズが増加するほど、そのファイルがサポートする読み出しストリームの数も増加するため、そのファイルのinodeに割り当てられるリードセットの数もまた増加する。ファイルシステム260は、例えば1以上のクライアント「書き込み」要求を処理した結果、ファイルのサイズが動的に増大するのに応じて、割り当てるリードセットの数を増やす場合がある。
図6は、リードセットポインタ404を介してアクセス可能な例示的なリードセット600を示している。このリードセットは、読み出しストリーム430又は435のような対応する読み出しストリームに関連するメタデータを含む。リードセット600は、とりわけ、ネクストポインタ602、レベル値604、カウント値606、最終読み出しオフセット値608、最終読み出しサイズ610、ネクスト先読み値612、先読みサイズ614、及び、種々のフラグ616を含む場合がある。当業者には分かるように、リードセット600は、図に明示したもの以外にも、他の情報を更に記憶するように構成される場合がある。上で述べたように、ネクストポインタ602は、リードセットのリスト(又は他のデータ構造)内の隣りのリードセットの記憶場所を示す値を記憶する。
レベル値604は、リードセット600の相対的な「年齢」である。レベル値は、所定の上限値と所定の下限値との間の境界内(境界も含む)の整数値であることが望ましい。例えば、レベル値604は、所定の下限値ゼロと、所定の上限値20の間の整数値に制限される場合がある。リードセット600が最初に割り当てられるときは、リードセット600が未使用(すなわち、空)であることを知らせるために、レベル値604はマイナス1のような特殊な指示値に設定される場合がある。新たに識別された読み出しストリームにリードセットが割り当てられるとき、レベル値604は、上限値と下限値の間(境界も含む)の「初期」値に設定される。例えば、所定の下限値と所定の上限値がそれぞれ、ゼロ及び20である場合、初期値は、それらの間の任意の値、例えば10に設定される場合がある。リードセット600に関連する大きなファイル(又はディレクトリ)に使用される初期レベル値を、小さなファイルに使用される初期レベル値に比べて大きくすると、リードセットが時期尚早に老化することを防止するのに役立つ。例えば、非常に大きなファイル(例えば、10GBよりも大きなファイル)の場合、初期レベル値は15に設定され、それ以外の場合は10に設定される場合がある。当然ながら、本発明の文脈において、他の上限値、下限値、及び、初期レベル値が使用される場合もある。
クライアント読み出し要求がファイルシステム260によって処理されるたびに毎回、ファイルシステムは、そのクライアント読み出し要求を含む読み出しストリームに関連するリードセットにおけるレベル値604をインクリメントする。例えば、レベル値604をインクリメントする場合、レベル値604は、第1の所定のステップサイズ、例えば1だけ増加される。また、例えば以下で説明するように、リードセットを「再使用」する場合、ファイルシステムは、再使用のために選択されないあらゆるリードセットに記憶されたレベル値をデクリメントする。レベル値604は、第2の所定のステップサイズ、例えば1だけデクリメントされる場合がある。
例として、リードセット600がレベル値604として12を記憶していて、ファイルシステム260は、クライアント読み出し要求に対応するファイルシステムメッセージを受信するものと仮定する。クライアント要求がリードセット600に関連する読み出しストリームに属するものであることをファイルシステムが判定した場合、レベル値604は13にインクリメントされる。一方、クライアント要求が別の読み出しストリームに属している、すなわち、リードセット600に関連しないものであることが判定された場合、レベル値604は12のまま変更されない。また、受信したクライアント読み出し要求によって、ファイルシステムが別のリードセットを使用しなければならなくなった場合、レベル値604は例えば11にデクリメントされる。このように、レベル値604は、クライアント読み出し要求がファイルシステム260によって処理されるたびに毎回調節され、リードセット600が割り当て解除されるか、または、後で説明するように再使用されるまで調節され続ける。この老齢化プロセスは、種々の条件の影響を受ける場合がある。例えば、レベル値604が所定の初期値(例えば、10)未満の値にデクリメントされた場合、次回、そのレベル値はインクリメントされ、レベル値は所定の初期レベル値に設定される場合がある。また、ファイルシステム260は、所定の上限値を超えてレベル値604がインクリメントされたり、所定の下限値を下回るようにデクリメントされることがないことを保証する場合がある。
カウント値606は、リードセット600に関連する読み出しストリームにおける処理されたクライアント要求の数を記憶する。図示の実施形態において、カウント値は最初はゼロに設定される。そして、そのリードセットに関連する読み出しストリームに含まれるクライアント読み出し要求をファイルシステム260が処理するたびに毎回、そのカウント値はインクリメントされる。レベル値604と同様に、カウント値606も、例えば216のような所定の上限値によって制限され、マルチプロトコル・ストレージ・アプライアンス100のメモリリソースを節約する。
最終読み出しオフセット608及び最終読み出しサイズ610は合わせて、リードセット600に関連する読み出しストリームにおける処理された最後(すなわち、最も最近)のクライアント読み出し要求を表わす。最終読み出しオフセット608及び最終読み出しサイズ610は、データブロック(例えば、fbn)単位で値を記憶することが好ましい。例えば、リードセット600に関連する読み出しストリーム中の最終クライアント読み出し要求の処理に応じて、ファイルシステム260が、ファイルブロック番号6から始まる3つのデータブロック(すなわち、fbn番号6、7及び8)を読み出すものと仮定する。この場合、最終読み出しオフセット608はfbn番号6に設定され、最終読み出しサイズ610は3データブロックに設定される。したがって、将来のクライアント読み出し要求が、ファイルブロック番号9から始まる論理的に連続した別の一連のデータブロックを読み出すためにファイルシステムを必要とする場合、そのクライアント読み出し要求は、読み出しストリームを「拡張」する場合があある。
ネクスト先読み値612は、リードセット600に関連する読み出しストリームに対して先読み処理の次のセットをファイルシステム260が実施する場所である所定のファイルオフセット、又は、メモリアドレスの指示を記憶する。詳しくは、クライアント読み出し要求が、ネクスト先読み値612によって示されたファイルオフセット又はメモリアドレスを越えて読み出しストリームを拡張するものである場合、ファイルシステムは、将来のクライアント読み出し要求に備えて、その読み出しストリームを更に拡張する先読みデータブロックの別のセットを推測的に読み出す場合がある。それらの先読みデータブロックを読み出した後、ファイルシステム260は、その読み出しストリームに対して先読み処理が実施される場所であるネクストファイルオフセット又はメモリアドレスを示すために、ネクスト先読み値612を更新する場合がある。先読みデータブロックの読み出しが終わると、それらの先読みデータブロックはメモリ150の適当なコア内メモリバッファの中にコピーされ、ファイルシステムはクライアント読み出し要求を終了する。
先読みサイズ値614は、ネクスト先読み値612を超えて読み出しストリームが拡張される場合にプリフェッチされる先読みデータブロックの数を記憶している。先読みサイズ値614は、デフォルト先読み値であってもよいし、先読みアルゴリズムに従って決定された他の値であってもよい。例えば、先読みサイズ値614及びネクスト先読み値612はそれぞれ、リードセットが割り当てられるときに所定の開始値に初期化される。次に、そのリードセットに対する先読み処理を最初に実施した後、ファイルシステムは、適当な先読みサイズ及びネクスト先読み値を選択するための「初回設定」手順を実施する場合がある。初回設定手順は、「read_full」フラグや「dump」フラグの値のような種々の入力パラメータに応じて実施される。read_fullフラグは、リードセット600に関連するファイル又はディレクトリ全体が例えばクライアント190によって要求されたことを知らせるために使用される。dumpフラグは、リードセット600に関連するファイルやディレクトリをマルチプロトコル・ストレージ・アプライアンス100内の新たな場所にコピーするバックアップ手順が実行中であることを知らせることができる。
各リードセット600は、そのリードセットに関連する読み出しストリームに対して、ファイルシステム260が先読み処理を特化するための1以上のフラグ値616を含む場合がある。例えば、フラグ値616の1つは、読み出しストリームのデータブロックを読み出さなければならない「方向」を示す場合がある。すなわち、ファイルシステムは、論理的に「前方」方向(すなわち、ファイルブロック番号が増加する方向)にデータブロックを読み出すように構成される場合もあれば、論理的に「後方」(すなわち、ファイルブロック番号が減少する方向)にデータブロックを読み出すように構成される場合もある。また、リードセット600は、「read_once」フラグ616を更に含む場合がある。このフラグの値は、そのリードセットに関連する読み出しストリームにおいて読み出されたデータが、例えばバックアップ手順や大きなファイルの転送の一部として、ファイルシステムによって一回だけアクセスされるか否かを示すものである。read_onceフラグ616の値は、その読み出しストリームの読み出しデータを長期にわたってメモリ150に記憶しておく必要がないことをファイルシステム260に伝えるために使用される場合がある。他のリードセットフラグ616としては、とりわけ、「large_volume」フラグがある。large_volumeフラグ616は、リードセット600に関連するファイルやディレクトリを含むボリュームが比較的多数のストレージディスク160(例えば、13台以上のディスク)を含むことを示す値に設定される場合がある。
図7は、クライアント要求データ、及び/又は、先読みデータを含むデータブロック320の読み出す場合に、ファイルシステム260によって生成されるディスクI/O「ヒント」710を示す略ブロック図である。クライアント読み出し要求700の受信に応答して、ファイルシステムはまず、クライアントの要求するデータブロックの位置を探し、それらのデータブロックに関連する先読みブロックが1以上の「コア内」メモリバッファ1200の中にあるか探すことを試みる。それらのデータブロックがコア内バッファに見付からない場合、ファイルシステムは、どのデータブロックをストレージディスク160から読み出すべきかをディスクサブシステム層(例えば、RAID層及びSCSI層240及び250)に教えるためのディスクI/Oヒント710を生成する。次に、ディスクサブシステムは、ディスクI/Oヒント710によって指定されたデータブロックを読み出し、読み出したデータブロックをバッファ1200に入れる。バッファ1200は、例えば、バッファキャッシュ156から取得される。ディスク160又はメモリ150から読み出されたデータブロック320を有するバッファ1200は、ファイルシステム内においてI/Oベクトル730(すなわち、「iovec」)を使用してアクセスすることができる。I/Oベクトル730は、とりわけ、読み出されたデータブロック320を指す1セットのポインタ(またはvbn)を含む。また、iovec730は、クライアント要求データに関連する他のメタデータ(図示せず)を更に含む場合がある。
ファイルシステム260は、受信したクライアント読み出し要求700、及び、該クライアント読み出し要求700を含む読み出しストリームに関連するリードセット600の内容に応じて、ディスクI/Oヒント710を生成する。説明の都合上、クライアント読み出し要求700は、開始データブロック702、例えばfbn番号15を指定し、クライアント190によって要求された連続したデータブロックの数、例えば3データブロックを指定するものと仮定する。さらに、クライアント読み出し要求700は、ネクスト先読み値612、例えばfbn番号16を超えて読み出しストリームを拡張し、それをトリガとして、先読みサイズ614、例えば64データブロックに等しい数の先読みデータブロックを読み出すための先読み処理が開始されるものと仮定する。なお、図示の要求700の中身はデータブロック単位にフォーマットされているが、他の実施形態では、ファイルシステム260は、受信したファイルシステムメッセージをデータブロック単位に変換しなければならない場合もある。
例えば、ディスクI/Oヒント710は、とりわけ、開始データブロックの指示712、読み出すデータブロックの総数の指示714、読み出すデータブロックのうちのどのくらいの数が「必須読み出し」データブロックであるかを示す指示716、読み出すデータブロックのうちのどのくらいの数が「推測的」先読みデータブロック718であるかを示す指示718、及び、ゼロ以上のI/Oフラグ値720を含む。当業者には明らかなように、ディスクI/Oヒント710は単なる例に過ぎず、ディスクI/Oヒント710は、ファイルシステム260からディスクサブシステム240及び250へ渡される他の情報を含む場合がある。
ディスクI/Oヒント710における開始データブロック712は、クライアントによって要求された開始データブロックに対応する。したがって、図示の例では、開始データブロック番号712はfbn番号15に設定される。読み出すブロックの総数714は、ファイルシステム260によって要求された論理的に連続したデータブロック(例えば、fbn)の数を示す。読み出すブロックの総数714は、クライアントによって要求された必須読み出しデータブロック716の数だけでなく、同じ読み出しストリームに対する将来のクライアント読み出し要求に備えて必要とされる推測的先読みデータブロックの数718も含む。図示のように、読み出すデータブロックの総数714は、ファイルシステム67が、開始データブロック712(すなわち、fbn15〜81)から開始して論理的に連続したデータブロックをディスクストレージから読み出すことを要求していることを示す。必須読み出しデータブロックの数716、例えばこの例では3データブロックは、クライアントによって要求されたデータブロックの数に対応する。推測的データブロックの数718、例えば64データブロックは、受信したクライアント読み出し要求700を含む読み出しストリームに関連するリードセット600に記憶された先読みサイズ614に対応する。
図示の実施形態によれば、1以上の「先読み」条件を満足していない限り、推測的データブロックの数718はゼロである。各先読み条件を満足している場合、ファイルシステム260は、ディスクI/Oヒント710内の先読みデータブロックの数718を先読みサイズ値614に等しくなるように設定する。第1の先読み条件は、例えば、ディスクから先読みデータブロックを読み出すことが可能になるまでは、カウント値606が所定値、例えば3よりも大きくなければならないというものである。第2の先読み条件は、例えば、クライアント読み出し要求700によって要求された範囲のデータブロック(例えば、fbn)によって読み出しストリームが、それに関連するネクスト先読み値612を超えて拡張されない限り、先読みデータブロックの読み出しを禁止するというものである。さらに、第3の先読み条件は、例えば、クライアントの要求するファイル又はディレクトリに関連する読み出しアクセススタイル406は、ランダム読み出しアクセススタイルに対応するものであってはならないというものである。
I/Oフラグ720は、ファイルシステムが要求されたデータブロックをストレージディスク160からどのようにして読み出さなければならないかに関する情報をディスクサブシステム240及び250に伝えるために使用される。具体的には、このI/Oフラグは、要求されたデータを読み出す態様に影響を与えるコンフィギュレーション設定をディスクサブシステムに通知するために使用される。例えば、I/Oフラグ720の一部は、クライアント読み出し要求700を含む読み出しストリームに関連するリードセット600に記憶されたフラグ616と同じ空間を占める。例えば、I/Oフラグ720は、read_onceフラグ616の値に対応する「buf_core」フラグを含む場合がある。この場合、buf_onceフラグ720は、読み出されたデータブロックが一度しか読み出されないであろうことを知らせるために使用され、その結果、読み出されたデータは、2回以上読み出される可能性があるデータの記憶に使用される従来のバッファに比べて短い時間しかデータを保持しないように構成されたバッファ1200に記憶される。
D.適応先読み
一実施形態によれば、ファイルシステム260は、ファイルシステムによって処理される各読み出しストリームに対し、読み出される先読みデータの量を最適化するように構成される。その目的のために、ファイルシステムは、種々のファクタに応じて、各読み出しストリームに対して最適な先読みサイズ614を選択する。そのようなファクタには例えば、読み出しストリーム中で要求されたクライアントの要求するデータの量、読み出しストリームにおいて処理された読み出し要求の数、読み出しストリームのファイル又はディレクトリに関連する読み出しアクセススタイル406などがある。
図8は、読み出しストリームに関連する適当な先読みサイズ614を選択するために、ファイルシステム260によって使用される例示的なテーブル800を示す略ブロック図である。具体的には、読み出しストリームにおけるクライアント読み出し要求の受信に応じて、ファイルシステムは、受信した要求において要求されたクライアントの要求するデータ810の量に応じて、推測的に読み出す先読みデータブロックの数820を選択することができる。例えば、クライアントが64kB未満のデータを要求している場合、ファイルシステムは、先読みサイズ614を所定数Nの2倍のデータブロックに設定する。Nは例えば32データブロックである。クライアントが64kBより大きく128kBよりも小さいデータを要求している場合、先読みサイズ614は、所定数の4倍のデータブロックに設定される。同様に、クライアントが128kBから256kBまでのデータを要求している場合、先読みサイズ614は、所定数の6倍のデータブロックに設定される。
クライアント読み出しが比較的大きい場合、ファイルシステムは、先読みサイズ614をクライアントの要求するデータの大きさの倍数に設定し、最も近いブロック数に切り上げる(又は、切り捨てる)。例えば、クライアントが256kBと1024kBの間を要求している場合、ファイルシステムは、先読みサイズ614をクライアントの要求するデータの大きさの2倍に最も近いファイルブロック番号(fbn)に設定する。同様に、クライアントが1024kB〜10メガバイト(Mb)を要求している場合、ファイルシステムは、先読みサイズ614をその読み出し要求のサイズに設定し、データブロックのサイズ、例えば4kBに丸める。10Mbを超えるような極端に大きな読み出し要求の場合、先読みサイズ614は、推測的に読み出されるデータブロックの数に関する所定の上限値(すなわち、固定値)に設定される場合がある。
なお、先読みサイズ614は、他のファクタに基づいて選択してもよい。例えば、read_fullフラグは、クライアント190が、読み出しストリームを含むファイル又はディレクトリの中身全体を要求することを知らせることができる。この場合、初回設定手順は、先読みサイズ値614を例えば256データブロックのような比較的大きな固定数のデータブロックに設定する場合がある。また、dumpフラグの値が、そのファイル又はディレクトリに対してバックアップ処理が実施されていることを示している場合、先読みサイズ614は、例えば1024データブロックのようなもっと大きな(すなわち、より積極的な)固定数のデータブロックに設定される場合がある。
テーブル800は、受信したクライアント読み出し要求のサイズ810に基づいて先読みデータブロックの数820を決定するための比較的単純な手順を示しているが、当業者には明らかなように、もっと複雑な手順を使用してもよい。例えば、ファイルやディレクトリに対する「準ランダム」読み出しを行うための「スロースタート」アルゴリズムを使用して、クライアントが、幾つかの比較的小さい読み出しからなる複数の比較的短いシーケンス、例えば、32kB未満の約3〜6回の読み出しを「集中して」間欠的に実施するようにしてもよい。このアルゴリズムの場合、まず、読み出しストリームに対する先読み処理が実施され、初回設定手順はまず、先読みサイズ614を、読み出しサイズの3倍を最も近いデータブロック数に丸めたものと、6データブロックのうちのいずれか大きい方に設定する場合がある。読み出しストリームがネクスト先読み値612を超えて拡張される場合、先読みサイズ値614は、例えば1.5のような所定のファクタによって増加されるか、又は、64データブロックのような所定数のデータブロックに設定される場合がある。このように、スロースタートアルゴリズムは、読み出しストリーム中の最初の数回の読み出しについては、比較的少数の先読みデータブロックを読み出し、その後、読み出しストリーム中の後続の先読み処理については、先読みデータブロックの量を増加させる。
図9A〜図9Bは、ファイルシステム260がディスクI/Oヒント710を生成するために使用する一連のステップを示すフロー図であり、ここで、先読みデータブロック718の数は、クライアント読み出し要求700の受信に応じて適当に選択される。シーケンスはステップ900から始まり、ステップ905へ進み、そこで、クライアント読み出し要求が、マルチプロトコル・アプライアンス100内のネットワークアダプタ120、140によって受信される。受信された要求は、ストレージオペレーティングシステム200の1以上のネットワークプロトコル層によって処理され、ファイルシステム260へ転送される。ステップ910において、ファイルシステムは、要求700を含む読み出しストリームを有するリードセット600を探す。例えば、ファイルシステムは、リードセットに関連する読み出しストリームが、クライアントの要求するデータを有しているデータブロックによって拡張される論理的な一連のデータブロック(例えばfbn)を有しているか否かに基づいて、受信した要求に「適合する」リードセットを識別する場合がある。
次に、ステップ915において、ファイルシステム260は、受信したクライアント読み出し要求700に応答して、先読み処理を実施するか否かを決定する。具体的には、ファイルシステムは、クライアントの要求するデータを有しているデータブロック(fbn)によって読み出しストリームが、対応するリードセット600に記憶されたネクスト先読み値612を超えて拡張されるか否かを判定する。先読み値612を超えて拡張される場合、ファイルシステムは、ステップ920〜955に記載されているように、先読み処理を実施することができる。一方、読み出しストリームがそのネクスト先読み値612を超えて拡張されない場合、先読み処理の実施は禁止されているものと判断する。その場合、シーケンスはステップ925へ進み、そこで、ディスクI/Oヒント710に何も先読み情報を追加することなく、シーケンスはステップ960へ進む。
受信した要求700が、ネクスト先読み値612を超えてその読み出しストリームを拡張するものであると判定された場合、ステップ920〜945において、ファイルシステム260は、種々のファクタを考慮して、ディスクI/Oヒント710の中に指定する先読みデータブロックの数718を決定する。ステップ920において、ファイルシステムは、クライアント読み出し要求が、読み出しアクセススタイル406によって先読み処理が禁止されているファイル又はディレクトリ内のデータを要求するものであるか否か、又は、受信した要求が、先読み処理を実施してはならない読み出しアクセススタイルに対応するDAFSキャッシュヒント等を有しているか否かを判定する。例えば、ファイルシステムは、クライアント要求データの読み出しアクセススタイル406が「ランダム」読み出しアクセススタイルに対応している場合、先読み処理を実施しないことを決定する場合がある。その場合、シーケンスはステップ925へ進み、そこで、ディスクI/Oヒント710内の推測的先読みブロック718の数をゼロに設定し、シーケンスはステップ960へ進む。
ステップ920において、読み出しアクセススタイルが先読み処理を禁止していない場合、次にステップ930において、ファイルシステムは、リードセット600内のカウント値が例えば3のような所定値以上であるか否かを判定する。カウント値が所定値未満である場合、ファイルシステムは、推測的先読み処理を正当化できるくらい十分な数のクライアント読み出し要求をまだ読み出しストリーム中に受信していないものと判断する。その結果、ステップ925においてファイルシステムは、読み出しを行う先読みデータブロックをディスクI/Oヒント710の中に何も指定せず、すなわち、推測的先読みブロックの数718をゼロに設定し、シーケンスはステップ960へ進む。なお、read_fullフラグまたはdumpフラグのいずれかが、読み出しストリームを含むファイルまたはディレクトリ全体が要求されることを示している場合、ステップ930はバイパス(「スキップ」)してもよい。この話の中で、推測的先読み処理は、所定数の読み出し要求が処理されるのを待つことなく、実施される場合がある。
ステップ930において、カウント値606が所定値(例えば、3)以上である場合、ステップ935において、ファイルシステムは、ディスクI/Oヒント710の中に指定する先読みデータブロックの数718を決定する。その目的のために、ファイルシステムは、例えばテーブル800を利用し、先読みデータブロックの数718をクライアント要求700において要求されたデータの大きさの関数として決定する。ファイルシステムは、read_fullフラグやdumpフラグの値といった他のファクタを更に考慮して、先読みデータブロック718の数を決定する場合がある。また、ファイルシステムは、スロースタートアルゴリズムのような先読みアルゴリズムを使用して、先読みデータブロックの数を決定する場合もある。選択された先読みデータブロックの数718が、クライアントの要求する読み出しストリームに前回関連付けられた先読みサイズ614とは異なる場合、その読み出しストリームの先読みサイズ614は、選択された先読みデータブロックの数718に等しくなるように更新される。
ステップ940において、ファイルシステム260は、リードセット内のカウント値606が、例えば50のような第1の閾値よりも大きいか否かを判定する。大きい場合、ステップ945においてファイルシステムは、先読みデータブロックの数718を増加させる(例えば、係数2によって)ことを正当化できるくらい十分な頻度で読み出しストリームがアクセスされたものと判断する。さらに、読み出しストリームが、多数のストレージディスク160を有するボリュームにおいて確立されていることをlarge_volumeフラグ616が示している場合、ステップ945において、複数のディスクからのデータの読み出しを最適化するために、先読みデータブロックの数718を更に調節する場合がある。いずれの場合も、ディスクI/Oヒント710中の先読みデータブロックの数718は適切に増加され、その読み出しストリームの先読みサイズ614も、増加後の先読みデータブロックの数718に等しくなるように設定される。
次に、ステップ950において、先読みデータブロックの数718は、ディスクI/Oヒント710の中に含められる。具体的には、読み出すブロックの総数714は、クライアントの要求する必須読み出しデータブロック716と、ステップ920〜945によって判定された推測的先読みデータブロックの数718との両方を含むように調節される。なお、ファイルシステム260は、バッファキャッシュ156を検索し、要求されたデータブロックのうちのいずれかが、「コア内」バッファ1200に既に記憶されているか否かを判定する。記憶されている場合、ファイルシステムは、バッファキャッシュから入手できないデータブロックだけを読み出すように、ディスクI/Oヒントを適切に調節する。また、ディスクストレージからのファイルデータの2以上の非連続シーケンスが要求された場合、ファイルシステムは、2以上のディスクI/Oヒント710を生成しなければならない場合がある。
ステップ955において、ファイルシステム260は、ネクスト先読み値612を更新する。例示的実施形態の一態様によれば、ネクスト先読み値は、バッファキャッシュにおけるキャッシュポルーションが最小になるように更新される。例えば、図10は、先読みサイズ614の所定の割合に基づいてネクスト先読み値612を設定する方法を示している。図示のように、ファイルの先読みは、fbn番号15〜17がファイルシステムによって読み出された後に実施され、その際、ファイルに関連する先読みサイズ614は64データブロックに設定される。したがって、fbn番号18〜81に割り当てられたデータブロックが、プリフェッチされる。
さらに、ネクスト先読み値612は、先読みサイズ614の所定の割合(例えば50%)に等しい数のデータブロックによって調節される。ネクスト先読み値612を先読みサイズのうちの或る割合として設定することにより、有利なことに、ファイルシステムは、最後にプリフェッチされたデータブロック(例えばfbn番号81)より前に、先読み処理の次のセットを実施し、それによって、先読み処理の次のセットが実施されるときに、プリフェッチされたデータブロックの一部が、メモリに残っている可能性を増加させる。このようにして、先読み処理の次のセットを実施する際の、ディスクストレージからの先読みデータブロックの読み出しの待ち時間を短縮することができ、キャッシュポルーションが低減される。
例えば、先読み処理の第1のセットによってfbn番号18〜81が割り当てられたデータブロックが読み出され、ネクスト先読み値612がfbn番号50(すなわち、64先読みデータブロックの50%)に設定された場合、先読み処理の次のセットは、読み出しストリームがfbn番号50を超えて拡張されるときに実施されることになる。例えば、先読み処理の次のセットによって、fbn番号50〜113が割り当てられた64個の先読みデータブロックが読み出される場合がある。先読み処理の次のセットによって読み出される先読みデータブロックの範囲(すなわち、fbn番号50〜113)は、先読みデータブロックの前回のセット(すなわち、fbn番号18〜81)と重なっているので、先読み処理の次のセットが実施されるときに、重なった範囲のデータブロック(すなわち、fbn番号18〜81)はバッファキャッシュの中に既に存在している場合がある。従って、ディスク160から読み出さなければならない先読みデータブロックの数は少なくなり、それによって、バッファキャッシュにおけるキャッシュポルーションが低減される。
ステップ960において、ファイルシステム260は、必要であれば、ディスクI/Oヒント710における1以上のI/Oフラグ720の値を設定する場合がある。例えば、方向フラグ720は、要求されたファイルブロック番号が広がる方向をディスクサブシステム240及び250に知らせるための値に設定される場合がある。図11は、buf_onceフラグ720を設定するためにファイルシステムによって使用される場合がある一連のステップを示している。buf_onceフラグ720は、要求されたデータブロックが「リードワンス(一回読み出し)」データを有しているか否かをディスクサブシステム240及び250に知らせる。シーケンスはステップ1100から開始され、ステップ1110へ進み、そこで、ファイルシステムは、クライアントの要求する読み出しストリームに関連するカウント値606が、例えば50のような第2のカウント値606よりも大きいか否かを判定する。大きい場合、ファイルシステムは、読み出しストリームにおいて十分に多数の読み出し要求が処理されたものと判断し、その読み出しストリームが、バックアップ処理のような大きなリードワンスデータ転送に対応するものと結論する。その場合、シーケンスはステップ1120へ進み、そこで、buf_onceフラグ720を、要求されたデータがリードワンスデータであることを示す値に設定し、シーケンスはステップ1140において終了する。
ステップ1110においてカウント値606が第2の閾値よりも大きくなかった場合、ステップ1130においてファイルシステム260は、読み出しストリームに関連するリードセット600内のread_onceフラグ616がリードワンスデータ転送に対応するものであるか否かを判定する。例えば、read_onceフラグ616は、クライアントの要求するデータに関連する読み出しアクセススタイル406又はDAFSキャッシュヒントの値に基づいて設定されている場合がある。read_onceフラグ616が、リードワンスデータが読み出されることを示していない場合、シーケンスはステップ1140において終了する。そうでなければ、ステップ1120において、buf_onceフラグ720をディスクI/Oヒント710の中に設定し、シーケンスはステップ1140において終了する。
I/Oフラグ720が適切に調節された後、ステップ965において、ディスクI/Oヒント710は、ディスクサブシステム層240及び250に転送され、次いで、必須読み出しデータブロック716及び先読みデータブロック718がストレージディスク160から読み出される。読み出されたデータブロックはコア内データバッファ1200にコピーされ、次いで、それが、クライアント読み出し要求700に対応するiovec730におけるポインタによって参照される。以下で説明するように、データバッファ1200は、「フラッシュ」キュー1210に記憶される場合もあれば、「通常」キュー1220に記憶される場合もある。フラッシュキュー1210は、クライアントの要求するデータが通常キュー1220に記憶される期間に比べて短い期間だけ、リードワンスデータ及び先読みデータを記憶することによって、キャッシュポルーションを低減するために使用される。したがって、バッファ1200が記憶されるのは、バッファ1200が先読みデータを有している場合、又は、buf_onceフラグ720がディスクI/Oヒント710に設定されている場合である。
図12は、バッファキャッシュ156においてバッファ1200の管理に使用されるフラッシュキュー1210及び通常キュー1220を示す略ブロック図である。例えば、先読みデータを有するバッファ1200は、フラッシュキューに記憶される。フラッシュキューは、例えば2秒のような所定の「フラッシュ閾値」時間の経過後にキューからバッファが「フラッシュ(消去)」されるファーストインファーストアウト方式のキューである。クライアントの要求するデータを有するバッファは通常、buf_onceフラグ720がディスクI/Oヒント710に設定されていない限り、通常キュー1220に記憶される。その場合、それらのバッファは、フラッシュキュー1210上にキューイングされる。
動作上、フラッシュキュー1210は、(i)通常キューが使用される場合、(ii)フラッシュキューの先頭にあるバッファが、通常キューの先頭にあるものよりも「古い」場合、または、(iii)フラッシュキューの先頭にあるバッファが、所定のフラッシュ閾値時間よりも古い場合に、新たに読み出されたデータブロックを記憶するためのバッファ1200を得るために使用される。フラッシュキュー1210からバッファがアクセスされた後、そのバッファは通常、そのバッファが「老齢化」するまで再度通常キュー1220にキューイングされ、したがって、そのバッファは再使用のために選択される(図12のステップ1)。同様に、通常キュー1220においてアクセスされたバッファ1200は、それらのバッファが老齢化するまで、通常キューに再度キューイングされる。
各バッファの相対年齢を管理するために、従来のバッファエージングポリシーを使用してもよい。したがって、各バッファ1200は、そのバッファが再使用のためにいつ選択されたを示す「buf_age」フラグを含む場合がある。あるバッファのbuf_ageフラグは、そのバッファに記憶されたデータが所定の時間の間保持されている間、第1の値に設定され、その後第2の値に設定される場合がある。したがって、buf_ageフラグが第2の値に設定されたバッファ1200は、そのバッファが次回アクセスされ、再度キューイングされるときに、フラッシュキュー1210の先頭(すなわち一番前)にキューイングされる(図12のステップ2)。
例示的実施形態によれば、各バッファ1200は、そのバッファがリードワンスデータを有しているか否かを示す「buf_once」フラグを更に含む。したがって、バッファ1200中のbuf_onceフラグは、そのバッファが何度も読み出される可能性があるデータを含む場合、第1の値に等しい。一方、バッファ1200中のbuf_onceフラグは、そのバッファがリードワンスデータ、例えば、ディスクI/Oヒント710内のbuf_onceフラグ720の値によって識別されるデータを含む場合、第2の値に等しい。バッファ1200中のbuf_onceフラグが第2の値に等しい場合、そのバッファはフラッシュキュー1210にキューイングされ、その中身が第1の時間に読み出されるまで、そのまま維持される。第1の時間に読み出された後、そのバッファのbuf_ageフラグは、そのバッファが老齢化したことを示す第2の値に設定され、そのバッファは、フラッシュキュー1210の先頭に再度キューイングされる(図12のステップ3)。
E.むすび
上記が、本発明の例示的実施形態に関する詳細な説明である。本発明の思想及び範囲から外れることなく、種々の変更及び追加を施すことも可能である。上記のように、例示的実施形態におけるファイルやディレクトリは、ゼロ以上の読み出しストリームを確立することが可能な任意のデータセットとして広く定義される。従って、この文脈におけるファイルは、ブロックベースのクライアント190bに対して単一の論理ユニット番号(LUN)としてエキスポートすることが可能なデータブロックの所定のセットに対応する「仮想ディスク」(vdisk)として実施される場合がある。ただし、仮想ディスクにおけるデータブロックは、マルチプロトコル・ストレージ・アプライアンス内でファイルベースのセマンティックを使用してアクセスされる。このように、ブロックベースのクライアントは、FCPプロトコルやiSCSIプロトコルのような従来のブロックベースのプロトコルに従ってその要求をフォーマットし、それらの要求は、ストレージオペレーティングシステム200によって実施される仮想化システムにより、ファイルベースのセマンティックを使用して処理される。一般に、例示的実施形態におけるファイルやディレクトリは、ゼロ以上の読み出しストリームを確立することが可能な任意のデータコンテナであってよく、例えば、ファイル、ディレクトリ、vdiskまたはLUNなどである場合がある。
例示した実施形態は、例えば、読み出しストリーム430及び435のような、「前方」方向に延びる(例えば、ファイルブロック番号が増加する順番に並ぶ)読み出しストリームを示しているが、当業者には明らかなように、本明細書に記載した発明の概念は、「後方」方向に延びる(例えば、ファイルブロック番号が減少する順番に並ぶ)読み出しストリームに対しても等しく適用可能である。その目的のために、各リードセットにおけるフラグ616は、そのリードセットに関連する読み出しストリームが前方方向に延びることを示す第1の値にされる場合もあれば、そのリードセットに関連する読み出しストリームが後方方向に延びることを示す第2の値に設定される場合もある。このように、ファイルシステムは、読み出しストリームの先読みデータブロックを、その読み出しストリームが延びる方向に、例えば、適当なフラグ616による指示に従って読み出す。
この説明は、マルチプロトコル・ストレージ・アプライアンス100を例として書かれているが、その原理は、任意のタイプのコンピュータに適用することができ、例えば、ブロックベースのストレージシステム(例えば、ストレージ・エリア・ネットワーク)のために構成されたものにも、ファイルベースのストレージシステム(例えば、ネットワーク・アタッチド・ストレージシステム)のために構成されたものにも、両方のタイプの組み合わせ(例えば、マルチプロトコル・ストレージ・アプライアンス)のために構成されたものにも等しく適合し、他の形のコンピュータシステムにも適合する。また、当然ながら、本発明の教示は、コンピュータ上で実行されるプログラム命令を含むコンピュータ読取可能媒体を含むソフトウェアでも、ハードウェアでも、ファームウェアでも、それらの組み合わせでも実施することが可能であるものと考えられる。さらに、当業者には分かるように、本明細書に記載した教示は、何らかの特定の実施形態に制限されるものではなく、種々のOSプラットフォームによって実施することが可能である。したがって、この説明は単なる例として解釈すべきものであり、本発明の範囲を制限するものとして解釈すべきものではない。
本発明に従って使用される例示的マルチプロトコル・ストレージ・アプライアンス環境を示す略ブロック図である。 本発明と共に有利に使用される例示的ストレージオペレーティングシステムを示す略ブロック図である。 例示的マルチプロトコル・ストレージ・アプライアンスにおけるファイル又はディレクトリに関連する例示的バッファツリーを示す略ブロック図である。 inode、及び、該inodeに関連するファイル又はディレクトリにおいて確立される読み出しストリームの先読みメタデータの記憶に使用される先読みデータ構造のセットの例を示す略ブロック図である。 ファイル又はディレクトリのサイズに基づいてファイル又はディレクトリに割り当てられるリードセットの数の判定に使用されるテーブルの例を示す略ブロック図である。 本発明に従って有利に使用されるリードセットの例を示す略ブロック図である。 本発明に従ってディスクストレージからデータブロックを読み出すために使用されるディスクI/O「ヒント」の例を示す略ブロック図である。 本発明に従ってディスクストレージから読み出す先読みデータの量を適宜選択するために使用されるテーブルの例を示す略ブロック図である。 ディスクI/Oヒントを生成するための一連のステップを含むフロー図であり、ディスクI/Oヒントの中で先読みデータブロックの数が適宜選択される。 ディスクI/Oヒントを生成するための一連のステップを含むフロー図であり、ディスクI/Oヒントの中で先読みデータブロックの数が適宜選択される。 先読みサイズの所定の割合に基づいて決定されたネクスト先読み値を有するファイル読み出しストリームの例を示す略ブロック図である。 ディスクI/Oヒント中の「buf_once」フラグの値を設定するための一連のステップを含むフロー図である。 本発明に従ってデータバッファの管理に使用されるフラッシュキュー及び通常キューの例を示す略ブロック図である。

Claims (27)

  1. ストレージシステムにおいて実施されるストレージオペレーティングシステムが、該ストレージシステムに記憶されるデータコンテナにおいて確立される読み出しストリームに対し、読み出される先読みデータの量を最適化するための方法であって、
    前記ストレージオペレーティングシステムに対して前記読み出しストリームを含むデータコンテナから読み出すことをクライアントが要求するデータを示すクライアント読み出し要求を前記ストレージシステムにおいて受信し、
    受信した前記クライアント読み出し要求に応じて、前記ストレージオペレーティングシステムが、前記データコンテナからの先読みデータの読み出しを許可されているか否かを判定し、
    前記ストレージオペレーティングシステムが、前記データコンテナからの先読みデータの読み出しを許可されている場合、
    (i)前記データコンテナから読み出す先読みデータの量を1以上のファクタに基づいて選択するステップと、
    (ii)選択される前記量の先読みデータを前記データコンテナから読み出すステップとを実施することを含み、
    前記データコンテナのデータブロックへのポインタを記憶するインデックスノード(inode)が、前記データコンテナに関連する読み出しアクセススタイルを示す値をさらに含み、前記読み出しアクセススタイルが、期待される読み出しパターンを示し、
    前記データコンテナから読み出す先読みデータの量を選択するために使用される前記1以上のファクタが、前記データコンテナのinodeに記憶された前記読み出しアクセススタイルを含む、方法。
  2. 前記データコンテナは、ファイル、ディレクトリ、vdisk、又は、LUNである、請求項1に記載の方法。
  3. 前記クライアントが要求するデータによって前記読み出しストリームが所定の次の先読み値を超えて拡張される場合、前記ストレージオペレーティングシステムは、前記データコンテナから先読みデータを読み出すことが許可されているものと判断される、請求項1に記載の方法。
  4. 前記所定の次の先読み値は、前記読み出しストリームに関連するリードセットデータ構造に記憶される、請求項3に記載の方法。
  5. 前記所定の次の先読み値は、前記選択された量の先読みデータの或る割合に基づいて更新される、請求項3に記載の方法。
  6. 前記データコンテナに関連する読み出しアクセススタイルは、通常アクセス読み出しアクセススタイル、シーケンシャルアクセス読み出しアクセススタイル、及びランダムアクセス読み出しアクセススタイルのうちのいずれか1つである、請求項1に記載の方法。
  7. 前記読み出しアクセススタイルが前記ランダムアクセス読み出しアクセススタイルに対応する場合、前記選択される先読みデータの量はゼロに等しい、請求項6に記載の方法。
  8. 前記読み出しストリームにおけるクライアント読み出し要求の数は、前記先読みデータの量の選択に使用される前記1以上のファクタのうちの1つである、請求項1に記載の方法。
  9. 前記読み出しストリームにおいて処理されるクライアント読み出し要求の数は、前記読み出しストリームに関連するリードセットデータ構造にカウント値として記憶される、請求項8に記載の方法。
  10. 前記クライアントが要求するデータの量は、前記先読みデータの量の選択すに使用される1以上のファクタのうちの1つである、請求項1に記載の方法。
  11. 前記クライアントが要求するデータが大きい場合、前記選択される先読みデータの量は、所定の上限に等しくなるように設定される、請求項10に記載の方法。
  12. 前記読み出しストリームにおいて処理されるクライアント読み出し要求の数が第1の閾値よりも大きい場合、前記選択される先読みデータの量は2倍にされる、請求項1に記載の方法。
  13. (i)前記読み出しストリームにおいて処理されるクライアント読み出し要求の数が第2の閾値よりも大きい場合、又は、(ii)前記読み出しストリームに関連するメタデータのセットが、前記クライアントが要求するデータがリードワンスデータであることを示している場合、前記クライアントが要求するデータは、リードワンスデータとして識別される、請求項1に記載の方法。
  14. 前記選択される先読みデータの量は、フラッシュキューにキューイングされた1以上のバッファに記憶され、前記フラッシュキューは、所定時間の後にバッファを拒否するように構成される、請求項1に記載の方法。
  15. 前記所定時間は2秒である、請求項14に記載の方法。
  16. 装置に記憶されるデータコンテナにおいて確立される読み出しストリームに対し、読み出される先読みデータの量を最適化するストレージオペレーティングシステムを実施するように構成された装置であって、
    前記ストレージオペレーティングシステムに対して前記読み出しストリームを含むデータコンテナから読み出すことをクライアントが要求するデータを示すクライアント読み出し要求を受信する手段と、
    受信した前記クライアント読み出し要求に応じて、前記ストレージオペレーティングシステムが、前記データコンテナからの先読みデータの読み出しを許可されているか否かを判定する手段と、
    前記データコンテナから読み出す先読みデータの量を1以上のファクタに基づいて選択する手段と、
    選択された前記量の先読みデータを前記データコンテナから読み出す手段と
    を含み、
    前記データコンテナのデータブロックへのポインタを記憶するインデックスノード(inode)が、前記データコンテナに関連する読み出しアクセススタイルを示す値をさらに含み、前記読み出しアクセススタイルが、期待される読み出しパターンを示し、
    前記データコンテナから読み出す先読みデータの量を選択するために使用される前記1以上のファクタが、前記データコンテナのinodeに記憶された前記読み出しアクセススタイルを含む、装置。
  17. 前記データコンテナは、ファイル、ディレクトリ、vdisk、又は、LUNである、請求項16に記載の装置。
  18. 前記クライアントが要求するデータによって前記読み出しストリームが所定の次の先読み値を超えて拡張される場合、前記ストレージオペレーティングシステムは、前記データコンテナから先読みデータを読み出すことが許可されるものと判断される、請求項16に記載の装置。
  19. 前記所定の次の先読み値を、前記選択される量の先読みデータの或る割合に基づいて更新する手段を更に含む、請求項18に記載の装置。
  20. 前記先読みデータの量の選択に使用される1以上のファクタは、
    (i)クライアントが要求するデータの量、及び
    (ii)前記読み出しストリームにおいて処理されるクライアント読み出し要求の数
    のうちの少なくとも1つをさらに含む、請求項16に記載の装置。
  21. 前記読み出しストリームにおいて処理されるクライアント読み出し要求の数が第1の閾値よりも大きい場合、前記選択される先読みデータの量は2倍にされる、請求項16に記載の装置。
  22. ストレージシステムに記憶されるデータコンテナにおいて確立される読み出しストリームに対し、読み出される先読みデータの量を最適化するように構成されたストレージシステムであって、
    前記読み出しストリームを含むデータコンテナから読み出すことをクライアントが要求するデータを示すクライアント読み出し要求を受信するネットワークアダプタと、
    受信した前記クライアント読み出し要求に応じて、前記ストレージオペレーティングシステムが、前記データコンテナからの先読みデータの読み出しを許可されているか否かを判定するステップと、前記ストレージオペレーティングシステムが、前記データコンテナからの先読みデータの読み出しを許可されている場合、(i)前記データコンテナから読み出す先読みデータの量を1以上のファクタに基づいて選択し、(ii)選択された前記量の先読みデータを前記データコンテナから読み出すステップとを実施するストレージオペレーティングを実施するための命令を記憶するように構成されたメモリと
    を含み、
    前記データコンテナのデータブロックへのポインタを記憶するインデックスノード(inode)が、前記データコンテナに関連する読み出しアクセススタイルを示す値をさらに含み、前記読み出しアクセススタイルが、期待される読み出しパターンを示し、
    前記データコンテナから読み出す先読みデータの量を選択するために使用される前記1以上のファクタが、前記データコンテナのinodeに記憶された前記読み出しアクセススタイルを含む、ストレージシステム。
  23. 前記データコンテナは、ファイル、ディレクトリ、vdisk、又は、LUNである、請求項22に記載のストレージシステム。
  24. 前記クライアントが要求するデータによって前記読み出しストリームが所定の次の先読み値を超えて拡張される場合、前記ストレージオペレーティングシステムは、前記データコンテナから先読みデータを読み出すことが許可されているものと判断される、請求項22に記載のストレージシステム。
  25. 前記所定の次の先読み値は、前記選択された量の先読みデータの或る割合に基づいて更新される、請求項24に記載のストレージシステム。
  26. 前記先読みデータの量の選択に使用される1以上のファクタは、
    (i)クライアントが要求するデータの量、及び
    (ii)前記読み出しストリームにおいて処理されるクライアント読み出し要求の数
    のうちの少なくとも1つを含む、請求項22に記載のストレージシステム。
  27. 前記クライアント読み出し要求において処理されるクライアント読み出し要求の数が第1の閾値よりも大きい場合、前記選択される先読みデータの量は2倍にされる、請求項22に記載のストレージシステム。
JP2006549366A 2004-01-08 2005-01-06 複数ファクタに基づく適応ファイル先読み Active JP4494420B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/753,608 US7631148B2 (en) 2004-01-08 2004-01-08 Adaptive file readahead based on multiple factors
PCT/US2005/000203 WO2005071551A2 (en) 2004-01-08 2005-01-06 Adaptive file readahead based on multiple factors

Publications (2)

Publication Number Publication Date
JP2007520812A JP2007520812A (ja) 2007-07-26
JP4494420B2 true JP4494420B2 (ja) 2010-06-30

Family

ID=34739225

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006549366A Active JP4494420B2 (ja) 2004-01-08 2005-01-06 複数ファクタに基づく適応ファイル先読み

Country Status (4)

Country Link
US (1) US7631148B2 (ja)
EP (1) EP1702271B9 (ja)
JP (1) JP4494420B2 (ja)
WO (1) WO2005071551A2 (ja)

Families Citing this family (77)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7809693B2 (en) * 2003-02-10 2010-10-05 Netapp, Inc. System and method for restoring data on demand for instant volume restoration
US7333993B2 (en) * 2003-11-25 2008-02-19 Network Appliance, Inc. Adaptive file readahead technique for multiple read streams
US7502333B2 (en) * 2004-03-23 2009-03-10 Hewlett-Packard Development Company, L.P. Pre-configured topology with connection management
US20060045098A1 (en) * 2004-08-31 2006-03-02 Krause Michael R System for port mapping in a network
JP4824085B2 (ja) 2005-04-25 2011-11-24 ネットアップ,インコーポレイテッド ネットワークファイルシステムをキャッシュするシステム、及び方法
US7689609B2 (en) * 2005-04-25 2010-03-30 Netapp, Inc. Architecture for supporting sparse volumes
US7386674B1 (en) * 2005-04-25 2008-06-10 Netapp, Inc. Method and apparatus to provide a unified readahead scheme for multiple sources
US7702743B1 (en) 2006-01-26 2010-04-20 Symantec Operating Corporation Supporting a weak ordering memory model for a virtual physical address space that spans multiple nodes
US7756943B1 (en) * 2006-01-26 2010-07-13 Symantec Operating Corporation Efficient data transfer between computers in a virtual NUMA system using RDMA
JP4915774B2 (ja) * 2006-03-15 2012-04-11 株式会社日立製作所 ストレージシステム及びストレージシステムの制御方法
US7996623B2 (en) * 2006-06-30 2011-08-09 Seagate Technology Llc Read ahead storage control
US7809883B1 (en) * 2007-10-16 2010-10-05 Netapp, Inc. Cached reads for a storage system
US8533384B2 (en) 2007-12-27 2013-09-10 Sandisk Enterprise Ip Llc Flash memory controller garbage collection operations performed independently in multiple flash memory groups
US8209488B2 (en) * 2008-02-01 2012-06-26 International Business Machines Corporation Techniques for prediction-based indirect data prefetching
US8161263B2 (en) * 2008-02-01 2012-04-17 International Business Machines Corporation Techniques for indirect data prefetching
US8161264B2 (en) * 2008-02-01 2012-04-17 International Business Machines Corporation Techniques for data prefetching using indirect addressing with offset
US8161265B2 (en) * 2008-02-01 2012-04-17 International Business Machines Corporation Techniques for multi-level indirect data prefetching
US8166277B2 (en) * 2008-02-01 2012-04-24 International Business Machines Corporation Data prefetching using indirect addressing
US7895217B1 (en) * 2008-04-17 2011-02-22 Netapp, Inc. Method and system for processing requests for accessing stored information
US9348842B2 (en) * 2009-03-23 2016-05-24 Riverbed Technology, Inc. Virtualized data storage system optimizations
US9239840B1 (en) 2009-04-24 2016-01-19 Swish Data Corporation Backup media conversion via intelligent virtual appliance adapter
US9087066B2 (en) * 2009-04-24 2015-07-21 Swish Data Corporation Virtual disk from network shares and file servers
US8190655B2 (en) * 2009-07-02 2012-05-29 Quantum Corporation Method for reliable and efficient filesystem metadata conversion
US8806143B1 (en) * 2009-10-09 2014-08-12 Netapp, Inc. Queuing received write blocks for reducing file fragmentation
US8612374B1 (en) 2009-11-23 2013-12-17 F5 Networks, Inc. Methods and systems for read ahead of remote data
KR101636878B1 (ko) * 2010-02-18 2016-07-06 삼성전자주식회사 가상화 환경에서의 데이터 처리 방법 및 드라이버
CN102130935A (zh) * 2010-08-05 2011-07-20 华为技术有限公司 数据获取方法和装置以及网络存储方法和设备
US8732406B1 (en) * 2011-03-15 2014-05-20 Netapp, Inc. Mechanism for determining read-ahead length in a storage system
US8849880B2 (en) * 2011-05-18 2014-09-30 Hewlett-Packard Development Company, L.P. Providing a shadow directory and virtual files to store metadata
US8825724B2 (en) * 2012-03-29 2014-09-02 Lsi Corporation File system hinting
JP2013218505A (ja) * 2012-04-09 2013-10-24 Hitachi Ltd クライアントとサーバ間の通信を中継する通信装置及び通信システム
US9699263B1 (en) 2012-08-17 2017-07-04 Sandisk Technologies Llc. Automatic read and write acceleration of data accessed by virtual machines
KR101978256B1 (ko) 2012-09-27 2019-05-14 삼성전자주식회사 모바일 기기의 데이터 독출 방법 및 이를 이용하는 모바일 기기
TW201416873A (zh) * 2012-10-19 2014-05-01 Apacer Technology Inc 網路儲存系統的檔案分享方法
US9501398B2 (en) 2012-12-26 2016-11-22 Sandisk Technologies Llc Persistent storage device with NVRAM for staging writes
US9612948B2 (en) 2012-12-27 2017-04-04 Sandisk Technologies Llc Reads and writes between a contiguous data block and noncontiguous sets of logical address blocks in a persistent storage device
US9454420B1 (en) 2012-12-31 2016-09-27 Sandisk Technologies Llc Method and system of reading threshold voltage equalization
US9870830B1 (en) 2013-03-14 2018-01-16 Sandisk Technologies Llc Optimal multilevel sensing for reading data from a storage medium
US9367246B2 (en) 2013-03-15 2016-06-14 Sandisk Technologies Inc. Performance optimization of data transfer for soft information generation
WO2014147840A1 (ja) * 2013-03-22 2014-09-25 富士通株式会社 アクセス制御プログラム、ディスク装置及びアクセス制御方法
US9223791B2 (en) 2013-07-02 2015-12-29 Red Hat, Inc. System and method for reading file blocks
US9524235B1 (en) 2013-07-25 2016-12-20 Sandisk Technologies Llc Local hash value generation in non-volatile data storage systems
US9361221B1 (en) 2013-08-26 2016-06-07 Sandisk Technologies Inc. Write amplification reduction through reliable writes during garbage collection
US9639463B1 (en) 2013-08-26 2017-05-02 Sandisk Technologies Llc Heuristic aware garbage collection scheme in storage systems
US9442662B2 (en) 2013-10-18 2016-09-13 Sandisk Technologies Llc Device and method for managing die groups
US9436831B2 (en) 2013-10-30 2016-09-06 Sandisk Technologies Llc Secure erase in a memory device
US10209906B2 (en) 2013-10-31 2019-02-19 Hewlett Packard Enterprises Development LP Target port processing of a data transfer
US9703816B2 (en) 2013-11-19 2017-07-11 Sandisk Technologies Llc Method and system for forward reference logging in a persistent datastore
US9520197B2 (en) 2013-11-22 2016-12-13 Sandisk Technologies Llc Adaptive erase of a storage device
US9520162B2 (en) 2013-11-27 2016-12-13 Sandisk Technologies Llc DIMM device controller supervisor
US9582058B2 (en) 2013-11-29 2017-02-28 Sandisk Technologies Llc Power inrush management of storage devices
WO2015126429A1 (en) 2014-02-24 2015-08-27 Hewlett-Packard Development Company, L.P. Repurposable buffers for target port processing of a data transfer
US9703636B2 (en) 2014-03-01 2017-07-11 Sandisk Technologies Llc Firmware reversion trigger and control
US9390814B2 (en) 2014-03-19 2016-07-12 Sandisk Technologies Llc Fault detection and prediction for data storage elements
US9454448B2 (en) 2014-03-19 2016-09-27 Sandisk Technologies Llc Fault testing in storage devices
US9448876B2 (en) 2014-03-19 2016-09-20 Sandisk Technologies Llc Fault detection and prediction in storage devices
US9390021B2 (en) 2014-03-31 2016-07-12 Sandisk Technologies Llc Efficient cache utilization in a tiered data structure
US9626399B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Conditional updates for reducing frequency of data modification operations
US9626400B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Compaction of information in tiered data structure
US9697267B2 (en) 2014-04-03 2017-07-04 Sandisk Technologies Llc Methods and systems for performing efficient snapshots in tiered data structures
US10656842B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Using history of I/O sizes and I/O sequences to trigger coalesced writes in a non-volatile storage device
US10656840B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Real-time I/O pattern recognition to enhance performance and endurance of a storage device
US10146448B2 (en) * 2014-05-30 2018-12-04 Sandisk Technologies Llc Using history of I/O sequences to trigger cached read ahead in a non-volatile storage device
US10372613B2 (en) 2014-05-30 2019-08-06 Sandisk Technologies Llc Using sub-region I/O history to cache repeatedly accessed sub-regions in a non-volatile storage device
US9703491B2 (en) 2014-05-30 2017-07-11 Sandisk Technologies Llc Using history of unaligned writes to cache data and avoid read-modify-writes in a non-volatile storage device
US10114557B2 (en) 2014-05-30 2018-10-30 Sandisk Technologies Llc Identification of hot regions to enhance performance and endurance of a non-volatile storage device
US9652381B2 (en) 2014-06-19 2017-05-16 Sandisk Technologies Llc Sub-block garbage collection
US9443601B2 (en) 2014-09-08 2016-09-13 Sandisk Technologies Llc Holdup capacitor energy harvesting
WO2016051593A1 (ja) * 2014-10-03 2016-04-07 株式会社日立製作所 計算機システム
US9684459B2 (en) * 2014-11-17 2017-06-20 Kabushiki Kaisha Toshiba Memory system
US20170116127A1 (en) * 2015-10-22 2017-04-27 Vormetric, Inc. File system adaptive read ahead
US10437511B2 (en) * 2016-11-22 2019-10-08 International Business Machines Corporation Data access on tape
US10303401B2 (en) * 2017-01-26 2019-05-28 International Business Machines Corporation Data caching for block storage systems
US11855898B1 (en) 2018-03-14 2023-12-26 F5, Inc. Methods for traffic dependent direct memory access optimization and devices thereof
US10795610B2 (en) * 2018-05-30 2020-10-06 Micron Technology, Inc. Read look ahead data size determination
CN114168272B (zh) * 2022-02-14 2022-04-19 麒麟软件有限公司 一种缓存读文件时随机读的内核io优化方法
US20230342244A1 (en) * 2022-04-20 2023-10-26 Western Digital Technologies, Inc. Read Look Ahead Optimization According To NVMe Dataset Management Hints

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4489378A (en) * 1981-06-05 1984-12-18 International Business Machines Corporation Automatic adjustment of the quantity of prefetch data in a disk cache operation
US5146578A (en) * 1989-05-01 1992-09-08 Zenith Data Systems Corporation Method of varying the amount of data prefetched to a cache memory in dependence on the history of data requests
US5371870A (en) * 1992-04-24 1994-12-06 Digital Equipment Corporation Stream buffer memory having a multiple-entry address history buffer for detecting sequential reads to initiate prefetching
US6026452A (en) * 1997-02-26 2000-02-15 Pitts; William Michael Network distributed site cache RAM claimed as up/down stream request/reply channel for storing anticipated data and meta data
US5381539A (en) * 1992-06-04 1995-01-10 Emc Corporation System and method for dynamically controlling cache management
US5729556A (en) * 1993-02-22 1998-03-17 Texas Instruments System decoder circuit with temporary bit storage and method of operation
US5963962A (en) 1995-05-31 1999-10-05 Network Appliance, Inc. Write anywhere file-system layout
DE69425658T2 (de) * 1993-06-03 2001-04-19 Network Appliance Inc Anordnung eines dateisystems zum beschreiben beliebiger bereiche
ATE222384T1 (de) * 1993-06-03 2002-08-15 Network Appliance Inc Verfahren und dateisystem zur zuordnung von datei-blöcken zu speicherplatz in einem raid- plattensystem
US5913028A (en) * 1995-10-06 1999-06-15 Xpoint Technologies, Inc. Client/server data traffic delivery system and method
US6484239B1 (en) * 1997-12-29 2002-11-19 Intel Corporation Prefetch queue
US6216208B1 (en) * 1997-12-29 2001-04-10 Intel Corporation Prefetch queue responsive to read request sequences
US6260115B1 (en) * 1999-05-13 2001-07-10 Storage Technology Corporation Sequential detection and prestaging methods for a disk storage subsystem
US6567894B1 (en) * 1999-12-08 2003-05-20 International Business Machines Corporation Method and apparatus to prefetch sequential pages in a multi-stream environment
US6523093B1 (en) * 2000-09-29 2003-02-18 Intel Corporation Prefetch buffer allocation and filtering system

Also Published As

Publication number Publication date
WO2005071551A3 (en) 2005-10-06
WO2005071551A2 (en) 2005-08-04
US7631148B2 (en) 2009-12-08
JP2007520812A (ja) 2007-07-26
EP1702271B1 (en) 2012-08-15
EP1702271B9 (en) 2013-05-15
EP1702271A2 (en) 2006-09-20
US20050154825A1 (en) 2005-07-14

Similar Documents

Publication Publication Date Title
JP4494420B2 (ja) 複数ファクタに基づく適応ファイル先読み
JP4510028B2 (ja) 複数読み出しストリームのための適応先読み技術
JP4824085B2 (ja) ネットワークファイルシステムをキャッシュするシステム、及び方法
US7933936B2 (en) Method and system for automatic management of storage space
US8219639B2 (en) Storage area network file system
US7600083B2 (en) Method and system for automatic write request suspension
US7069393B2 (en) Storage system providing file aware caching and file aware remote copy
US7809883B1 (en) Cached reads for a storage system
US20090193207A1 (en) Computer system, remote copy method and first computer
JP2008040645A (ja) Nasマイグレーションによる負荷分散方法、並びに、その方法を用いた計算機システム及びnasサーバ
JP2009087320A (ja) Nas/cas統一ストレージシステムのための方法および装置
JP2009230661A (ja) ストレージ装置及びこれの制御方法
US11409454B1 (en) Container ownership protocol for independent node flushing
JP2008539521A (ja) 瞬時ボリューム復元のためのオン・デマンドでデータを復元するシステム、および方法
US11500591B1 (en) Methods and systems for enabling and disabling remote storage location cache usage in a networked storage system
US7783611B1 (en) System and method for managing file metadata during consistency points
US7996607B1 (en) Distributing lookup operations in a striped storage system

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090825

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091125

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20091125

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20091207

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100225

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100330

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100407

R150 Certificate of patent or registration of utility model

Ref document number: 4494420

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130416

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130416

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140416

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250