(57)【特許請求の範囲】
【請求項１】
アプリケーションプログラムを実行するプロセスからのファイルアクセス要求に応答してファイル入出力を制御する方法において、
ファイルを複数の領域に分割し、該複数の領域を複数の物理装置に分散して割り付けるように要求するアプリケーションプログラムによるファイル構造設定要求に応答して指定されたファイル構造を設定するファイル構造テーブルを作成してファイル内領域を指定された物理装置に割り付け、該ファイル内の複数の領域を並列にアクセスするように要求する入出力要求に応答して設定されたファイル構造テーブルを参照して該入出力要求を各物理装置ごとのアクセス要求に展開し、該アプリケーションプログラムを実行するプロセスと該物理装置との間で並列にデータ転送を行うよう制御することを特徴とするファイル入出力制御方法。
【請求項２】
該アプリケーションプログラムを実行する複数のプロセスからの複数の入出力要求を収集し、収集した複数の入出力要求を各物理装置ごとのアクセス要求に展開することを特徴とする請求項１記載のファイル入出力制御方法。
【請求項３】
ネットワークを介して該アプリケーションプログラムを実行するプロセスと該物理装置との間のデータ転送を行う場合に、該ファイル管理プログラムによって物理装置のディバイスドライバが起動された後、該ファイル管理プログラムを介さずに物理装置のディバイスドライバとネットワークのディバイスドライバを介してデータを直接ネットワークと該物理装置との間に転送することを特徴とする請求項１記載のファイル入出力制御方法。
【請求項４】
該領域の１つに対応して複数の通信経路を設定し、複数の通信経路に対応する領域に関する該入出力要求に応答して該複数の通信経路を介する並列データ転送を行うよう制御することを特徴とする請求項１記載のファイル入出力制御方法。
【請求項５】
該入出力要求によってデータのフィルタリングを指定することによって該アプリケーションプログラムが必要とする以上のデータを該物理装置から該アプリケーションプログラムに向けて転送し、該ファイル管理プログラムのフィルタリングの該ファイル構造設定によって指定された必要部分のみのデータを該アプリケーションプログラムに渡すことを特徴とする請求項１記載のファイル入出力制御方法。
【請求項６】
該領域の１つに対応してデータをキャッシュするよう指定し、該入出力要求に応答して該物理装置への書き込みデータ及び読み取りデータをキャッシュ上に残し、読み取りデータについてキャッシュ上にデータがあればキャッシュからデータを取得するよう制御することを特徴とする請求項１記載のファイル入出力制御方法。
【請求項７】
アプリケーションプログラムを実行するプロセスからのファイルアクセス要求に応答してファイル入出力を制御するために、ファイルを複数の領域に分割し、該複数の領域を複数の物理装置に分散して割り付けるように要求するファイル構造設定要求に応答して指定されたファイル構造を設定するファイル構造テーブルを作成してファイル内領域を指定された物理装置に割り付ける手段、および
該ファイル内の複数の領域を並列にアクセスするように要求する入出力要求に応答して設定されたファイル構造テーブルを参照して該入出力要求を各物理装置ごとのアクセス要求に展開し、該アプリケーションプログラムを実行する複数のプロセスと該物理装置との間で並列にデータ転送を行うよう制御する手段としてコンピュータを機能させるためのプログラムを記録したコンピュータ読み取り可能な記憶媒体。
【請求項８】
該アプリケーションプログラムを実行する複数のプロセスからの複数の入出力要求を収集し、収集した複数の入出力要求を各物理装置ごとのアクセス要求に展開することを特徴とする請求項７記載のプログラムを格納する記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ファイル入出力制御方法に係わり、特に１つのファイルを関連する複数のプロセスによって並列にアクセスするよう制御する高速ファイル入出力制御方法に関する。
【０００２】
【従来の技術】
ファイルに何らかの属性を付加してファイルアクセスの高速化を図り、ファイル入出力のリアルタイム性の保証を行うファイルシステムが知られている。例えば特開平８−２９２９０５号公報は、ファイルを複数の装置に分割して格納し、ファイルシステムが入出力速度情報を保持し、ファイル入出力速度情報に従って各装置に入出力するデータ量を決めるファイルシステムを開示する。しかしこの技術は、ユーザがファイルの構造を定義するものではなく、ファイルシステムが構造を決定し、速度情報という属性を与えるものである。また指定可能な属性は、ディスク装置の速度に限られている。
【０００３】
ファイルの並列アクセスを目的とする他のファイルシステムとして、ＮｉｌｓＮｉｅｕｗｅｊａａｒ，Ｄａｖｉｄ  Ｋｏｔｚ著、「Ｇａｌｌｅｙ並列ファイルシステム」（ａｒｔｉｃｌｅ  ｅｎｔｉｔｌｅｄ  ”Ｔｈｅ  Ｇａｌｌｅｙ  Ｐａｒａｌｌｅｌ  Ｆｉｌｅ  Ｓｙｓｔｅｍ”，ｉｎ  ｔｈｅ  Ｃｏｎｆｅｒｅｎｃｅ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  １９９６  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｓｕｐｅｒｃｏｍｐｕｔｉｎｇ，ｐｐ．３７４−３８１）がある。このファイルシステムによってファイルの構造を設定することができるが、ユーザの所望するファイルのアクセスパターンに従ってファイル構造や属性を変更することができない。
【０００４】
【発明が解決しようとする課題】
複数のプロセスが協調して計算を行うようなアプリケーションプログラムにおいて、各プロセスは、高速化のためにしばしばファイルの一部分を並列にアクセスする必要が生じる。この場合、アプリケーションプログラムがファイルに対するアクセスのパターンを決定するので、ファイルシステムが勝手にファイルの分割を行い分割された領域をディスク装置へ割り付けると、ユーザの所望するアクセスパターンと合わなくなりファイルを並列アクセスすることによる高性能を引き出すことができない。例えば図１８に示すように、７００は並列動作する各アプリケーションプログラムＰ１〜Ｐ４がアクセスする論理ファイル内の範囲を示すアクセスパターンである。各プログラムは、それぞれ論理ファイル上の位置とアクセスバイト数を指定してファイルの一部領域をアクセスする。Ｐ１からＰ４までの４つのアプリケーションプログラム又はプロセスは、各々の領域について並列にファイルをアクセスする。従来のファイルシステムの構造定義機能は、７０１に示すようにファイルを均等に分割し、それぞれの領域に対してディスクＤ１〜Ｄ４を割り付ける。従ってプログラムＰ１はディスクＤ１とＤ２をアクセスし、プログラムＰ２はディスクＤ２とＤ３をアクセスする。他のプログラムについても同様である。この場合、ディスクＤ２はプログラムＰ１とＰ２の両方からアクセスされるので、並列動作するＰ１とＰ２はディスクＤ２についてどちらかの処理の完了を待たなくてはならず、並列アクセスによる効果を期待できない。ディスクＤ１の範囲をプログラムＰ１の範囲に合わせたとしても各アプリケーションプログラムのアクセス範囲が均等でないので、上記問題が生じる。
【０００５】
また従来のファイルシステムにおいては、ユーザはファイル入出力の性能を決定する属性（ファイルの論理構造と物理装置との対応、データの転送経路、ストライピングなど）をファイルシステム単位に指定するか、又はシステム起動時にしか指定できず、ファイル単位にこの属性を変えたい場合やパラメータを動的に変えたい場合は問題である。例えば図１８に示す７０２のような均一でない割り当て指定が可能であったとしても、ファイルごとにその指定ができなければ意味がない。何故ならば、複数のファイルの集まりであるファイルシステムに対して特定のアプリケーションのアクセスパターンを指定することになるからである。
また従来のファイルシステムは、ファイルの並列アクセスをする複数のプロセスからのアクセス要求をまとめて発行する機能をもっていないので、各プロセスが各々独立にアクセス要求を発行する必要があり、性能上の問題が生じる。
【０００６】
さらにファイルデータの転送に際して、従来のファイルシステムは、ネットワークを経由するデータ転送の場合、ディスク装置とネットワーク間のデータ転送にファイル管理プログラムが介入するので、転送性能上問題である。ディスク装置とネットワークを直接連結するようなデータ転送方式が望まれる。
【０００７】
本発明の目的は、ユーザの所望するアクセスパターンに合うようなファイル構造の設定をファイルごとに可能とし、ファイルの並列アクセス効果を発揮するようなファイル入出力制御方法を提供することにある。
【０００８】
本発明の他の目的は、ファイル内の各領域に対応して種々の属性を設定可能とすることにある。
【０００９】
本発明の他の目的は、複数のプロセスからのアクセス要求をまとめて発行し、ファイルの並列アクセスを総合的にスケジューリングするファイル入出力制御方法を提供することにある。
【００１０】
本発明のさらに他の目的は、ディスク装置とネットワーク間のデータ転送の性能を向上させることにある。
【００１１】
【課題を解決するための手段】
本発明は、ファイルを複数の領域に分割し、複数の領域を複数の物理装置に分散して割り付けるように要求するアプリケーションプログラムによるファイル構造設定要求に応答して指定されたファイル構造を設定するテーブルを作成して、ファイル内領域を指定された物理装置に割り付け、ファイル内の複数の領域を並列にアクセスするように要求する入出力要求に応答して設定されたファイル構造テーブルを参照して入出力要求を各物理装置ごとのアクセス要求に展開し、アプリケーションプログラムを実行する複数のプロセスと物理装置との間で並列にデータ転送を行うよう制御する高速ファイル入出力制御方法を特徴とする。なおファイル内の各領域に対応してデータの転送経路、データのストライピング、データのキャッシングなど種々の属性を設定可能とする。
【００１２】
また本発明は、アプリケーションプログラムを実行する複数のプロセスのうちの１つのプロセスがファイル内の複数の領域を並列にアクセスするように要求する入出力要求の全体をまとめて発行する高速ファイル入出力制御方法を特徴とする。
【００１３】
さらに本発明は、ネットワークを介してアプリケーションプログラムを実行するプロセスと物理装置との間のデータ転送を行う場合に、該ファイル管理プログラムによって物理装置のディバイスドライバが起動された後、物理装置のディバイスドライバとネットワークのディバイスドライバを介してデータを直接ネットワークと物理装置との間に転送する高速ファイル入出力制御方法を特徴とする。
【００１４】
【発明の実施の形態】
以下に本発明の一実施形態について図面を用いて詳細に説明する。
【００１５】
図１は、実施形態の高速ファイルシステムの構成を示す図である。ネットワーク９を介して計算機１〜６、８が接続され、各計算機上にはファイルサーバ（ＦＳ）１１〜１３、１５、１６、１８及び１９が搭載され動作する。計算機１〜４及び８は、入出力装置としてネットワーク９又は２５のみを接続する。計算機１及び５は、ネットワーク９以外にネットワーク１０を接続する。計算機５及び６は、入出力装置としてネットワーク９，１０以外にディスク装置２０〜２３を接続する。ディスク装置２０〜２３は、各々装置番号によって参照され、その装置番号はそれぞれ１、３、２、４である。計算機８は、別のネットワーク２５へのゲートウェイとして機能する。ネットワーク２５の他方には計算機７が接続されており、計算機７はディスク装置２４を接続する。計算機１に搭載されるユーザのアプリケーションプログラム（ＡＰ）１７は、ディスク装置２０〜２４上のファイルにアクセスするために、同計算機上のファイルサーバ１８にファイル構造の定義を指示し、ファイル入出力要求を発行する。アプリケーションプログラムが計算機１以外の計算機２〜４上で並列動作する場合、各計算機２〜４上のファイルサーバ１１〜１３も計算機１のファイルサーバ１８と同様の動作を行う。またディスク装置２０〜２３を接続する計算機５，６や外部のネットワーク２５を接続する計算機８上のファイルサーバ１５，１６，１９は、他の計算機１〜４上のファイルサーバからの要求を受け取って実際のディスク入出力処理を行い、結果を要求元の計算機１〜４へ送信する。以下の説明では、特に計算機１上のＡＰ１７について詳細に説明するが、他の計算機２〜４上で並列動作するアプリケーションプログラムも各計算機２〜４上で同様に動作する。次にファイル入出力処理の手順について述べる。
【００１６】
ユーザから見たファイル入出力処理は、図２に示す様に、一般にファイルの作成、ファイル構造の定義、ファイル入出力システムコールの発行及びファイル入出力処理の終了の各ステップからなる。各ステップに対応するファイルサーバの処理の概略を以下に述べる。ファイルの作成に関しては、要求のあったファイルに関する情報の管理領域の割り付け、ファイルディスクリプタの割り付けなどを行う。ファイルディスクリプタは、ファイル名に対応する内部的なファイルＩＤである。ファイル構造の定義では、ユーザから渡されたファイル構造定義用のスクリプトを解釈し、その結果を記憶装置に格納する。ファイル入出力システムコールが発行された場合は、ファイル構造定義に基づいてファイル入出力を行う。ファイル入出力終了処理のステップでは、キャッシュデータのディスク上への書き込み、主記憶上の不要な管理データの解放などを行う。本実施形態のファイルサーバは、上記の処理を行うファイル管理プログラムである。
【００１７】
次に上記ステップ中のファイル構造定義（１００）について詳しく述べる。ファイル構造定義では、ユーザはファイル構造を定義し、定義したファイル構造中の各領域に関して、属性（ファイル領域を割り付けるディスク装置、使用するアクセス経路、ストライピング、アクセス時に使用するプロトコルなど）を与えることにより、ファイルサーバに対して性能と信頼性を向上するようなファイルアクセスを指示することができる。アプリケーションプログラムが複数のプロセスによって動作する場合には、そのアプリケーションプログラムに対して１つの構造定義を設定する。図３にファイル構造定義スクリプトの例を示す。斜体の単語がキーワードであり、文の区切りはセミコロンである。最初の文は、ファイルの論理構造を定義しており、定義するファイルがＡ，Ｂ，Ｃ，Ｄの４つの領域から構成されていることを示している。ｔｙｐｅ＿Ａなどは、データの型と領域の大きさを示す型指定子であり、その内容は図示しない文によって定義される。例えば固定長のバイトの配列、固定長の文字列などである。ｓｔｒｕｃｔ文は、ファイルがＡ〜Ｄまでの４つの領域から成ることを示す。ｓｔｒｕｃｔ文の下は、上記の各領域に対して属性を指定している部分である。ｄｉｓｔｒｉｂｕｔｅ文は、属性として物理的な装置を指定する。図３では、領域Ａ，Ｂ，Ｃについて各々複数の入出力装置が設定されていることを示す。例えば最初のｄｉｓｔｒｉｂｕｔｅ文では、領域Ａはディスク装置２０、２２（図１参照、ファイル構造記録テーブル上のディスク装置番号はそれぞれ１と２である）に均等に分配されることを意味する。ｓｅｔ  ｐａｔｈ文は、属性として該当領域へアクセスするための経路を指定する。この例では領域Ｃが存在するディスク装置２０、２１は計算機５に接続されており、アプリケーションプログラムが動作する計算機１とこの計算機の間には、図１に示すようにネットワーク９を用いる経路Ｐ１と、ネットワーク１０を用いる経路Ｐ２の２つが存在する。最初のｓｅｔ  ｐａｔｈ文は、領域Ｃに対するアクセスに上記の経路Ｐ１とＰ２を使用することを意味する。これによりこれら２経路を使用した大きな通信バンド幅のデータ転送が可能となり、領域Ｃへの高性能アクセスが達成できる。ただしこれは計算機１上のアプリケーションプログラムに対してのみ適用する。最後のｓｅｔ  ｐａｔｈ文は、領域Ｄへのアクセス経路を指定すると同時に、アクセス手段がＮＦＳプロトコルであることを示している。従って領域Ｄへのアクセスは、ゲートウェイ計算機８を介して行われる。ディスク装置２４は、ＮＦＳ指定によって計算機１〜４上で動作するアプリケーションプログラムからは、ゲートウェイ計算機８に接続しているディスク装置のように見える。
【００１８】
このファイル構造定義スクリプトを受け取ったファイルサーバは、これを解釈し、ファイル構造記録テーブル６０を作成する。図４に上記ステップで定義されたファイル構造を示す。上段（６００）はスクリプトで定義した領域の名前を示す。下段（６０１）は、各領域がどの装置上に分散されているかを示す。ファイルサーバは、各領域の物理装置への割り当てを決定する。例えば領域Ａについては、領域Ａの前半分がディスク装置２０に、後半分がディスク装置２２に割り付けられる。従って領域Ａの前半分へのアクセスは全てディスク装置２０へのアクセスとなる。図５にファイル構造記録テーブル６０のデータ構成を示す。このテーブルは、始めの列から順番に領域の名前、領域の各分割部分の開始オフセット６１、分割部分の長さ（バイト数）６２、割り付けられるディスク装置の番号６３及びその他の属性６４から構成される。開始オフセット６１は、当該ファイルの先頭を０とする相対バイトアドレス（ＲＢＡ）によって表現される。領域Ａについては、ディスク装置２０と２２に分散して格納されるという指定になっている。しかし分散する量は明記されていないので、ファイルサーバは領域Ａを等分して格納することにする。これにより領域Ａの２つの部分のファイル全体に対するオフセットと長さが決まる。領域Ａについてはファイルの先頭から長さＬ１バイト分のデータがディスク装置２０に、ＯＦＴ１（＝Ｌ１）から長さＬ２バイト分のデータがディスク装置２２に格納される。領域Ｃに関しては、アクセスする経路としてＰ１、Ｐ２が指定されているので、その他の属性の欄にアクセス経路が記録される。また領域Ｄに関しては、別なネットワークＮ１を介してＮＦＳプロトコルでアクセスするので、その他の属性の欄にはプロトコルが記録される。ファイルサーバ１８は、ファイル構造定義ステップの最後で作成したファイル構造記録テーブル６０の情報をディスク装置２０，２１などいずれかのディスク装置に格納する。
【００１９】
本発明のファイル構造定義機能によれば、ユーザは並列効果を発揮するような最適のアクセスパターンを想定し、そのアクセスパターンに合うようにファイル構造を設定できる。例えば図１８に示す７００のようなＡＰのアクセスパターンに対して７０２のようにファイル構造を定義すれば、各ＡＰは完全に独立してディスク装置Ｄ１〜Ｄ４にアクセスすることができ、ファイルの並列アクセスによる並列効果を得ることができる。
【００２０】
次にこの例における実際の入出力動作の詳細を説明する。ファイル入出力処理は、図１に示すとおり、検索ステップ２００、スケジュールステップ３００、入出力実行ステップ４００及びフィルタステップ５００から成る。ＡＰ１７は、ファイル中の図４に示す部分６０２、６０３、６０４にアクセスするものとする。部分６０２は領域Ａのみのアクセス領域であり、範囲はオフセットｏ１からｏ２である。部分６０３は領域ＢとＣにまたがったアクセス領域であり、６０４は領域Ｄのみのアクセス領域である。ＡＰがアクセス要求を発行するとき、図６に示すようなアクセス要求のリストをファイルサーバ１８に渡す。要求リストの各要素６２０、６２１、６２２は、それぞれ部分６０２、６０３、６０４へのアクセス要求に対応する。各要素にはアクセスする領域のオフセット、長さ、アクセスするＡＰプロセスのプロセスＩＤ、データを受け渡しするバッファ領域及びアクセスの種類を格納する。この例ではアクセスする３つの領域は、各領域にアクセスするプロセスによって並行してアクセスされることを示している。要素６２０では、オフセットｏ１から長さｌ１バイト分のデータをバッファｂ１へ読み込む要求を示す。ＡＰ１７とファイルサーバ１８の間には、このような要求のリストを渡すことによって複数のアクセス要求を一度に発行できるアプリケーションプログラム・インタフェース（ＡＰＩ）が用意されている。
【００２１】
図７に示すようにＡＰ１７が入出力要求を発行すると、ファイルサーバ１８はその要求を受け取り、処理は検索ステップ（図７の２００）に入る。検索ステップ２００では、要求リストの各要素のオフセットと長さを取得し、ファイル構造記録テーブル６０を検索して、要求がどの領域に対応するかを特定する。これが領域の特定（２０１）である。部分６０２への要求に対しては、テーブル６０（図５）を検索して、要求の開始オフセットｏ１が０からｐ２（＝０＋Ｌ１＋Ｌ２）の間にあることを確認し、要求の終了オフセットｏ２（＝ｏ１＋ｌ１）が０からｐ２にあることを確認することにより、部分６０２への要求が領域Ａに対してのみの要求であることを特定する（図８参照）。部分６０３への要求の場合は、オフセットｏ３がｐ２とｐ４の間にあることを確認し、要求の最後のｏ４（＝ｏ３＋ｌ２）がｐ４とｐ６の間にあることを確認することにより、この要求が２つの領域ＢとＣに対する要求であることを特定する。このような２つ以上の領域に対する要求の場合は、要求を部分６０６と６０７の様に、領域毎に分割する。部分６０４への要求は、部分６０２への要求と同様に、領域Ｄに対してのみの要求であることを特定する。
【００２２】
次に領域中の部分の特定処理２０２を行う。これはここまでのステップで各領域対応となった要求を更にディスク装置ごとの要求へと分割する（図８参照）。部分６０２への要求については、ファイル構造記録テーブル６０（図５）と要求範囲を比べて要求がディスク装置２０と２２に渡っていることを認識し、部分６０２への要求をディスク装置ごとの要求として、ディスク装置２０への要求６０８とディスク装置２２への要求６０９に分割する。要求６０６の場合は、ディスク装置２３のみを対象とするアクセス要求なので、このステップではそのままである。要求６０７に関しては、ファイル構造記録テーブル６０を調べて要求がディスク装置２０と２１に渡っていることを認識し、要求をディスク装置２０への要求６１１とディスク装置２１への要求６１２に分割する。要求６０４に関しては、要求先の物理装置は要求範囲に亘って同じなのでこのステップではそのままである。
【００２３】
次にファイルサーバ１８は、スケジュールステップ３００を実行する。図９にスケジュールステップを示す。スケジュールステップは、ファイル入出力要求を発行したＡＰ１７が存在する計算機１上のファイルサーバ（１８）上で動作する部分と、検索ステップによつてディスク装置ごとに分割されたアクセス要求に対応する計算機上のファイルサーバ上で動作する部分とに分かれる。前者のファイルサーバをローカルファイルサーバ、後者のファイルサーバをリモートファイルサーバと呼ぶ。スケジュールステップは、検索ステップで分割された要求６０８、６０９、６０６、６１１、６１２及び６０４を受け取る。まずステップ３０１で、受け取った要求を要求先となるファイルサーバごとに集める。ファイルサーバ１５が動作する計算機５には、ディスク装置２０、２１が接続されているので、ディスク装置２０、２１に対する要求６０８、６１１、６１２を集める。ファイルサーバ１６が動作する計算機６に対しては、ディスク装置２２、２３が接続されているので、ディスク装置２２、２３に対する要求６０９、６０６を集める。要求６０４に関しては、ゲートウェイを介して別のネットワークへアクセスする必要があるので、ゲートウェイ８上のファイルサーバ１９に対する要求とする。次にステップ３０２で要求先の各ファイルサーバ（リモートファイルサーバ）に対して、集めた要求を同時に発行する。要求はファイル名、ディスク装置番号、アクセス種別、アクセス領域の先頭と最終オフセツト、アクセス経路が２つ以上ある場合の各ネットワーク識別子を含む。以降のステップは、各リモートファイルサーバ上で実行される。ただし領域Ｄに対する要求は、以下に説明するリモートファイルサーバとは若干異なった方法で処理される。
【００２４】
リモートファイルサーバは、ステップ３０３で受け取った要求をステップ３０４で、ディスク装置ごとのグループに分割してから、論理ブロック番号の順に並べ換える。論理ブロック番号は、ファイルの先頭の論理ブロック番号を０とする相対ブロック番号であり、上記のオフセツトから変換される。物理ブロック番号は、ＣＣＨＨＲのようにディスク装置の物理アドレスであり、論理ブロック番号から変換される。論理ブロックの長さは物理ブロックの長さに等しく、論理ブロック番号の順序は、物理ブロック番号の順序に一致する。ファイルサーバ１５は、ディスク装置２０に対する要求６０８、６１１のグループと、ディスク装置２１に対する要求６１２のグループとに分割する。ファイルサーバ１６は、ディスク装置２２に対する要求６０９のグループと、ディスク装置２３に対する要求６０６のグループとに分割する。ファイルサーバはディバイスドライバへディスクの論理ブロック番号によってアクセス要求を発行する。ファイルサーバは、ディバイスドライバへ要求を出す前に要求されたデータの論理ブロックをその番号によって整列する。ディスクのフォーマットを作成するときに論理ブロック番号によるファイルの順アクセスによってヘッドの移動が一方向にだけ発生するように論理ブロックに対応する物理ブロックを初期化する。すなわち論理ブロック番号の列をＬＢ（１）、ＬＢ（２）・・・ＬＢ（Ｎ）とし、ＬＢ（１）≦ＬＢ（２）≦・・・≦ＬＢ（Ｎ）であるとき、論理ブロック番号順にディスクをアクセスするときのヘッドのシーク方向が一方向のみとなるように論理ブロックを物理ブロックに対応させる。これにより、論理ブロック番号順のアクセスは、一定方向のヘッドのシークしか引き起こさないようになり、ヘッドシークによる性能低下を防ぐことができる。
【００２５】
ステップ３０５ではフィルタリングを行うかどうかの判断を行う。フィルタリングするかどうかは、要求されたファイル上の領域に不要な部分（穴）が含まれているかどうかによる。穴が含まれていない場合はフィルタリングを行わない。元々の部分６０２、６０３はともに連続領域のアクセス要求であるので穴が含まれず、従ってフィルタリングする必要がないと判断する。フィルタリングする例については後述する。
【００２６】
領域Ｄ上の部分６０４に関しては、図９の下段のボックスに示されるように、ステップ３０６で要求を受け取ったファイルサーバ１９は、アクセスがＮＦＳプロトコルを介したディスク装置２４へのアクセスであるので、アクセス手段であるＮＦＳプロトコル実行プログラムにアクセスを依頼する（ステップ３０７）。次に処理は入出力実行ステップに入る。
【００２７】
図１０は、計算機５のファイルサーバ１５が行う読み取り処理動作を示す図である。ファイルサーバ１５は、ディスクのディバイスドライバを起動して、論理ブロック番号順に整列したアクセス要求７０をディスクディバイスドライバへ渡す。ディスクディバイスドライバは空きバッファ７２を管理しており、要求されたディスクブロックのデータをディスク装置２０から空きバッファに読み込む。ディスクディバイスドライバとネットワークディバイスドライバは結合されており、バッファに読み込まれたデータはファイルサーバに返らずに、そのまま制御情報とともにネットワークディバイスドライバに渡される。ディスクディバイスドライバからネットワークディバイスドライバへのデータの転送はディスクのブロック単位に行われる。この転送動作はパイプライン方式によって並列に行われる。この方式によつて従来のようにディスクディバイスドライバからファイルサーバに一旦制御が戻る方式に比べてオーバヘッドを削減でき、高性能のデータ転送が可能である。制御情報には読み取りデータを要求したファイルサーバの識別子とそのアドレスが記録されている。ネットワークドライバは、制御情報を参照して読み取りデータをファイルサーバごとのキュー７１に登録する。本事例によれば要求元が１つの場合を扱っているので、計算機１用のサーバに関するキューに登録する。要求元が複数の場合は、それぞれ対応する計算機用のサーバに対するキューに登録する。ネットワークディバイスドライバとディスクディバイスドライバには共通の制御情報格納エリア７３があり、ディスクディバイスドライバは、データ読み取り要求を発行するたびに予想割り込み完了時刻をエリア７３に書き込む。ネットワークディスクドライバは、実際にネットワークディバイスを起動するときに、エリア７３の予想割り込み完了時刻を参照し、ネットワーク処理の割り込みがディスクの割り込みと重ならないようなタイミングでネットワーク９，１０を介して要求元のファイルサーバへ向けてデータ転送する。ディスクの予想割り込み完了時刻の元であるディスクデータ転送終了割り込みは、１要求分のディスクデータ転送の終端で発生する。またネットワークによる割り込みは、転送する１パケツト又は複数パケツトの終端で発生する。
【００２８】
計算機５には他にディスク装置２１も接続されており、ディスク装置２１からのデータ読み取り要求は、上記と同様の手段によってディスク装置２０からのデータ読み取り要求と並列に実行される。さらに領域Ｃへのアクセスに関してはアクセス経路が２つ指定されているので、ネットワークドライバはネットワーク９とネットワーク１０を経由するアクセス経路の両方を用いて高速な転送を行う。なお部分６０２と部分６０３は同一のディスク装置２０についてのアクセス要求を含むが、ディスク装置２０をアクセスする要求６０８と要求６１１はマージされて１つの要求となり、ディスク上では連続にアクセスされるため、並列効果を低下させるようなディスク装置２０に対するアクセス競合は生じない。
【００２９】
要求元であるファイルサーバ１８側の読み取りデータの流れを図１１に示す。要求先の計算機で読み取られ、計算機１に転送されたデータは、計算機１のネットワークハードウェア７５によつて受信される。ネットワークハードウェア７５は、変換テーブル７６を参照してアドレス変換を行う機構を有する。変換テーブル７６は、仮想空間上のアドレスを示す仮想アドレスと実記憶上のアドレスを示す物理アドレスとの変換対を格納する。予めファイルサーバによって設定された変換テーブル７６を参照してネットワークハードウェアは、要求したＡＰ１７の仮想空間上のバッファ領域に対応する主記憶上の領域へ受信データをコピー無しに転送する。計算機５から読み取ったデータは、ディスク装置２０と２１に対する要求６０８、６１１、６１２に対応するバッファ領域に格納される。
【００３０】
領域Ｄのデータは、ゲートウェイ８を介して他のネットワーク２５上の計算機７に接続されたディスク装置２４から計算機７のアクセス手段７８、ゲートウェイ８のアクセス手段７７を経て、ネットワーク９を介し計算機１のファイルサーバ１８に転送される。領域Ｄに関するアクセス手段としてＮＦＳがファイル構造定義に指定されているので、ゲートウェイ８と計算機７との間のデータ転送は、ＮＦＳプロトコルによって処理される。ファイルサーバ１８の処理は、他の領域Ａ，Ｂ，Ｃの場合と同じである。上記のリモートファイルサーバ１５、１６及び１９の各読み取りステップは、それぞれ並列に実行される。
【００３１】
次にデータ書き込みの場合について述べる。図１２は、書き込みのステップとデータの流れを示す図である。ファイルサーバ１８は、ファイル名、ディスク装置番号、アクセス種別、アクセス領域の先頭と最終オフセツトを含むデータ書き込み要求を例えばファイルサーバ１５へ送信する。ファイルサーバ１５は、この要求に応答しステップ４０１でバッファ領域を割り付ける。一般に資源の制約があり全書き込みデータ分のバッファを割り付けることは不可能なので、全データのうちの一部分のデータを格納するバッファを割り付ける。次にステップ４０２で書き込みデータ転送要求を書き込み要求元計算機１上のファイルサーバ１８に送る。書き込みデータ要求４１０は、ファイルサーバ１５上の転送先アドレス、バッファ長及び転送速度から成る。転送速度はパケットの実効転送速度である。ネットワークの伝送速度と指定された転送速度からパケットの送出時間間隔を計算できる。ファイルサーバ１５が指示する転送速度は、書き込みデータ転送要求発行時のディスクの実効転送速度にほぼ等しい。ファイルサーバ１８は書き込みデータ要求を受信すると、ステップ４０３でこの要求に従って書き込みデータを格納するバッファをネットワークドライバに渡し、計算機５へ書き込みデータを転送する。ファイルサーバ１８は、書き込みデータ要求中のブロックごとにネットワークディバイスドライバへデータ転送要求を発行する。ネットワークディバイスドライバは、要求された書き込みデータをパケットとして転送する（ステップ４０４）。この書き込みデータは、ファイルサーバ１５のバッファに直接転送される。ファイルサーバ１５のネットワークドライバは、受け取った書き込みデータをファイルサーバ１５を介さずに直接ディスクディバイスドライバに渡す（ステップ４０５）。ディスクディバイスドライバは、受け取ったデータを順次ディスクに書き込む（ステップ４０６）。
【００３２】
上述したようにリモートファイルサーバは、一般に書き込みデータ全体を格納するような書き込み用バッファを用意できないので、書き込みデータ要求を必要回数発行する。ネットワークディバイスドライバは、ステップ４０４の書き込みデータを送信するとき、各書き込みデータ要求ごとに指示される転送速度に従ってパケット送出の時間間隔を調節する。これによつてファイルサーバ１５側のバッファオーバーフローによるデータ喪失を防ぐ。
【００３３】
領域Ｄに書き込むデータは、ステップ４０４でゲートウェイ８へ転送され、一旦ファイルサーバ１９に渡される。ファイルサーバ１９は、指定されたアクセス手段であるＮＦＳプロトコルを用いてデータが格納されるべきディスク装置２４が接続されている計算機７へデータを転送する。
【００３４】
上記の例ではデータのフィルタリングをしないので、フィルタステップ５００が実行されなかった。以下にデータのストライピングを例にとってフィルタステップについて説明する。図１３は、ストライピング時のファイル構造定義スクリプト８４、ＡＰのデータ参照方向に沿った論理的なデータの配置８０及びファイル上のデータの配置８１を示す図である。データは１００×１００の要素から構成される２次元の配列である。計算機１〜４上で動作するＡＰは、このデータ構造をもつたファイルに並列にアクセスする。ファイル構造定義スクリプト８４の始めのｓｔｒｕｃｔ文で、１００×１００の要素から構成される配列を定義している。次のｄｉｓｔｒｉｂｕｔｅ文で配列の各行を４ブロックに分け、４ブロックごとに４つのディスクのうちの各ディスク上にストライプのパターンを形成するように分散して格納することを示している。ブロック長はｔｙｐｅ＿Ａのデータ２５個分とみなす。従って各行は４ブロックとなる。８０はユーザから見た配列の分割状況を示している。この分割は、ｒｏｗ−ｍａｊｏｒで（行の方向に）配列を分割するようなデータの配置を仮定する。ファイル上のデータの配置８１は、データが配列の始めの行から行の順番に並んでいる。８２はファイル上のデータの配置８１に対応する物理的なディスク上のデータの配置を示している。最初の行Ａ［１，＊］については、全てのブロックがディスク装置２０上に割り当てられていることを示す。ディスク装置２０には、Ａ［５，＊］、Ａ［９，＊］なども割り当てられる。８３は対応する配列の行を用いて計算を行う計算機の番号が示されている。例えば行Ａ［１，＊］は計算機１上のＡＰ１７によって参照される。この構成定義の場合、各計算機上のＡＰは、各々独立にディスク装置にアクセスする。ＡＰが配列の行方向にアクセスする場合には、上記のような手順によってファイルにアクセスを行い、フィルタリング動作は発生しない。ただし全体のスケジュールを行うために、図１９のように要求の発行者を４つのプログラム（またはプロセス）の中のどれか一つに決め（例えば、計算機１上のＡＰ１７）、これが他のプログラム（プロセス）の要求もリストとして繋いでファイルサーバ１８にアクセス要求を発行する。ファイルサーバ１８は、他のプログラムの要求もリストとして繋いだ要求をまとめて受け付ける。計算機１上のＡＰ１７は、このようなＡＰＩを用いて各計算機２〜４のＡＰの要求も一緒に発行する。ファイルサーバ１８は、すべての要求に対して検索ステップ２００、スケジュールステップ３００を、上述した手順に従って行う。入出力実行ステップ４００では、要求発行元が指示するデータアクセスする計算機に従って入出力動作を実行する。データ読み取りの場合には、計算機１ではなくデータを参照する計算機へ読み取りデータを転送する。このようにファイルサーバに他のＡＰの要求も渡すことによって並列動作するＡＰ全体に亘るグローバルなスケジューリングが可能となる。このスケジューリング方式は、次に示す配列の列方向にアクセスする例で効果を発揮する。
【００３５】
次に上記のデータ構造をもつ行列に対して各プログラムが列方向にアクセスする場合について説明する。８５はこの場合のＡＰの参照方向に沿った論理的なデータの配置を示す。Ａ［＊，１］は行列Ａの１列目を表す。ファイルは行方向のアクセスに対して最適化されているため、列方向のアクセスの場合には８３に示す計算機のアクセスパターンの代わりに８４に示すように各ＡＰは行列の各要素ごとに順にかつ交互にアクセスする。例えば計算機１上で動作するＡＰ１７は図の白抜きの部分の要素をアクセスする。各計算機がこのようなアクセスをそれぞれ独立して行うとすれば、入出力性能が極端に低下する。このような場合、すなわちあるプログラムからアクセスするデータが不要部分を含んでいる場合は、フィルタステップ５００でデータのフィルタリングを行うように判断する。ＡＰ１７は他のプログラムの要求もリストとして繋いでファイルサーバ１８にこのようなアクセスパターンによるアクセス要求を発行する。ファイルサーバは、フィルタステップ５００で転送されるデータのフィルタリングを行う。フィルタリングは、図１４に示すようにディスク装置の接続された計算機上（フィルタ５１０）か、ファイルを要求したプログラムが存在する計算機上（フィルタ５１１，５１２）で実行される。図１４は、ディスク装置２０にあるデータを各プログラムが読み込む場合のデータの流れを示す。ディスク装置２０から読み出されたデータ８４は、各プログラムから見ると図１３に示すように不要部分のあるデータなので、スケジュールステップ３０５（図９）でフィルタリングを行うと判断される。ネットワーク９を制御する通信制御ハードウェアがスキャタ／ギャザの機能を備えている場合は、フィルタ５１０がスキャタ／ギャザの準備をして該当する計算機上へ転送する。例えば計算機１の必要とするデータとして８４の白抜きの部分のみが集められて計算機１へ転送される。この場合にはグローバルなスケジュール機能によって、計算機１が要求した領域（白抜きの領域）以外の領域も必要であると計算機５のファイルサーバは判断するので、他の計算機２〜４が必要とする部分を集めて各計算機へ転送する。ハードウェアにスキャタ／ギャザの機能がない場合は、ディスク装置２０から取得されたデータ８４はアクセスする計算機１〜４全てにブロードキャストで転送される。次に各計算機はフィルタ５１１，５１２によるフィルタ処理を行い、ＡＰには必要な部分のデータのみが渡される。例えば計算機１は、フィルタリング処理によって受信したデータ８４から５１３の白抜きの部分のみを抜き出し、計算機４は５１４の網が一番濃い部分のみを抜き出す。このフィルタ処理によってディスクアクセスの単位を大きくし、ディスクアクセスの回数を減らすことができ、性能を劣化させることなく上記のようなアクセスパターンによるデータアクセスが可能となる。
【００３６】
上述したように、ユーザは最適のアクセスパターンを想定してファイル構造を設定するが、別のアクセスパターンによってファイルをアクセスする場合にはファイル構造を変更しなくとも別のアクセス要求リストを指定し、ファイルシステムによるフィルタリングとグローバルなスケジュール機能によってファイルの並列アクセスによる並列効果を得ることができる。
【００３７】
なお図１に示すシステム構成は一例であり、種々の変形したシステムを構成し得る。本発明は、計算機の台数、ネットワークの存在、ディスク装置を接続する計算機、ＡＰを搭載する計算機、ファイルサーバを搭載する計算機などのハードウェア構成が限定されるものではない。本発明の主旨とするところは、アプリケーションプログラムを実行する複数のプロセスとファイルの領域が割り付けられる物理装置との間で並列にデータ転送するような構成であり、この主旨に沿ったシステム構成は本発明の範囲である。特に並列データ転送を効果的に行うために、計算機の処理能力、ネットワークのデータ転送速度、ディスク装置−主記憶装置間のデータ転送速度上のネックを解消しているシステム構成が望ましい。
【００３８】
次にその他の属性６４の定義と動作について説明する。図１５は、属性としてキャッシュの有無、信頼性の指定、他のファイルとの関連を指定するときのファイル構造定義スクリプトである。ファイルのデータ構造は、上記の例と同じであるので、最後の６つのｓｅｔ文について説明する。最初のｓｅｔ文は、領域Ａへのアクセスをキャッシュすることを意味する。次のｓｅｔ文は、領域Ｂに対するアクセスが読み出し専用であることを示す。３行目のｓｅｔ文は、領域Ｂへのアクセスをキャッシュすることを意味する。次の２つのｓｅｔ文は、領域Ｃをファイル”Ｋ”と”Ｌ”に関連付けることを意味する。最後のｓｅｔ文は、領域Ｄのデータをミラーリングすることを意味する。
【００３９】
この例では、領域の一部ではなく領域全部に対してアクセスするものとする。ファイルサーバは、全ファイルの一部分である領域についてファイル構造定義時に指定した領域の名前を指定してオープンすることを許すインタフェースを有する。以降は、この部分を通常のファイルと同じプリミティブを用いてアクセスすることが可能となる。図１６は、領域Ｃに対してｏｐｅｎ＿ｓｕｂというプリミティブで領域名”Ｃ”を指定してオープンすることを示している。
【００４０】
次に実際に各領域にアクセスする場合の動作について述べる。領域Ａに関しては、属性としてキャッシュ属性が指定されている。計算機上のキャッシュ制御部は、データ読み取り要求を受けた時、計算機のキャッシュ上にデータがある場合、ディスクアクセスを行わずにキャッシュ上のデータを取り込む。書き込みの場合は、書き込みデータをキャッシュ上に残しておき非同期に書き込みを行う。複数のプログラムから領域Ａがアクセスされる場合、図１７に示すキャッシュ制御部６５０は、一貫性制御ステップ６５１によってキャッシュ間の一貫性及びキャッシュとファイルデータとの一貫性を保証する。図１７の場合は、領域Ａについての読み取りアクセス要求と書き込みアクセス要求が同時に発生しているので、キャッシュ制御部６５０は、一貫性制御ステップによって各操作の順番を決定し、キャッシュおよびファイルデータの一貫性を保つ。一方領域Ｂへのアクセスもキャッシュ属性が指定されているが、同時にアクセスパターンとして読み込み専用属性も指定されているので、キャッシュ制御部６５０は、一貫性制御ステップ６５１を実行しない。このように属性によって本ファイルシステムは、キャッシュの制御処理を自動的に変える。
【００４１】
領域Ｃは、例えばハイパーテキストデータであるとする。このハイパーテキストは、リンク先として、ファイル”Ｋ”と”Ｌ”を含んでいる。この場合、ファイルＣの読み取り要求と同時に、ファイル”Ｋ”および”Ｌ”へも読み取り要求を発行し、バッファに保存する。これにより、後のファイル”Ｋ”や”Ｌ”へのアクセスに対してキャッシュが効くので、高速にファイルにアクセスできる。
【００４２】
領域Ｄはディスク装置２０と２２へのミラーリングが指定されているので、この領域に対する書き込み要求があった場合は、入出力実行ステップ４００で、ディスク装置２０と２２が接続されている計算機５と６へ書き込みデータを同時に転送し、各計算機は図１２に示すように並列に書き込み動作を実行する。上記の例では各計算機ごとに書き込みデータは異なっていたが、ミラーリングの場合は計算機５と６に書き込むデータは同じである。領域Ｄへのアクセス時、ディスク装置２０と２２のうちのどちらかの故障を検出したとき、ファイルサーバは故障していない方のディスクを用いて入出力動作を実行する。
【００４３】
【発明の効果】
本発明によれば、アプリケーションプログラムがファイル構造とファイル内各領域に対応する属性を指定することによって、ファイルアクセス時にユーザの所望するアクセスパターンに沿ったアクセスが可能となり、ファイルの並列アクセス効果を発揮することができる。またファイルのアクセスパターンが変化したとき、統合的なスケジューリング機構によりその状況での最適なファイルアクセスを実現できる。また同一ファイルをアクセスする複数のプロセスのアクセス要求をまとめて発行できるため、ファイルの並列アクセスを統合的にスケジューリングでき、効率的な入出力制御を行うことができる。さらに物理装置のディバイスドライバとネットワークディバイスドライバを介してデータを直接ネットワークと物理装置との間に転送することができ、ファイルサーバが介在することによるオーバヘッドを削減することができる。また両ディバイスドライバ間で情報を共有することにより、ディバイスドライバ間でパイプライン的にデータを転送することができ、高速なファイルデータの転送が実現できる。
【図面の簡単な説明】
【図１】実施形態の高速ファイルシステムの構成図である。
【図２】実施形態のファイル入出力処理手順を示す図である。
【図３】ファイル構造定義スクリプトの例を示す図である。
【図４】ファイル構造とファイルアクセス範囲の例を示す図である。
【図５】実施形態のファイル構造記録テーブル６０のデータ構成を示す図である。
【図６】ファイルアクセス要求のリストの例を示す図である。
【図７】実施形態の検索ステップの処理の流れを示す図である。
【図８】実施形態の入出力要求の分割を説明する図である。
【図９】実施形態のスケジュールステップの処理の流れを示す図である。
【図１０】実施形態のファイル読み取り処理動作を示す図である。
【図１１】実施形態のファイル読み取り時のデータの流れを示す図である。
【図１２】実施形態のファイル書き込み時のデータの流れを示す図である。
【図１３】ストライピング時のファイル構造定義スクリプトの例を示す図である。
【図１４】実施形態のフィルタリングを説明する図である。
【図１５】属性としてキャッシュの有無、信頼性を指定するときのファイル構造定義スクリプトの例を示す図である。
【図１６】ファイル構造定義時の名前をファイル入出力の操作に使用したプログラムの例を示す図である。
【図１７】実施形態のキャッシュ制御を説明する図である。
【図１８】ユーザプログラムのアクセスパターンと物理装置上の領域割り付けとの対応を例示する図である。
【図１９】１つのプロセスが他のプロセスの要求を集めることを説明する図である。
【符号の説明】
１〜８：計算機、１１〜１３、１５、１６、１８、１９：ファイルサーバ、１７：アプリケーションプログラム、９、１０：ネットワーク、２０〜２４：ディスク装置、６０：ファイル構造記録テーブル、１００：構造定義ステップ、２００：検索ステップ、３００：スケジュールステップ、４００：入出力実行ステップ、５００：フィルタリングステップ
【図１】
0003817339.tif 000002
【図２】
0003817339.tif 000003
【図３】
0003817339.tif 000004
【図４】
0003817339.tif 000005
【図５】
0003817339.tif 000006
【図６】
0003817339.tif 000007
【図７】
0003817339.tif 000008
【図８】
0003817339.tif 000009
【図９】
0003817339.tif 000010
【図１０】
0003817339.tif 000011
【図１１】
0003817339.tif 000012
【図１２】
0003817339.tif 000013
【図１３】
0003817339.tif 000014
【図１４】
0003817339.tif 000015
【図１５】
0003817339.tif 000016
【図１６】
0003817339.tif 000017
【図１７】
0003817339.tif 000018
【図１８】
0003817339.tif 000019
【図１９】
0003817339.tif 000020