(57)【特許請求の範囲】
【請求項１】
複数の情報処理装置を含む情報処理システムであって、
前記複数の情報処理装置のそれぞれは、
演算処理を行う演算処理装置と、
データを記憶する記憶部と、
前記演算処理装置の介在なしに前記記憶部にアクセスするとともに、他の情報処理装置の通信部を介して前記他の情報処理装置にアクセスする通信部と、を備え、
前記複数の情報処理装置のそれぞれの通信部は、データの受信を契機に前記受信したデータを冗長化した冗長データを他の情報処理装置の通信部を介して前記他の情報処理装置の記憶部に記憶させる処理、および、データの受信を契機に他の情報処理装置の通信部によって冗長化された冗長データを、前記他の情報処理装置の通信部を介して取得し、自装置の記憶部に記憶する処理の少なくとも１つを実行する情報処理システム。
【請求項２】
前記複数の情報処理装置のいずれかにおいて異常が検出されたときに、前記複数の情報処理装置のうちの正常データの復元を行う情報処理装置の通信部は、他の少なくとも１つの情報処理装置の通信部を介して、前記他の少なくとも１つの情報処理装置の記憶部に記憶された、前記正常データに対応する冗長データまたは前記冗長データと組み合わせて前記正常データを復元するためのデータを取得し、前記正常データを復元する請求項１に記載の情報処理システム。
【請求項３】
前記複数の情報処理装置のそれぞれの通信部は、自装置の記憶部に記憶されるデータを複製した冗長データから自装置以外の情報処理装置の数に応じて分割した分割冗長ブロックを作成し、前記他の情報処理装置の通信部を介して前記他の情報処理装置の記憶部に記憶させる請求項１または２に記載の情報処理システム。
【請求項４】
前記複数の情報処理装置のいずれかにおいて異常が検出されたときに、前記複数の情報処理装置のうちの正常データの復元を行う情報処理装置の通信部は、他の情報処理装置の通信部を介して前記他の情報処理装置の記憶部に記憶された分割冗長ブロックを取得して正常データを復元する請求項３に記載の情報処理システム。
【請求項５】
前記複数の情報処理装置は、環状の所定順に状態監視データを転送する環状伝達経路を形成し、
前記複数の情報処理装置のそれぞれの通信部は、前記環状伝達経路における送信元から受信した状態監視データに自装置の状態を追加して、環状伝達経路における宛先に送信し、
前記複数の情報処理装置の１つの通信部は、前記環状伝達経路の始端および終端となり、前記情報処理システムの状態を監視する請求項１から４のいずれか１項に記載の情報処理システム。
【請求項６】
前記複数の情報処理装置のそれぞれは、さらに外部記憶装置を備え、
前記複数の情報処理装置のそれぞれの演算処理装置は、前記通信部を介した他の情報処理装置の記憶部から自装置の記憶部へのデータの取得後に前記取得したデータを外部記憶装置に保存し、前記通信部を介した他の情報処理装置へのデータ転送前に、前記他の情報処理装置の要求にしたがい外部記憶装置のデータを自装置の記憶部に読み出す請求項１から５のいずれか１項に記載の情報処理システム。
【請求項７】
情報処理システム内で相互に接続される複数の情報処理装置中の１つの情報処理装置であって、
演算を行う演算処理装置と、    
データを記憶する記憶部と、
前記演算処理装置の介在なしに前記記憶部にアクセスするとともに、他の情報処理装置の通信部を介して前記他の情報処理装置にアクセスする通信部と、を備え、
前記通信部は、データの受信を契機に前記受信したデータを冗長化した冗長データを他の情報処理装置の通信部を介して前記他の情報処理装置の記憶部に記憶させる処理、および、データの受信を契機に他の情報処理装置の通信部によって冗長化された冗長データを、前記他の情報処理装置の通信部を介して取得し、自装置の記憶部に記憶する処理の少なくとも１つを実行する情報処理装置。
【請求項８】
複数の情報処理装置を含む情報処理システムの制御方法であって、
前記複数の情報処理装置のそれぞれの通信部は、演算処理装置の介在なしに自装置の記憶部にアクセスするとともに、他の情報処理装置の通信部を介して前記他の情報処理装置にアクセスすることを実行し、前記アクセスによって、
データの受信を契機に前記受信したデータを冗長化した冗長データを他の情報処理装置の通信部を介して前記他の情報処理装置の記憶部に記憶させる処理、および、データの受信を契機に他の情報処理装置の通信部によって冗長化された冗長データを、前記他の情報処理装置の通信部を介して取得し、自装置の記憶部に記憶する処理の少なくとも１つを実行する情報処理システムの制御方法。
【請求項９】
演算を行う演算処理装置と、データを記憶する記憶部と、前記演算処理装置の介在なしに前記記憶部にアクセスするとともに、ネットワークを通じて接続される他の情報処理装置の通信部を介して前記他の情報処理装置にアクセスする通信部と、を備える情報処理装置の制御プログラムにおいて、
前記情報処理装置に、
前記通信部を介して取得した前記１以上の他の情報処理装置のいずれかが有する記憶部が記憶するデータを冗長化した冗長データを取得させ、
前記１以上の他の情報処理装置のうち、前記冗長データを収集する情報処理装置から前記冗長データの転送要求を受け付けさせ、
前記冗長データを収集する情報処理装置の前記ネットワーク上の宛先と前記冗長データの前記記憶部上の格納先とを指定して前記通信部に前記冗長データの転送処理をデータ収集要求の受信を契機に実行させるためのコマンドを、登録させる情報処理装置の制御プ
ログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム、情報処理システムの制御方法および情報処理装置の制御プログラムに関する。
【背景技術】
【０００２】
ディスク装置等の外部記憶装置を有し、ファイルシステムあるいはＤＢＭＳ（Database
Management System）等としてサービスを提供するＩＯ（Input Output）サーバ（以下、ＩＯサーバ）と呼ばれる情報処理装置が利用されている。近年の外部記憶装置の容量単価の低下に伴い、例えば、多重化、あるいはＲＡＩＤ（Redundant Arrays of Inexpensive Disks, Redundant Arrays of Independent Disks）などによる、外部記憶装置自体の故障に対する高度な対策は採用しやすくなっている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平６−２６６５０８号広報
【特許文献２】特開平１０−２６０７８９号広報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、複数の外部記憶装置によって故障への対策がなされても外部記憶装置のコントローラが二重化されないで単一故障点（single point of failure）となり、外部記憶装
置を有する情報処理装置に影響が及ぶ場合がある。また、情報処理装置のうち、ファイルシステムあるいはＤＢＭＳ等のＩＯサーバにおいては、さらなる信頼性確保の要望が高まっている。さらにまた、並列処理による性能向上を目的とするシステム規模の増加傾向により、情報処理装置の信頼性確保への要望は、以前にも増して高まっている。
【０００５】
ＩＯサーバ等の情報処理装置の信頼性確保は、個々の情報処理装置が処理するデータに対する冗長データ、例えば、データのバックアップ、あるいはエラー訂正符号等の冗長データを複数の情報処理装置で保持する事によって達成可能である。しかし、複数の情報処理装置で冗長データを持つ場合に、冗長データ保持による使用メモリ量の増加や冗長データを相互に転送する処理によるオーバーヘッド増加は、目標とする信頼性のレベルに対し出来るだけ小さくすることが望ましい。開示の実施形態の１つの側面は、情報処理装置における負荷、あるいはオーバーヘッドを押さえて、従来よりも高い信頼性を達成する。
【課題を解決するための手段】
【０００６】
本発明の一側面は、複数の情報処理装置を含む情報処理システムによって例示される。すなわち、本情報処理システムの複数の情報処理装置のそれぞれは、演算処理を行う演算処理装置と、データを記憶する記憶部と、演算処理装置の介在なしに記憶部にアクセスするとともに、他の情報処理装置の通信部を介して他の情報処理装置にアクセスする通信部と、を備える。そして、複数の情報処理装置のそれぞれの通信部は、自装置の記憶部が記憶するデータを冗長化した冗長データを他の情報処理装置の通信部を介して他の情報処理装置の記憶部に記憶させる処理、および、他の情報処理装置の記憶部が記憶するデータを冗長化した冗長データを他の情報処理装置の通信部を介して取得し、自装置の記憶部に記憶する処理の少なくとも１つを実行する。
【発明の効果】
【０００７】
本情報処理システムによれば、情報処理装置における負荷、あるいはオーバーヘッドを押さえて、従来よりも高い信頼性を達成できる。
【図面の簡単な説明】
【０００８】
【図１】情報処理システムの構成を例示する図である。
【図２】情報処理システムに異常が発生した場合のイメージ図である。
【図３】ＩＯサーバとして用いられる情報処理装置のハードウェア構成を例示する図である。
【図４】情報処理システムに異常が発生した場合のデータ訂正処理を例示するフローチャートである。
【図５】リモートＮＩＣコマンド実行機構を利用し、データをｎ−１個に分割して各ＩＯサーバに分散させる場合の処理フローを例示する図である。
【図６】データ格納用ＩＯサーバにおいてデータの異常が発生し、データを復元する場合の処理のフローチャートを例示する図である。
【図７】ノードと冗長ブロックとの関係を例示する図である。
【図８】リモートＮＩＣコマンド実行機構を利用し、データをｎ−１個に分割して各ＩＯサーバに分散させる場合の処理フローを例示する図である。
【図９】リモートＮＩＣコマンド実行機構を利用するために登録されるＮＩＣコマンドのイメージを例示する。
【図１０】ＩＯサーバにおいてデータの異常が発生し、データを復元する場合の処理のフローチャートを例示する図である。
【図１１】ＩＯサーバ２に異常が発生した場合のデータ収集のためのＮＩＣコマンド登録処理を例示する図である。
【図１２】監視リングの構成を例示する図である。
【図１３】ＩＯサーバが監視リングにおいて実行する処理フローを例示する図である。
【図１４】ヘルスステータス情報を例示する図である。
【図１５】統計情報を例示する図である。
【図１６】監視リングの共通データを例示する図である。
【図１７】復元のタイミング決定処理フローを例示する図である。
【図１８】復元処理ためのＮＩＣ１３へのコマンド設定の詳細を例示する図である。
【発明を実施するための形態】
【０００９】
以下、図面を参照して一実施形態に係るについて説明する。
【００１０】
［実施例１］
以下、図１から図６を参照して、実施例１に係る情報処理システムについて説明する。図１は、本情報処理システムの構成を例示する図である。本情報処理システムは、サーバ１からサーバｎを有し、サーバ１からサーバｎは、ネットワークで接続されている。サーバ１からサーバｎは、いずれも外部記憶装置を有し、データ管理処理を実行するＩＯサーバ、あるいはディスクサーバと呼ばれる。サーバ１、サーバｎ等が情報処理装置の一例である。
【００１１】
実施例１では、図１の構成のうち、サーバ１からサーバｎ−１は、冗長化する前のオリジナルデータ格納用のＩＯサーバである。実施例１では、オリジナルデータ格納用のＩＯサーバをデータ格納用ＩＯサーバと呼ぶ。また、サーバｎは、冗長データ格納用のＩＯサーバである。冗長データ格納用のＩＯサーバを冗長用ＩＯサーバと呼ぶ。
【００１２】
ネットワークは、例えば、Ethernet（登録商標）等のＬＡＮ（Local Area Network）、インターネット等のＷＡＮ（Wide Area Network）等である。ただし、ネットワークは、
マルチノードのコンピュータシステムのノード間を接続するインターコネクト、例えば、InfiniBand、クロスバー等であってもよい。
【００１３】
図２は、図１の情報処理システムに異常が発生した場合のイメージ図である。実施例１では、サーバ１に異常が発生し、サーバ１に格納されていたデータが利用できない場合に、例えば、サーバ１以外のサーバに格納されたデータによって、サーバ１に格納されていたデータが復旧される。例えば、サーバ１が処理を続行可能な場合には、サーバ１は、サーバ２からサーバｎ−１に格納されたデータおよびサーバｎに格納された冗長データを取得し、サーバ１自身のデータを復元する。また、サーバ１が故障で処理を続行できない場合には、サーバ１に代わって、サーバ２からサーバｎ−１のいずれかが、データ収集サーバとなり、サーバ２からサーバｎ−１に格納されたデータおよびサーバｎに格納された冗長データによってサーバ１のデータを復元する。例えば、サーバ１からサーバｎ−１に、格納されたデータの排他的論理和による冗長データがサーバｎに格納されている場合に、サーバ１からサーバｎのいずれか１つに異常が発生した場合に、異常が発生したサーバ以外のサーバのデータと冗長データとから排他的論理和によって、異常が発生したサーバに格納されていたデータを復元できる。
【００１４】
図３は、ノード１からノードｎ等のＩＯサーバとして用いられる情報処理装置のハードウェア構成を例示する図である。本情報処理装置は、ＣＰＵ１１と、メモリ１２と、ＮＩＣ（Network Interface Card）１３と、インターフェース１４と、外部記憶装置１５とを有する。また、ＮＩＣ１３は、バスアダプタ１３Ａと、ネットワークアダプタ１３Ｂと、コントローラ１３Ｃと、メモリ１３Ｄとを有する。ＣＰＵ１１は、メモリ１２に実行可能に展開されたコンピュータプログラムにより、情報処理装置の処理を実行する。ＣＰＵ１１がプロセッサの一例である。メモリ１２は、ＣＰＵ１１が実行するコンピュータプログラム、あるいは、ＣＰＵ１１が処理するデータ、処理後のデータ等を格納する。メモリ１２は、例えば、ＣＰＵ１１のバスに接続され、ＣＰＵ１１のアドレス空間に配置される。メモリ１２が記憶部の一例である。
【００１５】
ＮＩＣ１３は、ネットワークに接続される他の情報処理装置が有するＮＩＣと通信する。ＮＩＣ１３のバスアダプタ１３Ａは、ＣＰＵ１１と調停を行い、バスを通じてメモリ１２にアクセスする。ネットワークアダプタ１３Ｂは、ネットワークに接続され、ネットワークへの送信データの送出、およびネットワークからの受信データの取得を実行する。コントローラ１３Ｃは、メモリ１３Ｄに実行可能に展開されたファームウェア、マイクロプログラム、コンピュータプログラム等により、バスアダプタ１３Ａおよびネットワークアダプタ１３Ｂを制御し、他の情報処理装置との通信を制御する。コントローラ１３Ｃは、例えば、ＣＰＵ、ＤＳＰ（Digital Signal Processor）、プログラマブル・ロジック・コントローラ等である。メモリ１３Ｄは、コントローラ１３Ｃが実行するファームウェア、マイクロプログラム、コンピュータプログラム等、コントローラ１３Ｃが処理するデータ、あるいは、コントローラ１３Ｃによる処理後のデータ等を格納する。ＮＩＣ１３が通信部の一例である。
【００１６】
メモリ１３Ｄの一部の領域は、ＮＩＣ１３のレジスタとして用いられる。このレジスタには、ＮＩＣ１３によって実行されるＮＩＣコマンドが登録される。レジスタに登録されたＮＩＣコマンドは、所定の事象が発生したときに、コントローラ１３Ｃによって実行される。所定の事象とは、例えば、特定の割り込みが発生したとき等である。例えば、データ受信が実行されたときに、コントローラ１３Ｃは、特定のレジスタのＮＩＣコマンドを実行する。したがって、例えば、ＩＯサーバは、所定の事象、例えば、所定の割り込みが発生したとき、所定の処理が終了したとき、あるいはデータの受信が完了したとき等、所定の条件が充足されたときにＮＩＣ１３によってＮＩＣコマンドが実行されるように、ＮＩＣ１３にＮＩＣコマンドを登録できる。ただし、ＮＩＣ１３が実行するＮＩＣコマンド
の登録先がメモリ１２内のレジスタに限定される訳ではない。
【００１７】
本情報処理装置では、コントローラ１３Ｃは、バスアダプタ１３Ａを介して、ＣＰＵ１１とバスの使用権の調停を行い、バスの使用権獲得後、ＣＰＵ１１を介さないで、メモリ１２にアクセスする。例えば、コントローラ１３Ｃは、ＤＭＡ(Direct Memory Access)を実行する。つまり、コントローラ１３Ｃは、ＣＰＵ１１を介さないで、メモリ１２へのデータの書き込み、および、メモリ１２からのデータの読み出しを実行する。また、コントローラ１３Ｃは、ネットワークアダプタ１３Ｂを介して、他の情報処理装置のＮＩＣとネットワークを通じた通信を実行する。したがって、コントローラ１３Ｃは、ＣＰＵ１１を介さないで、自情報処理装置のメモリ１２上のデータと、他の情報処理装置のメモリ上のデータを交換する。
【００１８】
インターフェース１４は、ＣＰＵ１１と外部記憶装置１５とを接続するインターフェースである。外部記憶装置１５は、インターフェース１４を通じてＣＰＵ１１に接続される。外部記憶装置１５上のデータは、例えば、ＣＰＵ１１で実行される基本プログラム、ＯＳ（Operating System）等によって、例えば、ファイルとして管理される。
【００１９】
ＣＰＵ１１は、外部記憶装置１５のデータをメモリ１２に読み出すとともに、メモリ１２のデータを外部記憶装置１５のファイルに保存する。したがって、メモリ１２は、外部記憶装置１５のキャッシュ、あるいはバッファとしての役割を有する。
【００２０】
以上の構成から、本情報処理システム内のＩＯサーバである情報処理装置は、他の情報処理装置に、他の情報処理装置の外部記憶装置１５のデータをメモリ１２に読み出すように指令した後、読み出し完了を待つ。そして、情報処理装置は、ＮＩＣ１３同士の通信によって、ＣＰＵ１１を介さないで、他の情報処理装置のメモリ１２に読み出された外部記憶装置１５のデータを取得できる。同様に、本情報処理システム内の情報処理装置は、自身の外部記憶装置１５のデータをメモリ１２に読み出し、ＮＩＣ１３同士の通信によって、ＣＰＵ１１を介さないで、他の情報処理装置のメモリ１２に書き込むことが可能である。なお、他の情報処理装置では、適切なタイミングで、メモリ１２のデータが外部記憶装置１５に保存される。このように、ＣＰＵ１１を介さないで、ＮＩＣ１３によるメモリ１２へのアクセスと、ＮＩＣ１３同士の通信等とによって、情報処理装置間で処理の実行を行う仕組みをリモートＮＩＣコマンド実行機構と呼ぶ。以下の実施例１から３においては、リモートＮＩＣコマンド実行機構は、ＮＩＣコマンドによって実行される。
【００２１】
図４は、情報処理システムに異常が発生した場合のデータ訂正処理を例示するフローチャートである。図４は、データ格納用ＩＯサーバの処理例である。データ格納用ＩＯサーバは、例えば、データの入出力処理を実行する（Ｓ１）。ここでは、データの入力処理とは、例えば、情報処理システムの外部のクライアント装置から情報処理システムへのデータの格納処理をいう。また、データの出力処理とは、例えば、外部のクライアント装置による情報処理システムからのデータの読み出し処理をいう。
【００２２】
次に、Ｓ１の処理がデータの入力処理の場合に、データ格納用ＩＯサーバは、データの相互保証のためのデータの冗長配置を実行する（Ｓ２）。例えば、データ格納用ＩＯサーバのＮＩＣ１３は、自身のメモリ１２に格納されたデータの冗長データを他のＩＯサーバ、例えば、冗長用ＩＯサーバのＮＩＣ１３を介して、冗長用ＩＯサーバのメモリに格納する。
【００２３】
冗長データの第１の例は、データ格納用ＩＯサーバに保存するオリジナルデータの複製である。例えば、実施例１では、情報処理システム内の各データ格納用ＩＯサーバは、クライアントから提供されるデータをｎ−１分割した分割データを保存するとともに、分割
データの複製を冗長用ＩＯサーバに送信する。以下、分割データの複製を冗長ブロックと呼ぶ。冗長用ＩＯサーバに送信される分割データの複製（冗長ブロック）は冗長データの一例である。データ格納用ＩＯサーバのＮＩＣ１３は、他の情報処理装置の記憶部に記憶させる処理の一例として、Ｓ２の処理を実行する。
【００２４】
一方、冗長用ＩＯサーバは、Ｓ２の処理によって、データ格納用ＩＯサーバから分割データの複製（冗長ブロック）を取得し、冗長用ＩＯサーバのメモリに保持する。したがって、冗長用ＩＯサーバのＮＩＣ１３は、冗長データを前記他の情報処理装置の通信部を介して取得し、自装置の記憶部に記憶する処理の一例としてＳ２の処理を実行する。なお、冗長用ＩＯサーバは、各データ格納用ＩＯサーバから送信された分割データの複製（冗長ブロック）に、排他的論理和を実行し、さらなる冗長データを作成する。複数の分割データの排他的論理によって作成されるデータも冗長データの一例である。
【００２５】
ただし、図１のように、データ格納用ＩＯサーバと、冗長用ＩＯサーバとが異なるＩＯサーバである情報処理システム以外の情報処理システムにおいてもＳ２の処理は実行可能である。例えば、複数のＩＯサーバがそれぞれデータ格納用ＩＯサーバと、冗長用ＩＯサーバとの役割を有する情報処理システムは、実施例２で説明される。実施例２のような情報処理システムでは、Ｓ２の処理として、情報処理システム内のＩＯサーバのＮＩＣ１３は、自身のメモリ１２に格納された分割データの複製（冗長ブロック）を他のＩＯサーバのＮＩＣ１３を介して、他のＩＯサーバのメモリ１２に格納する。さらにまた、情報処理システム内のＩＯサーバのＮＩＣ１３は、Ｓ２の処理によって、他のＩＯサーバのＮＩＣ１３を介して他のＩＯサーバから分割データの複製（冗長ブロック）を取得し、自身のメモリ１２に保持する。
【００２６】
さらに、データ格納用ＩＯサーバは、いずれかのデータ格納用ＩＯサーバあるいは冗長用ＩＯサーバに異常があるか否かを判定する（Ｓ３）。異常がない場合には、データ格納用ＩＯサーバは、Ｓ５に処理を進める。一方、いずれかのデータ格納用ＩＯサーバあるいは冗長用ＩＯサーバに異常がある場合には、データ格納用ＩＯサーバは、データ復元処理を実行する（Ｓ４）。データ格納用ＩＯサーバのＮＩＣ１３は、正常データを復元する処理の一例として、Ｓ４の処理を実行する。
【００２７】
例えば、いずれかのデータ格納用ＩＯサーバが異常の場合に、異常のあるデータ格納用ＩＯサーバ以外のデータ格納用ＩＯサーバのデータと冗長用ＩＯサーバのデータとによって、異常のあるデータ格納用ＩＯサーバの正常データが復元される。すでに、図２で説明したように、異常のあるデータ格納用ＩＯサーバが処理続行可能な場合には、異常のあるデータ格納用ＩＯサーバが正常データを復元してもよい。また、情報処理システムでいずれかのデータ格納用ＩＯサーバが管理サーバとして設定されている場合には、管理サーバが正常データを復元すればよい。また、例えば、管理サーバとして設定されたデータ格納用ＩＯサーバは、冗長用ＩＯサーバが異常の場合に、自サーバのデータあるいは他のデータ格納用ＩＯサーバから冗長用ＩＯサーバのデータを作成する。さらに、情報処理システムは、１つのデータ格納用ＩＯサーバを管理サーバに設定する代わりに、専用の管理サーバを備えるようにしてもよい。
【００２８】
そして、データ格納用ＩＯサーバは、データ入出力処理の終了か否かを判定する（Ｓ５）。Ｓ５の判定がデータ入出力処理の終了でない場合、データ格納用ＩＯサーバは、処理をＳ１に戻す。一方、Ｓ５の判定がデータ入出力処理の終了である場合、データ格納用ＩＯサーバは、処理を終了する。
【００２９】
図５に、実施例１のｎ台のＩＯサーバを有する環境において、リモートＮＩＣコマンド実行機構を利用し、データをｎ−１個に分割して、ｎ−１個のデータ格納用ＩＯサーバに
分散させる場合の処理フローを例示する。図５の処理は、図４のＳ２の詳細例と考えることができる。
【００３０】
この処理では、データ格納用ＩＯサーバは、まず、データを受信するメモリ領域を確保する（Ｓ２０）。次に、データ格納用ＩＯサーバは、受け取ったデータを冗長用ＩＯサーバへ送信するためのＮＩＣコマンドを作成する（Ｓ２４）。そして、データ格納用ＩＯサーバは、作成したＮＩＣコマンドがデータ受信を契機に実行されるように、ＮＩＣコマンドをＮＩＣ１３に登録する（Ｓ２５）。そして、例えば、クライアントがデータをｎ−１分割し、分割したデータをそれぞれデータ格納用ＩＯサーバに送信する（Ｓ２６）。なお、図５の例では、クライアントがデータをｎ−１分割するが、このような処理に代えて、クライアントが分割前のデータをいずれかのデータ格納用ＩＯサーバ、例えば、管理サーバに設定されたデータ格納用ＩＯサーバに引き渡すようにしてもよい。ここでは、クライアントとの間でデータ授受を行うＩＯサーバを管理サーバと呼ぶことにする。そして、管理サーバに設定されたデータ格納用ＩＯサーバが引き渡されたデータの複製をｎ−１分割し、作成された分割データをそれぞれデータ格納用ＩＯサーバに送信するようにしてもよい。
【００３１】
そして、各データ格納用ＩＯサーバは、クライアントからのデータを受信する（Ｓ２８）。すると、データ格納用ＩＯサーバのＮＩＣ１３は、データの受信を契機にリモートＮＩＣコマンド実行により、受信した分割データの複製（冗長ブロック）を冗長用ＩＯサーバへ転送する（Ｓ２９）。
【００３２】
ただし、実施例１では、Ｓ２Ａで説明するように、冗長用ＩＯサーバへ転送された冗長ブロックは、排他的論理和のための入力データとして使用される。データ格納用ＩＯサーバのＮＩＣ１３は、他の情報処理装置の記憶部に記憶させる処理の一例として、Ｓ２９の処理を実行する。受信したデータの複製が冗長データの一例である。また、Ｓ２９の処理によって、冗長用ＩＯサーバのＮＩＣ１３は、データ格納用ＩＯサーバから、分割データの複製（冗長ブロック）を受信し、メモリに保持する。したがって、冗長用ＩＯサーバのＮＩＣ１３は、冗長データを前記他の情報処理装置の通信部を介して取得し、自装置の記憶部に記憶する処理の一例として、Ｓ２９の処理を実行する。
【００３３】
冗長用ＩＯサーバは、各データ格納用ＩＯサーバから受け取った分割データの複製（冗長ブロック）に対して、排他的論理和を実行し、さらなる冗長データを作成する（Ｓ２Ａ）。各データ格納用ＩＯサーバから受け取った分割データの複製（冗長ブロック）から排他的論理和によって生成した、さらなる冗長データもまた、冗長データの一例である。ただし、実施例１では、いずれかのデータ格納用ＩＯサーバに異常があった場合に、他のデータ格納用ＩＯサーバに保持された分割データと、冗長用ＩＯサーバに格納された冗長データ（排他的論理和による冗長データ）とによって、正常データが復元される。
【００３４】
そして、冗長用ＩＯサーバは、受信した冗長ブロックから排他的論理和によって生成した冗長データをメモリ１２に格納する（Ｓ２Ｂ）。冗長用ＩＯサーバのＣＰＵ１１は、適切なタイミングでメモリ１２の冗長データを外部記憶装置１５に保存する。適切なタイミングとは、例えば、ＣＰＵ１１、メモリ１２、ＣＰＵ１１とメモリ１２との間のバス、インターフェース１４、および外部記憶装置１５の負荷が高くない時点、あるいは、これらのハードウェアが他の処理によって占有されていない時点等をいう。Ｓ２９、Ｓ２Ａ、およびＳ２Ｂは、冗長データを取得するステップの一例である。
【００３５】
図６に、いずれかのデータ格納用ＩＯサーバにおいてデータの異常が発生し、正常データを復元する場合の処理のフローチャートを例示する。図６では、例えば、データの異常が発生したデータ格納用ＩＯサーバがデータの復元処理を実行する場合を想定する。まず
、１つのデータ格納用ＩＯサーバがデータの異常を検出する（Ｓ４０）。Ｓ４０での異常が検出されたときが、複数の情報処理装置のいずれかにおいて異常が検出されたときの一例である。また、異常が検出されるデータは、例えば、上記１つのデータ格納用ＩＯサーバに格納されていた、ｎ−１分割された分割データの１つである。
【００３６】
すると、データの異常が発生したデータ格納用ＩＯサーバは、他のデータ格納用ＩＯサーバおよび冗長用ＩＯサーバに、収集したいデータの通知（収集データ情報という）を送信する（Ｓ４１）。実施例１ではデータの異常が発生したデータ格納用ＩＯサーバがデータ収集サーバとなって正常データを復元する。ただし、例えば、データの異常が発生したデータ格納用ＩＯサーバに代えて、管理サーバに設定されているデータ格納用ＩＯサーバがデータ収集サーバとなって図６の処理を行ってもよい。以下、実施例１では、ｎ−１分割された分割データのうち、異常が発生した１つの分割データが正常データに復元される。
【００３７】
本実施例では、データ収集サーバはクライアントのデータをｎ−１分割した分割データの格納先を認識していることを前提とする。例えば、管理サーバがクライアントのオリジナルデータをｎ−１分割した場合には、管理サーバが分割データの格納先を認識し、保持すればよい。したがって、データ収集サーバは、管理サーバに、分割データの格納先を問い合わせればよい。また、例えば、クライアントがｎ−１分割した分割データをデータ格納用ＩＯサーバに送信する場合には、クライアントが分割データと配布先との関係を情報処理システム内のそれぞれのデータ格納用ＩＯサーバに通知しておけばよい。
【００３８】
Ｓ４１の処理では、データ収集サーバは、ｎ−１分割した分割データの格納先のデータ格納用ＩＯサーバにはｎ−１分割されたそれぞれの分割データの送信を、また、冗長用ＩＯサーバには冗長データの送信を依頼する。そして、データ収集サーバは、データが送信されるまでデータの待ち合わせを行う（Ｓ４２）。
【００３９】
一方、他のデータ格納用ＩＯサーバおよび冗長用ＩＯサーバは、Ｓ４１によって送信される収集データ情報を受信する（Ｓ４３）。Ｓ４３は、冗長データの転送要求を受け付けるステップの一例である。そして、他のデータ格納用ＩＯサーバおよび冗長用ＩＯサーバは、通知された収集データ情報から、収集対象データの格納領域を特定する（Ｓ４４）。ここで、他のデータ格納用ＩＯサーバが収集する収集対象データは、自身が格納するｎ−１分割された分割データのいずれかである。また、冗長用ＩＯサーバが収集する収集対象データは、ｎ−１個の分割ブロック（冗長ブロック）から排他的論理和によって作成された冗長データである。
【００４０】
さらに、他のデータ格納用ＩＯサーバおよび冗長用ＩＯサーバは、収集対象のデータが外部記憶装置１５に保存され、メモリ１２で維持されていない場合には、収集対象のデータを外部記憶装置１５からメモリ１２に読み出す（Ｓ４４Ａ）。ＩＯサーバ（他のＩＯサーバ、冗長用ＩＯサーバ）は、外部記憶装置のデータをメモリに読み出す処理の一例として、Ｓ４４Ａの処理を実行する。
【００４１】
そして、他のＩＯサーバおよび冗長用ＩＯサーバは、収集対象データの格納領域をデータ収集サーバに送信するＮＩＣコマンドを作成する（Ｓ４５）。ＮＩＣコマンドは、データ収集サーバのネットワーク上のアドレスと、Ｓ４４で特定した格納領域の先頭アドレスおよびデータ長などを含む。ただし、データ長の代わりに格納領域の末尾のアドレスが指定されてもよい。そして、他のデータ格納用ＩＯサーバおよび冗長用ＩＯサーバは、データ収集要求の受信を契機にＮＩＣコマンドを実行するように、ＮＩＣ１３に登録する（Ｓ４６）。Ｓ４６は、冗長データの転送処理を所定のタイミングで実行するコマンドを登録するステップの一例である。そして、他のＩＯサーバおよび冗長用ＩＯサーバは、データ準備完了をデータ収集サーバに通知する（Ｓ４８）。
【００４２】
データ収集サーバが収集データ情報を送信した他のデータ格納用ＩＯサーバおよび冗長用ＩＯサーバからデータ準備完了の通知を受信すると、データ収集サーバは、他のデータ格納用ＩＯサーバおよび冗長用ＩＯサーバに、データ送信依頼を送信する（Ｓ４９）。他のデータ格納用ＩＯサーバおよび冗長用ＩＯサーバでは、データ送信依頼が受信されると、ＮＩＣ１３のコントローラ１３Ｃが、登録されたＮＩＣコマンドを実行し、データ収集対象データをデータ収集サーバのＮＩＣ１３に送信する（Ｓ４Ａ）。データ収集サーバは、収集された他のデータ格納用ＩＯサーバからの分割データ（ただし、異常が発生した分割データを除く）と、冗長データを受信し（Ｓ４Ｂ）、正常データを復元する（Ｓ４Ｃ）。データ収集サーバのＮＩＣ１３は、正常データを復元するためのデータを取得することの一例としてＳ４Ｂの処理を実行する。また、データ収集サーバのＮＩＣ１３は、正常データを復元することの一例として、Ｓ４Ｃの処理を実行する。他のデータ格納用ＩＯサーバからの分割データが、冗長データと組み合わせて前記正常データを復元するためのデータの一例である。
【００４３】
以上述べたように、実施例１では、データ格納用ＩＯサーバと、冗長用ＩＯサーバを含む情報処理システムにおいて、各データ格納用ＩＯサーバにクライアントのデータを分割して格納するとともに、データ格納用ＩＯサーバのＮＩＣ１３および冗長用ＩＯサーバのＮＩＣ１３を介してＣＰＵを介さず、分割データの複製が冗長用ＩＯサーバに転送される。そして、冗長用ＩＯサーバは、分割データの複製から排他的論理和により、さらなる冗長データを作成し、メモリから外部記憶装置に保存する。そして、いずれかのデータ格納用ＩＯサーバにおいて、データの異常が発生した場合には、異常が発生したデータ格納用ＩＯサーバまたは他のデータ格納用ＩＯサーバ（管理サーバ等）がデータ収集サーバとして処理を実行する。すなわち、データ収集用ＩＯサーバは、他のデータ格納用ＩＯサーバおよび冗長用ＩＯサーバのＮＩＣ１３を介してＣＰＵを介さず、データを収集し、異常が発生したデータを復元する。したがって、本情報処理システムでは、ＣＰＵ１１の負荷の増加を抑制した上で、ＮＩＣ１３のリモートＮＩＣコマンド実行機構により、分割データの複製（冗長ブロック）を冗長用ＩＯサーバに転送できる。冗長用ＩＯサーバは、転送された分割データの複製（冗長ブロック）から、冗長データを作成し、保存できる。また、本情報処理システムでは、いずれかのデータ格納用ＩＯサーバで異常が発生した場合には、データ収集サーバがＮＩＣ１３のリモートＮＩＣコマンド実行機構により、異常が発生した分割データ以外の分割データおよび冗長データを収集し、正常な分割データを復元できる。
【００４４】
この場合に、データ格納用ＩＯサーバ、冗長用ＩＯサーバのデータは、通常、外部記憶装置に保存されている。したがって、例えば、データ収集サーバがＮＩＣ１３のリモートＮＩＣコマンド実行機構により、データを収集する場合に、収集データ情報において、データ格納用ＩＯサーバに、外部記憶装置１５からメモリ１２にデータを読み出すように指示しておけばよい。データ格納用ＩＯサーバのＣＰＵ１１は、外部記憶装置１５からメモリ１２に分割データを読み出した後に、Ｓ４８のデータ準備完了を通知すればよい。
【００４５】
また、データ収集ＩＯサーバは、冗長用ＩＯサーバに対して、収集データ情報において冗長用ＩＯサーバが冗長データを外部記憶装置１５からメモリ１２にデータを読み出すように指示しておけばよい。冗長用ＩＯサーバのＣＰＵ１１は、外部記憶装置１５からメモリ１２に冗長データを読み出した後に、Ｓ４８のデータ準備完了を通知すればよい。このような処理によって、ＮＩＣ１３によるＣＰＵ１１を介さないＩＯサーバ間の通信と、ＣＰＵ１１による外部記憶装置１５へのアクセスとを連携させることができる。その結果、ＩＯサーバにおいて、従来よりもＣＰＵの負荷、データ転送に伴うオーバーヘッドを抑制した上で、データ信頼性を向上できる。
【００４６】
なお、図６では、データ格納用ＩＯサーバでデータの異常が発生した場合を例に説明した。しかし、冗長用ＩＯサーバでデータの異常が発生した場合の処理も、図６と同様である。すなわち、冗長用ＩＯサーバでデータの異常が発生した場合には、冗長用ＩＯサーバが情報収集サーバとなり、各データ格納用ＩＯサーバからｎ−１分割した分割データを収集し、再度冗長用データを作成すればよい。
【００４７】
また、実施例１では、図５のＳ２６に例示したように、クライアントがデータをｎ−１分割した分割データを各データ格納用ＩＯサーバに送信した。しかし、情報処理システムの構成および処理は、図５に限定される訳ではない。例えば、データ格納用ＩＯサーバの１台（管理サーバ）がクライアントとの間で、データ授受を行うようにしてもよい。例えば、所定の優先順でデータ格納用ＩＯサーバの１つが管理サーバとして処理を実行するように定めればよい。各データ格納用ＩＯサーバおよび冗長用ＩＯサーバは、どのデータ格納用ＩＯサーバがどの順で管理サーバとして処理を実行するかという指定を情報処理システムのシステムパラメータとして保持すればよい。そして、例えば、クライアントがデータを管理サーバにデータを送信すると、管理ＩＯサーバは、データをｎ−１分割してブロックを作成し、他のデータ格納用ＩＯサーバに送信すればよい。また、管理サーバは、自身に格納する分割データを冗長用ＩＯサーバに送信するともに、他のデータ格納用ＩＯサーバに、それぞれに格納される分割データを冗長用ＩＯサーバに送信するように指示すればよい。
【００４８】
また、実施例１では、データ格納用ＩＯサーバおよび冗長用ＩＯサーバは、リモートＮＩＣコマンドを実行するリモートＮＩＣ機構によって、異常が発生したデータ格納用ＩＯサーバ以外のサーバのデータを収集し、正常データを復元した。このような処理に代えて、例えば、複数のＩＯサーバのＮＩＣ１３のコントローラ１３Ｃが、ＭＰＩ（Message Passing Interface）の規格にしたがって、reduction演算を実装することによって、正常データの復元を行ってもよい。
【００４９】
例えば、冗長用ＩＯサーバのＮＩＣ１３は、reduction演算として、複数のデータ格納
ＩＯサーバのメモリ１２に格納されたデータの排他的論理和を実行することで、ＣＰＵ１１の介在なしに冗長データを作成できる。また、例えば、データ格納用ＩＯの１つであるデータ収集サーバは、他のデータ格納用ＩＯサーバに格納された分割データと、冗長用ＩＯサーバに格納された冗長データの排他的論理和を実行することで、ＣＰＵ１１の介在なしに正常データを復元できる。
【００５０】
［実施例２］
図７から図１１により、実施例２の情報処理システムを説明する。上記実施例１では、情報処理システムのノード１からｎ−１はデータ格納用ＩＯサーバであり、ノードｎは冗長用ＩＯサーバであった。しかし、本情報処理システムは、実施例１の構成に限定される訳ではない。例えば、本情報処理システムは、冗長用ＩＯサーバが特定のノードに固定される構成に限定される訳ではない。
【００５１】
そこで、実施例２では、固定の冗長用ＩＯサーバを設けない情報処理システムについて説明する。例えば、実施例２では、ＩＯサーバ間の接続は実施例１の図１等と同様である。しかしながら、ノード１からｎは、それぞれ対等であり、独自のオリジナルデータを格納するとともに、他のノードのオリジナルデータから複製され分割された分割データを保持する。実施例２でも、オリジナルデータから複製され分割された分割データを冗長ブロックと呼ぶ。
【００５２】
また、ノード１からｎは、それぞれ、オリジナルデータを複製し分割された分割データ
（冗長ブロック）から、さらに排他的論理和等によって生成されたデータを追加冗長ブロックとして保持してもよい。ただし、ＩＯサーバは、追加冗長ブロックを保持せず、空きブロックとしてもよい。なお、以上のような実施例２のＩＯサーバ間の関係、データの保持の仕方以外の構成および作用は実施例１の場合と同様である。そこで、実施例２において、実施例１と同一の構成要素については実施例１と同一の符号を付してその説明を省略する。さらに、実施例２の情報処理システムは、実施例１に例示した処理を行ってもよいし、以下の実施例２に例示する処理を行ってもよい。
【００５３】
図７に、実施例２におけるノードと冗長ブロックとの関係を例示する。以下実施例２では、固定の冗長用ＩＯサーバは設けられない。このため、各ノードの装置は、単にＩＯサーバという。図７は、ノード数５の例であり、ノード１から５は、ＩＯサーバ１から５として例示されている。実施例２では、ＩＯサーバ１から５のオリジナルデータは、それぞれデータＡからＥとする。また、例えば、ＩＯサーバ１は、オリジナルデータＡを等分割し、ＩＯサーバ２から５に格納する冗長ブロックａ２からａ５を作成する。冗長ブロックａ２からａ５は、ＩＯサーバ１から、それぞれＩＯサーバ２から５に転送され、格納される。一方、ＩＯサーバ１は、オリジナルデータを保持するとともに、追加冗長ブロックａ１を保持する。追加冗長ブロックａ１は、空きブロックの場合と、冗長ブロックａ２からａ５を排他的論理和することによって作成したデータの場合がある。ＩＯサーバ２のオリジナルデータＢ等についても、同様の冗長ブロックが作成される。
【００５４】
また、図７の表で、冗長ブロックの番号に着目した行列は、ブロックの番号を取り出した配列である。すなわち、図７の表は、ＩＯサーバ１から５のそれぞれに番号１の冗長ブロックを配置するとともに、ＩＯサーバの番号が増加する方向に、冗長ブロックの番号を増加させて、各ＩＯサーバに配置する冗長ブロックを対応づけている。図７の冗長ブロックを配置する手順は以下の通りである。
【００５５】
（１）データＡｉの複製をｎ-１個の等しい大きさのブロックに分割する。分割された
冗長データを持つブロックを冗長ブロックと呼ぶ。
【００５６】
（２）同じ大きさの「追加冗長ブロック」を加える。この追加冗長ブロックには、以下の２種類のものが考えられる。
（２-１）空ブロックの場合：空ブロックとは、後述するような冗長ブロックの配置手段
が実現できるようにするためにブロック番号が割り振られたものである。なお、空きブロックには、実際のデータは存在しない。また、各ＩＯサーバは、空きブロックの領域を確保しなくてもよい。このため、追加冗長ブロックを空きブロックとする場合には、例えば情報処理システムのユーザは、各ＩＯサーバのコンピュータプログラムの改造を低減した上で、データ信頼性に伴う処理を軽減し、データ量の増加を抑制できる。
（２-２）空ブロックではない場合：追加冗長ブロックには、上記（１）で生成したｎ-１個の冗長ブロックの排他的論理和が格納される。冗長ブロックの排他的論理和を保存することで、例えば、オリジナルデータＡと、いずれかの冗長ブロックの１つ（ａｋ）に異常があった場合も、ａｋ以外の冗長ブロックと、冗長ブロックの排他的論理和とによって冗長ブロックａｋを復元し、さらに、オリジナルデータを復元できる。
【００５７】
以下、図７のような冗長ブロック配置の詳細例を説明する。ｎ個のＩＯサーバのオリジナルデータから合計ｎ×ｎ個の冗長ブロックが生成される。ただし追加冗長ブロックを空ブロックとした場合、実質的にはｎ（ｎ-１）個の冗長ブロックが生成される。ＩＯサー
バのそれぞれは、ブロック番号ｉの割当先を任意に決定してもよい。ただし、各ＩＯサーバ自身の追加冗長ブロックに対しては、冗長ブロックの排他的論理和により生成したブロックまたは空ブロックが割り振られる。
【００５８】
図７で例示される冗長ブロック配置処理の具体例は、以下の通りである。すなわち、図７では、冗長ブロックの配置を、簡単のため、n=5として、データは添字でなく文字で区
別し、IOサーバ1,...5のデータをA, B, C, D, E と書き、生成される冗長ブロックを各々{a1, ..., a5}, {b1, ..., b5}, {c1, ..., c5}, {d1, ...,d5}, {e1, ..., e5}として例示する。
【００５９】
以下のように、冗長ブロックの番号が「ラテン方格（Latin square）」になるように配置する。ここで、ラテン方格では、冗長ブロックの配置を図７の例では５行５列の行列（一般にはｎ行ｎ列の行列）として、各行各列に同じブロック番号が複数回現れないようにブロックの番号が配置される。なお、全てのＩＯサーバで「排他的論理和で生成したブロックの番号」ないし「空ブロック」の番号を同じ番号（１）にした場合、「ラテン方格」として、図７に例示のような「巡回行列」が使用できる。このデータ配置により、ｎ個のＩＯサーバの任意の１つが障害を起こした時に、残りのｎ-１個の持つＩＯサーバの冗長
ブロックから正常データを回復する事ができる。
【００６０】
ここで、データの分散/収集処理加速機構について説明する。上述したラテン方格によ
る冗長データ配置を実現する際には、各ＩＯサーバは「ｎ−１個のデータブロックを他のｎ−１個のＩＯサーバに最低１つずつ分配する」通信を行う。この様なパターンの通信はscatterと呼ばれる。
【００６１】
また、ｎ個のＩＯサーバ中、１つのＩＯサーバの異常により消失したデータを復元するには、ｎ−１個のデータブロックを、ｎ−１個のＩＯサーバから収集する通信が実行される。このパターンの通信はgatherと呼ばれる。
【００６２】
このようなscatter、gather等で例示される通信処理は、一般的にＣＰＵ処理（プログ
ラムＩ／Ｏ：ＰＩＯ）を用いて実施される。ＰＩＯ処理はＣＰＵの処理負担が発生する。そこで実施例２でも、実施例１と同様、ＣＰＵ処理の負担が少ないハードウェア機構である、リモートＮＩＣコマンド実行機構を利用する。リモートＮＩＣコマンド実行機構の一例は、実施例１の図３に例示されている。また、"リモートＮＩＣコマンド実行機構"は、例えば、mellanox社のInfiniBand装置に実装されている、CORE-Directと呼ばれる機構に
よって実現されている。リモートＮＩＣコマンド実行機構により、出来るだけＣＰＵの処理負担を軽減し、他の処理、例えば、計算処理等、アプリ処理、その他ＩＯ処理以外の処理の邪魔をしない情報処理システムが提供される。
【００６３】
リモートＮＩＣコマンド実行機構では、各ＩＯサーバが指定したイベント、例えば、データの受信などの発生を契機に、予め設定しておいたＮＩＣコマンド、例えば、データ送信命令などを、ＣＰＵ１１を介さず、図３に例示のＮＩＣ１３が実行する。ＮＩＣ１３は、他のＩＯサーバへのデータのscatter、gather等をリモートで実行する。具体的には、
ＮＩＣ１３は、あるＩＯサーバ（ノードＡ）から他のＩＯサーバ（ノードＢ）を遠隔で操作し、他のＩＯサーバへのデータのscatter、gather等をリモートで実行する。
【００６４】
図８に、各ＩＯサーバがリモートＮＩＣコマンド実行機構を利用し、冗長ブロックを他のＩＯサーバに分散させる場合の処理フローを例示する。図８の処理は、実施例１の図４のＳ２の詳細例の１つと考えることができる。
【００６５】
この処理では、各ＩＯサーバは、まず、データを受信するメモリ領域を確保する（Ｓ２０）。ここで、確保したメモリ領域は、例えば、受信バッファと呼ぶことができる。次に、各ＩＯサーバは、確保したメモリ領域をｎ−１個に分割する（Ｓ２１）。さらに、各ＩＯサーバは、分割したメモリ領域をｎ−１個のＩＯサーバと対応づける（Ｓ２３）。ＩＯサーバのＣＰＵ１１は、複製した冗長データから自装置以外の情報処理装置の数に応じて
分割した分割冗長ブロックを作成することの一例として、Ｓ２１、Ｓ２２の処理を実行する。
【００６６】
そして、各ＩＯサーバは、他のＩＯサーバへ分割したメモリ領域のデータを送信するためのＮＩＣコマンドを作成する（Ｓ２４）。さらに、各ＩＯサーバは、作成したＮＩＣコマンドがデータ受信を契機に実行されるようにＮＩＣ１３に登録する（Ｓ２５）。なお、このとき、各ＩＯサーバは、分割したメモリ領域と、転送先の他のＩＯサーバとの関係を保存しておく。各ＩＯサーバは、保存した関係を参照することで、データ収集および復元時に、分割ブロックの収集先を特定することができる。
【００６７】
そして、いずれかのＩＯサーバがデータを受信する（Ｓ２８）。すると、リモートＮＩＣコマンド実行機構により、データを受信したＩＯサーバのＮＩＣ１３は、分割した各メモリ領域のデータ（冗長ブロック）をそれぞれ対応するＩＯサーバに転送する（Ｓ２９）。Ｓ２９の処理によって、ｎ−１個に分割されたメモリ領域のそれぞれから転送されるデータ（冗長ブロック）が、分割冗長ブロックの一例である。また、Ｓ２９の処理で転送されるデータ（冗長ブロック）が冗長データの一例でもある。ＩＯサーバのＮＩＣ１３は、他の情報処理装置の記憶部に記憶させる処理の一例として、Ｓ２９を実行する。なお、各ＩＯサーバは、Ｓ２８で受信したオリジナルデータを、例えば、メモリ１２あるいは外部記憶装置１５に保存する。したがって、Ｓ２９の処理で転送されるのは、オリジナルデータの複製をｎ−１個に分割した冗長ブロックということができる。
【００６８】
一方、Ｓ２９の処理で、冗長ブロックを受信した各ＩＯサーバは、受信した冗長ブロックをメモリ１２から外部記憶装置に、適切なタイミングで保存する（Ｓ２Ｃ）。各ＩＯサーバは、取得したデータを外部記憶装置に保存することの一例として、Ｓ２Ｃの処理を実行する。適切なタイミングとは、すでに述べたように、ＣＰＵ１１その他の資源が占有されていないとき等である。さらに、図８では省略したが、Ｓ２８でデータを受信したＩＯサーバは、ｎ−１個に分割された冗長ブロックから、排他的論理和によって、冗長データを作成し、追加冗長ブロックとして、自装置に保存してもよい。Ｓ２９、Ｓ２Ｃは、冗長データを取得するステップの一例である。
【００６９】
図９に、リモートＮＩＣコマンド実行機構を利用するために登録されるＮＩＣコマンドのイメージを例示する。ただし、図９では、４個のＩＯサーバ１からＩＯサーバ４が例示されている。本情報処理システムにおいて、ＩＯサーバの個数に限定がある訳ではない。
【００７０】
図９のように、例えば、ＩＯサーバ１は、各ＩＯサーバ（ＩＯサーバ２〜ＩＯサーバ４）のネットワーク上のアドレスと、各ＩＯサーバに送信するメモリ領域の先頭アドレスおよびデータ長などを含む送信コマンドを予め作成する。そして、ＩＯサーバ１は、作成した送信コマンドをデータ受信時に実行させるようＮＩＣ１３に登録しておく。以下、送信するメモリ領域の先頭アドレスは、送信領域先頭アドレスと呼ばれる。
【００７１】
すでに、図３で説明したように、ＩＯサーバのＮＩＣ１３は、コントローラ１３Ｃとメモリ１３Ｄとを有する。図９に例示したＮＩＣ１３へのコマンドは、ＮＩＣ１３内のメモリ１３Ｄに定義されたレジスタに登録される。また、このレジスタ内に登録されたコマンドは、所定のイベント発生を契機として起動するように、ＮＩＣ１３内で制御される。このような制御は、例えば、従来のコンピュータシステムにおける割り込み処理回路と同様の構成で実行される。以上述べたように、リモートＮＩＣコマンド実行機構により、ＩＯサーバ１でのデータ受信を契機として、ＣＰＵ１１を介することなく、ＩＯサーバ２から４にデータを送信することができる。
【００７２】
図９の例では、ＩＯサーバ２への送信コマンド、ＩＯサーバ３への送信コマンド、およ
びＩＯサーバ４への送信コマンドがＮＩＣ１３のレジスタに登録される。ＮＩＣ１３のコントローラ１３Ｃは、レジスタに関連付けて設定された起動条件、例えば、データ受信が実行されると、レジスタ内のコマンドをシーケンシャルに起動する。そして、コントローラ１３Ｃは、バスアダプタ１３ＢによってＣＰＵ１１とメモリ１２へのアクセスを調整しつつ、ＣＰＵ１１とは独立にメモリ１２にアクセスし、送信領域先頭アドレスから送信データ長のデータを取得し、指定のＩＯサーバ２、３、４へ転送する。
【００７３】
図１０に、いずれかのＩＯサーバにおいてデータの異常が発生し、正常データを復元する場合の処理のフローチャートを例示する。まず、１つのＩＯサーバがデータの異常を検出する（Ｓ１４０）。Ｓ１４０での異常が検出されたときが、複数の情報処理装置のいずれかにおいて異常が検出されたときの一例である。
【００７４】
すると、データの異常が発生したＩＯサーバは、他のＩＯサーバに、収集したいデータの通知（収集データ情報）を送信する（Ｓ１４１）。ただし、例えば、データの異常が発生したＩＯサーバに代えて、管理サーバに設定されているＩＯサーバがデータ収集サーバとなって図１０の処理を行ってもよい。そして、データ収集サーバは、データが送信されるまでデータの待ち合わせを行う（Ｓ１４２）。
【００７５】
一方、他のＩＯサーバは、Ｓ１４１によって送信される収集データ情報を受信する（Ｓ１４３）。Ｓ１４３は、冗長データの転送要求を受け付けるステップの一例である。そして、他のＩＯサーバは、通知された収集データ情報から、収集対象データ、すなわち、自身が保持する冗長ブロックの格納領域を特定する（Ｓ１４４）。
【００７６】
さらに、他のＩＯサーバは、収集対象のデータが外部記憶装置１５に保存され、メモリ１２で維持されていない場合には、収集対象のデータを外部記憶装置１５からメモリ１２に読み出す（Ｓ１４４Ａ）。ＩＯサーバは、外部記憶装置のデータをメモリに読み出す処理の一例として、Ｓ１４４Ａの処理を実行する。
【００７７】
そして、他のＩＯサーバは、収集対象データの格納領域をデータ収集サーバに送信するＮＩＣコマンドを作成する（Ｓ１４５）。ＮＩＣコマンドには、例えば、データ収集サーバのネットワーク上のアドレスと、収集対象データである冗長ブロックのメモリ上の格納領域（送信領域先頭アドレスおよび送信データ長等）が指定される。そして、他のＩＯサーバは、データ収集要求の受信を契機にＮＩＣコマンドを実行するように、ＮＩＣ１３に登録する（Ｓ１４６）。Ｓ１４６は、冗長データの転送処理を所定のタイミングで実行するコマンドを登録するステップの一例である。そして、他のＩＯサーバは、データ準備完了をデータ収集サーバに通知する（Ｓ１４８）。Ｓ１４８以降の処理は、図６のＳ４８以降の処理と同様であるので、その説明を省略する。
【００７８】
ただし、実施例２における正常データの復元処理（Ｓ１４Ｃ）は、実施例１のように、排他的論理によるのではなく、データ収集サーバは、単に、収集された冗長ブロックの結合処理を実行すればよい。例えば、ＩＯサーバ１で異常が発生した場合を例に説明する。ＩＯサーバ１には、例えば、図７のように、オリジナルデータＡが格納され、Ａの複製を分割した冗長ブロックａ２からａｎがＮＩＣ１３を介してＩＯサーバ２からｎに転送され、格納されている。したがって、サーバ１の異常によってオリジナルデータＡが異常となった場合、データ収集サーバは、サーバ１以外のＩＯサーバ２からｎの冗長ブロックを収集し、冗長ブロックを結合することで、正常なオリジナルデータＡを復元すればよい。例えば、ＩＯサーバ１がデータ収集サーバとなる場合には、データ収集サーバは、ＩＯサーバ２からｎの冗長ブロックを収集すればよい。また、ＩＯサーバ２からｎのいずれかがデータ収集サーバとなる場合には、データ収集サーバは、自身以外のＩＯサーバ２からｎから、冗長ブロックを収集し、自身の冗長ブロックを結合して、正常なオリジナルデータＡ
を復元すればよい。他のＩＯサーバに異常があった場合も同様である。
【００７９】
さらに、実施例２においても実施例１と同様、データ収集ＩＯサーバは、他のＩＯサーバに対して、収集データ情報において他のＩＯサーバが冗長ブロックを外部記憶装置１５からメモリ１２にデータを読み出すように指令を送信しておけばよい。他のＩＯサーバのＣＰＵ１１は、外部記憶装置１５からメモリ１２に冗長ブロックを読み出した後に、Ｓ１４８のデータ準備完了を通知すればよい。このような処理によって、ＮＩＣ１３によるＣＰＵ１１を介さないＩＯサーバ間の通信と、ＣＰＵ１１による外部記憶装置１５へのアクセスとを連携させることができる。その結果、ＩＯサーバにおいて、従来よりもＣＰＵの負荷、データ転送に伴うオーバーヘッドを抑制した上で、データ信頼性を向上できる。
【００８０】
図１１に、ＩＯサーバ２に異常が発生した場合のデータ収集のためのＮＩＣコマンド登録処理を例示する。図１１の例では、データ収集サーバの役割を有するＩＯサーバ１の通知を受けて、他のＩＯサーバ３、４がデータ受信契機で実行されるようにＮＩＣコマンドをＮＩＣ１３−３、ＮＩＣ１３−４に登録する。例えば、ＩＯサーバ３は、ＩＯサーバ１への送信コマンドとして、ＩＯサーバ１のアドレス、送信領域先頭アドレスおよび送信データ長を含むＮＩＣコマンドをＮＩＣ１３のメモリ１３Ｄに設けられたレジスタに登録する。レジスタに登録されたＮＩＣコマンドは、データ受信を契機に実行されるように、割り込み処理が設定される。ＩＯサーバ４においても同様である。
【００８１】
上記実施形態の情報処理システムでは、各ＩＯサーバは、リモートＮＩＣコマンド実行機構により、オリジナルデータから複製され、分割された冗長ブロックをＣＰＵの介在なしに、他のＩＯサーバに配布する。すなわち、実施例２においても、ＣＰＵ１１の負荷の増加を抑制して冗長ブロックを他のＩＯサーバに配布できる。また、上記実施形態の情報処理システムでは、各ＩＯサーバは、いずれかのＩＯサーバに異常が発生した場合、例えば、異常が発生していないＩＯサーバの１つが情報収集サーバとなり、他のＩＯサーバから冗長ブロックを収集し、オリジナルデータを復元する。
【００８２】
この場合、各ＩＯサーバは、情報収集サーバからの冗長データの転送要求を受け付けて、情報収集サーバのネットワーク上の宛先と冗長データのメモリ上の格納先とを指定して、ＮＩＣ１３に転送処理を所定のタイミングで実行させるためのコマンドを登録する。したがって、データ収集においても、リモートＮＩＣコマンド実行機構により、各ＩＯサーバは、ＣＰＵ１１の介在なしに、ＮＩＣコマンドで指定されるメモリ１２のアドレスからデータを取得し、データ収集サーバに転送する。このように、実施例２の構成においても、情報処理システムは、ＣＰＵ１１の負荷の増加、オーバーヘッド等を抑制して、オリジナルデータを冗長化し、異常発生時に復元できる。
【００８３】
また、実施例２では、ノード１からｎの各ＩＯサーバは、それぞれ対等であり、独自のオリジナルデータを格納するとともに、他のノードのオリジナルデータから複製され分割されたデータ（冗長ブロック）を保持する。したがって、実施例２の情報処理システムでは、情報処理装置間の対称性、負荷の均一性が確保しやすい。また、ノード１からｎの各ＩＯサーバは、それぞれ、オリジナルデータから複製され分割された冗長ブロックから、さらに排他的論理和等によって生成された冗長用データ（追加冗長ブロック）を保持してもよい。したがって、実施例２の情報処理システムは、さらに信頼性を向上できる。ただし、実施例２では、ノード１からｎの各ＩＯサーバは、追加冗長ブロックを保持せず、追加冗長ブロックをダミーの空きブロックとしてもよい。そのため、実施例２では、情報処理システムは、要求される信頼性に応じて、冗長性の程度を柔軟に変更できる。
【００８４】
なお、ＮＩＣコマンドのデータ収集例としては、データ復元のためのデータ以外に、情報処理システム内の種々のネットワーク情報が挙げられる。例えば、情報処理システムは
、ＮＩＣコマンドにより、情報処理システムの健全性を示すヘルスステータス情報、あるいは情報処理システムの状態を示す統計情報を収集すればよい。ヘルスステータス情報、および統計情報の具体例は、次の実施例３の図１４、図１５に例示する。
【００８５】
［実施例３］
図１２から図１８を参照して、実施例３の情報処理システムを説明する。実施例３の情報処理システムは、図１で例示されるサーバ１からＩＯサーバｎに対して監視リングという構造を導入する。例えば、実施例２に例示した「ラテン方格」により、各々の、オリジナルデータの複製から生成したｎ個の冗長ブロックを相互に持ち合う集合｛ｎ個のＩＯサーバを有する集合｝を想定する。この集合に属するＩＯサーバ間では次のような循環的／円環的な関係で、各々が１つ、他のＩＯサーバの異常の有無および負荷（ＣＰＵ負荷、ＩＯ負荷等）を監視する。
ＩＯサーバ１→ＩＯサーバＳ２→ＩＯサーバ３→  ．．．  →ＩＯサーバｎ→ＩＯサーバ１→  ．．．
この｛ｎ個のＩＯサーバを有する集合｝を実施例３では、「監視リング」と呼ぶ。監視リングが、環状伝達経路の一例である。実施例３では、監視リングにしたがって、情報処理システム内のＩＯサーバが相互に監視され、異常が検出されたＩＯサーバに対しては、復元処理が実行される。このような監視リング以外の実施例３の構成および作用は、実施例１、２と同様である。そこで、実施例３の構成要素のうち、実施例１、２と同一の構成要素については、同一の符号を付して、その説明を省略する。
【００８６】
図１２に監視リングの構成を例示する。図１２では、ｎ＝Ｎ＋１個のＩＯサーバがネットワークＮ１を介して接続されている。図１２では、サーバ（SERVER）と記載されているブロックが１つのＩＯサーバである。ＩＯサーバ１は、ＩＯサーバ２を監視し、ＩＯサーバ２は、ＩＯサーバ３を監視し、ＩＯサーバＮはＩＯサーバＮ＋１を監視し、ＩＯサーバＮ＋１はＩＯサーバ１を監視する。また、ＩＯサーバＮ＋１は、監視統合サーバの役割を有し、監視処理を統括する。監視統合サーバの役割の１つは、監視リングによる監視処理が監視リングを１周したことを検知することにある。監視統合サーバは、別途専用のサーバを用意してもよいし、監視リング内の任意のＩＯサーバを割り当ててもよい。監視統合サーバは、例えば、設定ファイルのシステムパラメータ等により指定すればよい。設定ファイルのシステムパラメータ等には、所定の優先順位を定めて複数のＩＯサーバが割り当てられるようにすればよい。
【００８７】
このような監視サーバを用いることにより、ＩＯサーバを監視するために実施する通信を抑制することができる。また、監視処理によるネットワークおよび各ＩＯサーバへの負荷を実施例２よりも均一化できる。
【００８８】
図１３に、本情報処理システムの各ＩＯサーバが監視リングにおいて実行する処理フローを例示する。図１３の処理は、図４のＳ３の判定処理の詳細例と考えることができる。この処理では、監視統合サーバが状態監視メッセージに監視用情報を設定し、最初のＩＯサーバ１へ送信する（Ｓ３１）。監視統合サーバのＮＩＣ１３は、環状伝達経路における宛先に送信することの一例としてＳ３１の処理を実行する。
【００８９】
状態監視メッセージを受信した各ＩＯサーバ、例えば、最初のＩＯサーバ１は、自身が監視統合サーバか否かを判定する（Ｓ３２）。Ｓ３２の判定で、自身が監視統合サーバであると判定した場合、状態監視メッセージが監視リングを一周したことを意味する。そこで、監視統合サーバは、受信した状態監視メッセージをメモリ２に格納し、規定時間待つ（Ｓ３３）。Ｓ３３の処理によって、監視統合サーバのＮＩＣ１３は、監視リングの終端として、収集した状態監視メッセージの監視用情報をメモリ１２に蓄積する。また、監視統合サーバのＣＰＵ１１は、適切なタイミングでメモリ１２に蓄積した監視用情報を外部
記憶装置１５に保存すればよい。
【００９０】
その後、監視統合サーバは、制御をＳ３１に進める。制御をＳ３１に進めると、新たに監視リングによる処理が開始し、監視統合サーバは監視リングの始点となる。監視統合サーバのＮＩＣ１３は、環状伝達経路の始端および終端となり、前記情報処理システムの状態を監視することの一例として、Ｓ３３の処理を実行する。
【００９１】
また、Ｓ３２の判定で、自身が監視統合サーバでないと判定した場合、ＩＯサーバは、自サーバの情報を状態監視メッセージ中の規定の領域に設定し、次のＩＯサーバへ監視用情報を送信する（Ｓ３４）。そして、次のＩＯサーバにおいて、Ｓ３２の処理が継続して実行される。ＩＯサーバのＮＩＣ１３は、環状伝達経路おける送信元から受信した状態監視データに自装置の状態を追加して、環状伝達経路における宛先に送信することの一例として、図３４の処理を実行する。状態監視メッセージが状態監視データの一例である。
【００９２】
図１４、図１５は、状態監視メッセージに含まれる監視用情報の構造例およびデータ例を示す。図１４は、監視用情報のうち、ヘルスステータス情報と呼ばれるものを例示する。ヘルスステータス情報が格納される記憶領域は、ヘルスステータス領域とも呼ばれる。ヘルスステータス情報は、ＩＯサーバ１の格納領域、ＩＯサーバ２の格納領域、・・・、ＩＯサーバｎの格納領域のように区分される。各ヘルスステータス領域、つまり、ＩＯサーバごとの格納領域は、例えば、リンクステータス、誤り訂正可能エラー発生回数等を有する。リンクステータスとは、各ＩＯサーバと他のＩＯサーバとを接続するリンクの状態をいい、例えば、接続中、遮断中等の情報が設定される。
【００９３】
図１５は、状態監視メッセージに含まれる監視用情報のうち、統計情報と呼ばれるものを例示する。監視統合サーバには、監視リング内の各ＩＯサーバの情報が蓄積される。そこで、監視統合サーバは、蓄積した各ＩＯサーバの情報を集計することにより、統計情報を取得し、各ＩＯサーバの負荷状況を確認し、負荷分散に利用することも可能である。
【００９４】
統計情報が格納される記憶領域は、統計情報領域とも呼ばれる。統計情報は、ＩＯサーバ１の格納領域、ＩＯサーバ２の格納領域、・・・、ＩＯサーバｎの格納領域のように区分される。各統計情報の領域、つまり、ＩＯサーバごとの格納領域は、例えば、統計情報取得直前の読み出し書き込み回数、同直前の読み出し書き込みデータ量、同直前のＣＰＵビジー率、移動平均の読み出し書き込み回数、移動平均の読み出し書き込み量、および移動平均のＣＰＵビジー率等を含む。
【００９５】
ここで、統計情報取得直前の読み出し書き込み回数は、図１５の統計情報が作成される前の単位時間あたりの各ＩＯサーバでのメモリ１２との間の読み出し描き込み回数である。同様に、直前の読み出し書き込みデータ量は、直前の単位時間のメモリ１２との間の読み出し描き込みデータ量である。また、直前の単位時間のＣＰＵビジー率は、直前の単位時間の平均のＣＰＵ使用率である。さらに、移動平均とは、上記直前の読み出し書き込み回数、同読み出し書き込みデータ量、同ＣＰＵビジー率を所定期間で平均した値である。
【００９６】
図１６に、監視リングの共通データを例示する。監視統合サーバは、図１６のような監視リング全体の情報を保持する。例えば、所定期間における、ループ回数は、状態監視メッセージが監視リングをループした回数である。所要時間は、ループ１周当たりの処理時間である。異常発生回数は、所定期間における異常が検出された回数である。移動平均ネットワーク効率は、例えば、所定期間における平均のネットワークのデータ伝送速度である。
【００９７】
図１７に、復元のタイミング決定処理フローを例示する。復元のタイミングは、各ＩＯ
サーバが監視リング内で監視対象を監視することにより決定される。各ＩＯサーバは、監視対象のＩＯサーバの異常を検出すると復元処理を実施する。
【００９８】
本実施例３では、復元処理の前提条件として、以下を想定する。（１）データアクセスの有無に関係なく、監視リング機構は動作している。よって、例えば、クライアント等の外部から情報処理システムにデータアクセスがない場合でも、監視リング機構の動作中にＩＯサーバの異常が検出される場合がある。（２）監視リングでの監視は、各ＩＯサーバによって一定周期で実施される。
【００９９】
各ＩＯサーバでＮＩＣ１３のコントローラ１３Ｃは、状態監視メッセージを受信する（Ｓ３４１）。そして、コントローラ１３Ｃは、受信した状態監視メッセージに自身の情報を追加する。追加する情報は、ヘルスステータス情報、あるいは、統計情報等である。そして、コントローラ１３Ｃは、次のＩＯサーバのＮＩＣ１３に、状態監視メッセージを送信する（Ｓ３４３）。そして、コントローラ１３Ｃは、正常に状態監視メッセージが次のＩＯサーバのＮＩＣ１３で受信された否かを確認する（Ｓ３４５）。正常に受信されたかどうかは、例えば、次のＩＯサーバのＮＩＣ１３からの確認メッセージ等で確認できる。そして、Ｓ３４５で、正常に受信されたことが確認された場合には、当該ＩＯサーバのＮＩＣ１３は、次のメッセージを受信するため、処理をＳ３４１に戻す。一方、Ｓ３４５で、正常に受信されたことが確認されたことが確認できない場合には、当該ＩＯサーバのＮＩＣ１３は、復元処理を開始する（Ｓ３４６）。復元処理は、実施例１の図６、実施例２の図１０で説明した手順と同様である。そこで、実施例２においても、同様の復元処理（図６のＳ４０〜Ｓ４Ｃ、図１０のＳ１４０〜Ｓ１４ｃ）を実行するものとしてその詳細を省略する。
【０１００】
図１８に、復元処理ためのＮＩＣ１３へのコマンド設定の詳細を例示する。本実施例３では、リモートＮＩＣコマンド実行機構を利用し、復元タイミングや復元のための情報を共有するための通信をＣＰＵの介入なしに実行させる。図１８のように、各ＩＯサーバが、受信データ領域をそのまま送信領域として次のＩＯサーバへの送信用のＮＩＣコマンドを予め作成し、ＮＩＣに登録しておく。
【０１０１】
図１８の例では、例えば、ＩＯサーバ２は、データを受信したときにＮＩＣコマンドが実行されるように、ＮＩＣ１３−２のレジスタに、ＩＯサーバ３への送信のＮＩＣコマンドを登録する。送信のＮＩＣコマンドは、ＩＯサーバ３のアドレス、送信領域先頭アドレス、および送信データ長を含む。ここでは、送信領域先頭アドレスは、実施例１と同様、データ収集サーバが収集データ情報において指定する、収集対象のデータの先頭アドレスである。また、送信データ長は、収集対象のデータのデータ長である。ただし、すでに、図６、図１０に説明したように、収集対象のデータが外部記憶装置１５に保存されている場合には、データ収集先のＩＯサーバは、データ準備完了をデータ収集サーバに通知する前に、データを外部記憶装置１５から、メモリ１２の送信領域先頭アドレスに読み出しておけばよい。
【０１０２】
このような構成によって、受信バッファにデータが受信されたタイミングで、ＮＩＣ１３のレジスタに設定されたコマンドが起動され、ＩＯサーバ３へのデータを送信する送信コマンドが実行される。ＩＯサーバ３、４等にも同様の設定がされる。このような設定により、例えば、図６、図１０の場合と同様、各ＩＯサーバに送信依頼が受信されたときに、レジスタに登録されたＮＩＣコマンドが実行され、送信領域先頭アドレスから送信データ長のデータが送信される。したがって、監視対象のＩＯサーバの異常を検出したＩＯサーバは、情報収集サーバとなり、監視対象のＩＯサーバ以外のＩＯサーバから、例えば同報通信データを受信し、異常のあった監視対象のＩＯサーバの正常データを復元できる。また、例えば、監視対象のＩＯサーバの異常を検出したＩＯサーバは、所定の管理サーバ
、あるいは監視リングサーバに異常を通知し、通知を受けたＩＯサーバが情報収集サーバとなり、正常データを復元すればよい。
【０１０３】
以上述べたように、実施例３では、情報処理システムのＩＯサーバは、監視リングにしたがって、それぞれの監視対象のＩＯサーバを監視し、負荷を分散して、異常を監視できる。また、実施例３では、情報処理システムのＩＯサーバは、監視リングによって、状態監視メッセージを授受することで、情報処理システム内のヘルスステータス情報（図１４）、統計情報（図１５）を収集できる。また、情報処理システムの各ＩＯサーバが監視リングにしたがって情報を授受する場合に、１つのＩＯサーバを監視統合サーバとして動作させることで、状態監視メッセージを循環させる場合の始端と終点とを設定でき、状態監視メッセージが１周するたびに情報を取得できる。
【０１０４】
なお、Ethernet(登録商標)やInfiniBandのような、同報通信に対し信頼性のないネットワークに対し、各ＩＯサーバがパケットロスやデータ化けからの回復をソフトウェアによるプロトコルで行う事で、信頼性のある通信を実現する。これは、前方誤り訂正（Forward Error Correction）等の手法を用いることで可能である。前方誤り訂正等により、信頼性のないネットワークで形成されたＩＯサーバ環境であっても、データ復元タイミングや復元に使用する情報を共有するための同報通信の高速化が実現される。
【０１０５】
さらに、複数のＩＯサーバで、処理のタイミングを共有するための手段として、ＭＰＩのBarrier 機能を利用してもよい。例えば、mellanoxのInfiniBand装置にはこのBarrier
をＮＩＣの機能として実装されているため、ＣＰＵによる処理を介さず複数のＩＯサーバ間での待ち合わせを行うことが可能である。
【０１０６】
さらに、実施例１では、監視リング内で、ｎ−１個の分割データと、分割データの排他的論理和の冗長ブロックを含むｎ個のブロックから１つのブロックが失われた場合の処理を例示した。このような場合には、失われたブロックは、残りｎ−１個データの排他的論理和により回復する事ができる。この回復処理は、排他的論理和を演算としてサポートするハードウェアにより、ＩＯサーバのＣＰＵ１１を使用せずに実行できる。例えば、複数のＩＯサーバのＮＩＣ１３のコントローラ１３Ｃ間で、ＭＰＩ（Message Passing Interface）の規格にしたがって、reduction演算を実装することによって、図６に示したデータ収集と、排他的論理和をＣＰＵ１１の介在なしに実行できる。また、例えば、mellanox 
のInfiniBand装置には、reduction演算が備わっているため、データの回復処理に利用す
ることができる。
【０１０７】
ところで、ＩＯサーバ等の情報処理装置の管理コストの観点からは、情報処理装置１台あたりのクライアント数は出来るだけ多くする事が望ましい。このため、情報処理装置の計算機としての処理能力、特にＣＰＵ（Central Processing Unit）あるいはメモリへの
負荷は、高い水準に設定される事になる。このため、ＩＯサーバ１台あたりのクライアント数が多くなり、１台のＩＯサーバの障害の影響も大きくなりやすい。その一方、システム規模の増大に伴い、システム内にある複数のＩＯサーバの間の負荷は不均衡の度合いも拡大している。このため、最大負荷に耐える用に設計されたＩＯシステムの能力の平均的な利用率は一定限度以上に高くならない。このような利用率の抑制はシステムの価格性能比の向上にとって障害になっている。しかしながら、以上のような実施例１から３に例示の構成によって、ＩＯサーバの負荷の抑制を低減して、信頼性を高めることが可能となる。
【０１０８】
＜その他＞
本実施の形態は、以下の態様を含む。各態様は、付記として記載する。各態様の構成は、他の態）様と組み合わせることができる。
（付記１）
複数の情報処理装置を含む情報処理システムであって、
前記複数の情報処理装置のそれぞれは、
演算処理を行う演算処理装置と、
データを記憶する記憶部と、
前記演算処理装置の介在なしに前記記憶部にアクセスするとともに、他の情報処理装置の通信部を介して前記他の情報処理装置にアクセスする通信部と、を備え、
前記複数の情報処理装置のそれぞれの通信部は、自装置の記憶部が記憶するデータを冗長化した冗長データを他の情報処理装置の通信部を介して前記他の情報処理装置の記憶部に記憶させる処理、および、他の情報処理装置の記憶部が記憶するデータを冗長化した冗長データを前記他の情報処理装置の通信部を介して取得し、自装置の記憶部に記憶する処理の少なくとも１つを実行する情報処理システム。
（付記２）
前記複数の情報処理装置のいずれかにおいて異常が検出されたときに、前記複数の情報処理装置のうちの正常データの復元を行う情報処理装置の通信部は、他の少なくとも１つの情報処理装置の通信部を介して、前記他の少なくとも１つの情報処理装置の記憶部に記憶された、前記正常データに対応する冗長データまたは前記冗長データと組み合わせて前記正常データを復元するためのデータを取得し、前記正常データを復元する付記１に記載の情報処理システム。
（付記３）
前記複数の情報処理装置のそれぞれの通信部は、自装置の記憶部に記憶されるデータを複製した冗長データから自装置以外の情報処理装置の数に応じて分割した分割冗長ブロックを作成し、前記他の情報処理装置の通信部を介して前記他の情報処理装置の記憶部に記憶させる付記１または２に記載の情報処理システム。
（付記４）
前記複数の情報処理装置のいずれかにおいて異常が検出されたときに、前記複数の情報処理装置のうちの正常データの復元を行う情報処理装置の通信部は、他の情報処理装置の通信部を介して前記他の情報処理装置の記憶部された分割冗長ブロックを取得して正常データを復元する付記３に記載の情報処理システム。
（付記５）
前記複数の情報処理装置は、環状の所定順に状態監視データを転送する環状伝達経路を形成し、
前記複数の情報処理装置のそれぞれの通信部は、前記環状伝達経路おける送信元から受信した状態監視データに自装置の状態を追加して、環状伝達経路における宛先に送信し、
前記複数の情報処理装置の１つの通信部は、前記環状伝達経路の始端および終端となり、前記情報処理システムの状態を監視する付記１から４のいずれか１項に記載の情報処理システム。
（付記６）
前記複数の情報処理装置のそれぞれは、さらに外部記憶装置を備え、
前記複数の情報処理装置のそれぞれの演算処理装置は、前記通信部を介した他の情報処理装置の記憶部から自装置の記憶部へのデータの取得後に前記取得したデータを外部記憶装置に保存し、前記通信部を介した他の情報処理装置へのデータ転送前に、前記他の情報処理装置の要求にしたがい外部記憶装置のデータを自装置の記憶部に読み出す付記１から５のいずれか１項に記載の情報処理システム。
（付記７）
情報処理システム内で相互に接続される複数の情報処理装置中の１つの情報処理装置であって、
演算を行う演算処理装置と、
データを記憶する記憶部と、
前記演算処理装置の介在なしに前記記憶部にアクセスするとともに、他の情報処理装
置の通信部を介して前記他の情報処理装置にアクセスする通信部と、を備え、
前記通信部は、自装置の記憶部が記憶するデータを冗長化した冗長データを他の情報処理装置の通信部を介して前記他の情報処理装置の記憶部に記憶させる処理、および、他の情報処理装置の記憶部が記憶するデータを冗長化した冗長データを前記他の情報処理装置の通信部を介して取得し、自装置の記憶部に記憶する処理の少なくとも１つを実行する情報処理装置。
（付記８）
前記複数の情報処理装置のいずれかにおいて異常が検出されたときに、前記複数の情報処理装置のうちの１つの情報処理装置が正常データの復元を行う場合に、前記１つの情報処理装置の通信部は、他の少なくとも１つの情報処理装置の通信部を介して、前記他の少なくとも１つの情報処理装置の記憶部に記憶された、前記正常データに対応する冗長データまたは前記冗長データと組み合わせて前記正常データを復元するためのデータを取得し、前記正常データを復元する付記７に記載の情報処理装置。
（付記９）
前記複数の情報処理装置のそれぞれの通信部は、自装置の記憶部に記憶されるデータを複製した冗長データから自装置以外の情報処理装置の数に応じて分割した分割冗長ブロックを作成し、前記他の情報処理装置の通信部を介して前記他の情報処理装置の記憶部に記憶させる付記７または８に記載の情報処理装置。
（付記１０）
前記複数の情報処理装置のいずれかにおいて異常が検出されたときに、前記１つの情報処理装置が正常データの復元を行う場合に、前記１つの情報処理装置の通信部は、他の情報処理装置の通信部を介して前記他の情報処理装置の記憶部された分割冗長ブロックを取得して正常データを復元する付記９に記載の情報処理装置。
（付記１１）
前記情報処理システム内で、複数の情報処理装置が環状の所定順に状態監視データを転送する環状伝達経路を形成する場合に、
前記１つの情報処理装置の通信部は、前記環状経路おける送信元から受信した状態監視データに自装置の状態を追加して、環状伝達経路における宛先に送信する処理、および
前記環状伝達経路の始端および終端となり、前記情報処理システムの状態を監視する処理の少なくとも１つを実行する付記７から１０のいずれか１項に記載の情報処理装置。
（付記１２）
前記１つの情報処理装置は、さらに外部記憶装置を備え、
前記１つの情報処理装置がプロセッサは、前記通信部を介した他の情報処理装置の記憶部から自装置の記憶部へのデータの取得後に取得したデータを外部記憶装置に保存し、前記通信部を介した他の情報処理装置へのデータ転送前に、前記他の情報処理装置の要求にしたがい外部記憶装置のデータを自装置の記憶部に読み出す付記７から１１のいずれか１項に記載の情報処理装置。
（付記１３）
複数の情報処理装置を含む情報処理システムの制御方法であって、
前記複数の情報処理装置のそれぞれの通信部は、演算処理装置の介在なしに自装置の記憶部にアクセスするとともに、他の情報処理装置の通信部を介して前記他の情報処理装置にアクセスすることを実行し、前記アクセスによって、
自装置の記憶部が記憶するデータを冗長化した冗長データを他の情報処理装置の通信部を介して前記他の情報処理装置の記憶部に記憶させる処理、および、他の情報処理装置の記憶部が記憶するデータを冗長化した冗長データを前記他の情報処理装置の通信部を介して取得し、自装置の記憶部に記憶する処理の少なくとも１つを実行する情報処理システムの制御方法。
（付記１４）
前記複数の情報処理装置のいずれかにおいて異常が検出されたときに、前記複数の情報処理装置のうちの正常データの復元を行う情報処理装置の通信部は、他の少なくとも１つ
の情報処理装置の通信部を介して、前記他の少なくとも１つの情報処理装置の記憶部に記憶された、前記正常データに対応する冗長データまたは前記冗長データと組み合わせて前記正常データを復元するためのデータを取得し、前記正常データを復元する付記１３に記載の情報処理システムの制御方法。
（付記１５）
前記複数の情報処理装置のそれぞれの通信部は、自装置の記憶部に記憶されるデータを複製した冗長データから自装置以外の情報処理装置の数に応じて分割した分割冗長ブロックを作成し、前記他の情報処理装置の通信部を介して前記他の情報処理装置の記憶部に記憶させる付記１３または１４に記載の情報処理システムの制御方法。
（付記１６）
前記複数の情報処理装置のいずれかにおいて異常が検出されたときに、前記複数の情報処理装置のうちの正常データの復元を行う情報処理装置の通信部は、他の情報処理装置の通信部を介して前記他の情報処理装置の記憶部された分割冗長ブロックを取得して前記正常データを復元する付記１５に記載の情報処理システムの制御方法。
（付記１７）
前記複数の情報処理装置は、環状の所定順に状態監視データを転送する環状伝達経路を形成し、
前記複数の情報処理装置のそれぞれの通信部は、前記環状経路おける送信元から受信した状態監視データに自装置の状態を追加して、環状伝達経路における宛先に送信し、
前記複数の情報処理装置の１つの通信部は、前記環状伝達経路の始端および終端となり、前記情報処理システムの状態を監視する付記１３から１６のいずれか１項に記載の情報処理システムの制御方法。
（付記１８）
前記複数の情報処理装置のそれぞれは、さらに外部記憶装置を備え、
前記複数の情報処理装置のそれぞれのプロセッサは、前記通信部を介した他の情報処理装置の記憶部から自装置の記憶部へのデータの取得後に取得したデータを外部記憶装置に保存し、前記通信部を介した他の情報処理装置へのデータ転送前に、前記他の情報処理装置の要求にしたがい外部記憶装置のデータを自装置の記憶部に読み出す付記１３から１７のいずれか１項に記載の情報処理システムの制御方法。
（付記１９）
プロセッサと、記憶部と、前記プロセッサの介在なしに前記記憶部にアクセスするとともに、ネットワークを通じて接続される、１以上の他の情報処理装置の通信部を介して前記他の情報処理装置にアクセスする通信部と、を備え、
前記プロセッサが前記記憶部の命令列にしたがって、
前記通信部を介して取得した前記１以上の他の情報処理装置の少なくとも１つが記憶するデータの冗長データを取得するステップと、
前記１以上の他の情報処理装置うち、前記冗長データを収集する情報処理装置から前記冗長データの転送要求を受け付けるステップと、
前記冗長データを収集する情報処理装置の前記ネットワーク上の宛先と前記冗長データの前記記憶部上の格納先とを指定して前記通信部に前記冗長データの転送処理を所定のタイミングで実行させるためのコマンドを登録するステップと、を実行する情報処理装置。
（付記２０）
プロセッサと、記憶部と、前記プロセッサの介在なしに前記記憶部にアクセスするとともに、ネットワークを通じて接続される他の情報処理装置の通信部を介して前記他の情報処理装置にアクセスする通信部と、を備える情報処理装置が、
前記通信部を介して取得した前記１以上の他の情報処理装置の少なくとも１つが記憶するデータの冗長データを取得するステップと、
前記１以上の他の情報処理装置うち、前記冗長データを収集する情報処理装置から前記冗長データの転送要求を受け付けるステップと、
前記冗長データを収集する情報処理装置の前記ネットワーク上の宛先と前記冗長データの前記記憶部上の格納先とを指定して前記通信部に前記冗長データの転送処理を所定のタイミングで実行させるためのコマンドを登録するステップと、を実行する情報処理方法。
（付記２１）
演算を行う演算処理装置と、データを記憶する記憶部と、前記演算処理装置の介在なしに前記記憶部にアクセスするとともに、ネットワークを通じて接続される他の情報処理装置の通信部を介して前記他の情報処理装置にアクセスする通信部と、を備える情報処理装置の制御プログラムにおいて、
前記情報処理装置に、
前記通信部を介して取得した前記１以上の他の情報処理装置のいずれかが有する記憶部が記憶するデータを冗長化した冗長データを取得させ、
前記１以上の他の情報処理装置うち、前記冗長データを収集する情報処理装置から前記冗長データの転送要求を受け付けさせ、
前記冗長データを収集する情報処理装置の前記ネットワーク上の宛先と前記冗長データの前記記憶部上の格納先とを指定して前記通信部に前記冗長データの転送処理を所定のタイミングで実行させるためのコマンドを登録させる情報処理装置の制御プログラム。
【０１０９】
＜記録媒体＞
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【０１１０】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスク、ＲＯＭ（リードオンリーメモリ）等がある。さらに、ＳＳＤ（Solid State Drive）は、コンピュータ等から取り外し可能な記録媒体としても、コンピュータ
等に固定された記録媒体としても利用可能である。
【符号の説明】
【０１１１】
１１    ＣＰＵ
１２    メモリ
１３    ＮＩＣ
１３Ａ  バスアダプタ
１３Ｂ  ネットワークアダプタ
１３Ｃ  コントローラ
１３Ｄ  メモリ
【図１】
0006369226.tif 000002
【図２】
0006369226.tif 000003
【図３】
0006369226.tif 000004
【図４】
0006369226.tif 000005
【図５】
0006369226.tif 000006
【図６】
0006369226.tif 000007
【図７】
0006369226.tif 000008
【図８】
0006369226.tif 000009
【図９】
0006369226.tif 000010
【図１０】
0006369226.tif 000011
【図１１】
0006369226.tif 000012
【図１２】
0006369226.tif 000013
【図１３】
0006369226.tif 000014
【図１４】
0006369226.tif 000015
【図１５】
0006369226.tif 000016
【図１６】
0006369226.tif 000017
【図１７】
0006369226.tif 000018
【図１８】
0006369226.tif 000019