(57)【要約】【課題】  ロックを取得するまでの時間に応じて、演算処理装置または通信装置のいずれかでリクエストを処理することで、リクエストの処理効率を向上する。【解決手段】  受信側情報処理装置は、プログラムを実行する演算処理装置と、ロック変数を所定アドレスに記憶する主記憶装置と、送信側情報処理装置から受信したリクエストを受信する受信部を有し、受信部がリクエストを受信し、かつ、所定アドレスにロック変数が記憶されていない場合、所定アドレスにロック変数を書き込んでリクエストの処理を実行するとともに、所定アドレスにロック変数が記憶されていることにより所定時間内に所定アドレスにロック変数を書き込むことができない場合、プログラムに割り込みを通知してリクエストの処理を演算処理装置に引き渡す通信装置を有する。【選択図】    図１
2016212614.tif 000002
【特許請求の範囲】
【請求項１】
送信側情報処理装置と前記送信側情報処理装置に接続される受信側情報処理装置とを有する情報処理システムにおいて、
前記受信側情報処理装置は、
プログラムを実行する演算処理装置と、
ロック変数を所定アドレスに記憶する主記憶装置と、
前記送信側情報処理装置から第１のリクエストを受信する受信部を有し、前記受信部が前記第１のリクエストを受信し、かつ、前記所定アドレスにロック変数が記憶されていない場合、前記所定アドレスにロック変数を書き込んで前記第１のリクエストの処理を実行するとともに、前記所定アドレスにロック変数が記憶されていることにより所定時間内に前記所定アドレスにロック変数を書き込むことができない場合、前記プログラムに割り込みを通知して前記第１のリクエストの処理を前記演算処理装置に引き渡す通信装置を有することを特徴とする情報処理システム。
【請求項２】
前記通信装置は、
前記第１のリクエストの処理を実行し、または、前記第１のリクエストの処理を前記演算処理装置に引き渡す第１のリクエスト処理部と、
前記受信部が前記送信側情報処理装置から前記第１のリクエストと異なる第２のリクエストを受信したことに基づいて、前記プログラムに割り込みを通知して前記第２のリクエストの処理を前記演算処理装置に引き渡す第２のリクエスト処理部を有することを特徴とする請求項１記載の情報処理システム。
【請求項３】
前記第１のリクエストの処理は、前記主記憶装置を制御する記憶制御部を介して前記主記憶装置が保持するデータにアクセスする処理を含み、
前記通信装置は、
前記第１のリクエスト処理部による前記主記憶装置へのアクセスに対する前記記憶制御部からの応答と、前記演算処理装置が実行した前記第１のリクエストおよび前記第２のリクエストに対する応答とを識別する応答識別部と、
前記第１のリクエストまたは前記第２のリクエストのいずれかに対する応答を前記応答識別部が識別したことに基づいて、前記送信側情報処理装置に送信する応答を生成する応答受付部を有し、
前記第１のリクエスト処理部は、前記第１のリクエストの処理に伴う前記主記憶装置へのアクセスに対する前記記憶制御部からの応答を前記応答識別部が識別したことに基づいて、前記送信側情報処理装置に送信する応答を生成することを特徴とする請求項２記載の情報処理システム。
【請求項４】
前記記憶制御部は、前記演算処理装置および前記通信装置に共通にアクセスされ、前記主記憶装置に保持されるデータの一部を保持するキャッシュメモリを有し、
前記通信装置は、前記キャッシュメモリのアクセスを制御するキャッシュインタフェースを有することを特徴とする請求項３記載の情報処理システム。
【請求項５】
前記第１のリクエスト処理部は、前記第１のリクエストと異なる第３のリクエストを前記受信部が受信した場合、前記ロック変数を参照することなく前記第３のリクエストの処理を実行することを特徴とする請求項１ないし請求項４のいずれか１項記載の情報処理システム。
【請求項６】
前記通信装置は、
前記演算処理装置が処理する前記第１のリクエストおよび前記第２のリクエストが格納される前記主記憶装置上の位置を示すリクエスト情報と、前記演算処理装置が処理した前記第１のリクエストの応答および前記第２のリクエストの応答が格納される前記主記憶装置上の位置を示す応答情報とを記憶し、前記第１のリクエスト処理部と、前記第２のリクエスト処理部と、前記演算処理装置とによりアクセスされる管理テーブルを有することを特徴とする請求項２ないし請求項５のいずれか１項記載の情報処理システム。
【請求項７】
前記通信装置は、
前記第１のリクエストおよび前記第２のリクエストを識別するとともに、識別した第１のリクエストを前記第１のリクエスト処理部に転送し、識別した第２のリクエストを前記第２のリクエスト処理部に転送するリクエスト識別部を有することを特徴とする請求項２ないし請求項６のいずれか１項記載の情報処理システム。
【請求項８】
前記通信装置は、前記リクエストの処理の実行が完了した場合、前記所定アドレスに書き込まれたロック変数を初期化することを特徴とする請求項１ないし請求項７のいずれか１項記載の情報処理システム。
【請求項９】
送信側情報処理装置に接続される情報処理装置において、
プログラムを実行する演算処理装置と、
ロック変数を所定アドレスに記憶する主記憶装置と、
前記送信側情報処理装置から受信したリクエストを受信する受信部を有し、前記受信部が前記リクエストを受信し、かつ、前記所定アドレスにロック変数が記憶されていない場合、前記所定アドレスにロック変数を書き込んで前記リクエストの処理を実行するとともに、前記所定アドレスにロック変数が記憶されていることにより所定時間内に前記所定アドレスにロック変数を書き込むことができない場合、前記プログラムに割り込みを通知して前記リクエストの処理を前記演算処理装置に引き渡す通信装置を有することを特徴とする情報処理装置。
【請求項１０】
送信側情報処理装置と、演算処理装置を含み前記送信側情報処理装置に接続される受信側情報処理装置とを有する情報処理システムの制御方法において、
前記受信側情報処理装置が有する通信装置が、
前記送信側情報処理装置からリクエストを受信し、
主記憶装置の所定アドレスにロック変数が記憶されていない場合、前記所定アドレスにロック変数を書き込んで前記リクエストの処理を実行し、
前記所定アドレスにロック変数が記憶されていることにより所定時間内に前記所定アドレスにロック変数を書き込むことができない場合、前記演算処理装置が実行するプログラムに割り込みを通知して前記リクエストの処理を前記演算処理装置に引き渡すことを特徴とする情報処理システムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、情報処理装置、及び、情報処理システムの制御方法に関する。
【背景技術】
【０００２】
情報処理装置の資源を有効に活用するために、ネットワークを介して接続された情報処理装置にプログラムを実行させる遠隔手続呼出（ＲＰＣ：Remote Procedure Call）と称される手法が提案されている。遠隔手続呼出では、情報処理装置の通信インタフェース部は、ネットワークを介して他の情報処理装置からリクエストを受信したことに基づいて、割り込み処理によりプロセッサにリクエストの処理プログラムを起動させ、リクエストに基づく処理を実行させる。
【０００３】
遠隔手続呼出のリクエストを送信する情報処理装置は、リクエストを送信後、遠隔手続呼出のリクエストの処理が完了するまでの間、遠隔手続呼出のプログラムを中断することで、別のプログラムを実行可能である（例えば、特許文献１参照）。
【０００４】
また、ソフト処理部とハード処理部とを有する画像処理装置は、利用者からの指示に基づいて、ソフト処理部またはハード処理部のうち処理時間の短い処理部で画像処理を実行する（例えば、特許文献２参照）。
【０００５】
不可分操作を指示するパケットを受信した通信インタフェース部が、連鎖する不可分操作をプロセッサに代わって実行することで、データの送受信毎に発生するプロセッサの割り込み処理などのオーバヘッドが解消される（例えば、特許文献３参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平６−２５９３８０号公報
【特許文献２】特開２００２−７４３３１号公報
【特許文献３】特開２００７−３１６９５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、情報処理装置がプロセッサまたは通信インタフェース部のいずれかが遠隔手続呼出のリクエストの処理を実行する場合、処理されるデータの一貫性を維持するために、ロックの取得操作等による排他処理が実行される。しかしながら、通信インタフェース部が遠隔手続呼出のリクエストの処理を実行する場合、ロックを取得するまでの待ち時間が長くなるほど、処理が完了するまでの時間が長くなる。通信インタフェース部は、リクエストの処理を完了するまでの間、他のリクエストの処理を保留する。このため、ロックを取得するまでの待ち時間が所定時間より長くなると、遠隔手続呼出のリクエストの処理をプロセッサで実行する場合に比べて処理効率は低下し、情報処理装置を搭載する情報処理システムの性能は低下する。
【０００８】
１つの側面では、本件開示の情報処理システム、情報処理装置、及び、情報処理システムの制御方法は、ロックを取得するまでの時間に応じて、演算処理装置または通信装置のいずれかでリクエストを処理することで、リクエストの処理効率を向上することを目的とする。
【課題を解決するための手段】
【０００９】
一つの観点によれば、送信側情報処理装置と送信側情報処理装置に接続される受信側情報処理装置とを有する情報処理システムにおいて、受信側情報処理装置は、プログラムを実行する演算処理装置と、ロック変数を所定アドレスに記憶する主記憶装置と、送信側情報処理装置から受信したリクエストを受信する受信部を有し、受信部がリクエストを受信し、かつ、所定アドレスにロック変数が記憶されていない場合、所定アドレスにロック変数を書き込んでリクエストの処理を実行するとともに、所定アドレスにロック変数が記憶されていることにより所定時間内に所定アドレスにロック変数を書き込むことができない場合、プログラムに割り込みを通知してリクエストの処理を演算処理装置に引き渡す通信装置を有する。
【００１０】
別の観点によれば、送信側情報処理装置に接続される情報処理装置は、プログラムを実行する演算処理装置と、ロック変数を所定アドレスに記憶する主記憶装置と、送信側情報処理装置から受信したリクエストを受信する受信部を有し、受信部がリクエストを受信し、かつ、所定アドレスにロック変数が記憶されていない場合、所定アドレスにロック変数を書き込んでリクエストの処理を実行するとともに、所定アドレスにロック変数が記憶されていることにより所定時間内に所定アドレスにロック変数を書き込むことができない場合、プログラムに割り込みを通知してリクエストの処理を演算処理装置に引き渡す通信装置を有する。
【００１１】
さらなる別の観点によれば、送信側情報処理装置と、演算処理装置を含み送信側情報処理装置に接続される受信側情報処理装置とを有する情報処理システムの制御方法は、受信側情報処理装置が有する通信装置が、送信側情報処理装置からリクエストを受信し、主記憶装置の所定アドレスにロック変数が記憶されていない場合、所定アドレスにロック変数を書き込んでリクエストの処理を実行し、所定アドレスにロック変数が記憶されていることにより所定時間内に所定アドレスにロック変数を書き込むことができない場合、演算処理装置が実行するプログラムに割り込みを通知してリクエストの処理を演算処理装置に引き渡す。
【発明の効果】
【００１２】
本件開示の情報処理システム、情報処理装置、及び、情報処理システムの制御方法は、ロックを取得するまでの時間に応じて、演算処理装置または通信装置のいずれかでリクエストを処理することで、リクエストの処理効率を向上することができる。
【図面の簡単な説明】
【００１３】
【図１】情報処理システム、情報処理装置、及び、情報処理システムの制御方法の一実施形態を示す図である。
【図２】図１に示す通信装置の動作の一例を示す図である。
【図３】情報処理システム、情報処理装置、及び、情報処理システムの制御方法の別の実施形態を示す図である。
【図４】図３に示す処理ノードにおけるＮＩＣ０の一例を示す図である。
【図５】図３に示すクライアントノードにおけるＮＩＣ１の一例を示す図である。
【図６】遠隔手続呼出のリクエストに基づいてアクセスされるデータ領域に格納されるデータのデータ構造の一例を示す図である。
【図７】図４に示すコネクション管理テーブルの一例を示す図である。
【図８】遠隔手続呼出に使用される関数の一例を示す図である。
【図９】図４に示す処理ノードのＮＩＣ０において、クライアントノードからパケットを受信した場合の動作の一例を示す図である。
【図１０】図４に示す処理ノードのＮＩＣ０において、ＣＰＵ０からパケットを受信した場合の動作の一例を示す図である。
【図１１】図５に示すクライアントノードのＮＩＣ１がパケットを受信した場合の動作の一例を示す図である。
【図１２】図３に示す情報処理システムの動作の一例を示す図である。
【図１３】図３に示す情報処理システムの動作の別の例を示す図である。
【図１４】図１３に示す動作の続きを示す図である。
【図１５】図３に示す情報処理システムの動作のさらなる別の例を示す図である。
【図１６】図３に示す情報処理システムにおいて、ＮＩＣ０がロックを取得するまでの待ち時間に対する遠隔手続処理のリクエストの処理時間の一例を示す図である。
【図１７】図３に示す情報処理システムにおいて、ＣＰＵ０による処理に対するスループットの一例を示す図である。
【発明を実施するための形態】
【００１４】
以下、図面を用いて実施形態を説明する。
【００１５】
図１は、情報処理システム、情報処理装置、及び、情報処理システムの制御方法の一実施形態を示す。図１に示す情報処理システムＳＹＳ１は、送信側情報処理装置１と送信側情報処理装置１に接続される受信側情報処理装置２とを有する。例えば、送信側情報処理装置１は、リクエストを発行するクライアントノード等のサーバであり、受信側情報処理装置２は、ネットワークを介してクライアントノードに接続され、リクエストを処理する処理ノード等のサーバである。すなわち、情報処理システムＳＹＳ１は、遠隔手続呼出によりリクエストを処理する機能を有する分散処理システムとして動作する。
【００１６】
受信側情報処理装置２は、プログラムＰＧＭを実行する演算処理装置３と、プログラムＰＧＭおよびロック変数ＬＯＣＫを所定アドレスに記憶する主記憶装置４と、送信側情報処理装置１からのリクエストを受信する受信部ＲＳＶを有する通信装置５とを有する。通信装置５は、受信部ＲＳＶがリクエストを受信し、かつ、所定アドレスにロック変数ＬＯＣＫが記憶されていない場合、所定アドレスにロック変数ＬＯＣＫを書き込んでリクエストの処理を実行する。通信装置５は、リクエストの処理が完了した後、リクエストに対する応答を送信側情報処理装置１に送信する。なお、ロック変数ＬＯＣＫが記憶されていない場合にロック変数ＬＯＣＫを書き込む処理は、ロックの取得とも称される。
【００１７】
通信装置５は、受信部ＲＳＶがリクエストを受信し、かつ、所定アドレスにロック変数ＬＯＣＫが記憶されている場合、ロック変数ＬＯＣＫが初期化されるまで、リクエストの処理の実行を待機する。ロック変数ＬＯＣＫは、リクエストの処理を演算処理装置３または通信装置５により排他的に実行するために使用される。
【００１８】
以下では、ロック変数ＬＯＣＫが書き込まれた状態は、ロック状態とも称され、ロック変数ＬＯＣＫが書き込まれていない初期化された状態は、解除状態とも称される。リクエストの処理は、解除状態のロック変数ＬＯＣＫをロック状態に設定したデバイス（演算処理装置３または通信装置５）により実行される。
【００１９】
一方、通信装置５は、所定アドレスにロック変数ＬＯＣＫが既に記憶されていることにより（ロック状態）、所定時間内に所定アドレスにロック変数ＬＯＣＫを書き込むことができない場合、演算処理装置３が実行しているプログラムＰＧＭに割り込みを通知する。演算処理装置３は、割り込みの通知に基づいて割り込み処理を実行し、プログラムＰＧＭを実行することでリクエストを処理する。すなわち、通信装置５は、リクエストの受信から所定時間内にロック変数ＬＯＣＫがロック状態から解除状態に変化しない場合、リクエストの処理を演算処理装置３に引き渡す。演算処理装置３は、通信装置５から引き渡されたリクエストの処理を実行し、リクエストに対する応答を通信装置５に送信する。通信装置５は、演算処理装置３から受信したリクエストに対する応答を送信側情報処理装置１に送信する。
【００２０】
ロック変数ＬＯＣＫのロック状態が所定時間以上続く場合に、リクエストの処理を演算処理装置３に引き渡すことで、通信装置５は、受信部ＲＣＶが受信した他のリクエストの処理を実行でき、受信部ＲＣＶは、新たなリクエストを受信できる。これにより、所定時間を設定せずにロックを取得するまでリクエストの処理を待つ場合に比べて、リクエストの処理効率を向上することができ、情報処理システムＳＹＳ１の処理性能を向上することができる。
【００２１】
さらに、ロック変数ＬＯＣＫを所定時間内に書き込める場合、通信装置５は、リクエストの処理を自ら実行する。これにより、演算処理装置３による割り込み処理等に掛かる時間を節約することができ、リクエストの処理を効率的に実行できる。
【００２２】
これに対して、通信装置５が所定時間を設定せずにロックを取得するまでリクエストの処理を待つ場合、ロックを取得するまでの時間が掛かると、受信部ＲＣＶによる新たなリクエストの受信は困難になり、通信装置５はストール状態に陥るおそれがある。これにより、情報処理システムＳＹＳ１の処理性能は、所定時間を設定してリクエストの処理を演算処理装置３に引き渡す場合に比べて低下する。また、遠隔手続処理のリクエストの処理が常に演算処理装置３で実行される場合、通信装置５は、リクエストを受信する毎に演算処理装置３に割り込みを通知し、演算処理装置３は、リクエストの処理毎に割り込み処理を実行する。割り込み処理を伴う演算処理装置３でのリクエストの処理の効率は、通信装置５を用いてリクエストの処理を実行する場合に比べて低下する。
【００２３】
図２は、図１に示す通信装置５の動作の例を示す。図２に示す動作は、通信装置５のハードウェアにより実行されてもよく、通信装置５が実行するソフトウェアにより実行されてもよい。図２は、情報処理システムＳＹＳ１の制御方法を示す。
【００２４】
まず、ステップＳ１０において、通信装置５は、送信側情報処理装置１からのリクエストの受信を待ち、リクエストを受信した場合、動作をステップＳ１２に移行する。ステップＳ１２において、通信装置５は、ロック変数ＬＯＣＫが主記憶装置４に記憶されている場合（ロック状態）、動作をステップＳ２０に移行し、ロック変数ＬＯＣＫが主記憶装置４に記憶されていない場合（解除状態）、動作をステップＳ１４に移行する。
【００２５】
ステップＳ１４において、通信装置５は、ロック変数ＬＯＣＫを書き込むことで解除状態からロック状態に変更する。次に、ステップＳ１６において、通信装置５は、送信側情報処理装置１から受信した遠隔手続処理のリクエストの処理を実行し、リクエストの応答を送信側情報処理装置１に送信する。例えば、リクエストの処理は、リクエストに基づく主記憶装置４へのデータの書き込み、または、リクエストに基づく主記憶装置７からのデータの読み出しである。なお、リクエストの処理は、演算等のデータ処理を含んでもよい。次に、ステップＳ１８において、通信装置５は、ロック変数ＬＯＣＫを初期化して解除状態に設定し、動作を終了する。すなわち、通信装置５は、再び、ステップＳ１０でリクエストの受信を待つ。リクエストに対する処理が完了した後、ロック変数ＬＯＣＫを初期化することで、他のリクエストの処理を通信装置５または演算処理装置３により実行可能にすることができる。
【００２６】
一方、ロック状態を判定した場合、ステップＳ２０において、通信装置５は、リクエストの受信から所定時間が経過したか否かを判定する。通信装置５は、所定時間が経過した場合、ロックの取得が困難であると判断し、動作をステップＳ２２に移行し、所定時間が経過していない場合、動作をステップＳ１２に戻す。
【００２７】
ステップＳ２２において、通信装置５は、演算処理装置３が実行しているプログラムＰＧＭに割り込みを通知することで、リクエストの処理を演算処理装置３に引き渡し、動作を終了する。すなわち、通信装置５は、再び、ステップＳ１０でリクエストの受信を待つ。
【００２８】
以上、図１および図２に示す実施形態では、ロックを取得するまでの時間に応じて、演算処理装置３または通信装置５のいずれかでリクエストを処理することで、リクエストの処理効率を向上することができる。これにより、演算処理装置３または通信装置５のいずれかでリクエストを排他的に処理する場合、情報処理システムＳＹＳ１の性能が低下することを抑止することができる。また、演算処理装置３および通信装置５は、ロックを取得した後にリクエストの処理を排他的に実行するため、処理されるデータの一貫性を保証することができる。
【００２９】
図３は、情報処理システム、情報処理装置、及び、情報処理システムの制御方法の別の実施形態を示す。図３に示す情報処理システムＳＹＳ２は、ネットワークＮＷを介して互いに接続されるサーバＳＶ（ＳＶ０、ＳＶ１）を有する。なお、ネットワークＮＷには、他のサーバＳＶ２、ＳＶ３が接続されてもよい。
【００３０】
サーバＳＶ０は、サーバＳＶ１からのリクエストに基づいてデータ処理等を実行し、データ処理等の結果を応答としてサーバＳＶ１に送信する処理ノードである。サーバＳＶ１は、ネットワークＮＷを介してサーバＳＶ０にリクエストを送信し、リクエストに対する応答をサーバＳＶ０から受信するクライアントノードである。すなわち、情報処理システムＳＹＳ２は、遠隔手続呼出によりリクエストを処理する機能を有する分散処理システムとして動作する。サーバＳＶ０は、受信側情報処理装置の一例であり、サーバＳＶ１は、送信側情報処理装置の一例である。以下の説明では、サーバＳＶ０は、処理ノードＳＶ０とも称され、サーバＳＶ１は、クライアントノードＳＶ１とも称される。
【００３１】
サーバＳＶ０は、サーバＳＶ１から受信するリクエストを処理するプログラムＰＧＭを実行するＣＰＵ０（Central Processing Unit）等のプロセッサを有する。また、サーバＳＶ０は、ＣＰＵ０に接続されたＮＩＣ０（Network Interface Controller）およびメインメモリＭＭ０を有する。ＣＰＵ０は演算処理装置の一例であり、メインメモリＭＭ０は主記憶装置の一例であり、ＮＩＣ０は通信装置の一例である。
【００３２】
ＣＰＵ０は、バスＢＵＳ０を介して互いに接続された演算部ＯＰＵ０（ＣＰＵコア）、キャッシュコヒーレントインタフェースＣＣＩＦ０１、キャッシュメモリＣＭ０およびメモリコントローラＭＣＮＴ０を有する。演算部ＯＰＵ０は、メインメモリＭＭ０からキャッシュメモリＣＭ０に転送されたプログラムＰＧＭを実行することで、キャッシュメモリＣＭ０に格納されたデータを用いた演算処理を実行する。また、演算部ＯＰＵ０は、プログラムＰＧＭを実行することで、ＮＩＣ０から引き渡されたリクエストの処理を実行する。キャッシュコヒーレントインタフェースＣＣＩＦ０１は、バスＢＵＳ０を介してキャッシュメモリＣＭ０に接続されるとともに、ＮＩＣ０のキャッシュコヒーレントインタフェースＣＣＩＦ００に接続される。
【００３３】
キャッシュコヒーレントインタフェースＣＣＩＦ０１は、ＮＩＣ０からキャッシュメモリＣＭ０にアクセス（例えば、カーネルバイパス転送）するためのメモリインタフェースである。このため、ＮＩＣ０からキャッシュコヒーレントインタフェースＣＣＩＦ０１を介したキャッシュメモリＣＭ０へのアクセスは、演算部ＯＰＵ０からのキャッシュメモリＣＭ０へのアクセスと同様の性能で実行される。キャッシュコヒーレントインタフェースＣＣＩＦ０１により、ＮＩＣ０からキャッシュメモリＣＭ０に直接アクセス可能にすることで、ＣＰＵ０を介してアクセスする場合に比べて、データ等を高速にアクセスすることができる。また、キャッシュコヒーレントインタフェースＣＣＩＦ０１を介してＮＩＣ０からキャッシュメモリＣＭ０にアクセスすることで、キャッシュメモリＣＭ０に保持されるデータとメインメモリＭＭ０に保持されるデータとのコヒーレンシを維持することができる。
【００３４】
キャッシュメモリＣＭ０は、メインメモリＭＭ０に格納されたデータおよび命令コードのうち、演算部ＯＰＵ０で使用するデータおよび命令コードの一部を保持する。また、キャッシュメモリＣＭ０は、メインメモリＭＭ０に格納されたロック変数ＬＯＣＫ、リクエストキューＲＱの内容および完了キューＣＱの内容の少なくとも一部を保持する。なお、演算部ＯＰＵ０またはＮＩＣ０により読み出しアクセスされるデータ等がキャッシュメモリＣＭ０内に存在しない場合がある（キャッシュミス）。キャッシュミスが発生した場合、キャッシュメモリＣＭ０は、メインメモリＭＭ０からデータ等を読み出して記憶領域に格納した後、演算部ＯＰＵ０またはＮＩＣ０にデータ等を出力する。
【００３５】
メモリコントローラＭＣＮＴ０は、キャッシュメモリＣＭ０から出力される読み出しアクセスリクエストに基づいて、メインメモリＭＭ０からデータ等を読み出してキャッシュメモリＣＭ０に出力する。また、メモリコントローラＭＣＮＴ０は、キャッシュメモリＣＭ０から出力される書き込みアクセスリクエストに基づいて、キャッシュメモリＣＭ０から転送されるデータ等をメインメモリＭＭ０に書き込む。
【００３６】
ＮＩＣ０は、通信処理部ＣＯＭ０、キャッシュコヒーレントインタフェースＣＣＩＦ００および入出力ポートＩＯＰ０を有する。通信処理部ＣＯＭ０は、入出力ポートＩＯＰ０から受信するリクエストをキャッシュコヒーレントインタフェースＣＣＩＦ００、ＣＣＩＦ０１を介してＣＰＵ０に送信する。また、通信処理部ＣＯＭ０は、キャッシュコヒーレントインタフェースＣＣＩＦ００、ＣＣＩＦ０１を介してＣＰＵ０から受信するリクエストの応答を、入出力ポートＩＯＰ０に出力する。キャッシュコヒーレントインタフェースＣＣＩＦ００は、キャッシュコヒーレントインタフェースＣＣＩＦ０１と同様の機能を有し、ＮＩＣ０によるキャッシュメモリＭＣ０へのアクセスを可能にする。キャッシュコヒーレントインタフェースＣＣＩＦ００、ＣＣＩＦ０１は、キャッシュインタフェースの一例である。
【００３７】
入出力ポートＩＯＰ０は、ネットワークＮＷを介して受信するリクエストを通信処理部ＣＯＭ０に出力し、通信処理部ＣＯＭ０から出力されるリクエストの応答を、ネットワークＮＷに出力する。ＮＩＣ０の例は、図４に示される。
【００３８】
メインメモリＭＭ０には、ＣＰＵ０が実行するプログラムＰＧＭを格納する領域と、リクエストキューＲＱおよび完了キューＣＱとが所定のアドレスに割り当てられる。また、メインメモリＭＭ０には、サーバＳＶ０等からのリクエストに基づいて処理されるデータを格納するデータ領域ＤＡＴＡと、ロック変数ＬＯＣＫを記憶する領域とが所定のアドレスに割り当てられる。ロック変数ＬＯＣＫは、図１に示すロック変数ＬＯＣＫと同様に、リクエストの処理をＣＰＵ０とＮＩＣ０とで排他的に実行するために使用される。
【００３９】
リクエストキューＲＱには、サーバＳＶ０からのリクエストがＮＩＣ０により書き込まれる。リクエストキューＲＱが保持するリクエストは、ＣＰＵ０により取り出され、ＣＰＵ０により処理される。完了キューＣＱには、リクエストの応答がＣＰＵ０により書き込まれる。完了キューＣＱが保持するリクエストの応答は、ＮＩＣ０により取り出される。リクエストキューＲＱおよび完了キューＣＱの例は、図７に示される。
【００４０】
上述したように、メインメモリＭＭ０内のプログラムＰＧＭ、データ領域ＤＡＴＡ内のデータ、ロック変数ＬＯＣＫ、リクエストキューＲＱの内容および完了キューＣＱの内容の少なくとも一部は、キャッシュメモリＣＭ０にも保持される。そして、ＣＰＵ０およびＮＩＣ０は、メインメモリＭＭ０ではなく、キャッシュメモリＣＭ０にアクセスし、メインメモリＭＭ０は、キャッシュメモリＣＭ０によりアクセスされる。
【００４１】
サーバＳＶ１は、サーバＳＶ０と同様に、ＣＰＵ１と、ＣＰＵ１に接続されたＮＩＣ１およびメインメモリＭＭ１とを有する。ＣＰＵ１は、メインメモリＭＭ１（キャッシュメモリＭＣ１）上のプログラムを実行することで、サーバＳＶ０に送信するリクエストを生成し、サーバＳＶ０から受信するリクエストの応答を処理する。ＣＰＵ１は、実行するプログラムが異なることを除き、サーバＳＶ０のＣＰＵ０と同様の構成を有する。すなわち、ＣＰＵ１は、バスＢＵＳ１を介して互いに接続された演算部ＯＰＵ１（ＣＰＵコア）、キャッシュコヒーレントインタフェースＣＣＩＦ１１、キャッシュメモリＣＭ１およびメモリコントローラＭＣＮＴ１を有する。キャッシュコヒーレントインタフェースＣＣＩＦ１１は、キャッシュコヒーレントインタフェースＣＣＩＦ０１と同様の機能を有する。
【００４２】
ＮＩＣ１は、通信処理部ＣＯＭ１、キャッシュコヒーレントインタフェースＣＣＩＦ１０および入出力ポートＩＯＰ１を有する。ＮＩＣ１は、通信処理部ＣＯＭ１の機能が通信処理部ＣＯＭ０の機能と相違することを除き、ＮＩＣ０と同様の構成を有する。ＮＩＣ１の例は、図５に示される。
【００４３】
通信処理部ＣＯＭ１は、キャッシュコヒーレントインタフェースＣＣＩＦ１０、ＣＣＩＦ１１を介してＣＰＵ１から受信するリクエストを、入出力ポートＩＯＰ１に出力する。キャッシュコヒーレントインタフェースＣＣＩＦ１０は、キャッシュコヒーレントインタフェースＣＣＩＦ００と同様の機能を有する。また、通信処理部ＣＯＭ１は、入出力ポートＩＯＰ１から受信するリクエストの応答をキャッシュコヒーレントインタフェースＣＣＩＦ１０、ＣＣＩＦ１１を介してＣＰＵ１に送信する。入出力ポートＩＯＰ１は、通信処理部ＣＯＭ１から出力されるリクエストを、ネットワークＮＷを介してサーバＳＶ０に出力し、ネットワークＮＷを介してサーバＳＶ０から受信するリクエストの応答を通信処理部ＣＯＭ１に出力する。
【００４４】
図４は、図３に示す処理ノードＳＶ０におけるＮＩＣ０の一例を示す。ＮＩＣ０の通信処理部ＣＯＭ０は、受信バッファＲＢＵＦ００、デコーダ部ＤＥＣ００、遠隔手続処理部ＲＣＰＣＮＴ、リクエスト処理部ＲＣＮＴ０、調停部ＡＲＢ０１、送信バッファＴＢＵＦ０１およびコネクション管理テーブルＣＭＴＢＬを有する。また、通信処理部ＣＯＭ０は、受信バッファＲＢＵＦ０１、デコーダ部ＤＥＣ０１、レジスタインタフェースＲＥＧＩＦ０、レジスタＲＥＧ０、応答受付部ＣＲＣＶ、調停部ＡＲＢ００および送信バッファＴＢＵＦ００を有する。コネクション管理テーブルＣＭＴＢＬは、ＣＰＵ０によりアクセス可能なＩ／Ｏ(Input/Output)空間に割り当てられる。コネクション管理テーブルＣＭＴＢＬの例は、図７に示される。
【００４５】
受信バッファＲＢＵＦ００は、クライアントノードＳＶ１からのリクエストを受信する受信部の一例であり、入出力ポートＩＯＰ０から受信するリクエストを順次保持する複数の保持部を有する。デコーダ部ＤＥＣ００は、受信バッファＲＢＵＦ００に保持されたリクエストを順次取り出し、取り出したリクエストをデコードする。デコーダ部ＤＥＣ００は、リクエストが遠隔手続呼出のリクエストである場合、リクエストを遠隔手続処理部ＲＣＰＣＮＴに出力し、リクエストが遠隔手続呼出以外のリクエストである場合、リクエストをリクエスト処理部ＲＣＮＴ０に出力する。遠隔手続呼出のリクエストは、第１のリクエストの一例であり、遠隔手続呼出以外のリクエストは、第２のリクエストの一例である。デコーダ部ＤＥＣ００に、リクエストの種類を識別し、識別結果に基づいてリクエストを振り分ける機能を持たせることで、遠隔手続処理部ＲＣＰＣＮＴおよびリクエスト処理部ＲＣＮＴ０において、リクエストの種類毎に処理を実行することができる。デコーダ部ＤＥＣ００は、クライアントノードＳＶ１からのリクエストを識別するリクエスト識別部の一例である。
【００４６】
遠隔手続処理部ＲＣＰＣＮＴは、デコーダＤＥＣ００からリクエストを受信した場合、コネクション管理テーブルＣＭＴＢＬにアクセスし、リクエストの有効性を判定する。遠隔手続処理部ＲＣＰＣＮＴは、リクエストが有効な場合で排他処理を実行する場合、ロックを取得する操作を実行し、ロックが取得できた場合、リクエストを自ら処理するためのメモリアクセスリクエスト等のパケットを調停部ＡＲＢ０１に出力する。ロックを取得する操作の例は、図９、図１２、図１３で説明される。
【００４７】
遠隔手続処理部ＲＣＰＣＮＴが自らリクエストを処理することで、割り込み処理によりＣＰＵ０にリクエストを処理させる場合に比べて、処理時間を短縮することができる。一方、遠隔手続処理部ＲＣＰＣＮＴは、所定時間内にロックを取得しなかった場合、リクエストの処理を開始するまでの時間が長くなることを避けるため、リクエストをＣＰＵ０に処理させるためのパケット（割り込み通知）を調停部ＡＲＢ０１に出力する。なお、遠隔手続処理部ＲＣＰＣＮＴは、ロックを取得する操作において、図３に示すロック変数ＬＯＣＫの値を読み出すパケット、またはロック変数ＬＯＣＫを書き替えるパケットを生成し、生成したパケットを調停部ＡＲＢ０１に出力する。
【００４８】
また、遠隔手続処理部ＲＣＰＣＮＴは、リクエストが有効な場合で、かつ排他処理を実行しない場合、ロックの取得操作を実行することなく、リクエストを自ら処理するためのメモリアクセスリクエスト等のパケットを調停部ＡＲＢ０１に出力する。例えば、リクエストに基づいて実行される書き込み処理は、データの変更を伴う排他処理であるため、書き込み処理前にロックが取得される。一方、リクエストに基づいて実行される読み出し処理は、データの変更を伴わないため排他処理でなく、ロックは取得されない。排他処理を実行しないリクエストは、ロック変数ＬＯＣＫを参照することなく遠隔手続処理部ＲＣＰＣＮＴにより処理が実行される第３のリクエストの一例である。
【００４９】
遠隔手続処理部ＲＣＰＣＮＴは、デコーダ部ＤＥＣ０１から遠隔手続呼出のリクエストに対する応答を受信した場合、受信した応答をクライアントノードＳＶ１に送信するために調停部ＡＲＢ００に出力する。なお、遠隔手続処理部ＲＣＰＣＮＴは、ハードウェアにより実現されてもよく、遠隔手続処理部ＲＣＰＣＮＴの機能を実行する遠隔手続処理プログラム（ソフトウェア）により実現されてもよい。遠隔手続処理部ＲＣＰＣＮＴがソフトウェアにより実現される場合、遠隔手続処理部ＲＣＰＣＮＴは、遠隔手続処理プログラムを実行するＣＰＵ等のプロセッサを有する。遠隔手続処理部ＲＣＰＣＮＴは、第１のリクエスト処理部の一例である。
【００５０】
リクエスト処理部ＲＣＮＴ０は、デコーダ部ＤＥＣ００から遠隔手続呼出以外のリクエストを受信した場合、図３に示すリクエストキューＲＱにリクエストを格納するパケットを生成し、生成したパケットを調停部ＡＲＢ０１に出力する。リクエスト処理部ＲＣＮＴ０は、リクエストを格納するリクエストキューＲＱの位置を検出するためにコネクション管理テーブルＣＭＴＢＬを参照する。リクエスト処理部ＲＣＮＴ０は、リクエストキューＲＱにリクエストを格納した後、リクエストをＣＰＵ０に処理させるためのパケット（割り込み通知）を調停部ＡＲＢ０１に出力する。リクエスト処理部ＲＣＮＴ０は、第２のリクエスト処理部の一例である。リクエストの種類（遠隔手続呼出または遠隔手続呼出以外）に応じて、遠隔手続処理部ＲＣＰＣＮＴまたはリクエスト処理部ＲＣＮＴ０で処理を実行することで、１つの処理部でリクエストを処理する場合に比べて、リクエストの制御を容易にすることができる。この結果、リクエストを処理する回路を設計しやすくなり、回路に不具合等が発生する可能性を低くすることができる。
【００５１】
調停部ＡＲＢ０１は、遠隔手続処理部ＲＣＰＣＮＴ、リクエスト処理部ＲＣＮＴ０、レジスタインタフェースＲＥＧＩＦ０および応答受付部ＣＲＣＶからのパケットを調停により順次選択し、選択したパケットを送信バッファＴＢＵＦ０１に出力する。送信バッファＴＢＵＦ０１は、調停部ＡＲＢ０１から受信するパケットを順次保持する複数の保持部を有する。送信バッファＴＢＵＦ０１は、保持したパケットを順次キャッシュコヒーレントインタフェースＣＣＩＦ００を介してＣＰＵ０に出力する。受信バッファＲＢＵＦ０１は、キャッシュコヒーレントインタフェースＣＣＩＦ００を介してＣＰＵ０から受信するパケットを順次保持する複数の保持部を有する。
【００５２】
デコーダ部ＤＥＣ０１は、受信バッファＲＢＵＦ０１に保持されたパケットを順次取り出し、取り出したパケットをデコードする。デコーダ部ＤＥＣ０１は、パケットが遠隔手続処理部ＲＣＰＣＮＴで処理する遠隔手続呼出に関するものである場合（応答またはロック取得処理等）、パケットを遠隔手続処理部ＲＣＰＣＮＴに出力する。デコーダ部ＤＥＣ０１は、パケットがリクエスト処理部ＲＣＮＴ０からのリクエストに対する応答または遠隔手続処理部ＲＣＰＣＮＴからＣＰＵ０に引き渡した遠隔手続呼出のリクエストに対する応答を含む場合、パケットを応答受付部ＣＲＣＶに出力する。また、デコーダ部ＤＥＣ０１は、パケットがコネクション管理テーブルＣＭＴＢＬまたはレジスタＲＥＧ０にアクセスするためのリクエストを含む場合、パケットをレジスタインタフェースＲＥＧＩＦ０に出力する。デコーダ部ＤＥＣ０１に、リクエストに対する応答の種類を識別し、識別結果に基づいて応答を振り分ける機能を持たせることで、遠隔手続処理部ＲＣＰＣＮＴおよび応答受付部ＣＲＣＶの各々において、応答の処理を実行することができる。また、遠隔手続処理部ＲＣＰＣＮＴからＣＰＵ０に引き渡した遠隔手続呼出のリクエストに対する応答を、応答受付部ＣＲＣＶに出力することができる。この結果、遠隔手続呼出のリクエストに対するＣＰＵ０からの応答を、応答受付部ＣＲＣＶのみにより処理することができ、応答を遠隔手続処理部ＲＣＰＣＮＴと応答受付部ＣＲＣＶに分散して処理する場合に比べて、制御を容易にすることができる。デコーダ部ＤＥＣ０１は、ＣＰＵ０からの応答を識別する応答識別部の一例である。
【００５３】
レジスタインタフェースＲＥＧＩＦ０は、デコーダ部ＤＥＣ０１でデコードされたＣＰＵ０からのパケットに基づいてコネクション管理テーブルＣＭＴＢＬまたはレジスタＲＥＧ０にアクセスし、アクセス結果に基づいて応答パケットを生成する。そして、レジスタインタフェースＲＥＧＩＦ０は、生成した応答パケットを調停部ＡＲＢ０１を介してＣＰＵ０に出力する。なお、コネクション管理テーブルＣＭＴＢＬおよびレジスタＲＥＧ０は、ＣＰＵ０によりアクセス可能なＩ／Ｏ（Input/Output）空間に割り当てられる。
【００５４】
応答受付部ＣＲＣＶは、ＣＰＵ０により処理されたリクエストの応答（完了通知）を含むパケットをデコーダ部ＤＥＣ０１から受信した場合、完了キューＣＱに格納されたリクエストに対する応答を取り出すパケットを生成する。そして、応答受付部ＣＲＣＶは、生成したパケットを調停部ＡＲＢ０１に出力する。応答受付部ＣＲＣＶは、完了キューＣＱにおいて応答を取り出す位置を検出するためにコネクション管理テーブルＣＭＴＢＬを参照する。応答受付部ＣＲＣＶは、完了キューＣＱから取り出された応答（データ等）を含むパケットをデコーダ部ＤＥＣ０１から受信した場合、受信した応答を調停部ＡＲＢ００に出力する。
【００５５】
調停部ＡＲＢ００は、遠隔手続処理部ＲＣＰＣＮＴおよび応答受付部ＣＲＣＶからの応答を調停により順次選択し、選択した応答を送信バッファＴＢＵＦ００に出力する。送信バッファＴＢＵＦ００は、調停部ＡＲＢ００から受信する応答を順次保持する複数の保持部を有する。送信バッファＴＢＵＦ００は、保持した応答を順次入出力ポートＩＯＰ０およびネットワークＮＷを介して、要求元のサーバＳＶ１等に出力する。
【００５６】
図５は、図３に示すクライアントノードＳＶ１におけるＮＩＣ１の一例を示す。ＮＩＣ１の通信処理部ＣＯＭ１は、通信処理部ＣＯＭ０と同様に、受信バッファＲＢＵＦ１０、ＲＢＵＦ１１、送信バッファＴＢＵＦ１０、ＴＢＵＦ１１、デコーダ部ＤＥＣ１０、ＤＥＣ１１、調停部ＡＲＢ１０、ＡＲＢ１１および応答処理部ＣＣＮＴ１を有する。また、通信処理部ＣＯＭ１は、通信処理部ＣＯＭ０と同様に、レジスタインタフェースＲＥＧＩＦ１およびレジスタＲＥＧ１を有し、さらに要求受付部ＲＱＲＣＶを有する。通信処理部ＣＯＭ１において、通信処理部ＣＯＭ０と同様の要素には、末尾の１桁または２桁の数字を除き、通信処理部ＣＯＭ０の要素と同じ符号が付される。
【００５７】
受信バッファＲＢＵＦ１０、ＲＢＵＦ１１および送信バッファＴＢＵＦ１０、ＴＢＵＦ１１のそれぞれの機能は、図４に示す受信バッファＲＢＵＦ００、ＲＢＵＦ０１および送信バッファＴＢＵＦ００、ＴＢＵＦ０１のそれぞれの機能と同様である。レジスタインタフェースＲＥＧＩＦ１は、レジスタＲＥＧ１にアクセスする点で、図４に示すレジスタインタフェースＲＥＧＩＦ０と同様の機能を有する。
【００５８】
デコーダ部ＤＥＣ１１は、受信バッファＲＢＵＦ１１に保持されたＣＰＵ１からのリクエストを含むパケットを順次取り出し、取り出したパケットをデコードする。デコーダ部ＤＥＣ１１は、パケットが処理ノードＳＶ０に対するリクエストを含む場合、パケットを要求受付部ＲＱＲＣＶに出力する。デコーダ部ＤＥＣ１１は、パケットがレジスタＲＥＧ１にアクセスするためのリクエストを含む場合、パケットをレジスタインタフェースＲＥＧＩＦ１に出力する。
【００５９】
要求受付部ＲＱＲＣＶは、デコーダ部ＤＥＣ１１からのパケットに含まれるリクエストを調停部ＡＲＢ１０に出力する。調停部ＡＲＢ１０は、要求受付部ＲＱＲＣＶからのリクエストを、送信バッファＴＢＵＦ１０に出力する。なお、調停部ＡＲＢ１０は、要求受付部ＲＱＲＣＶからのリクエストと、図示しない他の要素から受けるリクエストとを調停により順次選択してもよい。
【００６０】
デコーダＤＥＣ１０は、受信バッファＲＢＵＦ１０に保持された処理ノードＳＶ０からの応答を順次取り出し、取り出した応答をデコードし、デコードした応答を応答処理部ＣＣＮＴ１に出力する。応答処理部ＣＣＮＴ１は、デコーダ部ＤＥＣ１０からの応答に基づいてパケットを生成し、生成したパケットを調停部ＡＲＢ１１に出力する。
【００６１】
調停部ＡＲＢ１１は、応答処理部ＣＣＮＴ１およびレジスタインタフェースＲＥＧＩＦ１からのパケットを調停により順次選択し、選択したパケットを、送信バッファＴＢＵＦ１１を介してＣＰＵ１に出力する。
【００６２】
図６は、遠隔手続呼出のリクエストに基づいてアクセスされるデータ領域ＤＡＴＡに格納されるデータのデータ構造の一例を示す。図６は、図８に示す関数（ｐｕｓｈ＿ｂａｃｋ（）、ｐｕｓｈ＿ｆｒｏｎｔ（）、ｉｎｓｅｒｔ（）等）を用いて、データが追加または挿入された状態を示す。データ領域ＤＡＴＡには、複数のデータ領域ＤＴ（ＤＴ１、ＤＴ２、ＤＴ３、...）が割り当てられる。ＣＰＵ０は、データを処理するデータ処理プログラムを、データ領域ＤＴ毎（１つのデータ構造毎）に実行し、またはデータ処理プログラムを所定数のデータ領域ＤＴ毎に実行する。
【００６３】
各データ領域ＤＴに格納される遠隔手続呼出の対象となる所定数のデータ（ａ、ｂ、ｃ等）は、１つ前に接続されたデータを指すポインタｐｒｅｖおよび１つ後に接続されたデータを指すポインタｎｅｘｔにより順次に連結される。そして、各データ領域ＤＴには、標準Ｃ＋＋ライブラリ（ｓｔｄ：：ｌｉｓｔ）等でサポートされる双方向連結リストのデータ構造が構築される。
【００６４】
各データ領域ＤＴの先頭物理アドレスＤＰＡは、図７に示すコネクション管理テーブルＣＭＴＢＬに登録される。また、ロック変数ＬＯＣＫは、データ領域ＤＴのそれぞれに対応して設けられる。各データ領域ＤＴは、ロック変数ＬＯＣＫにより排他的にアクセスされるため、マルチスレッドによるアクセスにも対応することができる。すなわち、図６に示す各データ領域ＤＴは、スレッドセーフなデータ構造を有する。
【００６５】
図７は、図４に示すコネクション管理テーブルＣＭＴＢＬの一例を示す。コネクション管理テーブルＣＭＴＢＬは、コネクション番号ＣＩＤ、図６に示すデータ領域ＤＴの先頭物理アドレスＰＤＡおよびアクセスキーＡＫＥＹが格納される領域を含むｎ個のエントリＥＮＴ（ＥＮＴ０−ＥＮＴｎ−１；ｎは２以上の整数）を有する。各エントリＥＮＴは、リクエストキューＲＱの先頭物理アドレスＲＱＰＡ、リクエストキューＲＱのライトポインタＲＱＷＰおよびリクエストキューＲＱのリードポインタＲＱＲＰが格納される領域を有する。また、各エントリＥＮＴは、完了キューＣＱの先頭物理アドレスＣＱＰＡ、完了キューＣＱのライトポインタＣＱＷＰおよび完了キューＣＱのリードポインタＣＱＲＰが格納される領域を有する。先頭物理アドレスＲＱＰＡ、ライトポインタＲＱＷＰおよびリードポインタＲＱＲＰは、リクエスト情報の一例であり、先頭物理アドレスＣＱＰＡ、ライトポインタＣＱＷＰおよびリードポインタＣＱＲＰは、応答情報の一例である。
【００６６】
コネクション番号ＣＩＤは、データ領域ＤＴ（データ構造）毎に割り当てられるユニークなＩＤ（IDentification）であり、データ領域ＤＴにアクセスするためのリクエストは、コネクション番号ＣＩＤを含む。先頭物理アドレスＰＤＡは、遠隔手続呼出の処理において、データ処理を実行するデータ領域ＤＴ（図６）を指定するために使用される。アクセスキーＡＫＥＹは、データ領域ＤＴ毎に割り当てられたユニークなコード（ＫＥＹ０、ＫＥＹ１等）であり、データ領域ＤＴへのアクセス権の有無の判定に使用される。データ領域ＤＴにアクセスするためのリクエストは、アクセスキーＡＫＥＹを含む。データ領域ＤＴ毎のコネクション番号ＣＩＤおよびアクセスキーＡＫＥＹは、クライアントノードＳＶ１がリクエストを発行する前（例えば、情報処理システムＳＹＳ２の起動時）に、処理ノードＳＶ０からクライアントノードＳＶ１に通知される。
【００６７】
リクエストキューＲＱのライトポインタＲＱＷＰは、リクエストキューＲＱに格納されたリクエストのうち、最も新しいリクエストを格納している位置を示す。ＮＩＣ０の通信処理部ＣＯＭ０は、ライトポインタＲＱＷＰにより示される位置の隣の領域に新たなリクエストを格納し、ライトポインタＲＱＷＰを更新する。リクエストキューＲＱのリードポインタＲＱＲＰは、リクエストキューＲＱに格納されたリクエストのうち、最も古いリクエストを格納している位置を示す。ＣＰＵ０は、リードポインタＲＱＲＰに示される位置からリクエストを取り出して処理し、リードポインタＲＱＲＰを更新する。
【００６８】
完了キューＣＱのライトポインタＣＱＷＰは、完了キューＣＱに格納された応答のうち、最も新しい応答を格納している位置を示す。ＣＰＵ０は、ライトポインタＣＱＷＰにより示される位置の隣の領域に新たな応答を格納し、ライトポインタＣＱＷＰを更新する。完了キューＣＱのリードポインタＣＱＲＰは、完了キューＣＱに格納された応答のうち、最も古い応答を格納している位置を示す。ＮＩＣ０の通信処理部ＣＯＭ０は、リードポインタＣＱＲＰにより示される位置から応答を取り出し、リードポインタＣＱＲＰを更新する。
【００６９】
コネクション管理テーブルＣＭＴＢＬは、遠隔手続処理部ＲＣＰＣＮＴおよびリクエスト処理部ＲＣＮＴ０の両方からアクセス可能であり、ＣＰＵ０からもアクセス可能である。このため、遠隔手続処理部ＲＣＰＣＮＴおよびリクエスト処理部ＲＣＮＴ０は、リクエストキューＲＱを用いてリクエストの処理をＣＰＵ０に引き渡すことができ、完了キューＣＱを用いてリクエストの応答をＣＰＵ０から受信することができる。
【００７０】
図８は、遠隔手続呼出に使用される関数の一例を示す。図８に示す関数（ＡＰＩ：Application Programming Interface）は、ロックを取得することなく処理される関数群ＡＰＩａと、ロックを取得して処理される関数群ＡＰＩｂ（排他処理）とに分類される。例えば、関数群ＡＰＩａ、ＡＰＩｂの各関数は、標準Ｃ＋＋ライブラリ（ｓｔｄ：：ｌｉｓｔ）に含まれる。関数群ＡＰＩａは、関数ｆｒｏｎｔ（）、ｂａｃｋ（）、ｓｉｚｅ（）、ｂｅｇｉｎ（）、ｅｎｄ（）、ｒｂｅｇｉｎ（）、ｒｅｎｄ（）、ｇｅｔ＿ｎｅｘｔ（）、ｇｅｔ＿ｐｒｅｖ（）を含む。関数群ＡＰＩａに含まれる関数は、データ領域ＤＴに構築されたデータ構造を変えないため、ロックの取得なしで処理可能である。
【００７１】
関数ｇｅｔ＿ｎｅｘｔ（）は、イテレータ（ポインタ）を引数として次のイテレータを返す関数であり、関数ｇｅｔ＿ｐｒｅｖ（）は、イテレータを引数として１つ前のイテレータを返す関数である。関数ｇｅｔ＿ｎｅｘｔ（）、ｇｅｔ＿ｐｒｅｖ（）は、遠隔手続呼出によりデータ領域ＤＴ内のデータにアクセスする場合に使用される。
【００７２】
一方、関数群ＡＰＩｂに含まれる関数ｉｎｓｅｒｔ（）、ｐｕｓｈ＿ｂａｃｋ（）、ｐｕｓｈ＿ｆｒｏｎｔ（）、ｐｏｐ＿ｂａｃｋ（）、ｐｏｐ＿ｆｏｒｎｔ（）は、データ領域ＤＴに構築されたデータ構造を変えるため、ロックの取得後に処理される。なお、関数群ＡＰＩａ、ＡＰＩｂの各々は、他の関数を含んでいてもよい。
【００７３】
処理ノードＳＶ０のＮＩＣ０は、ロックの取得なしで処理可能な関数群ＡＰＩａの関数のいずれかがクライアントノードＳＶ１から受信したリクエストに含まれる場合、遠隔手続処理部ＲＣＰＣＮＴを動作させ、図６に示すデータ構造に直接アクセスする。一方、ＮＩＣ０は、ロック取得後に処理する関数群ＡＰＩｂの関数のいずれかがクライアントノードＳＶ１から受信したリクエストに含まれる場合、遠隔手続処理部ＲＣＰＣＮＴを動作させて、ロックを取得後に図６に示すデータ構造に直接アクセスする。但し、所定時間内にロックが取得されない場合、遠隔手続処理部ＲＣＰＣＮＴは、クライアントノードＳＶ１から受信した遠隔処理手続のリクエストの処理をＣＰＵ１に実行させる。
【００７４】
図９は、図４に示す処理ノードＳＶ０のＮＩＣ０において、クライアントノードＳＶ１からパケットを受信した場合の動作の一例を示す。図９は、情報処理システムＳＹＳ２の制御方法を示す。
【００７５】
まず、ステップＳ１０２において、ＮＩＣ０の遠隔手続処理部ＲＣＰＣＮＴは、パケットに含まれるコネクション番号ＣＩＤに基づいて図７に示すコネクション管理テーブルＣＭＴＢＬを参照し、操作対象のデータ領域ＤＴの先頭物理アドレスＤＰＡを取得する。なお、ＮＩＣ０は、パケットに含まれるアクセスキーＡＫＥＹが、操作対象のデータ領域ＤＴに対応してコネクション管理テーブルＣＭＴＢＬに格納されたアクセスキーＡＫＥＹと一致しない場合、パケットを無効とし、動作を終了する。
【００７６】
次に、ステップＳ１０４において、ＮＩＣ０は、受信したパケットが遠隔手続呼出（ＲＰＣ）のリクエストか否かを判定する。ＮＩＣ０は、受信したパケットが遠隔手続呼出のリクエストを示す場合、動作をステップＳ１０６に移行し、受信したパケットが遠隔手続呼出のリクエストを示さない場合、ＣＰＵ０にパケットの処理をさせるため、動作をステップＳ１１４に移行する。ステップＳ１０４によるパケットの内容の検出（デコード動作）は、デコーダ部ＤＥＣ００により実行される。
【００７７】
ステップＳ１０６において、ＮＩＣ０は、デコーダ部ＤＥＣ００によるデコード結果に基づいて、ロックを取得するか否かを判定する。ＮＩＣ０は、受信したパケットが図８に示す関数群ＡＰＩｂのいずれかの関数を含む場合、ロックを取得するために動作をステップＳ１０８に移行する。ＮＩＣ０は、受信したパケットが図８に示す関数群ＡＰＩａのいずれかの関数を含む場合、ロックの取得なしで処理可能なため、動作をステップＳ１１８に移行する。ステップＳ１０６による処理は、遠隔手続処理部ＲＣＰＣＮＴにより実行される。
【００７８】
ステップＳ１０８において、ＮＩＣ０は、操作対象のデータ領域ＤＴに対応するロック変数ＬＯＣＫにメモリアクセスし、ロックの取得操作を実行する。例えば、遠隔手続処理部ＲＣＰＣＮＴは、Ｔｅｓｔ  ａｎｄ  Ｓｅｔ命令を実行させるパケットを、送信バッファＴＢＵＦ０１を介してＣＰＵ０に送信し、ロックを取得したか否かを判定する。次に、ステップＳ１１０において、ＮＩＣ０は、ロックを取得した場合、動作をステップＳ１１８に移行し、ロックを取得していない場合、動作をステップＳ１１２に移行する。
【００７９】
ステップＳ１１２において、ＮＩＣ０は、ロックの取得操作を開始してから、ロックを取得することなく所定時間が経過した場合、タイムアウトを判定し、動作をステップＳ１１４に移行する。一方、ＮＩＣ０は、ロックの取得操作を開始してから所定時間が経過していない場合、ロックの取得操作を再度実行するために動作をステップＳ１０８に戻す。ステップＳ１１２による処理は、遠隔手続処理部ＲＣＰＣＮＴにより実行される。例えば、遠隔手続処理部ＲＣＰＣＮＴは、タイムアウトを判定するためのタイマを、複数のデータ領域ＤＴに共通に有する。
【００８０】
ステップＳ１１４において、ＮＩＣ０は、パケットに含まれるコネクション番号ＣＩＤに対応するコネクション管理テーブルＣＭＴＢＬのエントリからリクエストキューＲＱ（図７）の先頭物理アドレスＲＱＰＡおよびライトポインタＲＱＷＰを取得する。そして、ＮＩＣ０は、リクエストキューＲＱのライトポインタＲＱＷＰが示す領域にパケットに含まれるリクエストを格納し、ライトポインタＲＱＷＰを更新する。なお、ステップＳ１１２でタイムアウトが発生した場合にＮＩＣ０がリクエストキューＲＱに格納するリクエストは、図８に示す関数群ＡＰＩｂのいずれかの関数（例えば、関数ｉｎｓｅｒｔ（））を含む。
【００８１】
次に、ステップＳ１１６において、ＮＩＣ０は、操作対象のデータ領域ＤＴに対してＣＰＵ０がデータ処理を実行するプログラムに割り込みを通知し、動作を終了する。割り込みの通知は、遠隔手続処理部ＲＣＰＣＮＴが、ＣＰＵ０の割り込みレジスタ等に書き込みアクセスするためのパケットを、調停部ＡＲＢ０１および送信バッファＴＢＵＦ０１を介してＣＰＵ０に送信することで実行される。ＣＰＵ０は、ＮＩＣ０からの割り込みの通知に基づいて、操作対象のデータ領域ＤＴに対応するデータ処理プログラムを実行し、リクエストキューＲＱに格納されたリクエストを処理する。すなわち、リクエストの処理は、ＮＩＣ０からＣＰＵ０に引き渡される。
【００８２】
リクエストの処理のＣＰＵ０への引き渡しにより、ＮＩＣ０は、次のリクエストの処理を開始することができるため、ロックの取得に時間が掛かることにより遠隔手続処理部ＲＣＰＣＮＴがストールすることを抑止することができる。遠隔手続処理部ＲＣＰＣＮＴがストールしないため、デコーダ部ＤＥＣ００は、受信バッファＲＢＵＦ００からリクエストを順次取り出すことができる。この結果、受信バッファＲＢＵＦ００がオーバフローすることを抑止することができ、情報処理システムＳＹＳ２の処理性能が低下することを抑止することができる。
【００８３】
一方、ステップＳ１１８において、ＮＩＣ０は、クライアントノードＳＶ１から受信したパケットに含まれるリクエストの処理を実行する。例えば、遠隔手続処理部ＲＣＰＣＮＴは、ステップＳ１０２で取得した先頭物理アドレスＤＰＡに基づいて、データ領域ＤＴにおけるアクセス対象のデータの位置（アドレス）を求める。遠隔手続処理部ＲＣＰＣＮＴは、求めた位置にメモリアクセスするためのパケットを調停部ＡＲＢ０１に出力することで、キャッシュメモリＣＭ０にアクセスする。そして、遠隔手続処理部ＲＣＰＣＮＴは、メモリアクセス結果を示すパケットをキャッシュメモリＭＣ０から受信することで、リクエストの処理を実行する。ロックの取得なしでリクエストが処理可能な場合、遠隔手続処理部ＲＣＰＣＮＴがリクエストの処理を直接実行することで、ＣＰＵ０に割り込みを通知してリクエストの処理を実行させる場合に比べて、リクエストの処理効率を向上することができる。また、ＣＰＵ０は他の処理を実行することができるため、ＣＰＵ０にリクエストの処理を実行させる場合に比べて、ＣＰＵ０の処理性能を向上することができる。
【００８４】
次に、ステップＳ１２０において、ＮＩＣ０は、ステップＳ１１８における処理結果を示す応答を含むパケットを生成し、生成したパケットをリクエストの要求元であるクライアントノードＳＶ１に送信し、動作を終了する。ステップＳ１２０の動作は、遠隔手続処理部ＲＣＰＣＮＴ、調停部ＡＲＶ００および送信バッファＴＢＵＦ００により実行される。
【００８５】
図１０は、図４に示す処理ノードＳＶ０のＮＩＣ０において、ＣＰＵ０からパケットを受信した場合の動作の一例を示す。図１０は、情報処理システムＳＹＳ２の制御方法を示す。
【００８６】
まず、ステップＳ２０２において、ＮＩＣ０は、受信したパケットがコネクション管理テーブルＣＭＴＢＬまたはレジスタＲＥＧ０へのアクセスリクエストを示す場合、動作をステップＳ２０４に移行する。ＮＩＣ０は、受信したパケットがコネクション管理テーブルＣＭＴＢＬまたはレジスタＲＥＧ０へのアクセスリクエストを示さない場合、動作をステップＳ２０８に移行する。ステップＳ２０２による処理は、デコーダ部ＤＥＣ０１により実行される。
【００８７】
ステップＳ２０４において、ＮＩＣ０は、コネクション管理テーブルＣＭＴＢＬまたはレジスタＲＥＧ０にリードアクセスまたはライトアクセスし、動作をステップＳ２０６に移行する。ステップＳ２０４による処理は、レジスタインタフェースＲＥＧＩＦ０により実行される。
【００８８】
ステップＳ２０６において、ＮＩＣ０は、コネクション管理テーブルＣＭＴＢＬまたはレジスタＲＥＧ０のアクセス結果をＣＰＵ０に送信するためのパケットを生成し、生成したパケットをＣＰＵ０に送信し、動作を終了する。ステップＳ２０６による処理は、レジスタインタフェースＲＥＧＩＦ０、調停部ＡＲＢ０１および送信バッファＴＢＵＦ０１により実行される。
【００８９】
ステップＳ２０８において、ＮＩＣ０１は、受信したパケットがＣＰＵ０への割り込みリクエストによりＣＰＵ０に処理させたリクエストの応答を示す場合、動作をステップＳ２１０に移行する。ＮＩＣ０は、受信したパケットがＣＰＵ０への割り込みリクエストによりＣＰＵ０に処理させたリクエストの応答を示さない場合、動作をステップＳ２１４に移行する。ステップＳ２０８による処理は、デコーダ部ＤＥＣ０１により実行される。
【００９０】
ステップＳ２１０において、ＮＩＣ０は、コネクション管理テーブルＣＭＴＢＬを参照し、完了キューＣＱの先頭物理アドレスＣＱＰＡおよびリードポインタＣＱＲＰを取得する。ＮＩＣ０は、取得した頭物理アドレスＣＱＰＡおよびリードポインタＣＱＲＰに基づいて完了キューＣＱをメモリアクセスするためのパケットをＣＰＵ０に送信する。そして、ＮＩＣ０Ｖは、ＣＰＵ０が処理したリクエストに対する応答を完了キューＣＱから取り出す。ステップＳ２１０による処理は、応答受付部ＣＲＣＶ、調停部ＡＲＢ０１および送信バッファＴＢＵＦ０１により実行される。
【００９１】
次に、ステップＳ２１２において、ＮＩＣ０は、ステップＳ２１０で完了キューＣＱから取り出した応答を含むパケットを生成し、生成したパケットをクライアントノードＳＶ１に送信し、動作を終了する。ステップＳ２１２による処理は、応答受付部ＣＲＣＶ、調停部ＡＲＢ００および送信バッファＴＢＵＦ００により実行される。
【００９２】
ステップＳ２１４において、ＮＩＣ０は、受信したパケットが遠隔手続処理部ＲＣＰＣＮＴでの遠隔手続呼出のリクエストを処理するためのメモリアクセスに対する応答を示す場合、動作をステップＳ２１６に移行する。例えば、遠隔手続呼出のリクエストを処理するためのメモリアクセス（遠隔手続処理中のメモリアクセス）は、ロックの取得操作のためのメモリアクセス、またはデータ領域ＤＴへのメモリアクセス等である。ＮＩＣ０は、受信したパケットが遠隔手続処理部ＲＣＰＣＮＴで実行中の遠隔手続呼出のリクエストの処理に対する応答以外である場合、動作を終了する。ステップＳ２１４による処理は、デコーダ部ＤＥＣ０１により実行される。
【００９３】
ステップＳ２１６において、ＮＩＣ０は、遠隔手続呼出のリクエストに対する応答を作成可能な場合、動作をステップＳ２１８に移行し、遠隔手続呼出のリクエストに対する応答を作成する状態でない場合、動作をステップＳ２２０に移行する。ステップＳ２１６による処理は、遠隔手続処理部ＲＣＰＣＮＴにより実行される。ステップＳ２１８において、ＮＩＣ０は、遠隔手続呼出のリクエストに対する応答を含むパケットを生成し、生成したパケットをクライアントノードＳＶ１に送信する。ステップＳ２１８による処理は、遠隔手続処理部ＲＣＰＣＮＴ、調停部ＡＲＢ００および送信バッファＴＢＵＦ００により実行される。
【００９４】
ステップＳ２２０において、ＮＩＣ０は、遠隔手続呼出のリクエストを処理するためのメモリアクセス等の遠隔手続処理を継続し、動作を終了する。すなわち、受信したパケットが遠隔手続処理部ＲＣＰＣＮＴでの遠隔手続呼出のリクエストを処理するためのメモリアクセスに対する応答を示す場合、ステップＳ２１４、Ｓ２１６、Ｓ２２０の動作が繰り返される。ステップＳ２２０による処理は、遠隔手続処理部ＲＣＰＣＮＴ、調停部ＡＲＢ０１および送信バッファＴＢＵＦ０１、受信バッファＲＢＵＦ０１およびデコーダ部ＤＥＣ０１により実行される。
【００９５】
図１１は、図５に示すクライアントノードＳＶ１のＮＩＣ１がパケットを受信した場合の動作の一例を示す。図１１は、情報処理システムＳＹＳ２の制御方法を示す。
【００９６】
まず、ステップ３０２において、ＮＩＣ１は、ＣＰＵ１からパケットを受信した場合、動作をステップＳ３０８に移行し、処理ノードＳＶ０から応答パケットを受信した場合、動作をステップＳ３０４に移行する。ステップＳ３０２による処理は、デコーダ部ＤＥＣ１１、ＤＥＣ１０により実行される。
【００９７】
ステップＳ３０４において、ＮＩＣ１は、処理ノードＳＶ０からの応答パケットに含まれる応答をメインメモリＭＭ０に割り当てられた完了キューに格納するためのパケットを生成し、生成したパケットをＣＰＵ１に出力する。ステップＳ３０４による処理は、応答処理部ＣＣＮＴ１、調停部ＡＲＢ１１および送信バッファＴＢＵＦ１１により実行される。
【００９８】
応答が完了キューに格納された後、ステップＳ３０６において、ＮＩＣ１は、ＣＰＵ１が実行するプログラムに割り込みを通知し、動作を終了する。割り込みの通知は、ＣＰＵ１の割り込みレジスタ等に書き込みアクセスするためのパケットを、ＣＰＵ１に送信することで実行される。ステップＳ３０６による処理は、応答処理部ＣＣＮＴ１、調停部ＡＲＢ１１および送信バッファＴＢＵＦ１１により実行される。
【００９９】
一方、ステップ３０８において、ＮＩＣ１は、受信したパケットがレジスタＲＥＧ１へのアクセスリクエストを示す場合、動作をステップＳ３１０に移行する。ＮＩＣ１は、受信したパケットがレジスタＲＥＧ１へのアクセスリクエストを示さない場合、動作をステップＳ３１４に移行する。ステップＳ３０８による処理は、デコーダ部ＤＥＣ１１により実行される。
【０１００】
ステップＳ３１０において、ＮＩＣ１は、レジスタＲＥＧ１にリードアクセスまたはライトアクセスする。ステップＳ３０８による処理は、レジスタインタフェースＲＥＧＩＦ１により実行される。次に、ステップＳ３１２において、ＮＩＣ１は、レジスタＲＥＧ１のアクセス結果を含むパケットを生成し、生成したパケットをＣＰＵ１に送信し、動作を終了する。例えば、パケットは、メインメモリＭＭ１に割り当てられた完了キューへ情報を格納するためのパケットである。ステップＳ３１２による処理は、レジスタインタフェースＲＥＧＩＦ１、調停部ＡＲＢ１１および送信バッファＴＢＵＦ１１により実行される。
【０１０１】
ステップＳ３１４において、ＮＩＣ１は、受信したパケットが処理ノードＳＶ０への遠隔手続呼出等のリクエストを示す場合、動作をステップＳ３１６に移行する。ＮＩＣ１は、受信したパケットが処理ノードＳＶ０への遠隔手続呼出等のリクエストを示さない場合、動作を終了する。ステップＳ３１４による処理は、デコーダ部ＤＥＣ１１により実行される。
【０１０２】
ステップＳ３１６において、ＮＩＣ１は、ＣＰＵ１から受信したリクエストを含むパケットを生成し、生成したパケットを処理ノードＳＶ０に送信し、動作を終了する。ステップＳ３１６による処理は、要求受付部ＲＱＲＣＶ、調停部ＡＲＢ１０および送信バッファＴＢＵＦ１０により実行される。
【０１０３】
図１２は、図３に示す情報処理システムＳＹＳ２の動作の一例を示す。図１２は、情報処理システムＳＹＳ２の制御方法を示す。図１２は、クライアントノードＳＶ１から処理ノードＳＶ０に、ロックを取得して処理される遠隔手続呼出のリクエストが発行され、ＮＩＣ１がロックを取得し、ＣＰＵ０のプログラムを使用することなく遠隔手続処理を実行する例を示す。例えば、遠隔手続呼出のリクエストは、関数ｉｎｓｅｒｔ（）、ｐｕｓｈ＿ｂａｃｋ（）等を含む。
【０１０４】
まず、クライアントノードＳＶ１において、ＣＰＵ１は、メインメモリＭＭ１に割り当てられた通知キューにリクエストを格納し、ＮＩＣ１にリクエストのパケットを送信する（図１２（ａ）、（ｂ））。ＮＩＣ１は、ＣＰＵ１からのパケットに基づいて、通知キューにアクセスし、遠隔手続呼出のリクエストを取り出す。ＮＩＣ１は、取り出したリクエストを含むパケットを生成し、生成したパケットを処理ノードＳＶ０に送信する（図１２（ｃ）、（ｄ））。
【０１０５】
処理ノードＳＶ０のＮＩＣ０は、クライアントノードＳＶ１からのパケットに基づいて、コネクション管理テーブルＣＭＴＢＬを参照し、パケットに含まれるコネクション番号ＣＩＤおよびアクセスキーＡＫＥＹをチェックする。また、ＮＩＣ０は、コネクション管理テーブルＣＭＴＢＬを参照し、操作対象のデータ領域ＤＴの先頭物理アドレスＤＰＡを取得する（図１２（ｅ））。
【０１０６】
次に、ＮＩＣ０は、クライアントノードＳＶ１からのリクエストがロックを取得して処理される関数であるため、メインメモリＭＭ０に割り当てられたロック変数ＬＯＣＫを用いて、ロックを取得する操作を実行する（図１２（ｆ））。所定時間Ｔｏｕｔ内にロックが取得された場合、ＮＩＣ０は、処理対象のデータ領域ＤＴにメモリアクセスし、データの挿入、追加または削除等のデータ処理を実行する（図１２（ｇ））。
【０１０７】
データ領域ＤＴに対するデータの挿入、追加または削除を実行した後、ＮＩＣ０は、メインメモリＭＭ０に割り当てられたロック変数ＬＯＣＫをリセットして初期化し（例えば、論理０）、ロックを解除する（図１２（ｈ））。リクエストに対するデータ処理が完了した後、ロック変数ＬＯＣＫを初期化することで、データ処理が完了したデータ領域ＤＴをアクセス可能な状態に設定することができる。ＮＩＣ０は、データ領域ＤＴに対するデータ処理の実行結果を含む応答パケットをクライアントノードＳＶ１に送信する（図１２（ｉ））。
【０１０８】
クライアントノードＳＶ１のＮＩＣ１は、処理ノードＳＶ０から受信した応答を、メインメモリＭＭ１に割り当てられた通知キューに格納し、ＣＰＵ１に割り込み通知を送信する（図１２（ｊ）、（ｋ））。ＣＰＵ１は、割り込みの通知に基づいて通知キューにアクセスし、遠隔手続呼出のリクエストに対する応答を取り出す（図１２（ｌ））。
【０１０９】
図１３は、図３に示す情報処理システムＳＹＳ２の動作の別の例を示す。図１３は、情報処理システムＳＹＳ２の制御方法を示す。図１３は、クライアントノードＳＶ１から処理ノードＳＶ０に、遠隔手続呼出のリクエストが発行され、ＮＩＣ１がロックを取得する前にタイムアウトが発生し、ＣＰＵ０のプログラムを使用して遠隔手続処理を実行する例を示す。例えば、遠隔手続呼出のリクエストは、図１２と同様に、関数ｉｎｓｅｒｔ（）、ｐｕｓｈ＿ｂａｃｋ（）等のロックを取得して処理される関数である。図１２と同一または同様の動作については、詳細な説明は省略する。図１３（ａ）から図１３（ｆ）までの動作は、図１２（ａ）から図１２（ｆ）までの動作と同様である。
【０１１０】
図１３では、ロックの取得操作を繰り返している間に、所定時間Ｔｏｕｔが経過し、タイムアウトが発生する。ＮＩＣ０は、コネクション管理テーブルＣＭＴＢＬを参照し、リクエストキューＲＱのライトポインタＲＱＷＰを取得する（図１３（ｇ））。ＮＩＣ０は、メインメモリＭＭ０においてライトポインタＲＱＷＰが示すリクエストキューＲＱの領域にリクエスト（関数ｉｎｓｅｒｔ（）、ｐｕｓｈ＿ｂａｃｋ（）等を含む）を格納し、ライトポインタＲＱＷＰを更新する（図１３（ｈ）、（ｉ））。次に、ＮＩＣ０は、ＣＰＵ０に割り込みの通知を示すパケットを送信し、ＣＰＵ０に遠隔手続呼出のリクエストの処理を引き渡す（図１３（ｊ））。
【０１１１】
ＣＰＵ０は、割り込みの通知に基づいて、データ処理プログラムを起動する。そして、ＣＰＵ０は、コネクション管理テーブルＣＭＴＢＬを参照し、リクエストキューＲＱのリードポインタＲＱＲＰを取得する（図１３（ｋ））。ＣＰＵ０は、取得したリードポインタＲＱＲＰが示すメインメモリＭＭ０上のリクエストキューＲＱの領域からリクエストを取り出し、リードポインタＲＱＲＰを更新する（図１３（ｌ）、（ｍ））。そして、ＣＰＵ０は、処理対象のデータ領域ＤＴにメモリアクセスし、データの挿入、追加または削除等のデータ処理を実行する（図１３（ｎ））。
【０１１２】
図１４は、図１３に示す動作の続きを示す。図１２と同一または同様の動作については、詳細な説明は省略する。ＣＰＵ０は、データ処理の完了後、完了キューＣＱのライトポインタＣＱＷＰを取得し、取得したライトポインタＣＱＷＰが示すメインメモリＭＭ０上に完了キューＣＱの領域にデータ処理の結果（すなわち、応答）を書き込む（図１４（ａ）、（ｂ））。次に、ＣＰＵ０は、ライトポインタＣＱＷＰを更新し、メインメモリＭＭ０に割り当てられたロック変数ＬＯＣＫをリセットし、ロックを解除する（図１４（ｃ）、（ｄ））。
【０１１３】
ＣＰＵ０は、データ処理が完了したことを示す応答パケットをＮＩＣ０に送信する（図１４（ｅ））。ＮＩＣ０は、ＣＰＵ０からの応答パケットの受信に基づいて、コネクション管理テーブルＣＭＴＢＬを参照し、完了キューＣＱのリードポインタＣＱＲＰを取得する（図１４（ｆ））。ＮＩＣ０は、メインメモリＭＭ０においてリードポインタＣＱＲＰが示す完了キューＣＱの領域から応答を読み出し、リードポインタＣＱＲＰを更新する（図１４（ｇ）、（ｈ））。この後の図１４（ｉ）、（ｊ）、（ｋ）、（ｌ）の動作は、図１２（ｉ）、（ｊ）、（ｋ）、（ｌ）の動作と同様である。
【０１１４】
図１５は、図３に示す情報処理システムＳＹＳ２の動作のさらなる別の例を示す。図１５は、情報処理システムＳＹＳ２の制御方法を示す。図１５は、クライアントノードＳＶ１から処理ノードＳＶ０に、ロックを取得することなく処理可能な遠隔手続呼出のリクエストが発行され、ＣＰＵ０のプログラムを使用することなくＮＩＣ１が遠隔手続処理を実行する例を示す。例えば、遠隔手続呼出のリクエストは、関数ｆｒｏｎｔ（）、ｂａｃｋ（）、ｓｉｚｅ（）等である。図１２と同一または同様の動作については、詳細な説明は省略する。図１５（ａ）から図１５（ｅ）までの動作は、図１２（ａ）から図１２（ｅ）までの動作と同様である。
【０１１５】
ＮＩＣ０は、操作対象のデータ領域ＤＴの先頭物理アドレスＤＰＡを取得した後、図１２（ｇ）と同様に、処理対象のデータ領域ＤＴにメモリアクセスし、データを取得する処理を実行する（図１５（ｇ））。そして、ＮＩＣ０は、図１２（ｉ）と同様に、データ領域ＤＴに対するメモリアクセスで取得したデータを含む応答パケットをクライアントノードＳＶ１に送信する（図１５（ｉ））。この後の図１５（ｊ）、（ｋ）、（ｌ）の動作は、図１２（ｊ）、（ｋ）、（ｌ）の動作と同様である。
【０１１６】
図１６は、図３に示す情報処理システムＳＹＳ２において、ＮＩＣ０がロックを取得するまでの待ち時間（ロック待ち時間Ｔｌｏｃｋ）に対する遠隔手続呼出のリクエストの処理時間の一例を示す。図１６に示す例では、図１２および図１３に示す所定時間Ｔｏｕｔ（タイムアウト時間）は、３マイクロ秒であるとする。ＮＩＣ０が割り込み通知を出力してからＣＰＵ０が実行するプログラムがリクエストの処理を開始するまでの割り込み処理時間Ｔｉｎｔｅｒｒｕｐｔは、３マイクロ秒であるとする。
【０１１７】
ＮＩＣ０およびＣＰＵ０のそれぞれが実行するリクエストの実行時間は、互いに異なり、リクエストの内容により変化する。しかし、図１６に示す例では、説明を分かりやすくするため、ＮＩＣ０およびＣＰＵ０のそれぞれがリクエストの処理を実行する実行時間Ｔａｃｔは、１マイクロ秒であるとする。また、ＣＰＵ０がロックを取得するまでの待ち時間は、３マイクロ秒であるとする。
【０１１８】
星印で示す特性は、ロック待ち時間Ｔｌｏｃｋがタイムアウト時間Ｔｏｕｔに到達するまでＮＩＣ０がリクエストの処理を実行し、ロック待ち時間Ｔｌｏｃｋがタイムアウト時間Ｔｏｕｔを超えた後、ＣＰＵ０がリクエストの処理を実行する例を示す。三角印で示す特性は、ＮＩＣ０のみで遠隔手続呼出のリクエストの処理を実行する例を示し、丸印で示す特性は、ＣＰＵ０のみで遠隔手続呼出のリクエストの処理を実行する例を示す。
【０１１９】
星印で示す処理時間Ｔ１は、式（１）により示され、三角印で示す処理時間Ｔ２は、式（２）により示され、丸印で示す処理時間Ｔ３は、式（３）により示される。
Ｔ１＝Ｔ２  ｉｆ（Ｔｌｏｃｋ＜Ｔｏｕｔ）  ｅｌｓｅ  Ｔ３  …（１）
Ｔ２＝Ｔｌｏｃｋ＋Ｔａｃｔ…（２）
Ｔ３＝Ｔｏｕｔ＋Ｔｉｎｔｅｒｒｕｐｔ＋Ｔａｃｔ…（３）
図１６に示されるように、ロック待ち時間Ｔｌｏｃｋがタイムアウト時間Ｔｏｕｔより短い場合の処理時間（星印）は、ＣＰＵ０のみによる処理時間（丸印）に比べて短くすることができる。ロック待ち時間Ｔｌｏｃｋが６マイクロ秒より長い場合の処理時間（星印）は、ロック待ち時間Ｔｌｏｃｋの増加が抑制されるため、ＮＩＣ０のみによる処理時間（三角印）に比べて短くすることができる。なお、ロック待ち時間Ｔｌｏｃｋが３マイクロ秒から６マイクロ秒の間の処理時間（星印）は、ＮＩＣ０による処理からＣＰＵ０による処理に切り替えるオーバヘッド（主にＴｉｎｔｅｒｒｕｐｔ）を含む。
【０１２０】
図１７は、図３に示す情報処理システムＳＹＳ２において、ＣＰＵ０による処理に対するスループットの一例を示す。星印、三角印および丸印の意味は、図１６と同じである。図１７は、ＣＰＵ０が実行するプログラムのみで遠隔手続呼出のリクエストを処理する場合のスループットを”１”として正規化している。
【０１２１】
ロック待ち時間が指数分布に従う場合、ロック待ち時間Ｔｌｏｃｋは、確率変数（λ）が大きくなるほど短くなり、確率変数（λ）が小さくなるほど長くなる。ロック待ち時間Ｔｌｏｃｋが所定時間より長い領域において、タイムアウトによりリクエストの処理をＮＩＣ０からＣＰＵ０に切り替える場合のスループットは、ＮＩＣ０のみでリクエストを処理する場合に比べて向上する。例えば、確率変数（λ）が０．１の場合、スループットは１．８倍になる。一方、ロック待ち時間が所定時間より短い領域において、タイムアウトによりリクエストの処理をＮＩＣ０からＣＰＵ０に切り替える場合のスループットは、ＣＰＵ０のみでリクエストを処理する場合に比べて向上する。例えば、確率変数（λ）が０．５の場合、スループットは１．２５倍になる。
【０１２２】
以上、図３から図１７に示す実施形態においても、図１および図２に示す実施形態と同様に、ロックを取得するまでの時間に応じて、ＣＰＵ０またはＮＩＣ０のいずれかでリクエストを処理することで、リクエストの処理効率を向上することができる。これにより、ＣＰＵ０またはＮＩＣ０のいずれかでリクエストを排他的に処理する場合、情報処理システムＳＹＳ２の性能が低下することを抑止することができる。また、ＣＰＵ０またはＮＩＣ０は、ロックを取得した後にリクエストの処理を排他的に実行するため、処理されるデータの一貫性を保証することができる。
【０１２３】
さらに、図３から図１７に示す実施形態では、デコーダ部ＤＥＣ００がリクエストの種類に基づいてリクエストを振り分けるため、遠隔手続処理部ＲＣＰＣＮＴおよびリクエスト処理部ＲＣＮＴ０において、リクエストの種類毎に処理を実行することができる。また、１つの処理部でリクエストを処理する場合に比べて、リクエストの制御を容易にすることができる。
【０１２４】
デコーダ部ＤＥＣ０１がリクエストに対する応答の種類に基づいて応答を振り分けるため、遠隔手続処理部ＲＣＰＣＮＴおよび応答受付部ＣＲＣＶの各々において、応答の処理を実行することができる。また、遠隔手続処理部ＲＣＰＣＮＴからＣＰＵ０に引き渡した遠隔手続呼出のリクエストに対する応答を、応答受付部ＣＲＣＶに出力することができる。この結果、遠隔手続呼出のリクエストに対するＣＰＵ０からの応答を、応答受付部ＣＲＣＶのみにより処理することができ、応答を遠隔手続処理部ＲＣＰＣＮＴと応答受付部ＣＲＣＶに分散して処理する場合に比べて、制御を容易にすることができる。
【０１２５】
コネクション管理テーブルＣＭＴＢＬは、遠隔手続処理部ＲＣＰＣＮＴ、リクエスト処理部ＲＣＮＴ０およびＣＰＵ０により共通にアクセス可能である。このため、遠隔手続処理部ＲＣＰＣＮＴおよびリクエスト処理部ＲＣＮＴ０は、リクエストキューＲＱを用いてリクエストの処理をＣＰＵ０に引き渡すことができ、完了キューＣＱを用いてリクエストの応答をＣＰＵ０から受信することができる。
【０１２６】
ロックの取得なしでリクエストが処理可能な場合、遠隔手続処理部ＲＣＰＣＮＴがリクエストの処理を直接実行することで、ＣＰＵ０に割り込みを通知してリクエストの処理を実行させる場合に比べて、リクエストの処理効率を向上することができる。また、ＣＰＵ０は他の処理を実行することができるため、ＣＰＵ０にリクエストの処理を実行させる場合に比べて、ＣＰＵ０の処理性能を向上することができる。
【０１２７】
遠隔手続呼出のリクエストに対するデータ処理が完了した後、ロック変数ＬＯＣＫを初期化することで、データ処理が完了したデータ領域ＤＴをアクセス可能な状態に設定することができる。
【０１２８】
キャッシュコヒーレントインタフェースＣＣＩＦ０１により、ＣＰＵ０を介してキャッシュメモリＣＭ０にアクセスする場合に比べて、データ等を高速にアクセスすることができ、キャッシュメモリＣＭ０のコヒーレンシを維持することができる。
【０１２９】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１３０】
１…送信側情報処理装置；２…受信側情報処理装置；３…演算処理装置；４…主記憶装置；５…通信装置；ＡＲＢ００、ＡＲＢ０１、ＡＲＢ１０、ＡＲＢ１１…調停部；ＢＵＳ０、ＢＵＳ１…バス；ＣＣＩＦ００、ＣＣＩＦ０１ＣＣＩＦ１０、ＣＣＩＦ１１…キャッシュコヒーレントインタフェース；ＣＣＮＴ１…応答処理部；ＣＭ０、ＣＭ１…キャッシュメモリ；ＣＭＴＢＬ…コネクション管理テーブル；ＣＯＭ０、ＣＯＭ１…通信処理部；ＣＱ…完了キュー；ＣＲＣＶ…応答受付部；ＤＡＴＡ…データ領域；ＤＥＣ００、ＤＥＣ０１、ＤＥＣ１０、ＤＥＣ１１…デコーダ部；ＩＯＰ０、ＩＯＰ１…入出力ポート；ＬＯＣＫ…ロック変数；ＭＣＮＴ０、ＭＣＮＴ１…メモリコントローラ；ＭＭ０、ＭＭ１…メインメモリ；ＮＷ…ネットワーク；ＯＰＵ０、ＯＰＵ１…演算部；ＰＧＭ…プログラム；ＲＢＵＦ００、ＲＢＵＦ０１、ＲＢＵＦ１０、ＲＢＵＦ１１…受信バッファ；ＲＣＮＴ０…リクエスト処理部；ＲＱＲＣＶ…要求受付部；ＲＣＰＣＮＴ…遠隔手続処理部；ＲＥＧ０、ＲＥＧ１…レジスタ；ＲＥＧＩＦ０、ＲＥＧＩＦ１…レジスタインタフェース；ＲＱ…リクエストキュー；ＲＳＶ…受信部；ＳＶ（ＳＶ０−ＳＶ３）…サーバ；ＳＹＳ１、ＳＹＳ２…情報処理システム；ＴＢＵＦ００、ＴＢＵＦ０１、ＴＢＵＦ１０、ＴＢＵＦ１１…送信バッファ
【図１】
2016212614.tif 000003
【図２】
2016212614.tif 000004
【図３】
2016212614.tif 000005
【図４】
2016212614.tif 000006
【図５】
2016212614.tif 000007
【図６】
2016212614.tif 000008
【図７】
2016212614.tif 000009
【図８】
2016212614.tif 000010
【図９】
2016212614.tif 000011
【図１０】
2016212614.tif 000012
【図１１】
2016212614.tif 000013
【図１２】
2016212614.tif 000014
【図１３】
2016212614.tif 000015
【図１４】
2016212614.tif 000016
【図１５】
2016212614.tif 000017
【図１６】
2016212614.tif 000018
【図１７】
2016212614.tif 000019