(57)【特許請求の範囲】
【請求項１】
他装置がネットワークを介してアクセスするファイルを管理するコンピュータに実行させるためのプログラムであって，
スレッドとファイルの識別情報とが対応する判定情報を記憶する記憶部を備える前記コンピュータに，
他装置からのファイル書き込みリクエストを受け付ける手順と，
前記記憶部から読み出した前記判定情報に，前記ファイル書き込みリクエストに含まれるファイルの識別情報に対応するスレッドがある場合，前記ファイル書き込みリクエストに含まれるファイルの識別情報に対応するスレッドを，前記ファイル書き込みリクエストの処理を行うスレッドとする手順と，
前記判定情報に，前記ファイル書き込みリクエストに含まれるファイルの識別情報に対応するスレッドがない場合，前記判定情報において対応付けされていないスレッドを前記ファイル書き込みリクエストの処理を行うスレッドとする手順と，
前記処理を行うスレッドと前記ファイル書き込みリクエストに含まれるファイルの識別情報との対応を，前記判定情報に記録する手順とを
実行させるためのファイル管理プログラム。
【請求項２】
他装置がネットワークを介してアクセスするファイルを管理するコンピュータによるファイル管理方法であって，
スレッドとファイルの識別情報とが対応する判定情報を記憶する記憶部を備える前記コンピュータが，
他装置からのファイル書き込みリクエストを受け付ける過程と，
前記記憶部から読み出した前記判定情報に，前記ファイル書き込みリクエストに含まれるファイルの識別情報に対応するスレッドがある場合，前記ファイル書き込みリクエストに含まれるファイルの識別情報に対応するスレッドを，前記ファイル書き込みリクエストの処理を行うスレッドとする過程と，
前記判定情報に，前記ファイル書き込みリクエストに含まれるファイルの識別情報に対応するスレッドがない場合，前記判定情報において対応付けされていないスレッドを前記ファイル書き込みリクエストの処理を行うスレッドとする過程と，
前記処理を行うスレッドと前記ファイル書き込みリクエストに含まれるファイルの識別情報との対応を，前記判定情報に記録する過程とを実行する
ことを特徴とするファイル管理方法。
【請求項３】
他装置がネットワークを介してアクセスするファイルを管理するファイル管理装置であって，
スレッドとファイルの識別情報とが対応する判定情報を記憶する判定情報記憶部と，
他装置からのファイル書き込みリクエストを受け付けるリクエスト受付部と，
前記判定情報に，前記ファイル書き込みリクエストに含まれるファイルの識別情報に対応するスレッドがある場合，前記ファイル書き込みリクエストに含まれるファイルの識別情報に対応するスレッドを，前記ファイル書き込みリクエストの処理を行うスレッドとし，前記判定情報に，前記ファイル書き込みリクエストに含まれるファイルの識別情報に対応するスレッドがない場合，前記判定情報において対応付けされていないスレッドを前記ファイル書き込みリクエストの処理を行うスレッドとし，該処理を行うスレッドと前記ファイル書き込みリクエストに含まれるファイルの識別情報との対応を前記判定情報に記録する処理スレッド割り振り部とを備える
ことを特徴とするファイル管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，ネットワークファイルシステムにおいて，他装置がネットワークを介してアクセスするファイルを管理するファイル管理プログラム，ファイル管理方法およびファイル管理装置に関するものである。
【背景技術】
【０００２】
ネットワークファイルシステムは，離れた場所にあるコンピュータのファイルを，あたかも自コンピュータのローカルにあるファイルのように利用することが可能となるファイルシステムである。ここでは，他のコンピュータにあるファイルにアクセスするコンピュータをクライアント，クライアントがアクセスするファイルを管理するコンピュータをファイルサーバと呼ぶものとする。
【０００３】
なお，マルチプロセッサ構成の装置において，プロセッサ間通信でスレッドの識別子を伝達することで，各プロセッサに一貫した処理を実現させ，処理に必要とする情報の伝達し直しなどを防ぐことを可能とする技術が知られている。また，クライアントからのリクエストをマルチスレッドで処理するファイルサーバの技術が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平６−３４８５５８号公報
【特許文献２】特開平８−２１２０９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ネットワークファイルシステムにおいて，マルチスレッドで処理を行うファイルサーバでは，クライアントからのリクエストに対する処理がスレッドの１つに割り振られる。クライアントからのリクエストを処理するスレッドは，ファイルサーバのローカルファイルシステムにより，ディスクへのアクセスを行う。
【０００６】
クライアントにおいて，書き込むデータのサイズが大きい場合などには，ファイルの書き込みリクエストが，複数のリクエストに分割され，ファイルサーバに送信される。ファイルサーバでは，同じクライアントから受信した同じファイルについての複数のファイル書き込みリクエストは，複数のスレッド間で割り振られる。処理が割り振られた各スレッドは，ローカルファイルシステムへの書き込み処理を行う。このとき，ディスクでは，フラグメントが発生する可能性がある。フラグメントは，ディスクなどの記憶装置上でファイルが断片化することである。
【０００７】
ファイルサーバにおいて，同一ファイルに対する書き込み処理を行うスレッドは，ロックを取得する必要がある。ロックを取得したスレッドは，ローカルファイルシステムへのファイルの書き込み処理を行う。ロックが取得できなかった他のスレッドは，ロックを取得したスレッドのファイル書き込み処理の終了を待つことになる。ロックを取得したスレッドによるファイル書き込み処理が終了すると，待ち状態であったスレッドが，ロックの取得を行う。
【０００８】
このとき，必ずしも分割された書き込みリクエストがクライアントから送信された順に，リクエストの処理を行うスレッドが，ロックを取得できるとは限らない。そのため，同一のファイルに対する複数の書き込みリクエストが，順不同で処理が行われ，フラグメントが起こってしまう可能性がある。フラグメントが起こると，そのファイルの読み込みの際に，ディスク上の領域から連続して読み込みを行うことができず，ディスクシークが発生してファイルの読み込み性能が低下する。
【０００９】
開示する技術の一側面は，上記の問題の解決を図り，ネットワークファイルシステムにおいて，フラグメントの発生を抑制する技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
開示するプログラムは，他装置がネットワークを介してアクセスするファイルを管理するコンピュータを，次のように機能させる。
【００１１】
すなわち，プログラムは，プログラムがインストールされて実行される，スレッドとファイルの識別情報とが対応する判定情報を記憶する記憶部を備えるコンピュータに，他装置からのファイル書き込みリクエストを受け付ける手順と，記憶部から読み出した判定情報に，ファイル書き込みリクエストに含まれるファイルの識別情報に対応するスレッドがある場合，ファイル書き込みリクエストに含まれるファイルの識別情報に対応するスレッドを，ファイル書き込みリクエストの処理を行うスレッドとする手順と，判定情報に，ファイル書き込みリクエストに含まれるファイルの識別情報に対応するスレッドがない場合，判定情報において対応付けされていないスレッドをファイル書き込みリクエストの処理を行うスレッドとする手順と，処理を行うスレッドとファイル書き込みリクエストに含まれるファイルの識別情報との対応を，判定情報に記録する手順とを実行させる。
【発明の効果】
【００１２】
開示する技術によって，ネットワークファイルシステムにおけるフラグメントの発生を抑制することが可能となる。これにより，ネットワークファイルシステムにおけるファイル読み込み性能の低下を防止することが可能となる。
【図面の簡単な説明】
【００１３】
【図１】既存のネットワークファイルシステムの例を説明する図である。
【図２】フラグメント発生の例を説明する図である。
【図３】本実施の形態によるネットワークファイルシステムの構成例を示す図である。
【図４】本実施の形態によるＮＦＳサーバを実現するコンピュータの構成例を示す図である。
【図５】本実施の形態によるファイル書き込みリクエストのデータ構造の例を示す図である。
【図６】本実施の形態による判定情報の例を示す図である。
【図７】本実施の形態のネットワークファイルシステムによる論理ブロック番号の割り当てを説明する図である。
【図８】本実施の形態のＮＦＳサーバによるファイル管理処理フローチャート（１）である。
【図９】本実施の形態のＮＦＳサーバによるファイル管理処理フローチャート（１）である。
【図１０】本実施の形態のＮＦＳサーバによるファイル管理処理フローチャート（２）である。
【図１１】本実施の形態のＮＦＳサーバによるファイル管理処理フローチャート（２）である。
【図１２】本実施の形態によるネットワークファイルシステムの効果を説明する図である。
【発明を実施するための形態】
【００１４】
以下，本実施の形態について，図を用いて説明する。
【００１５】
図１は，既存のネットワークファイルシステムの例を説明する図である。
【００１６】
ネットワークファイルシステムでは，他の装置上にあるファイルを，あたかも自装置のローカルにあるファイルのように利用することが可能となる。代表的なネットワークファイルシステムとしては，サン・マイクロシステムズ社のＮＦＳ（Network File System ）がある。ＮＦＳは，米国でのサン・マイクロシステムズ社の商標である。
【００１７】
図１に示すネットワークファイルシステムは，既存の一般的なクライアント・サーバ型のネットワークファイルシステムの一例である。図１に示すネットワークファイルシステムにおいて，ＮＦＳサーバ５１０は，他装置がアクセスするファイルを管理する装置である。ＮＦＳサーバ５１０は，上述のファイルサーバに相当する。クライアント５２０は，ＮＦＳサーバ５１０が管理するファイルを利用する装置である。クライアント５２０は，インターネットやＬＡＮ（Local Area Network）等のネットワーク５３０を介して，ＮＦＳサーバ５１０上のファイルにアクセスする。
【００１８】
図１を用いて，クライアント５２０がＮＦＳサーバ５１０にファイルの書き込みを行う例を説明する。
【００１９】
クライアント５２０は，ＮＦＳサーバ５１０に対して，ファイル書き込みのためのファイル書き込みリクエストを送信する。このとき，書き込むデータのサイズやネットワークファイルシステムの設定によって，同一ファイルに対する書き込みリクエストが複数のリクエストに分割されて送信される場合がある。ここでは，図１に示すように，クライアント５２０において，同一のファイルについての書き込みリクエストが，書き込むデータの先頭から順にリクエスト＃１，リクエスト＃２，リクエスト＃３の３つのリクエストに分けられて，ＮＦＳサーバ５１０に送信されるものとする。
【００２０】
ＮＦＳサーバ５１０は，クライアント５２０からのリクエストを受信する。ＮＦＳサーバ５１０において，処理スレッド割り振り部５１１は，ＮＦＳサーバ５１０が受信したリクエストの処理を，ｉｄｌｅ状態にあるいずれかのスレッド５１２に割り振る。ＮＦＳサーバ５１０には，複数のスレッド５１２（ａ，ｂ，ｃ，... ）が存在している。それぞれのスレッドは，処理スレッド割り振り部５１１により割り振られたリクエストに対する処理を行う。処理を終えたスレッドは，ｉｄｌｅ状態となり，次の処理の割り振りを待つ。
【００２１】
図１に示す例では，クライアント５２０から送信された３つのファイル書き込みのリクエストが，ネットワーク５３０を介してＮＦＳサーバ５１０に受信される。ＮＦＳサーバ５１０において，処理スレッド割り振り部５１１は，順次受信される３つのファイル書き込みのリクエストの処理を，それぞれｉｄｌｅ状態のスレッドに割り振る。ここでは，リクエスト＃１の処理がスレッド（ｔｈ0 ）５１２ａに，リクエスト＃２の処理がスレッド（ｔｈ1 ）５１２ｂに，リクエスト＃３の処理がスレッド（ｔｈ2 ）５１２ｃに，それぞれ割り振られる。なお，各スレッド５１２の括弧書きは，それぞれのスレッドの識別情報を示している。
【００２２】
スレッド５１２は，受信したリクエストの処理が割り振られると，そのリクエストの解釈を行い，リクエストにより依頼された処理を実行する。
【００２３】
ファイル書き込みのリクエストの処理が割り当てられたスレッド５１２は，ローカルファイルシステム５１３へのファイル書き込みを行う。このとき，分割された同一ファイルの書き込み処理を行うスレッド５１２は，ロックを取得する必要がある。ロックを取得したスレッド５１２は，ローカルファイルシステム５１３へのファイルの書き込み処理を行う。ロックが取得できなかった他のスレッド５１２は，ロックを取得したスレッド５１２のファイル書き込み処理の終了を待つことになる。ロックを取得したスレッド５１２によるファイル書き込み処理が終了すると，ロック取得待ち状態であったスレッド５１２が，ロックの取得を行う。
【００２４】
ローカルファイルシステム５１３は，ＮＦＳサーバ５１０のＯＳにおけるファイル制御機構である。ローカルファイルシステム５１３は，ファイルデータのディスク上の配置先である論理ブロック番号の割り当てを行う。論理ブロック番号は，ディスク上のアドレスを示す情報である。このとき，ローカルファイルシステム５１３は，同じファイルに対する書き込みの場合に，最後に割り当てた論理ブロック番号にできるだけ近い論理ブロック番号を割り当てようとする。なお，図１に示すネットワークファイルシステムにおいて，ファイル記憶装置５１４は，ファイルが書き込まれるディスクである。
【００２５】
図１に示すネットワークファイルシステムにおいて，分割された同じファイルの書き込みリクエストに対する処理が割り振られたｔｈ0 ，ｔｈ1 ，ｔｈ2 のスレッド５１２は，それぞれロックの取得を試みる。
【００２６】
図２は，フラグメント発生の例を説明する図である。
【００２７】
図２に示す例は，図１に示すネットワークファイルシステムの例において，ファイル記憶装置５１４のディスクにフラグメントが発生する例である。
【００２８】
図２に示すように，最初にリクエスト＃１の処理を行うスレッド（ｔｈ0 ）５１２ａがロックを取得し，ローカルファイルシステム５１３へのファイル書き込み処理を行うものとする。このとき，リクエスト＃２の処理を行うスレッド（ｔｈ1 ）５１２ｂと，リクエスト＃３の処理を行うスレッド（ｔｈ2 ）５１２ｃとは，スレッド（ｔｈ0 ）５１２ａによる書き込み処理が終わるまで待つことになる。
【００２９】
ローカルファイルシステム５１３は，スレッド（ｔｈ0 ）５１２ａが処理するリクエスト＃１のファイルデータに，論理ブロック番号１２３４５を割り当てる。スレッド（ｔｈ0 ）５１２ａの処理が終わると，ロック取得待ち状態のスレッド５１２がロックを取得して処理を行うことになる。
【００３０】
このとき，必ずしもリクエスト＃２の処理を行うスレッド（ｔｈ1 ）５１２ｂが次のロックを取得するとは限らない。ここでは，図２に示すように，リクエスト＃３の処理を行うスレッド（ｔｈ2 ）５１２ｃの方が先にロックを取得したものとする。
【００３１】
スレッド（ｔｈ2 ）５１２ｃが処理するリクエスト＃３のファイルデータは，先のリクエスト＃１のファイルデータと同じファイルから分割されたものである。ローカルファイルシステム５１３は，スレッド（ｔｈ2 ）５１２ｃが処理するリクエスト＃３のファイルデータに，先のリクエスト＃１処理時の論理ブロック番号１２３４５と連続する論理ブロック番号１２３４６を割り当てる。
【００３２】
スレッド（ｔｈ2 ）５１２ｃの処理が終わると，最後にロック取得待ち状態のスレッド（ｔｈ1 ）５１２ｂがロックを取得して処理を行う。スレッド（ｔｈ1 ）５１２ｂが処理するリクエスト＃２のファイルデータは，先のリクエスト＃３のファイルデータと同じファイルから分割されたものである。ローカルファイルシステム５１３は，スレッド（ｔｈ1 ）５１２ｂが処理するリクエスト＃２のファイルデータに，先のリクエスト＃３処理時の論理ブロック番号１２３４６と連続する論理ブロック番号１２３４７を割り当てる。
【００３３】
この結果，図１，図２に示すように，ファイル記憶装置５１４において，論理ブロック番号１２３４５〜１２３４７の連続するディスク領域上に，リクエスト＃１→リクエスト＃３→リクエスト＃２の順にファイルデータが書き込まれる。ファイルにおける実際のデータの順序は，リクエスト＃１→リクエスト＃２→リクエスト＃３の順であるので，ディスク上ではフラグメントが起こっている。
【００３４】
このファイルの読み込みが行われる際には，論理ブロック番号１２３４５→１２３４７→１２３４６の順にデータの読み込みが行われる。すなわち，連続した読み込みが行われないので，ディスクシークが発生し，ファイルの読み込み性能が低下する。
【００３５】
このような問題は，ネットワーク５３０として，ＩＰｏＩＢ（ＱＤＲ）（Internet Protocol over InfiniBand （Quad Data Rate））などの広帯域ネットワークを利用した場合に特に顕著となる。InfiniBandは，InfiniBand Trade Associationの登録商標である。
【００３６】
ネットワーク５３０として広帯域なＩＰｏＩＢ（ＱＤＲ）などが用いられた場合，ネットワーク５３０としてＧｂＥ（Gigabit Ethernet）などが用いられた場合と比較して，ＮＦＳサーバ５１０への時間当たりのリクエストの到着数が多くなる。そのため，ネットワーク５３０として広帯域なＩＰｏＩＢ（ＱＤＲ）などが用いられた場合には，ＮＦＳサーバ５１０において，ファイル書き込みの処理を行うスレッド５１２が同時に複数存在する状態になる可能性が高い。このとき，上述のように同じファイルの後の方のデータの書き込みを行うスレッド５１２が先にロックを取得してしまい，フラグメントが起こる可能性が高くなる。
【００３７】
以下では，このようなフラグメントの発生を抑止する，本実施の形態によるネットワークファイルシステムを説明する。
【００３８】
図３は，本実施の形態によるネットワークファイルシステムの構成例を示す図である。
【００３９】
図３に示すネットワークファイルシステムは，ＮＦＳサーバ１０，複数のクライアント２０（ａ，ｂ，ｃ，... ），ネットワーク３０を有する。図３に示すネットワークファイルシステムにおいて，ＮＦＳサーバ１０は，他装置がアクセスするファイルを管理する装置である。クライアント２０は，ＮＦＳサーバ１０が管理するファイルを利用する装置である。
【００４０】
図３に示すように，複数のクライアント２０が，ネットワーク３０を介して，ＮＦＳサーバ１０上のファイルにアクセスすることが可能となっている。図３に示すネットワークファイルシステムにおいて，ネットワーク３０は，例えばＩＰｏＩＢ（ＱＤＲ）などの広帯域ネットワークである。
【００４１】
ＮＦＳサーバ１０にファイルの書き込みを行う場合に，クライアント２０は，ＮＦＳサーバ１０に対して，ファイル書き込みリクエストを送信する。このとき，クライアント２０は，書き込むデータのサイズやネットワークファイルシステムの設定に応じて，ファイルの書き込みリクエストを複数のリクエストに分割して送信する。クライアント２０は，書き込むデータの先頭の方から順に，分割されたファイルの書き込みリクエストをＮＦＳサーバ１０に送信する。
【００４２】
本実施の形態では，クライアント２０からＮＦＳサーバ１０に送るファイル書き込みリクエストには，ファイルの識別情報が含まれている。ファイルの識別情報は，同一のファイルについての一連のファイル書き込みリクエストを，ファイルごとに識別する情報である。すなわち，同一のファイルについての一連の書き込みリクエストには，同じファイルの識別情報が含まれる。
【００４３】
ファイルの識別情報は，一連のファイル書き込みリクエストが同一ファイルに対するリクエストかどうかを判定できる情報であればよい。例えば，ファイルの識別情報として，クライアント２０のＩＰアドレスや書き込みを行うファイルのファイルディスクリプタなど，元々ファイル書き込みリクエストに含まれる情報を利用してもよい。同じクライアント２０から短時間で連続して送信される複数のファイル書き込みリクエストは，同一のファイルに対する一連のファイル書き込みリクエストである可能性が高い。また，ファイルの識別情報のために，リクエストに対して新たな情報を定義してもよい。例えば，リクエストの構造体にファイルの識別情報を保持するメンバ変数を追加し，ファイルごとにユニークと考えられる情報をファイルの識別情報として格納するようにしてもよい。
【００４４】
図３に示すネットワークファイルシステムにおいて，ＮＦＳサーバ１０は，リクエスト受付部１１，処理スレッド割り振り部１２，複数のスレッド１３（ａ，ｂ，ｃ，... ），ローカルファイルシステム１４，ファイル記憶装置１５を有する。
【００４５】
リクエスト受付部１１は，クライアント２０から送信されたファイル書き込みリクエストを受け付ける。
【００４６】
処理スレッド割り振り部１２は，リクエスト受付部１１が受け付けたファイル書き込みリクエストを，ｉｄｌｅ状態のスレッド１３に割り振る。このとき，本実施の形態による処理スレッド割り振り部１２は，同一のファイルに対する一連のファイル書き込みリクエストについては，同じスレッド１３に割り振りを行うようにする。処理スレッド割り振り部１２は，判定部１２１，処理スレッド決定部１２２，削除部１２３，判定情報記憶部１２５を備える。
【００４７】
判定情報記憶部１２５は，ファイルの識別情報と，そのファイルの識別情報を含むファイル書き込みリクエストを処理するスレッド１３との対応が記録された判定情報を記憶する，コンピュータがアクセス可能な記憶部である。
【００４８】
判定部１２１は，受け付けたファイル書き込みリクエストから，ファイルの識別情報を抽出する。判定部１２１は，判定情報記憶部１２５に記憶された判定情報を参照し，抽出されたファイルの識別情報といずれかのスレッド１３との対応が判定情報に記録されているかを判定する。判定情報に記録があれば，判定部１２１は，受け付けたファイル書き込みリクエストが，以前にスレッド１３が割り振られたファイル書き込みリクエストと同じファイルについてのリクエストであると判定する。判定情報に記録がなければ，判定部１２１は，受け付けたファイル書き込みリクエストが，同一ファイルに対する一連のファイル書き込みリクエストの最初のリクエストであると判定する。
【００４９】
処理スレッド決定部１２２は，判定部１２１の判定結果に応じて，受け付けたファイル書き込みリクエストの処理を割り振るスレッド１３を決定する。処理スレッド決定部１２２は，ファイル書き込みリクエストから抽出されたファイルの識別情報の記録が判定情報にある場合には，判定情報で抽出されたファイルの識別情報に対応付けられたスレッド１３を，ファイル書き込みリクエストを処理するスレッド１３に決定する。処理スレッド決定部１２２は，ファイル書き込みリクエストから抽出されたファイルの識別情報の記録が判定情報にない場合には，判定情報でファイルの識別情報が対応付けられていないスレッド１３を，ファイル書き込みリクエストを処理するスレッド１３に決定する。
【００５０】
処理スレッド決定部１２２は，ファイル書き込みリクエストから抽出されたファイルの識別情報と，決定されたそのファイル書き込みリクエストを処理するスレッド１３との対応を，判定情報記憶部１２５に記憶された判定情報に記録する。これにより，判定情報には，ファイルの識別情報と，そのファイルの識別情報を含むファイル書き込みリクエストの処理が割り振られたスレッド１３との対応が記録される。
【００５１】
削除部１２３は，１つの同じファイルについての一連のファイル書き込みリクエストが終了したと判定された場合に，そのファイル書き込みリクエストのファイルの識別情報の記録を，判定情報記憶部１２５に記憶された判定情報から削除する。
【００５２】
削除部１２３は，例えば，受け付けたファイル書き込みリクエストが最終リクエストであると判定された場合に，そのファイル書き込みリクエストに含まれるファイルの識別情報の記録を，判定情報から削除する。一連のファイル書き込みリクエストの最終リクエストの処理には，ファイルクローズの処理が含まれる。
【００５３】
また，削除部１２３は，判定情報において，最後にファイル書き込みリクエストが割り振られてから所定以上の時間が経過したスレッド１３に対応付けられたファイルの識別情報の記録を削除する。１つの同じファイルについての一連のファイル書き込みリクエストは，短時間で連続的にクライアント２０から送信されるものと考えられる。
【００５４】
ファイル書き込みリクエストの処理が割り振られた各スレッド１３，ローカルファイルシステム１４，ファイル記憶装置１５については，図１に示すスレッド５１２，ローカルファイルシステム５１３，ファイル記憶装置５１４と同様であるので，ここでは説明を省略する。
【００５５】
図４は，本実施の形態によるＮＦＳサーバを実現するコンピュータの構成例を示す図である。
【００５６】
ＮＦＳサーバ１０を実現するコンピュータ１００は，ＣＰＵ（Central Processing Unit ）１０１，ＲＡＭ（Random Access Memory）などのメモリ１０２，ＨＤＤ（Hard Disk Drive ）などの記憶装置１０３，入力装置１０４，出力装置１０５，通信装置１０６等を備える。
【００５７】
図３に示すＮＦＳサーバ１０およびＮＦＳサーバ１０が備える各機能部は，コンピュータ１００が備えるＣＰＵ１０１，メモリ１０２等のハードウェアと，ソフトウェアプログラムとによって，実現することが可能である。コンピュータ１００が実行可能なプログラムは，記憶装置１０３に記憶され，その実行時にメモリ１０２に読み出され，ＣＰＵ１０１により実行される。
【００５８】
なお，コンピュータ１００は，可搬型記録媒体から直接プログラムを読み取り，そのプログラムに従った処理を実行することもできる。また，コンピュータ１００は，サーバコンピュータからプログラムが転送されるごとに，逐次，受け取ったプログラムに従った処理を実行することもできる。さらに，このプログラムは，コンピュータ１００で読み取り可能な記録媒体に記録しておくことができる。
【００５９】
本実施の形態では，クライアント２０を実現するコンピュータも，図４に示すコンピュータ１００と同様のハードウェアを有する。
【００６０】
図５は，本実施の形態によるファイル書き込みリクエストのデータ構造の例を示す図である。
【００６１】
クライアント２０から送信されるファイル書き込みリクエストは，ヘッダ部とデータ部とを有する。ヘッダ部は，送信元であるクライアント２０のＩＰアドレスや，書き込みを行うファイルのファイルディスクリプタなどの情報を有する。データ部は，書き込みデータである。リクエストが複数に分割されている場合には，データ部は，書き込むデータの一部となる。
【００６２】
例えば，図５に示すファイル書き込みリクエストにおいて，ヘッダ部に含まれるクライアント２０のＩＰアドレスやファイルディスクリプタなどの情報が，同一ファイルについての一連のファイル書き込みリクエストの判定に利用するファイルの識別情報となり得る。
【００６３】
図６は，本実施の形態による判定情報の例を示す図である。
【００６４】
図６に示す判定情報１２６は，判定情報記憶部１２５に記憶される情報の一例である。判定情報１２６は，スレッド，ファイルの識別情報，時刻の情報を有する。
【００６５】
図６に示す判定情報１２６において，スレッドは，ＮＦＳサーバ１０で動作する各スレッド１３の識別情報を示す。
【００６６】
図６に示す判定情報１２６において，ファイルの識別情報の記録があるレコードは，スレッド１３とファイルの識別情報とが対応付けられたレコードである。ファイルの識別情報が対応付けられたスレッド１３は，過去にファイルの識別情報が含まれるファイル書き込みリクエストの処理を行ったスレッド１３である。
【００６７】
図６に示す判定情報１２６において，時刻は，そのスレッド１３に対して，記録されたファイルの識別情報を含むファイル書き込みリクエストの処理が最後に割り振られたときの時刻である。
【００６８】
ここで，図３に示す本実施の形態のネットワークファイルシステムによるファイル書き込みの一例を説明する。
【００６９】
例えばクライアント２０ａにおいて，同一のファイルについての書き込みリクエストが，書き込むデータの先頭から順にリクエスト＃１，リクエスト＃２，リクエスト＃３の３つのリクエストに分けられて，ＮＦＳサーバ１０に送信されるものとする。クライアント２０ａは，３つのファイル書き込みリクエストをファイルの先頭から順に，ネットワーク３０を介してＮＦＳサーバ１０に送信する。
【００７０】
ＮＦＳサーバ１０において，リクエスト受付部１１は，まず，最初に受信されるリクエスト＃１を受け付ける。
【００７１】
処理スレッド割り振り部１２において，判定部１２１は，受け付けたリクエスト＃１からファイルの識別情報を抽出する。ここでは，ファイルの識別情報として，送信元のクライアント２０ａのＩＰアドレスを抽出するものとする。例えば，リクエスト＃１からファイルの識別情報ｉｄ01が抽出される。
【００７２】
判定部１２１は，判定情報記憶部１２５に記憶された判定情報１２６に，抽出されたファイルの識別情報ｉｄ01の記録があるかを判定する。ここでは，リクエスト＃１が，同一のファイルに対する一連の書き込みリクエストの最初のリクエストであるので，判定情報１２６に抽出されたファイルの識別情報ｉｄ01の記録はない。
【００７３】
処理スレッド決定部１２２は，判定情報記憶部１２５に記憶された判定情報１２６を参照し，ファイルの識別情報の対応付けがないスレッド１３を１つ選択する。ここでは，ｔｈ0 のスレッド１３ａが選択されたものとする。処理スレッド決定部１２２は，判定情報記憶部１２５に記憶された判定情報１２６のｔｈ0 のスレッド１３ａのレコードに，リクエスト＃１から抽出されたファイルの識別情報ｉｄ01を記録する。
【００７４】
処理スレッド割り振り部１２は，ｔｈ0 のスレッド１３ａにリクエスト＃１の処理を割り当てる。スレッド１３ａは，リクエスト＃１に対する処理を開始する。
【００７５】
リクエスト＃１の後，リクエスト受付部１１は，リクエスト＃２を受け付ける。判定部１２１は，リクエスト＃２からファイルの識別情報ｉｄ01を抽出する。リクエスト＃１とリクエスト＃２とは，同じクライアント２０ａから送信されたリクエストであるので，ファイルの識別情報は同じｉｄ01である。
【００７６】
判定部１２１は，判定情報記憶部１２５に記憶された判定情報１２６に，抽出されたファイルの識別情報ｉｄ01の記録があるかを判定する。リクエスト＃２を含む一連のファイル書き込みリクエストのうち，最初のファイル書き込みリクエストであるリクエスト＃１の処理がすでに行われているので，判定情報１２６にはファイルの識別情報ｉｄ01の記録がある。処理スレッド決定部１２２は，判定情報記憶部１２５に記憶された判定情報１２６を参照し，ファイルの識別情報ｉｄ01に対応するスレッド１３として，ｔｈ0 のスレッド１３ａを抽出する。
【００７７】
処理スレッド割り振り部１２は，抽出されたｔｈ0 のスレッド１３ａが処理中でなければ，ｔｈ0 のスレッド１３ａにリクエスト＃２の処理を割り振る。スレッド１３ａは，リクエスト＃２に対する処理を開始する。
【００７８】
なお，処理スレッド割り振り部１２は，抽出されたｔｈ0 のスレッド１３ａが処理中であるときに，ｔｈ1 のスレッド１３ｂやｔｈ2 のスレッド１３ｃがｉｄｌｅ状態であっても，それらのスレッド１３にリクエスト＃２の処理を割り振らない。ＮＦＳサーバ１０は，抽出されたｔｈ0 のスレッド１３ａが処理中であれば，リクエスト＃２の送信元のクライアント２０ａに対してビジー応答する。このとき，ＮＦＳサーバ１０は，例えばｔｈ0 のスレッド１３ａがｉｄｌｅ状態になるまで待ち，ｉｄｌｅ状態になった時点でクライアント２０ａに対してその旨を通知する。クライアント２０ａは，リクエスト＃２の再送信を行う。ＮＦＳサーバ１０では，上述のリクエスト受付時の処理が再び行われ，ｉｄｌｅ状態となったｔｈ0 のスレッド１３ａにリクエスト＃２の処理が割り振られる。
【００７９】
リクエスト＃２の後に送信されるリクエスト＃３についても，リクエスト＃２と同様に処理が行われる。
【００８０】
図７は，本実施の形態のネットワークファイルシステムによる論理ブロック番号の割り当てを説明する図である。
【００８１】
図７に示すように，本実施の形態のＮＦＳサーバ１０では，同じファイルについての一連のファイル書き込みリクエストの処理は，すべてその最初のリクエストであるリクエスト＃１の処理が割り振られたｔｈ0 のスレッド１３ａに割り振られる。最初のリクエスト＃１以外のリクエスト＃２，リクエスト＃３に対する処理は，それぞれ前のリクエストの処理が終わった後に，同じｔｈ0 のスレッド１３ａに割り振られて実行される。複数のスレッド１３による同時書き込みが行われないので，ロック取得順によって処理を行うリクエストの順序が変わることはない。すなわち，ローカルファイルシステム１４へのファイル書き込みの順序は，クライアント２０ａから送信されたリクエストの順となる。
【００８２】
まず，処理スレッド割り振り部１２により，ｔｈ0 のスレッド１３ａに，リクエスト＃１の処理が割り振られる。割り振られたリクエスト＃１の処理を行うスレッド１３ａは，ローカルファイルシステム１４へのファイル書き込み処理を行う。ローカルファイルシステム１４は，スレッド１３ａが処理するリクエスト＃１のファイルデータに，論理ブロック番号１２３４５を割り当てる。
【００８３】
次に，リクエスト＃１の処理が終わったｔｈ0 のスレッド１３ａに，処理スレッド割り振り部１２により，リクエスト＃２の処理が割り振られる。割り振られたリクエスト＃２の処理を行うスレッド１３ａは，ローカルファイルシステム１４へのファイル書き込み処理を行う。ローカルファイルシステム１４は，スレッド１３ａが処理するリクエスト＃２のファイルデータに，論理ブロック番号１２３４６を割り当てる。
【００８４】
さらに，リクエスト＃２の処理が終わったｔｈ0 のスレッド１３ａに，処理スレッド割り振り部１２により，リクエスト＃３の処理が割り振られる。割り振られたリクエスト＃３の処理を行うスレッド１３ａは，ローカルファイルシステム１４へのファイル書き込み処理を行う。ローカルファイルシステム１４は，スレッド１３ａが処理するリクエスト＃３のファイルデータに，論理ブロック番号１２３４７を割り当てる。
【００８５】
このように，本実施の形態によるＮＦＳサーバ１０では，１つのファイルについての一連のファイル書き込みリクエストに対する処理は，同じスレッド１３に割り振られる。そのため，図７に示すように，ファイル記憶装置１５において，論理ブロック番号１２３４５〜１２３４７の連続するディスク領域上に，クライアント２０ａからの送信順に，各リクエストのファイルデータが書き込まれる。ファイルにおける実際のデータの順序と，ディスク上でのファイルデータの配置順序とが一致するので，ディスク上ではフラグメントが起こっていない。
【００８６】
このファイルの読み込みが行われる際には，連続した論理ブロック番号１２３４５→１２３４６→１２３４７の順にデータの読み込みが行われるので，無用なディスクシークが発生せず，ファイルの読み込み性能は向上する。
【００８７】
図８，図９は，本実施の形態のＮＦＳサーバによるファイル管理処理フローチャート（１）である。
【００８８】
図８，図９に示すフローチャートは，ＮＦＳサーバ１０において，ファイル書き込みリクエストの受付から，受け付けたファイル書き込みリクエストの処理のスレッド１３への割り振りまでの処理の流れの一例を示している。なお，図８，図９に示すフローチャートでは，一連のファイル書き込みリクエストの最終リクエストの検出で，判定情報１２６から該当するファイルの識別情報の記録を削除する。
【００８９】
ＮＦＳサーバ１０において，リクエスト受付部１１は，クライアント２０からのファイル書き込みリクエストを受け付ける（ステップＳ１０）。
【００９０】
処理スレッド割り振り部１２において，判定部１２１は，受け付けたファイル書き込みリクエストからファイルの識別情報を抽出する（ステップＳ１１）。判定部１２１は，判定情報記憶部１２５に記憶された判定情報１２６に，抽出されたファイルの識別情報の記録があるかを判定する（ステップＳ１２）。
【００９１】
判定情報１２６に抽出されたファイルの識別情報の記録があれば（ステップＳ１２のＹＥＳ），処理スレッド決定部１２２は，判定情報１２６から，抽出されたファイルの識別情報に対応するスレッド１３を抽出する（ステップＳ１３）。処理スレッド割り振り部１２は，抽出されたスレッド１３が処理中であるかを判定する（ステップＳ１４）。
【００９２】
抽出されたスレッド１３が処理中であれば（ステップＳ１４のＹＥＳ），ＮＦＳサーバ１０は，ファイル書き込みリクエストの送信元のクライアント２０に対してビジーを応答する（ステップＳ１５）。
【００９３】
抽出されたスレッド１３が処理中でなければ（ステップＳ１４のＮＯ），処理スレッド決定部１２２は，抽出されたスレッド１３を，受け付けたファイル書き込みリクエストの処理を行うスレッド１３に決定する（ステップＳ１６）。
【００９４】
削除部１２３は，受け付けたファイル書き込みリクエストが，一連のファイル書き込みリクエストにおける最終リクエストであるかを判定する（ステップＳ１７）。一連のファイル書き込みリクエストの最終リクエストの処理には，ファイルクローズの処理が含まれる。受け付けたファイル書き込みリクエストが最終リクエストである場合には（ステップＳ１７のＹＥＳ），削除部１２３は，判定情報記憶部１２５に記憶された判定情報１２６から，受け付けたファイル書き込みリクエストから抽出されたファイルの識別情報の記録を削除する（ステップＳ１８）。
【００９５】
処理スレッド割り振り部１２は，決定されたスレッド１３に，受け付けたファイル書き込みリクエストの処理を割り振る（ステップＳ１９）。
【００９６】
判定情報１２６に抽出されたファイルの識別情報の記録がなければ（ステップＳ１２のＮＯ），処理スレッド決定部１２２は，判定情報１２６にファイルの識別情報の対応付けがないスレッド１３があるかを判定する（ステップＳ２０）。
【００９７】
ファイルの識別情報の対応付けがないスレッド１３がなければ（ステップＳ２０のＮＯ），ＮＦＳサーバ１０は，ファイル書き込みリクエストの送信元のクライアント２０に対してビジーを応答する（ステップＳ２１）。
【００９８】
ファイルの識別情報の対応付けがないスレッド１３があれば（ステップＳ２０のＹＥＳ），処理スレッド決定部１２２は，判定情報１２６から，ファイルの識別情報の対応付けがないスレッド１３を１つ選択する（ステップＳ２２）。処理スレッド決定部１２２は，選択されたスレッド１３を，受け付けたファイル書き込みリクエストの処理を行うスレッド１３に決定する（ステップＳ２３）。
【００９９】
処理スレッド決定部１２２は，受け付けたファイル書き込みリクエストが，最終リクエストであるかを判定する（ステップＳ２４）。受け付けたファイル書き込みリクエストが最終リクエストでない場合には（ステップＳ２４のＮＯ），処理スレッド決定部１２２は，判定情報１２６に，決定されたスレッド１３と抽出されたファイルの識別情報との対応を記録する（ステップＳ２５）。
【０１００】
処理スレッド割り振り部１２は，決定されたスレッド１３に，受け付けたファイル書き込みリクエストの処理を割り振る（ステップＳ２６）。
【０１０１】
図１０，図１１は，本実施の形態のＮＦＳサーバによるファイル管理処理フローチャート（２）である。
【０１０２】
図１０，図１１に示すフローチャートは，ＮＦＳサーバ１０において，ファイル書き込みリクエストの受付から，受け付けたファイル書き込みリクエストの処理のスレッド１３への割り振りまでの処理の流れの一例を示している。なお，図１０，図１１に示すフローチャートでは，最後に割り振りが行われてから所定時間が経過したスレッド１３について，判定情報１２６のファイルの識別情報の記録を無効とする。
【０１０３】
ＮＦＳサーバ１０において，リクエスト受付部１１は，クライアント２０からのファイル書き込みリクエストを受け付ける（ステップＳ３０）。
【０１０４】
処理スレッド割り振り部１２において，判定部１２１は，受け付けたファイル書き込みリクエストからファイルの識別情報を抽出する（ステップＳ３１）。判定部１２１は，判定情報記憶部１２５に記憶された判定情報１２６に，抽出されたファイルの識別情報の記録があるかを判定する（ステップＳ３２）。
【０１０５】
判定情報１２６に抽出されたファイルの識別情報の記録があれば（ステップＳ３２のＹＥＳ），処理スレッド決定部１２２は，判定情報１２６から，抽出されたファイルの識別情報に対応するスレッド１３を抽出する（ステップＳ３３）。処理スレッド割り振り部１２は，抽出されたスレッド１３が処理中であるかを判定する（ステップＳ３４）。
【０１０６】
抽出されたスレッド１３が処理中であれば（ステップＳ３４のＹＥＳ），ＮＦＳサーバ１０は，ファイル書き込みリクエストの送信元のクライアント２０に対してビジーを応答する（ステップＳ３５）。
【０１０７】
抽出されたスレッド１３が処理中でなければ（ステップＳ３４のＮＯ），処理スレッド決定部１２２は，抽出されたスレッド１３を，受け付けたファイル書き込みリクエストの処理を行うスレッド１３に決定する（ステップＳ３６）。処理スレッド決定部１２２は，判定情報１２６において，決定されたスレッド１３の時刻を更新する（ステップＳ３７）。
【０１０８】
処理スレッド割り振り部１２は，決定されたスレッド１３に，受け付けたファイル書き込みリクエストの処理を割り振る（ステップＳ３８）。
【０１０９】
判定情報１２６に抽出されたファイルの識別情報の記録がなければ（ステップＳ３２のＮＯ），処理スレッド決定部１２２は，判定情報１２６にファイルの識別情報の対応付けがないスレッド１３があるかを判定する（ステップＳ３９）。
【０１１０】
ファイルの識別情報の対応付けがないスレッド１３があれば（ステップＳ３９のＹＥＳ），処理スレッド決定部１２２は，判定情報１２６から，ファイルの識別情報の対応付けがないスレッド１３を１つ選択する（ステップＳ４０）。
【０１１１】
処理スレッド決定部１２２は，選択されたスレッド１３を，受け付けたファイル書き込みリクエストの処理を行うスレッド１３に決定する（ステップＳ４１）。処理スレッド決定部１２２は，判定情報１２６に，決定されたスレッド１３と抽出されたファイルの識別情報との対応を記録する（ステップＳ４２）。処理スレッド決定部１２２は，判定情報１２６において，決定されたスレッド１３の時刻を記録する（ステップＳ４３）。
【０１１２】
処理スレッド割り振り部１２は，決定されたスレッド１３に，受け付けたファイル書き込みリクエストの処理を割り振る（ステップＳ４４）。
【０１１３】
ファイルの識別情報の対応付けがないスレッド１３がなければ（ステップＳ３９のＮＯ），処理スレッド決定部１２２は，判定情報１２６に最後に割り振りが行われてから所定時間が経過したスレッド１３があるかを判定する（ステップＳ４５）。
【０１１４】
判定情報１２６に所定時間が経過したスレッド１３がなければ（ステップＳ４５のＮＯ），ＮＦＳサーバ１０は，ファイル書き込みリクエストの送信元のクライアント２０に対してビジーを応答する（ステップＳ４６）。
【０１１５】
判定情報１２６に所定時間が経過したスレッド１３があれば（ステップＳ４５のＹＥＳ），処理スレッド決定部１２２は，判定情報１２６から，所定時間が経過したスレッド１３を１つ選択する（ステップＳ４７）。以下，上述のステップＳ４１〜ステップＳ４４の処理が行われる。
【０１１６】
上述したように，図１０，図１１に示すフローチャートでは，判定情報１２６において，最後に割り振りが行われてから所定時間の経過で，ファイルの識別情報の記録が無効と判定される例が示されている。削除部１２３が，リクエストに対する処理とは別に，判定情報１２６において，最後に割り振りが行われてから所定以上の時間が経過したスレッド１３に対応付けられたファイルの識別情報の記録を削除するようにしてもよい。この場合には，ステップＳ４６，ステップＳ４７の処理が不要になる。
【０１１７】
図１２は，本実施の形態によるネットワークファイルシステムの効果を説明する図である。
【０１１８】
図１２には，図１に示す既存のネットワークファイルシステムと，図３に示す本実施の形態のネットワークファイルシステムとにおいて，それぞれ同じハードウェア構成，同条件のもとで行われた実験の結果が示されている。既存のネットワークファイルシステムと，本実施の形態のネットワークファイルシステムとの違いは，処理スレッド割り振りの仕組みである。ネットワークには，ＩＰｏＩＢ（ＱＤＲ）が採用されている。
【０１１９】
図１２（Ａ）は，クライアントからＮＦＳサーバに１ＧＢのファイルを作成した場合のフラグメント発生の状況を示す。図１２（Ａ）において，ｅｘｔｅｎｔｓは，ディスク上でファイルが何箇所に分かれているかを表す数値である。ｅｘｔｅｎｔｓの値が大きいほど，多くのフラグメントが発生している。図１２（Ａ）に示す実験結果から，本実施の形態のネットワークファイルシステムでは，既存のネットワークファイルシステムと比較して，フラグメントの発生が大きく抑制されていることが分かる。
【０１２０】
図１２（Ｂ）は，クライアントがＮＦＳサーバに作成した１ＧＢのファイルを読み込んだ場合の読み込み速度の状況を示す。図１２（Ｂ）に示す実験結果から，本実施の形態のネットワークファイルシステムでは，既存のネットワークファイルシステムと比較して，ＮＦＳサーバに作成したファイルに対する読み込み速度が約３倍速いことが分かる。
【０１２１】
このように，本実施の形態のネットワークファイルシステムによって，ＮＦＳサーバ１０上にファイルの書き込みを行う際に，ファイルのフラグメントを抑制することが可能となり，書き込みを行ったファイルに対する読み込み速度の低下を防止することが可能となる。
【０１２２】
以上，本実施の形態について説明したが，本発明はその主旨の範囲において種々の変形が可能であることは当然である。
【符号の説明】
【０１２３】
１０  ＮＦＳサーバ
１１  リクエスト受付部
１２  処理スレッド割り振り部
１２１  判定部
１２２  処理スレッド決定部
１２３  削除部
１２５  判定情報記憶部
１３  スレッド
１４  ローカルファイルシステム
１５  ファイル記憶装置
２０  クライアント
３０  ネットワーク
【図１】
0005494363.tif 000002
【図２】
0005494363.tif 000003
【図３】
0005494363.tif 000004
【図４】
0005494363.tif 000005
【図５】
0005494363.tif 000006
【図６】
0005494363.tif 000007
【図７】
0005494363.tif 000008
【図８】
0005494363.tif 000009
【図９】
0005494363.tif 000010
【図１０】
0005494363.tif 000011
【図１１】
0005494363.tif 000012
【図１２】
0005494363.tif 000013