(57)【要約】【課題】ネットワークを介したファイルアクセスでは、クライアントからの一つの要求が、複数の小容量の要求に分割され、同時に発行される。また、ネットワークのパケット落ちによる再送等で、要求のファイルサーバへの到着順序が乱れてしまう。このためファイルへのアクセスパターンが乱され、有効な先読みを行うことが困難となる。【解決手段】本発明では、ファイルシステムのキャッシュの使用状態により先読みを抑止する手段と、パラメータにより先読み量の計算方式を変更する手段と、キャッシュ上にデータが存在するかの状態により先読みのためのパラメータの引継ぎを抑止するための手段をファイルサーバ上に持つ。【効果】ネットワークを介したファイルアクセスで起こる、クライアントからのアクセスパターンの乱れに対処して、ファイルサーバで有効な先読みを行うことを可能とする。【選択図】  図３
2005031829.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介してクライアントからファイルに対するアクセス要求を受け付けるファイルサーバにおいて、ファイルの読み出し要求時に、今後アクセスが行われるファイル領域を予測し、予測した領域を前もってキャッシュ上に読み出す先読み処理を有し、先読み処理ではファイルシステムのキャッシュの使用状態により先読みを抑止する手段を有することを特徴とするファイルサーバ。
【請求項２】
ネットワークを介してクライアントからファイルに対するアクセス要求を受け付けるファイルサーバにおいて、ファイルの読み出し要求時に、今後アクセスが行われるファイル領域を予測し、予測した領域を前もってキャッシュ上に読み出す先読み処理を有し、先読み処理ではパラメータにより先読み量の計算方式を変更する手段を有するファイルサーバ。
【請求項３】
ネットワークを介してクライアントからファイルに対するアクセス要求を受け付けるファイルサーバにおいて、ファイルの読み出し要求時に、今後アクセスが行われるファイル領域を予測し、予測した領域を前もってキャッシュ上に読み出す先読み処理を有し、先読み処理ではキャッシュ上にデータが存在するかの状態により先読みのためのパラメータの引継ぎを抑止するための手段を有するファイルサーバ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ファイルの管理を行う処理であるファイルシステムにおける先読み処理方式に関する。特に、クライアントからネットワークを介してアクセスを行うネットワークファイルサーバにおける先読み方式に関するものである。
【０００２】
【従来の技術】
ファイルを管理するファイルシステムにおいて、ファイルの読み出し処理を高速化するために、先読み処理を行う。先読み処理は、今後アクセスされるデータ領域を予測し、ファイルシステムがメインメモリ上に持つキャッシュに前もってデータを読み出す処理である。先読み処理により、キャッシュのヒット率を向上させ、読み出しの応答時間を改善することができる。また、ディスクに対するＩ／Ｏを一括して行うため、ＣＰＵとディスク両方の負荷を削減することができる。尚、ファイルの先読み技術については、非特許文献１に開示されている。
【０００３】
先読み処理は、今後アクセスされるデータ領域を正しく予測できた場合は有効な処理であるが、誤って予測した場合は、アクセスの行われない不必要な領域を読み出すことになり、ファイルアクセスに悪影響を与えてしまう。そのため、今後アクセスが行われるデータ領域を正確に予測することが重要である。
【０００４】
先読み処理では、今後アクセスが行われるファイル領域を予測するために、今までに行われたファイルへのアクセスパターンを用いる。それまでに行われたアクセスのパターンがシーケンシャルである場合、その後もシーケンシャルにアクセスが行われる可能性が高いと予測し、先の領域を先読みにより読み出す。逆に、今までに行われたアクセスのパターンがシーケンシャルでない（ランダムである）場合、今後もランダムにアクセスが行われる可能性が高いと予測し、先読みを行わない。
【０００５】
【非特許文献１】
ダニエル・Ｐ．  ボベット（Ｄａｎｉｅｌ  Ｐ．  Ｂｏｖｅｔ）、マルコ  セサティ（Ｍａｒｃｏ  Ｃｅｓａｔｉ）著、「詳解Ｌｉｎｕｘカーネル」、第２版、オライリージャパン、ｐ．５６９−ｐ５７５
【０００６】
【発明が解決しようとする課題】
前述の通り、先読み処理では今後アクセスされる領域を予測するために、それまでに行われたアクセスパターンを用いる。しかし、クライアントからネットワークを介してアクセスが行われる場合、ネットワークの特性により、ファイルへのアクセスパターンが乱され、有効な先読みを行うことが困難となる。
【０００７】
ネットワークを介したファイルアクセスには、よくＮＦＳ（Ｎｅｔｗｏｒｋ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）というプロトコルが使用される。このＮＦＳではクライアントからのひとつの要求が、ＮＦＳ処理の持つバッファサイズにより８ＫＢ等の複数の小容量の要求に分割されて行われる。そして、ＮＦＳ処理を行うプログラムの実行イメージである非同期スレッド数に応じて、分割された要求が同時に発行される。しかしクライアントからのＮＦＳ要求を受け付けるファイルサーバ側の処理では、それらの複数の要求に対する処理間で先読みに関するパラメータを反映する手段がないため、全体として無駄な処理を行ってしまうことがある。
【０００８】
また、クライアントからの一つの要求が、複数の連続した小容量の要求に分割されて発行されるため、先読みが大量に動作し、不必要な読み出しを行ってしまうことがある。
【０００９】
さらに、ネットワーク経由のアクセスであるため、パケット落ちによる再送等で、要求のファイルサーバへの到着順序が乱れるため、要求によるアクセスのシーケンシャル性が正しく判断できず、必要な先読みを正しく実行できない場合がある。
【００１０】
【課題を解決するための手段】
前記のようなネットワークを介したファイルアクセスで起こる、クライアントからのアクセスパターンの乱れに対処するため、本先読み方式では、先読みを行うかどうかを決める先読み量の計算処理において、ファイルシステムの持つキャッシュが、ファイルサーバ上の他の処理により既に利用中であるかをロック状態により調べ、その状態により先読みを抑止する手段を持つ。
【００１１】
また、クライアントからのアクセスが何回連続で行われたかというシーケンシャル性を表すパラメータを用い、その値により先読み量の計算方法を変更する手段を持つ。更に、ファイルシステムの持つキャッシュにデータが存在した場合には、その処理によって先読みパラメータの更新を抑止するための手段を持つ。
【００１２】
【発明の実施の形態】
以下、本発明による先読み処理方式の実施形態を図面により詳細に説明する。
【００１３】
図１は、本発明を実施するシステム構成を示した図である。ネットワーク１１を介して、複数のクライアント１０がファイルサーバ１２に接続される。クライアント１０は、ファイルサーバ１２に対して、ファイルへの読み出しや書き込みといったファイルへのアクセス要求を、ネットワーク１１を介して発行する。ファイルサーバ１２に対して要求を行う方法としては、例えばＮＦＳを用いる。クライアント１０が発行したＮＦＳ要求は、ネットワーク１１を介してファイルサーバ１２に届けられ、ファイルサーバ１２では、ＮＦＳを処理するプログラムがＣＰＵ１５上で動作し、クライアント１０からの要求を処理する。そして、その応答をクライアント１０に返す。
【００１４】
ファイルサーバ１２は、情報の送受信を行うためのネットワークインタフェース１４、ネットワーク１１やファイルシステム、ディスクへの入出力（Ｉ／Ｏ）等の各種処理を実行するＣＰＵ１５、ＣＰＵ１５によって実行されるプログラムやファイルシステムで使用するデータを格納するキャッシュが存在するメインメモリ１６、ディスクに対してＩ／Ｏ処理を行うためのディスクアダプタ１７から構成される。
【００１５】
ディスク装置１３は、磁気ディスク等の不揮発の媒体で構成され、ファイルのデータ等が記憶される。ファイルサーバ１２からディスクアダプタ１７を通してデータの読み出しや書き込みのＩ／Ｏ要求を受け取り、ファイルサーバ１２のメインメモリ１６上にあるキャッシュとの間でデータの交換を行う。
【００１６】
クライアント１０から読み出し要求が発行された場合、ファイルサーバ１２ではその要求に対して先読みを行うかどうかを判定する。先読みが必要な場合読み出し要求をディスク装置１３に対して行う。その後、今回の読み出しに対する処理を行って、読み出しデータを応答としてクライアント１０に返す。この読み出し要求に伴って、先読み処理が行われる。以下、先読み処理について説明を行う。
【００１７】
図２にクライアント１０から発行された読み出し要求に対してファイルサーバ１２が行う先読み処理について示す。ＮＦＳ等では、ファイルサーバ１２側での処理を容易にするために、クライアント１０からの要求毎に処理を完結し、ファイルサーバ１２側では、処理間で状態を引き継ぐことは行わない。
【００１８】
このため、先読みのように前回のアクセス範囲との関係によってアクセスのシーケンシャル性を判断するような処理の場合、メインメモリ１６上に別途必要な状態を格納しておき、処理の開始時にその状態を読み出すことによって、処理間で状態を引き継ぐ必要がある。
【００１９】
そのため、クライアント１０から発行された読み出し要求を受け取ったファイルサーバ１２では、まずステップ２１で、そのファイルに対する先読みパラメータを、メインメモリ１６上にあるパラメータキャッシュから読み出す。読み出したパラメータには、前回までにファイルに対して行われたアクセス領域およびそれに対して行われた先読み範囲といった情報が格納されている。
【００２０】
続くステップ２２では、これと今回行われるアクセス領域から、今後のアクセスがシーケンシャルに行われるか判断し、それに応じて先読みを行う先読み量を計算する。
【００２１】
次にステップ２３で、先読み量に応じてＣＰＵ１５からはディスクアダプタ１７を介してディスクに読み出しの要求を行う。
【００２２】
そして、ステップ２４で、次回の要求時の処理で先読み量の計算に利用するために、今回の処理によって更新された先読みパラメータを先読みパラメータキャッシュに書き込んで値を更新する。
【００２３】
ＮＦＳ等では、先に示したとおり、先読みに関するパラメータを処理間で引き継ぐために先読みパラメータキャッシュを用いている。このために同時に行われる処理間では、互いの処理による影響が先読みパラメータに反映されない。ＮＦＳ等のネットワーク１１を介したファイルアクセスでは、ネットワーク１１によるオーバヘッドを削減するために、複数の要求が同時に発行される。この場合、従来方式では、複数の要求に対する各処理でそれぞれ先読みを行い、ディスクＩ／Ｏを発行してしまう。これにより、図４の従来技術４５のようにＮＦＳ等で発行される８ＫＢ等の単位でディスクＩ／Ｏが分割され、一括して処理することができない。
【００２４】
そこで本発明の先読み量の計算処理では、先読み処理のステップ２２の先読み量の計算で、キャッシュの状態による判定を行う。ステップ２２内の詳細な処理内容を図３に示す。
【００２５】
ステップ３１で、アクセスを行おうとする領域に対するメインメモリ１６上のキャッシュの状態をチェックし、他の処理により既にキャッシュがロックされている場合は、同時に処理中の他の要求により先読み処理が行われたとみなし、先読みを行わないようにする。
【００２６】
そして、ステップ３９で先読みパラメータ更新の抑止設定をし、先読み処理フローのステップ２４で、本処理による先読みパラメータの更新を行わないようにする。これは、他の処理で先読みが行われ、先読みパラメータが更新されていた場合に、それを本処理のパラメータで上書きして無効にしてしまわないためである。これにより、図４の本発明４６のように一括して先読みを行うことが可能となる。
【００２７】
また、先読み処理では、同一ファイルに対する読み出し要求のアクセスパターンにより、アクセスのシーケンシャル性を判定している。アクセス範囲が前回の範囲と連続する場合、シーケンシャル性ありと判断する。ＮＦＳ等のようにネットワーク１１を介してアクセスを行う場合、ネットワーク処理のためのバッファのサイズ等の理由により、一回の読み出しを、容量の小さい複数の要求に分割する場合がある。この場合、従来処理では、分割された複数の要求により、シーケンシャル性ありと判断し、大量の先読みを行ってしまう。そして、その後この領域にアクセスが行われず、結果的に先読みが無駄になってしまうことがある。
【００２８】
これを防ぐため、本発明の先読み量の計算処理では、アクセスのシーケンシャル性を示すパラメータ（ｆ＿ｓｅｑ）を用いる。ｆ＿ｓｅｑでシーケンシャルに行われた読み出し回数（先読みを行った回数）をカウントする。そして閾値を設け、ｆ＿ｓｅｑが閾値以下の場合はランダム向けに小容量の先読みを行い、閾値を超えた場合はシーケンシャル向けに大量の先読みを行う。
【００２９】
図３のステップ３２で、今回のアクセスを行う領域と、先読みパラメータから得る前回のアクセス領域を比較し、アクセスがシーケンシャル性ありと判断された場合、ステップ３３に進み先読み量の計算を行う。シーケンシャル性なしと判断された場合は、ステップ３７に進み、ステップ４０で、先読み量はゼロとなり、先読みは行われない。ここでシーケンシャル性ありと判断するのは、例えば前回のアクセス範囲の次の領域の領域にアクセスを行う場合である。また、前回の領域に対してある一定の範囲、例えば１６ＫＢ以内の離れた先の領域であっても良い。
【００３０】
ステップ３４では、ｆ＿ｓｅｑをあらかじめ設定されている閾値と比較を行い、閾値以下の場合は、ステップ３５に進み、ランダム向けの先読み量の計算を行う。閾値より大きい場合には、ステップ３４に進み、シーケンシャル向けの先読み量の計算を行う。
【００３１】
ステップ３５の、ランダム向けの先読みでは、大量の先読みによる無駄な読み出しを減らし、必要と思われる読み出しをある程度一括して行うことが重要である。これにより、ディスクＩ／Ｏの発行数を減少させ、Ｉ／Ｏ発行のためのＣＰＵ１５負荷とディスクの負荷を低減させる。このために、例えば３２ＫＢといった一定量の先読み量を設定する。また、次の先読みは、既に先読みを行った範囲の先にアクセスされた場合に行うようにするため、アクセスされた領域が既に先読みを行った範囲である場合には先読み量をゼロとする。
【００３２】
ステップ３４の、シーケンシャル向けの先読みでは、例えば先読み量を最大２５６ＫＢ程度まで、前回の先読み量の倍に設定する。次の先読みは、既に行った先読み範囲の後半部分にアクセスされた場合に行うように、アクセスされた領域が既に先読みを行った範囲の前半部分である場合には先読み量をゼロとする。このように、シーケンシャルにアクセスを行う毎に大量の先読みを行うようにすることで、実際にファイルにアクセス要求が行われた時には常にデータがキャッシュ上に存在するようにし、クライアント１０への応答を高速にすることができる。
【００３３】
ＮＦＳ等のネットワークを介したファイルアクセスでは、クライアント１０からシーケンシャルにアクセスをしている場合でも、図５の５１、５２のアクセスようにネットワーク１１でのパケット落ちによる再送等で連続でない領域（以前に読み出した領域）にアクセスされる場合がある。これにより、従来の先読み処理では、シーケンシャルアクセスでないと判断してしまう。
【００３４】
これに対処するために、本発明ではアクセス範囲が前回の範囲に対して連続でない場合でも、その領域がキャッシュヒットした場合には、先読みパラメータの更新処理で、先読みパラメータキャッシュへのパラメータの更新を行わないようにする。つまり、この場合は、シーケンシャルアクセスで読み出した領域に再送によるアクセスが行われたものとみなし、先読み処理がその影響を受けないようにする。
【００３５】
図３のステップ３２で、シーケンシャル性なしと判断された場合は、ステップ３７に進む。ここでアクセス領域のキャッシュの状態を判定し、ヒットした場合は、ステップ３９に進み先読みパラメータのクリアは行わない。ヒットしなかった場合は、ステップ３８に進み、先読みパラメータおよびｆ＿ｓｅｑをクリアする。
【００３６】
このように、ファイルシステムのキャッシュの使用状態により先読みを抑止する手段と、パラメータにより先読み量の計算方式を変更する手段と、キャッシュ上にデータが存在するかの状態により先読みのためのパラメータの引継ぎを抑止するための手段をファイルサーバ上に持つことにより、ネットワークを介したファイルアクセスで起こる、クライアントからのアクセスパターンの乱れに対処して、ファイルサーバで有効な先読みを行うことを可能とする。
【００３７】
【発明の効果】
本発明によれば、ネットワークを介したファイルアクセスで起こる、クライアントからのアクセスパターンの乱れに対処して、ファイルサーバで有効な先読みを行うことができる。
【図面の簡単な説明】
【図１】本発明の実施形態の一例を示すシステム構成図である。
【図２】本発明で行う先読み処理の一例を示すフローチャートである。
【図３】本発明で行う先読み量の計算処理の一例を示すフローチャートである。
【図４】先読み処理のアクセス範囲の一例を示す図である。
【図５】ネットワークを介したファイルアクセスで行われるアクセス範囲の一例を示す図である。
【符号の説明】
１０…クライアント
１１…ネットワーク
１２…ファイルサーバ
１３…ディスク装置
１４…ネットワークインタフェース
１５…ＣＰＵ
１６…メインメモリ
１７…ディスクアダプタ
【図１】
2005031829.tif 000003
【図２】
2005031829.tif 000004
【図３】
2005031829.tif 000005
【図４】
2005031829.tif 000006
【図５】
2005031829.tif 000007