(57)【特許請求の範囲】
【請求項１】
複数の計算ノードがネットワークで接続された並列計算機において，
前記ネットワークに接続される複数の計算ノードまたは他の入出力用のノードに接続される複数の二次記憶装置と，
前記二次記憶装置が接続される計算ノードまたは他の入出力用のノードのすべてのノードのリスト情報が格納された構成ファイルと，
前記計算ノードが処理するデータを保持するための一つの論理的なファイルが保持するデータを，前記構成ファイルに格納されたノードのリスト情報から選択された複数のノードにそれぞれ接続される複数の二次記憶装置に分割して格納する手段と，
すべての前記計算ノードから参照可能な二次記憶装置上に設けられ，前記一つの論理的なファイルが保持するデータの前記複数の二次記憶装置への分割情報を保持するメタファイルと，
前記計算ノードによる前記論理的なファイルに対する入出力要求に対して，前記複数の二次記憶装置上のデータを並行して入出力するファイル操作手段とを備え，
前記ファイル操作手段は，ファイル操作時に前記メタファイルを参照することにより，論理的なファイルと前記複数の二次記憶装置上に格納されている当該論理的なファイルが保持するデータとを結び付けてデータにアクセスするように構成された
ことを特徴とする並列計算機。
【請求項２】
請求項１記載の並列計算機において，
前記論理的なファイルの生成時に，論理的なファイルを分割する数を指定する手段を有する
ことを特徴とする並列計算機。
【請求項３】
請求項１記載の並列計算機において，
前記論理的なファイルの生成時に，論理的なファイルを分割するデータ長を指定する手段を有する
ことを特徴とする並列計算機。
【請求項４】
請求項１記載の並列計算機において，
前記論理的なファイルの生成時に，前記一つの論理的なファイルが保持するデータを格納する複数の二次記憶装置を決定する際に，前記構成ファイルに格納されたノードのリスト情報中のランダムに選択されたノードから分割数分のノードを抽出し，それらのノードに接続される複数の二次記憶装置を，前記データを格納する二次記憶装置として決定する手段を有する
ことを特徴とする並列計算機。
【請求項５】
請求項１記載の並列計算機において，
前記論理的なファイルの生成時に，ファイルの実体を格納する各ノードのパーティションファイルのファイル名に，前記計算ノードのサイト名，プロセスＩＤまたは時間もしくは順序情報を付加することにより，ファイル名の重複を防ぐようにした
ことを特徴とする並列計算機。
【請求項６】
請求項１記載の並列計算機において，
前記ファイル操作手段は，あらかじめ設定された環境変数の値によって前記論理的なファイルを操作するか通常の物理ファイルを操作するかを区別するようにした
ことを特徴とする並列計算機。
【請求項７】
請求項１記載の並列計算機において，
前記論理的なファイルのオープン処理時に，前記複数の計算ノードのうちの代表となる計算ノードのみが前記論理的なファイルを格納する二次記憶装置を有するノードとの通信処理を行い，同じ論理的なファイルを使用する他の計算ノードは，前記代表となる計算ノードから結果を受け取るようにした
ことを特徴とする並列計算機。
【請求項８】
請求項１記載の並列計算機において，
前記計算ノード上にルート権限の仲介プロセスを有するとともに，前記論理的なファイルを格納する二次記憶装置を有するノード上にルート権限のデーモンプロセスを有し，
前記計算ノード上のユーザプロセスは，前記仲介プロセスおよび前記デーモンプロセスを経由して前記論理的なファイルを格納する二次記憶装置を有するノード上に入出力用サーバプロセスを起動して前記論理的なファイルにアクセスするようにした
ことを特徴とする並列計算機。
【請求項９】
請求項８記載の並列計算機において，
前記計算ノード上に監視用デーモンプロセスを有し，
前記論理的なファイルを操作中にユーザプロセスが異常終了すると，前記監視用デーモンプロセスは，ユーザプロセスの異常終了を検出し，前記論理的なファイルを格納する二次記憶装置を有するノード上のデーモンプロセスに入出力要求のキャンセルを依頼し，
依頼されたデーモンプロセスは，前記入出力用サーバプロセスを強制終了させる
ことを特徴とする並列計算機。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は，複数の計算ノードがネットワークで接続された並列計算機に関し，特に大容量のデータを格納するファイルシステムを持つ並列計算機に関する。
【０００２】
【従来の技術】
近年，科学技術計算等の分野において，大量のデータを高速に入出力することが可能な計算機システムが求められている。また，並列処理技術の成熟に伴い，並列計算機においてプログラムを並列化することによって，処理時間の短縮を図ることが行われている。しかし，並列計算機上で動作するプログラムにおいて大量のデータ入出力を行う場合には，データ入出力処理が処理全体のボトルネックとなってしまう。したがって，このようなプログラムの性能を向上させるためには，データ入出力処理を高速化することが重要である。
【０００３】
従来の並列計算機システムにおいては，単一のディスク記憶装置もしくは複数のディスク記憶装置を一つのノード（計算機）に接続して，この入出力用のノード（以下，Ｉ／Ｏノードという）をファイルサーバとして使用していた。
【０００４】
このＩ／Ｏノードでは，他のノードからファイル入出力要求を受け付け，ディスク記憶装置との間で入出力を行い，結果を要求の発行元へ返す。しかし，単一のＩ／Ｏノードの通信能力，ＣＰＵ能力，Ｉ／Ｏ能力には限界があり，大容量のファイル入出力要求が発行された場合や，多数のノードから同時に入出力要求が発行された場合には，性能の低下が避けられなかった。
【０００５】
【発明が解決しようとする課題】
従来技術では，並列計算機上で大容量の入出力を必要とするアプリケーションプログラムを同時に実行させると，Ｉ／Ｏノードにおける入出力処理がシステム全体のボトルネックとなり，性能が低下するという問題点があった。
【０００６】
本発明は上記問題点を解決し，並列計算機上に複数のＩ／Ｏノードを用意し，一つの論理的なファイルを複数のＩ／Ｏノード上に分散配置することにより，大容量入出力処理においてもＩ／Ｏノードの負荷を軽減し，入出力処理の性能向上，ひいてはシステム全体の性能向上を図ることを目的とする。
【０００７】
【課題を解決するための手段】
図１は本発明の概要説明図である。
図１において，１ａ〜１ｃはそれぞれＣＰＵおよび主記憶装置を有する計算ノード，２は各計算ノードに対して共通のファイルアクセス機能を提供するネットワークファイルシステム，２１は一つの論理的なファイルを表すメタファイル，２２はファイルの実体を格納するノードのリストを指定する構成ファイル，３１，３２は入出力処理を分担するＩ／Ｏノード，４はネットワーク，５１は計算ノードから一つの論理的なファイルとして扱われる論理ファイル，５２ａ〜５４ａ，５２ｂ〜５４ｂはそれぞれ論理ファイル５１の実体を分割して格納するパーティションファイル，６１，６２は磁気ディスク装置等の二次記憶装置を表す。
【０００８】
第１の発明は，複数の計算ノード１ａ〜１ｃがネットワーク４で接続された並列計算機において，ネットワーク４に接続される複数の計算ノード１ａ〜１ｃまたは他のＩ／Ｏノード３１，３２に接続される複数の二次記憶装置６１，６２と，計算ノード１ａ〜１ｃが処理するデータを保持するための一つの論理的なファイルである論理ファイル５１を，複数の二次記憶装置６１，６２に分割して格納するパーティションファイル５２ａ〜５４ａ，５２ｂ〜５４ｂと，計算ノード１ａ〜１ｃによる論理ファイル５１に対する入出力要求に対して，複数の二次記憶装置６１，６２上のデータを並行して入出力するファイル操作手段であるネットワークファイルシステム２を備えることを特徴とする。
【０００９】
この発明によれば，従来一つのノード上の二次記憶装置に格納されていたファイルを，複数のＩ／Ｏノード３１，３２上の二次記憶装置６１，６２にパーティションファイル５２ａ〜５４ａ，５２ｂ〜５４ｂとして分割して格納するため，各Ｉ／Ｏノード３１，３２の入出力処理は並行して行うことができ，ファイルの入出力の性能を向上させることが可能である。
【００１０】
特に第１の発明は，一つの論理ファイル５１を表すメタファイル２１を有し，ネットワークファイルシステム２は，ファイル操作時にメタファイル２１を参照することにより，論理ファイル５１と各Ｉ／Ｏノード３１，３２上に格納されているファイルの実体であるパーティションファイル５２ａ〜５４ａ，５２ｂ〜５４ｂとを結び付けてファイルにアクセスするように構成されていることを特徴とする。
【００１１】
このようにすると，利用者のアプリケーションプログラム等は，論理ファイル５１が複数の実体から構成されることを意識することなく，あたかも実体が一つであるかのようにして使用することができる。
【００１２】
また，第１の発明は，さらにメタファイル２１がすべての計算ノード１ａ〜１ｃから参照可能な二次記憶装置上に設けられていることを特徴とする。こうすることにより，ある計算ノードで作成した並列ファイル（論理ファイル５１）を，他の計算ノードでも利用することが可能になる。さらにまた，論理ファイル５１の生成時に，そのファイルの実体を格納するＩ／Ｏノード３１，３２等のリストを指定する構成ファイル２２を持つことを特徴とする。こうすることにより，システム構成の変化に対応して，容易にＩ／Ｏノード構成を変更することが可能である。
【００１３】
第２の発明は，上記第１の発明の構成に加えて，論理ファイル５１の生成時に，その論理ファイル５１の実体を分割するストライプ数を指定する手段を有することを特徴とする。こうすることにより，アプリケーションプログラムの開発者，管理者，利用者等は，ファイルサイズ，アプリケーションの性質等を考慮して，ファイル毎に最適なストライプ数を設定することができる。
【００１４】
第３の発明は，上記第１の発明の構成に加えて，論理ファイル５１の生成時に，その論理ファイル５１の実体を分割するデータ長（ストライプ幅）を指定する手段を有することを特徴とする。こうすることにより，アプリケーションプログラムの開発者，管理者，利用者等は，ファイルサイズ，アプリケーションの性質等を考慮して，ファイル毎に最適なストライプ幅を設定することができる。
【００１６】
第４の発明は，上記第１の発明の構成に加えて，さらに論理ファイル５１の生成時に，そのファイルの実体を格納するノードを構成ファイル２２が保持するノードのリスト中からランダムに選択し，その選択されたノードから分割数分のノードを抽出する手段を有することを特徴とする。こうすることにより，作成する並列ファイル毎に使用するＩ／Ｏノードが異なることになり，特定のＩ／Ｏノードに負荷が集中することを避けることが可能になる。
【００１７】
第５の発明は，上記第１の発明の構成に加えて，論理ファイル５１の生成時に，そのファイルの実体を格納する各Ｉ／Ｏノード３１，３２のパーティションファイル５２ａ，５２ｂ，…のファイル名に，各計算ノード１ａ〜１ｃのサイト名，プロセスＩＤまたは時間もしくは順序情報を付加することを特徴とする。乱数等を使ってパーティションファイル名を決定すると，異なる論理ファイルのパーティションファイル名が重複してしまう可能性があるが，こうすることにより，パーティションファイル名の重複を避けることが可能である。
【００１８】
第６の発明は，上記第１の発明の構成に加えて，ネットワークファイルシステム２のファイル操作手段が，あらかじめ設定された環境変数の値によって論理ファイル５１の並列ファイルを操作するか通常の物理ファイル（非並列ファイル）を操作するかを区別するようにしたことを特徴とする。こうすることにより，非並列ファイル，並列ファイルのいずれを扱う際も共通のプログラムを利用することが可能であり，プログラムの修正は不要である。
【００１９】
第７の発明は，上記第１の発明の構成に加えて，論理ファイル５１のオープン処理時に，複数の計算ノード１ａ〜１ｃのうちの代表となる計算ノード（マスタ）のみが論理ファイル５１の実体を格納する二次記憶装置６１，６２を有するＩ／Ｏノード３１，３２との通信処理を行い，同じ論理ファイル５１を使用する他の計算ノード（スレーブ）は，代表となる計算ノードから結果を受け取るようにしたことを特徴とする。
【００２０】
このように，オープン処理において，マスタの計算ノードのみが代表してＩ／Ｏノード３１，３２と通信することにより，計算ノード１ａ〜１ｃとＩ／Ｏノード３１，３２間の通信量を削減することが可能であり，システム全体の性能向上を図ることができる。
【００２１】
第８の発明は，上記第１の発明の構成に加えて，計算ノード１ａ〜１ｃ上にルート権限の仲介プロセスを有するとともに，Ｉ／Ｏノード３１，３２上にルート権限のデーモンプロセスを有し，計算ノード１ａ〜１ｃ上のユーザプロセスは，仲介プロセスおよびデーモンプロセスを経由して，Ｉ／Ｏノード３１，３２上に入出力用サーバプロセス（以下，Ｉ／Ｏサーバプロセスという）を起動して，論理ファイル５１の実体にアクセスするようにしたことを特徴とする。
【００２２】
こうすることにより，ファイルのアクセス権限を持たないユーザが，偽のメッセージをＩ／Ｏサーバプロセスへ送って，ファイルをアクセスすることを防ぐことができる。
【００２３】
第９の発明は，上記第８の発明の構成に加えて，さらに計算ノード１ａ〜１ｃ上に監視用デーモンプロセスを有し，論理ファイル５１を操作中にユーザプロセスが異常終了すると，監視用デーモンプロセスは，ユーザプロセスの異常終了を検出し，Ｉ／Ｏノード３１，３２上のデーモンプロセスに入出力要求のキャンセルを依頼し，依頼されたデーモンプロセスは，Ｉ／Ｏサーバプロセスを強制終了させるように構成されていることを特徴とする。
【００２４】
こうすることより，ユーザプロセスが並列プロセスを操作中に異常終了した場合に，対応するＩ／Ｏサーバプロセスも終了させることが可能である。この機構がないと，無駄なＩ／Ｏサーバプロセスが永遠に生き残ってしまい，Ｉ／Ｏノードの負荷が増大してしまう。
【００２５】
【発明の実施の形態】
以下，図面を参照しながら，本発明の実施の形態を説明する。
例えば，図１に示すように，データ処理用の計算ノードが３台（計算ノード１ａ〜１ｃ），データ入出力用のＩ／Ｏノードが２台（Ｉ／Ｏノード３１，３２）がネットワーク４に接続されて，並列計算機が構成されているものとする。Ｉ／Ｏノード３１，３２には，磁気ディスク装置等の大量のデータを格納するための二次記憶装置６１，６２が接続されている。データ入出力用のＩ／Ｏノード３１，３２は，データ処理用の計算ノード１ａ〜１ｃとは別に専用で設けられるほうが入出力処理の高速化のために望ましい。しかし，システムによっては計算ノードがＩ／Ｏノードの機能を兼ね備えていてもよい。
【００２６】
本発明では，一つの論理ファイル５１を複数のＩ／Ｏノード３１，３２上の二次記憶装置６１，６２に分割して格納する。その論理ファイル５１に対して入出力を行いたい計算ノード１ａ〜１ｃでは，ネットワークファイルシステム２が提供する機能を利用し，ネットワーク４を介して各Ｉ／Ｏノード３１，３２に入出力要求を発行する。
【００２７】
また，本システムでは，一つの論理ファイル５１を表すメタファイル２１が設けられる。図２にそのメタファイル２１の形式例を示す。
メタファイル２１には，例えば図２（Ａ）に示すように，論理ファイルであることを示す識別情報（ｓｐｆｓｆｉｌｅ），ストライプ数（ファイル分割数），ストライプ幅（分割するデータ長），Ｉ／Ｏノード名，実体のファイル名（各パーティションファイル５２ａ〜５４ａ，５２ｂ〜５４ｂの名前）に関する情報が格納されている。なお，ｓｐｆｓは，Ｓｃａｌａｂｌｅ  ａｎｄ  Ｐａｒａｌｌｅｌ  Ｆｉｌｅ  Ｓｙｓｔｅｍ  の略である。
【００２８】
図２（Ｂ）は，論理ファイル５１のデータ分割例を示しており，第１〜第ｎのＩ／Ｏノード（図１では，Ｉ／Ｏノード３１，３２）に対して，指定されたストライプ幅のデータ長分ずつそれぞれ順番にパーティションファイルとしてデータが割り当てられる様子を示している。
【００２９】
ファイルを操作するときには，ネットワークファイルシステム２によってこのメタファイル２１を参照することにより，ファイルの実体，すなわちパーティションファイル５２ａ〜５４ａ，５２ｂ〜５４ｂにアクセスすることができる。
【００３０】
図３は，ｍｙｔｅｓｔという名前のメタファイル２１を，各計算ノード１ａ，１ｂが参照する様子を示している。ネットワークファイルシステム２によって，メタファイル２１を格納した二次記憶装置を，ファイル操作を必要とするすべての計算ノード１ａ〜１ｃから参照できるようにしている。このメタファイル２１の名前“ｍｙｔｅｓｔ”は，実質的に論理ファイルの名前となる。ファイルの実体（実際のデータ）は，指定されたストライプ数，ストライプ幅に応じてパーティションファイル５２ａ，５２ｂとして分割して保存される。
【００３１】
図４は，各計算ノード上で動作するアプリケーションプログラムが並列ファイル生成時に，分割する数（ストライプ数）を指定する命令記述の例を示している。図４に示すように，ｓｐｆｓ＿ｏｐｅｎ関数において，生成する論理ファイルの名前（ｆｉｌｅｎａｍｅ）と，ストライプ数（ｓｔｒｉｐｅ＿ｎｏ）を指定すると，ネットワークファイルシステム２では，指定された数に応じたパーティションファイル５２ａ〜５４ａ，５２ｂ〜５４ｂを作成する。この命令記述では，処理結果の値が変数ｅｒｒ  に返却される。
【００３２】
図５は，各計算ノード上で動作するアプリケーションプログラムが並列ファイル生成時に，分割するデータ長（ストライプ幅）を指定する命令記述の例を示している。図５に示すように，ｓｐｆｓ＿ｏｐｅｎ関数において，生成する論理ファイルの名前（ｆｉｌｅｎａｍｅ）と，ストライプ幅（ｓｔｒｉｐｅ＿ｓｉｚｅ）を指定すると，ネットワークファイルシステム２では，指定されたストライプ幅に従ってファイルを分割する。この命令記述では，処理結果の値が変数ｅｒｒ  に返却される。
【００３３】
図６は，図１に示す構成ファイル２２の形式例を示す。
システム管理者は，あらかじめ規定されたディレクトリに構成ファイル２２を用意する。構成ファイル２２には，ファイルの実体（パーティションファイル５２ａ，５２ｂ，…）を格納するＩ／Ｏノード３１，３２のリストと，パーティションファイルのプレフィックス名を指定する。ネットワークファイルシステム２では，この構成ファイル２２を参照してパーティションファイル５２ａ，５２ｂ，…を作成するＩ／Ｏノードを決定する。構成ファイル２２は，システム全体に一つだけあらかじめ定められた特定のファイル名で用意される。
【００３４】
図７は，パーティションファイルを設けるＩ／Ｏノードを決定する処理の例を示している。
計算ノード１ａ〜１ｃ上で動作するアプリケーションプログラム中で論理ファイル５１の生成を要求する命令が発行されると，ネットワークファイルシステム２では，構成ファイル２２を参照し，Ｉ／Ｏノード数を得て，０から（Ｉ／Ｏノード数−１）までの乱数ｊを算出する。次に，構成ファイル２２のｊ番目のエントリから，ストライプ数（ｓｔｒｉｐｅ＿ｎｏ個）分のＩ／Ｏノードを選び出し，それをパーティションファイルを設けるＩ／Ｏノードのリストとする。
【００３５】
図８は，パーティションファイル名を付与する処理の例を示している。
計算ノード１ａ〜１ｃ上で動作するアプリケーションプログラム中で論理ファイル５１の生成を要求する命令が発行されると，その延長でネットワークファイルシステム２は，Ｉ／Ｏノード３１，３２上にパーティションファイル５２ａ，５２ｂ，…を作成する。各パーティションファイル５２ａ，５２ｂ，…のファイル名は，ネットワークファイルシステム２が自動的に生成するが，その際にシステム管理者が記述した構成ファイル２２に書かれたファイルのプレフィックス名を使用し，そのプレフィックス名の後に計算ノードのサイトＩＤ，プロセスＩＤ，現在時刻，シーケンスカウントを付加したものをパーティションファイル名として使用する。なお，サイトＩＤは，各ノードのマシンにあらかじめ付加された識別子である。シーケンスカウントは０から始まり，パーティションファイルを一つ生成する毎に増加する。
【００３６】
図９は，並列ファイルを識別する処理の例を示す。
プログラム利用者は，ファイル操作を行うプログラムを実行する前に，特定の環境変数（ここではこの環境変数名をＳＰＦＳとして説明する）に，“ｙｅｓ”（値＝１）か“ｎｏ”（値＝０）を設定しておく。プログラム中に並列ファイル操作命令が存在すると，ネットワークファイルシステム２では，この環境変数ＳＰＦＳを調べ，“ｙｅｓ”であれば指定されたファイルは，分割された複数のパーティションファイルからなる並列ファイルであるとみなし，そのファイル操作を行う。また，“ｎｏ”であれば，指定されたファイルは通常の非並列ファイルであるとみなし，そのファイル操作を行う。
【００３７】
図１０は，論理ファイルのオープン処理時の通信の例を示す図である。なお，図１０の例では，Ｉ／Ｏノードが３台あるものとしている。
計算ノード１ａ〜１ｃ上で動作する並列プログラムにおいて，複数のプロセスで一つのファイルを共用する際，同時にファイルのオープン（ｏｐｅｎ）命令が発行される。ネットワークファイルシステム２（図１０では図示せず）では，ｏｐｅｎを発行したプロセス間で同期を取り，例えば計算ノード１ｂの代表のプロセス（マスタプロセスという）のみがファイルの存在するＩ／Ｏノード３１，３２，３３へオープン処理のためのメッセージを送る。
【００３８】
各Ｉ／Ｏノード３１，３２，３３では，計算ノード１ｂ上のマスタプロセスからメッセージを受け取ると，該当するパーティションファイルのオープン処理を行い，結果を計算ノード１ｂ上のマスタプロセスへ返す。マスタプロセスは，その結果を他の計算ノード１ａ，１ｃ上のプロセスへ通知する。このように，マスタプロセスのみが代表してＩ／Ｏノードと通信することにより，計算ノード１ａ〜１ｃとＩ／Ｏノード３１〜３３間の通信量を削減することが可能であり，システム全体の性能向上を図ることができる。
【００３９】
図１１は，論理ファイルに対するアクセス権限のチェックのための機構を示す図である。
図１１に示すように，デーモンプロセス７１が，各Ｉ／Ｏノード３上にルート権限で実行される常駐プロセスとして用意される。マスタのユーザプロセス１１は，論理ファイル（並列ファイル）のオープン時に，ｆｏｒｋ命令（例えばＵＮＩＸシステムの場合）などにより，計算ノード１上に仲介プロセス１２を生成する。
【００４０】
仲介プロセス１２には，ｓｅｔｕｉｄビットが設定されており，ルート権限で動作する。ルート権限は，特権的なプロセスの実行資格である。仲介プロセス１２は，特権ポートを使ってＩ／Ｏノード３上のデーモンプロセス７１と通信する。デーモンプロセス７１に送るデータは，ユーザプロセス１１が通信に使うポート番号（ユーザプロセス１１より通知されたもの）とユーザプロセス１１のユーザ識別子（ｕｉｄ）とグループ識別子（ｇｉｄ）である。
【００４１】
デーモンプロセス７１は，Ｉ／Ｏサーバプロセス７２の生成要求が一般ポートから要求されたものである場合，この要求を無視する。特権ポートから送られたものである場合には，指定されたユーザ識別子のＩ／Ｏサーバプロセス７２をｆｏｒｋ命令等により起動し，Ｉ／Ｏサーバプロセス７２のポート番号を仲介プロセス１２に返す。デーモンプロセス７１は，それをユーザプロセス１１に返す。ユーザプロセス１１は，仲介プロセス１２に通知したポートを使って，Ｉ／Ｏサーバプロセス７２と通信する。
【００４２】
Ｉ／Ｏサーバプロセス７２は，登録されていないアドレス（サイトＩＤとポート番号）から入出力処理を依頼された場合，この要求を無視する。ここで登録されたアドレスとは，Ｉ／Ｏサーバプロセス７２の生成時にデーモンプロセス７１から通知されたユーザプロセス１１（マスタ，スレーブ全て）のアドレスである。
【００４３】
こうすることにより，ファイルのアクセス権限を持たないユーザが，偽のメッセージをＩ／Ｏサーバプロセス７２へ送って，ファイルをアクセスすることを防ぐことができる。
【００４４】
図１２は，ユーザプロセスの異常終了時にＩ／Ｏサーバプロセスを強制的に終了させる機構の説明図である。
ユーザプロセス１１が並列ファイルをオープンすると，ユーザプロセス１１と計算ノード１上の監視用のデーモンプロセス１３との間にコネクションが張られる。ユーザプロセス１１が並列ファイルのクローズ時に，正常終了をデーモンプロセス１３に伝え，コネクションを解消する。ユーザプロセス１１が並列ファイルをクローズしないで終了すると，デーモンプロセス１３がユーザプロセス１１の異常終了を検出し，Ｉ／Ｏノード３上のデーモンプロセス７２にＩ／Ｏサーバプロセス７２のキャンセルを依頼する。Ｉ／Ｏノード３上のデーモンプロセス７１は，まだＩ／Ｏサーバプロセス７２が動いているなら，強制的にＩ／Ｏサーバプロセス７２を終了させる。
【００４５】
【実施例】
図１３は，本発明の一実施例構成図であり，ネットワーク４上にＣＰＵおよび主記憶装置を備えた複数のノードが接続された並列計算機を示している。
【００４６】
ノードは，アプリケーションプログラム１４ａ，１４ｂを実行させる計算ノード１ａ，１ｂと，計算ノード１ａ，１ｂから要求されたファイルの入出力処理を専門に行うＩ／Ｏノード３１，３２の２種類に大別される。全計算ノード１ａ，１ｂは，並列ファイルのメタファイル２１を格納するための二次記憶装置２４を共用する。各Ｉ／Ｏノード３１，３２には，それぞれ並列ファイルのパーティションファイルを格納するための磁気ディスク装置等の二次記憶装置６１，６２が接続されている。
【００４７】
アプリケーションプログラム１４ａ，１４ｂには，所定のファイルＩ／Ｏライブラリ（図示省略）がリンクされている。また，計算ノード１ａ，１ｂおよびＩ／Ｏノード３１，３２のいずれにも，デーモンプロセス１３ａ，１３ｂ，７１，７３が常駐している。Ｉ／Ｏサーバプロセス７２，７４は，並列ファイルのオープン（ｏｐｅｎ）時に生成され，クローズ（ｃｌｏｓｅ）時に消滅する。
【００４８】
図１４は，並列ファイルのオープン時の計算ノード上の処理の流れを示している。
並列ファイルのオープン処理開始時に，まずステップＳ１では，同時にオープン（ｏｐｅｎ）をかけた他のプロセスと同期を取る。次に，ステップＳ２では，構成ファイル２２を読み込み，Ｉ／Ｏノード情報とファイルプレフィックス情報を入手する。以下，自ノードがマスタかスレーブかによって，処理が別れる（ステップＳ３）。
【００４９】
自ノードがマスタである場合，ステップＳ４により，指定された名前のメタファイル２１（論理ファイル名）が既に存在するかどうかを調べ，存在すればそのメタファイル２１からパーティションファイル情報を読み込む。指定された名前のメタファイルが存在せず，かつファイルの生成（ｃｒｅａｔｅ）が指定されていれば，ステップＳ５において，新たなメタファイル２１を作り，パーティションファイル情報をその中に設定する。
【００５０】
ステップＳ６では，該当するＩ／Ｏノード３１，３２と通信し，ｃｒｅａｔｅの場合，Ｉ／Ｏノード３１，３２上にパーティションファイルを生成する。もしくは，既にパーティションファイルが存在する場合には，そのすべてのファイルをオープンする。その後，ステップＳ７で，スレーブプロセスへオープン完了を通知する。
【００５１】
自ノードがスレーブの場合，ステップＳ８において，マスタプロセスからオープン完了通知を受け取る。
上記ステップＳ６による処理において，Ｉ／Ｏノード３１，３２上では，デーモンプロセス７１，７３が，マスタの計算ノード１ａまたは１ｂからのオープン要求メッセージを受け付け，メッセージの正当性を確かめた後にＩ／Ｏサーバプロセス７２，７４を生成し，パーティションファイルのオープン処理を行う。
【００５２】
図１５は，並列ファイルのライト（ｗｒｉｔｅ）時の計算ノード上の処理の流れを示している。
ステップＳ１１では，ユーザ（アプリケーションプログラム）が要求したファイルオフセットと書き込みデータ長とから，要求された書き込みデータがどのパーティションファイルに該当するかを計算し，それらの各パーティションファイルに対するＩ／Ｏ要求リストを作成する。
【００５３】
次に，ステップＳ１２では，各パーティションファイルごとにデータをユーザバッファからネットワークファイルシステム２が管理する転送用バッファへコピーする。
【００５４】
その後，ステップＳ１３では，各パーティションファイルが存在する該当Ｉ／Ｏノードへｗｒｉｔｅ要求を送る。複数のＩ／Ｏノードが該当する場合には，すべてのＩ／Ｏノードに対して並行してｗｒｉｔｅ要求を送る（ステップＳ１４，Ｓ１３）。
【００５５】
その後，ステップＳ１５において，ｗｒｉｔｅの結果を各Ｉ／Ｏノードから受け取る。複数のＩ／Ｏノードに対してｗｒｉｔｅ要求を送った場合には，それらのすべてのＩ／Ｏノードからｗｒｉｔｅの結果を受け取る（ステップＳ１６，Ｓ１５）。結果の受け取りがすべて終了した場合には，ｗｒｉｔｅ処理を終了する。
【００５６】
並列ファイルのリード（ｒｅａｄ）時の処理もほぼ同様であるので，その詳しい説明は省略する。
次に，ネットワークファイルシステム２が，並列ファイルのために，ファイルＩ／Ｏライブラリとして提供する関数の仕様について説明する。
【００５７】
オープンの関数は，例えばＣ言語の形式で表すと，次のように定義される。
ｉｎｔ  ｓｐｆｓ＿ｏｐｅｎ  （ｃｏｎｓｔ  ｃｈａｒ  ＊ｆｉｌｅｎａｍｅ，  ｉｎｔ  ｆｌａｇ，  ｍｏｄｅ＿ｔ  ｍｏｄｅ，ｉｎｔ  ｉｏｎｎｏ，  ｌｏｎｇ  ｓｔｒｉｐｅ＿ｓｉｚｅ，…）
この関数の入力情報において，ｆｉｌｅｎａｍｅはファイル名である。
【００５８】
ｆｌａｇはフラグであり，以下の情報を指定することができる。
ＳＰＦＳ＿ＲＤＷＲ    ：リード／ライト
ＳＰＦＳ＿ＲＤＯＮＬＹ：リードオンリ（読み出しのみ）
ＳＰＦＳ＿ＷＲＯＮＬＹ：ライトオンリ（書き込みのみ）
ＳＰＦＳ＿ＣＲＥＡＴ  ：ファイルを生成する。
【００５９】
ＳＰＦＳ＿ＴＲＵＮＣ  ：既存ファイルをリード／ライトまたはライトオンリでオープンしたときにサイズを０にする。
ｍｏｄｅはアクセスモードを表し，以下の情報の指定が可能である。
【００６０】
ＳＰＦＳ＿ＩＲＵＳＲ  ：所有者はリード可能
ＳＰＦＳ＿ＩＷＵＳＲ  ：所有者はライト可能
ＳＰＦＳ＿ＩＲＧＲＰ  ：所有グループのメンバはリード可能
ＳＰＦＳ＿ＩＷＧＲＰ  ：所有グループのメンバはライト可能
ＳＰＦＳ＿ＩＲＯＴＨ  ：他人もリード可能
ＳＰＦＳ＿ＩＷＯＴＨ  ：他人もライト可能
ｉｏｎｎｏ  はストライプ装置数を指定する。
【００６１】
ｓｔｒｉｐｅ＿ｓｉｚｅはストライプ幅を指定する。
他にグループ内のプロセス数，プロセス識別子のリスト等を指定することもできるが，本発明の要旨には関係ないため説明を省略する。
【００６２】
このオープン関数の出力として，ファイルハンドルの情報を返す。エラーが発生した場合には，−１の値を返す。なお，既存ファイルをオープンする場合には，入力情報のうち，アクセスモード，ストライプ装置数，ストライプ幅は無視される。
【００６３】
クローズの関数は，次のように定義される。
ｉｎｔ  ｓｐｆｓ＿ｃｌｏｓｅ（ｉｎｔ  ｆｈ）
このクローズ関数の入力のｆｈは，オープン時に通知されたファイルハンドルである。出力として，正常終了の場合には０を，エラーの場合には−１の値を返す。オープンを発行した全プロセスが，クローズを発行しなければならない。
【００６４】
ライトの関数は，次のように定義される。
ｉｎｔ  ｓｐｆｓ＿ｗｒｉｔｅ  （ｉｎｔ  ｆｈ，  ｃｈａｒ  ＊ｂｕｆ，  ｓｉｚｅ＿ｔ  ｓｉｚｅ）
ここで入力情報のｆｈはファイルハンドル，ｂｕｆ  はバッファ，  ｓｉｚｅは転送長である。
【００６５】
ライト関数の出力は，実際にライトした転送長であり，エラーが発生した場合には−１の値を返す。ファイルポインタは，実際にライトした転送長分進む。
リードの関数は，次のように定義される。
【００６６】
ｉｎｔ  ｓｐｆｓ＿ｒｅａｄ（ｉｎｔ  ｆｈ，  ｖｏｉｄ  ＊ｂｕｆ，  ｓｉｚｅ＿ｔ  ｓｉｚｅ）
ここで入力情報のｆｈはファイルハンドル，ｂｕｆ  はバッファ，  ｓｉｚｅは転送長である。
【００６７】
リード関数の出力は，実際に読み込んだ転送長であり，エラーが発生した場合には−１の値を返す。ホールの取り扱いは，標準のＵＮＩＸシステム等と同様である。ファイルポインタは，実際に読み込んだ転送長分進む。
【００６８】
シークの関数は，次のように定義される。
ｉｎｔ  ｓｐｆｓ＿ｓｅｅｋ（ｉｎｔ  ｆｈ，  ｌｏｎｇ  ｌｏｎｇ  ｏｆｆｓｅｔ，  ｉｎｔ  ｗｈｅｎｃｅ）
ここで入力情報のｆｈはファイルハンドル，ｏｆｆｓｅｔはオフセットを指定するものである。このオフセットの指定において，２Ｇバイトを超えるファイルの利用が可能である。
【００６９】
ｗｈｅｎｃｅでは，以下の情報を指定することができる。
ＳＰＦＳ＿ＳＥＥＫ＿ＳＥＴ  ：ファイルの先頭からシークする。
ＳＰＦＳ＿ＳＥＥＫ＿ＣＵＲ  ：現ファイルポインタからシークする。
【００７０】
シーク関数の出力として，正常終了の場合には０を，エラーが発生した場合には−１の値を返す。
他に，Ｉ／Ｏの完了を待たない非同期のリード関数ｓｐｆｓ＿ａｒｅａｄ，Ｉ／Ｏの完了を待たない非同期のライト関数ｓｐｆｓ＿ａｗｒｉｔｅ，またこれらの非同期Ｉ／Ｏに対してＩ／Ｏの完了を確認するためのウエイト関数ｓｐｆｓ＿ａｗａｉｔ  等の関数が用意されている。また，エラーが発生した場合に，その詳細なエラーの種類を取得するための関数も用意されている。
【００７１】
次に，メタファイルの具体的な構成例について説明する。
並列ファイル（論理ファイル）は，複数のＵＮＩＸファイルで構成される。指定されたファイルの実体（パーティションファイル）がどこに存在するかは，指定されたファイル名を持つメタファイルの中に保存する。
【００７２】
以下の例の場合，ファイルｍｙｔｅｓｔは，ストライプ数が２で，ストライプ幅が１６Ｋバイト，ａｐｎｅｔ０００２  とａｐｎｅｔ０００３  のノード上の二つのパーティションファイルから構成されていることを示している。
【００７３】
0003563907.tif 000002
並列ファイルを生成するＩ／Ｏノードは構成ファイル（ｃｏｎｆｉｇファイル）で指定する。以下の例の場合，ファイルはａｐｎｅｔ０００２  とａｐｎｅｔ０００３  の上に作られ，指定されたパス名プレフィックスが付加される。
【００７４】
0003563907.tif 000003
【００７５】
【発明の効果】
以上説明したように，本発明によれば，複数のＩ／Ｏノードを使用して大容量入出力を高速に処理することが可能であり，並列アプリケーションプログラムの入出力（Ｉ／Ｏ）待ち時間の短縮，ひいてはシステム全体の性能向上に寄与するところが大きい。
【図面の簡単な説明】
【図１】本発明の概要説明図である。
【図２】メタファイルの形式例を示す図である。
【図３】メタファイルを各計算ノードが参照する様子を示す図である。
【図４】並列ファイル生成時のストライプ数の指定の例を示す図である。
【図５】並列ファイル生成時のストライプ幅の指定の例を示す図である。
【図６】構成ファイルの形式例を示す図である。
【図７】パーティションファイルを設けるＩ／Ｏノードを決定する処理の例を示す図である。
【図８】パーティションファイル名を付与する処理の例を示す図である。
【図９】並列ファイルを識別する処理の例を示す図である。
【図１０】論理ファイルのオープン処理時の通信の例を示す図である。
【図１１】アクセス権限のチェックのための機構を示す図である。
【図１２】ユーザプロセスの異常終了時にＩ／Ｏサーバプロセスを強制的に終了させる機構の説明図である。
【図１３】本発明の一実施例構成図である。
【図１４】並列ファイルのオープン時の計算ノード上の処理の流れを示す図である。
【図１５】並列ファイルのライト時の計算ノード上の処理の流れを示す図である。
【符号の説明】
１ａ，１ｂ，１ｃ  計算ノード
２    ネットワークファイルシステム
２１  メタファイル
２２  構成ファイル
３１，３２  Ｉ／Ｏノード
４    ネットワーク
５１  論理ファイル
５２ａ〜５４ａ，５２ｂ〜５４ｂ  パーティションファイル
６１，６２  二次記憶装置
【図１】
0003563907.tif 000004
【図２】
0003563907.tif 000005
【図３】
0003563907.tif 000006
【図４】
0003563907.tif 000007
【図５】
0003563907.tif 000008
【図６】
0003563907.tif 000009
【図７】
0003563907.tif 000010
【図８】
0003563907.tif 000011
【図９】
0003563907.tif 000012
【図１０】
0003563907.tif 000013
【図１１】
0003563907.tif 000014
【図１２】
0003563907.tif 000015
【図１３】
0003563907.tif 000016
【図１４】
0003563907.tif 000017
【図１５】
0003563907.tif 000018