(57)【要約】      （修正有）【課題】１つのソケットで待ち受けている通信に対する受信処理を、メモリアクセスの効率が良いように、複数のプロセスに対して振り分ける情報処理システム等を提供する。【解決手段】それぞれ記憶装置１４、２４を備えた複数のプロセッサと１１、２１、通信ネットワークから通信データを受信し、受信した通信データを、アクセス効率がより良い記憶装置に格納する通信制御手段１２、２２と、通信データが格納された物理メモリ位置に基づいて、物理メモリ位置に対するアクセス効率がより良いプロセッサを選択し、プロセッサにおいて動作する受信プロセス１６、２６に対して、通信データの処理を割り当てる割当処理を行う接続待ち受け手段２とを有する。【選択図】図１
2015184960.tif 000002
【特許請求の範囲】
【請求項１】
それぞれ記憶装置を備えた複数のプロセッサと、
通信ネットワークから通信データを受信し、受信した前記通信データを、アクセス効率がより良い前記記憶装置に格納する通信制御手段と、
前記通信データが格納された物理メモリ位置に基づいて、前記物理メモリ位置に対するアクセス効率がより良い前記プロセッサを選択し、前記プロセッサにおいて動作する受信プロセスに対して、前記通信データの処理を割り当てる割当処理を行う接続待ち受け手段と
を有する情報処理システム。
【請求項２】
前記通信データを処理可能な受信プロセスが動作するプロセッサごとの待ちキュー情報をさらに有し、前記待ちキュー情報は、待機状態である前記受信プロセスの情報を含み、
前記接続待ち受け手段は、前記割当処理において、前記記憶装置と各プロセッサとの距離を示す距離情報に基づいて、前記物理メモリ位置に最も近い最近傍プロセッサを選択し、前記待ちキュー情報に基づいて、前記最近傍プロセッサ、または、前記物理メモリ位置にできるだけ近い他のプロセッサにおいて動作する前記受信プロセスを起床することによって、前記受信プロセスに対して前記通信データの処理を割り当て、
起床された前記受信プロセスが前記通信データに対する受信処理を行う
請求項１記載の情報処理システム。
【請求項３】
前記接続待ち受け手段は、前記受信プロセスの親プロセスに対して、前記物理メモリ位置に最も近いプロセッサを示す近傍プロセッサ情報を通知することによって割当処理を行い、
前記親プロセスは、前記近傍プロセッサ情報に基づいて、新たな受信プロセスを生成し、前記新たな受信プロセスが、前記通信データに対する受信処理を行う
請求項１記載の情報処理システム。
【請求項４】
前記接続待ち受け手段は、前記最近傍プロセッサにおいて動作する待機状態の受信プロセスがなかった場合に、前記最近傍プロセッサにおいて動作する受信プロセスが待機状態になることを所定の時間において待ち、
前記受信プロセスが待機状態となったときは、前記最近傍プロセッサにおいて動作する前記受信プロセスに対して、前記通信データの処理を割り当て、
前記受信プロセスが待機状態とならなかったときは、前記物理メモリ位置にできるだけ近い、前記最近傍プロセッサ以外の他のプロセッサにおいて動作する受信プロセスに対して、前記通信データの処理を割り当てる
請求項２記載の情報処理システム。
【請求項５】
前記通信データを受信する前に、複数の受信プロセスによって受信処理を行うことを示すアフィニティ情報が指定されたときに、前記待ちキュー情報を生成するアフィニティ指定手段をさらに有し、
前記接続待ち受け手段は、前記アフィニティ情報が指定された場合に、前記割当処理を実行する
請求項１、２、または４のいずれかに記載の情報処理システム。
【請求項６】
通信ネットワークから通信データを受信し、
受信した前記通信データを、アクセス効率がより良い記憶装置に格納し、
前記通信データが格納された物理メモリ位置に基づいて、前記物理メモリ位置に対するアクセス効率がより良いプロセッサを選択し、
前記プロセッサにおいて動作する受信プロセスに対して、前記通信データの処理を割り当てる割当処理を行う制御方法。
【請求項７】
前記通信データを受信する前に、
前記通信データを処理可能な受信プロセスが動作するプロセッサごとの待ちキュー情報を生成し、
前記受信プロセスが待機状態になった際に、前記待ちキュー情報に、待機状態である前記受信プロセスの情報を格納し、
前記割当処理において、
前記記憶装置と各プロセッサとの距離を示す距離情報に基づいて、前記物理メモリ位置に最も近い最近傍プロセッサを選択し、
前記待ちキュー情報に基づいて、前記最近傍プロセッサ、または、前記物理メモリ位置にできるだけ近い他のプロセッサにおいて動作する前記受信プロセスを起床することによって、前記受信プロセスに対して前記通信データの処理を割り当て、
起床された前記受信プロセスに前記通信データに対する受信処理を実行させる
請求項６記載の制御方法。
【請求項８】
通信ネットワークから通信データを受信し、受信した前記通信データを、アクセス効率がより良い記憶装置に格納する通信制御処理と、
前記通信データが格納された物理メモリ位置に基づいて、前記物理メモリ位置に対するアクセス効率がより良いプロセッサを選択し、前記プロセッサにおいて動作する受信プロセスに対して、前記通信データの処理を割り当てる割当処理を行う接続待ち受け処理と
をコンピュータに実行させるコンピュータ・プログラム。
【請求項９】
前記接続待ち受け処理において、
前記通信データを受信する前に、前記通信データを処理可能な受信プロセスが動作するプロセッサごとの待ちキュー情報を生成し、前記受信プロセスが待機状態になった際に、前記待ちキュー情報に、待機状態である前記受信プロセスの情報を格納し、
前記割当処理において、前記記憶装置と各プロセッサとの距離を示す距離情報に基づいて、前記物理メモリ位置に最も近い最近傍プロセッサを選択し、前記待ちキュー情報に基づいて、前記最近傍プロセッサ、または、前記物理メモリ位置にできるだけ近い他のプロセッサにおいて動作する前記受信プロセスを起床することによって、前記受信プロセスに対して前記通信データの処理を割り当て、
起床された前記受信プロセスに前記通信データに対する受信処理を実行させる
請求項８記載のコンピュータ・プログラム。
【請求項１０】
前記接続待ち受け処理において、
前記受信プロセスの親プロセスに対して、前記物理メモリ位置に最も近いプロセッサを示す近傍プロセッサ情報を通知することにより前記割当処理を行う
請求項８記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、それぞれメモリを備えた複数のプロセッサを含む情報処理システム（コンピュータ）における通信処理の制御に関する。
【背景技術】
【０００２】
それぞれメモリを備えた複数のプロセッサ（ＣＰＵ：Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を含む情報処理システムにおいて、各ＣＰＵが自身に対応付けられたメモリにアクセスするアーキテクチャ（ＮＵＭＡ：Ｎｏｎ−Ｕｎｉｆｏｒｍ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）を採用することができる。なお、本明細書では、ＣＰＵと、ＣＰＵに対応づけられたメモリとの対を「ノード」と言う。ＮＵＭＡを採用したノード（本明細書では、「ＮＵＭＡノード」と言う）では、すべてのＣＰＵが、全ノードのメモリを共有し、共通のメモリアドレス空間によって全メモリに対してアクセス可能である。
【０００３】
一般に、ＮＵＭＡアーキテクチャでは、各ＣＰＵは、自身に対応づけられたメモリへの高速なアクセスに対し、他のＣＰＵに対応づけられたメモリ（以下、「リモートのメモリ」と言う）に対するアクセス（本明細書では、「リモートアクセス」と言う）の効率が悪いという特性がある。すなわち、あるＣＰＵにおいて動作するプロセスが、リモートのメモリに格納されたデータを処理することは、処理効率の低下を招く。本明細書では、メモリアクセス性能が良い位置関係にあることを「近い」または「近傍」のように表現する。
【０００４】
複数のＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）が具備されている構成のコンピュータシステムにおいて、通信パケットの処理を行うＣＰＵは、通信を行うＮＩＣとＮＵＭＡノードとのハードウェア構成によって決まることが一般的な方法である。例えば、ＮＵＭＡアーキテクチャのコンピュータでは、ネットワークのセッション受付処理の際、プロセスをＣＰＵ間においてリスケジュールすることにより、ＮＩＣ近傍のＣＰＵがセッション受付処理を行う。この方法では、１つのソケットで待ち受けている通信に対して、受信データに対するアクセス効率が良いＣＰＵが処理を行うことができる。
【０００５】
しかし、これは、プロセスを実行するＮＩＣ近傍のＣＰＵと、元々プロセスが動作していたノードにあるプロセス自身のデータ（メモリ）との間のリモートアクセスを増やすことが少なくないので、通信処理としては必ずしも効率的ではなかった。なお、ここで「１つのソケット」とは、同じネットワークアドレス（例えば、ＩＰアドレスとポート番号との組み合わせなど）ということを指す。ＮＩＣの構成などによっては、１つのソケットで待ちうけることができるネットワークアドレスは複数であることがある。
【０００６】
このような問題に対して、特許文献１には、ＮＩＣが受信したデータを、処理を行うＣＰＵ（プロセス）の近傍に移動させる通信ユニットが開示されている。この特許文献１に開示された通信ユニットにおいては、ＮＩＣがデータを受信したとき、通信データに含まれる識別情報に基づいて、通信処理を行うＣＰＵに対応付けられたメモリに対して、受信データを転送する。このようにして、この通信ユニットは、通信処理におけるリモートアクセスの増加を防ぐことにより、処理効率を向上させることができる。
【０００７】
また、マルチプロセッサシステムの処理効率を向上させる方法として、以下のような関連文献が開示されている。
【０００８】
特許文献２には、優先度が低い処理を実行するスレッドの起動に際して、ＣＰＵおよびメモリの使用率が所定の範囲にある処理装置を割り当てることにより、効率的に処理を実行可能な処理制御装置を選択する処理制御装置が開示されている。
【０００９】
特許文献３には、通信媒体を介して接続し、互いのメモリを利用可能な計算機におけるリモートページ、およびリモートプロセッサに対し、発行されたシステムコールを最適なプロセッサでもって実行することにより、高速な処理が可能な計算機が開示されている。
【００１０】
特許文献４には、１つ以上のＣＰＵをグループ管理し、複数のグループのＣＰＵ負荷状態に基づいて選択した１つのグループからＣＰＵの貸出しを行うことにより、通信回線に結ばれた他の計算機上のプロセッサの資源を有効利用する方法が開示されている。
【００１１】
特許文献５には、他の装置のメモリを使用しているプロセスが、自装置のメモリに空き領域を調べ、空いている場合に、リモートのメモリの内容を、自装置のローカルメモリに移すことにより、情報処理効率を向上させる方法が開示されている。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２０１３−６９０６３号公報
【特許文献２】特許第４７７３８３５号
【特許文献３】特許第３５９１８８３号
【特許文献４】特開平０８−０７７０２６号公報
【特許文献５】特開平０７−１８２２９８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかしながら、特許文献１に開示された通信ユニットは、１つのソケットで待ち受けている（すなわち、同じ識別情報を持つ）通信に対する受信処理を、複数のプロセスに振り分ける場合には適用できないという課題がある。その理由は、特許文献１に開示された通信ユニットは、識別情報に基づいて、通信処理を行うＣＰＵを判別するので、１つのソケットで待ち受けている通信に対しては、同じＣＰＵに対応するメモリを受信データの転送先とするからである。すなわち、この通信ユニットは、１つのソケットで待ち受けている通信に対する受信処理を、複数のプロセスに振り分けることができない。したがって、この通信ユニットにおいては１つのプロセスに処理が集中することによる、効率の低下が発生するという課題がある。
【００１４】
また、特許文献２乃至５に開示された各装置または方法は、１つのソケットで待ち受けている通信に対する受信処理の振り分けを考慮していない。
【００１５】
本発明の１つの目的は、１つのソケットで待ち受けている通信に対する受信処理を、メモリアクセスの効率が良いように、複数のプロセスに対して振り分けることができる情報処理システムなどを提供することにある。
【課題を解決するための手段】
【００１６】
上記の目的を達成すべく、本発明の一態様に係る情報処理システムは、以下の構成を備えることを特徴とする。
【００１７】
すなわち、本発明の一態様に係る情報処理システムは、
それぞれ記憶装置を備えた複数のプロセッサと、
通信ネットワークから通信データを受信し、受信した前記通信データを、アクセス効率がより良い前記記憶装置に格納する通信制御手段と、
前記通信データが格納された物理メモリ位置に基づいて、前記物理メモリ位置に対するアクセス効率がより良い前記プロセッサを選択し、前記プロセッサにおいて動作する受信プロセスに対して、前記通信データの処理を割り当てる割当処理を行う接続待ち受け手段とを備える。
【００１８】
また、上記の同目的を達成すべく、本発明の一態様に係る制御方法は、情報処理システムによって、
通信ネットワークから通信データを受信し、
受信した前記通信データを、アクセス効率がより良い記憶装置に格納し、
前記通信データが格納された物理メモリ位置に基づいて、前記物理メモリ位置に対するアクセス効率がより良いプロセッサを選択し、
前記プロセッサにおいて動作する受信プロセスに対して、前記通信データの処理を割り当てる割当処理を行う。
【００１９】
また、同目的は、上記の各構成を有する情報処理システム、並びに対応する方法を、コンピュータによって実現するコンピュータ・プログラム、及びそのコンピュータ・プログラムが格納されている、コンピュータ読み取り可能な記憶媒体によっても達成される。
【発明の効果】
【００２０】
本発明には、それぞれメモリを備えた複数のプロセッサを含むコンピュータシステムにおいて、１つのソケットで待ち受けている通信に対する受信処理の効率を向上できるという効果がある。
【図面の簡単な説明】
【００２１】
【図１】本発明の第１の実施形態に係る情報処理システムの構成を示すブロック図である。
【図２】本発明の第２の実施形態に係る情報処理システムの構成を示すブロック図である。
【図３】第２の実施形態に係る情報処理システム１００の各部と待ち受けソケット情報２００との関係の一例を表す概念図である。
【図４】第２の実施形態に係る情報処理システム１００におけるフラグ付与の動作を示すフローチャートである。
【図５】第２の実施形態における接続待ち受け部１０２の受信したセッションに対する割当処理の動作を示すフローチャートである。
【図６】第２の実施形態における接続待ち受け部１０２の受付要求処理の動作を示すフローチャートである。
【図７】本発明の各実施形態、および、その変形例に係る情報処理システムに適用可能なコンピュータ（情報処理システム）の構成を例示する図である。
【発明を実施するための形態】
【００２２】
次に、本発明の実施形態について図面を参照して詳細に説明する。
【００２３】
＜第１の実施形態＞
図１は、本発明の第１の実施形態に係る情報処理システム１の構成を示すブロック図である。本実施形態に係る情報処理システム１は、それぞれ記憶装置を備えた複数のプロセッサ（ＣＰＵ）を含むコンピュータシステムである。本実施形態において、情報処理システム１は、一例として、２つのノードを有するが、これに限定されない。すなわち、情報処理システム１は、２つ以上のノードを含むことができる。
【００２４】
情報処理システム１は、ＣＰＵ１１およびＣＰＵ２１などを用いて実行されるコンピュータ・プログラム（ソフトウェア・プログラム）の制御により動作する一般的なマルチプロセッサの情報処理装置（コンピュータ）によって構成されても良い。または、情報処理システム１の各部が、専用のハードウェアデバイス、または論理回路によって構成されても良い。なお、情報処理システム１をコンピュータによって実現したハードウェア構成例については、図７を参照して後述する。
【００２５】
図１を参照すると、本実施形態に係る情報処理システム１は、ノード１０およびノード２０を有する。ノード２０は、接続待ち受け部２を除いて、ノード１０と基本的に同じ構成を有する。以下の説明においては、特別にノード２０に関して記述する部分を除き、ノード１０の各構成の説明をもって、ノード２０の各構成の説明に代えることができる。なお、情報処理システム１が有するノードは、３つ以上であってもよい。その場合、３つ目以降のノードは、ノード２０と同じ構成と動作である。
【００２６】
接続待ち受け部２は、情報処理システム１において、１つである。図１において、接続待ち受け部２は、一例として、ノード１０において動作するが、これに限定されない。例えば、接続待ち受け部２は、ノード２０において動作してもよい。なお、接続待ち受け部２は、いずれか１つのノードにおいて動作してもよいが、複数のノードにおいて、一部の機能を分散して動作してもよい。
【００２７】
ノード１０は、ＣＰＵ１１、通信制御部（ＮＩＣ）１２、接続待ち受け部２、記憶装置１４を有する。記憶装置１４は、通信データ情報１５を格納することができる。
【００２８】
ＣＰＵ１１は、記憶装置１４と対応づけられたプロセッサである。ＣＰＵ１１は、複数のＣＰＵを含んでもよい。ＣＰＵ１１は、ノード１０を制御することにより、情報処理システム１を制御することができる。
【００２９】
本実施形態においては、情報処理システム１に含まれる各ＣＰＵが、他のＣＰＵに対応づけられる記憶装置に対しても、アクセスすることが可能である。ただし、各ＣＰＵから各記憶装置に対するアクセス効率には、違いがあることを前提とする。また、本実施形態においては、メモリアドレスに基づいて、記憶装置が判別できる前提とする。なお、以下では、メモリアドレスを「物理メモリ位置」とも言う。
【００３０】
本実施形態において、自ノードに含まれる記憶装置が、各機能部にとって、アクセス効率の良い記憶装置である前提とする。すなわち、ある記憶装置に対してアクセス効率が良いＣＰＵとは、同じノードのＣＰＵである。例えば、本実施形態において、ＣＰＵ１１が自ノードに含まれる記憶装置１４にアクセスする際のアクセス効率は、ノード２０に含まれる記憶装置２４にアクセスする際のアクセス効率よりも良いこととする。また、記憶装置１４に対してアクセス効率が良いＣＰＵは、ＣＰＵ１１である。
【００３１】
ＮＩＣ１２は、インターネットや構内ＬＡＮ（ローカルエリアネットワーク）等の通信ネットワーク（以下、単に「ネットワーク」と言う）１０００を介した通信を制御することができる。ＮＩＣ１２は、ネットワーク１０００から通信データを受信し、受信した通信データを通信データ情報１５として、アクセス効率が良い記憶装置１４に格納することができる。本実施形態において、ＮＩＣ１２は、アクセス効率が良い記憶装置が記憶装置１４であることをあらかじめ知っていることとする。ＮＩＣ１２は、通信データ情報１５を受信したことを、接続待ち受け部２に対して通知する。
【００３２】
なお、ノード２０（ノード１０以外のノード）におけるＮＩＣ２２も、通信データ情報１５を受信したことを、ノード１０の接続待ち受け部２に対して通知する。
【００３３】
接続待ち受け部２は、通信データ情報１５が格納された物理メモリ位置に基づいて、その物理メモリ位置に対するアクセス効率が良いＣＰＵを選択する。そして、接続待ち受け部２は、選択したＣＰＵにおいて動作する受信プロセスに対して、通信データ情報１５の受信処理を割り当てる。なお、以下では、接続待ち受け部２のこのような一連の動作を「割当処理」とも言う。
【００３４】
記憶装置１４は、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）または、スタティックＲＡＭのような半導体メモリ装置などにより実現される。記憶装置１４は、通信データ情報１５を格納することができる。本実施形態において、記憶装置１４は、ノード１０に含まれる各部から最もアクセス効率が良い（近い、近傍の）記憶装置である。
【００３５】
通信データ情報１５は、ＮＩＣ１２がネットワーク１０００から受信した通信データを含む。通信データ情報１５は、ＮＩＣ１２によって、記憶装置１４に格納される。
【００３６】
次に、上述した構成を備える本実施形態の動作について詳細に説明する。まず、通信を行う前の準備段階の動作について説明する。
【００３７】
まず、ノード１０および２０において、それぞれ受信プロセス１６および２６が、１つのソケット（同じネットワークアドレス）に対する受信待ちを要求する受け付け要求を、接続待ち受け部２に対して発行する。なお、受信プロセス１６および２６は、あらかじめ各ノードにおいて生成されていることを前提とする。また、受信プロセス１６および２６は、それぞれノード１０および２０において効率的に動作できるように、受信プロセス自身のデータを主に記憶装置１４または２４に格納していることを前提とする。通知後、受信プロセス１６および２６は、接続（受信）待ち状態となる。
【００３８】
接続待ち受け部２は、各受信プロセスから通知を受けたことを内部に記憶する。
【００３９】
以上が、準備段階の動作である。
【００４０】
次に、情報処理システム１が、ネットワーク１０００から通信データを受信する際の動作を説明する。
【００４１】
例えば、初めに、ノード１０のＮＩＣ１２が、ネットワーク１０００からの接続要求を受信した場合、ＮＩＣ１２は、受信した通信データを含む通信データ情報１５を、記憶装置１４に保存する。そして、ＮＩＣ１２は、通信データ情報１５を受信したことを、接続待ち受け部２に対して通知する。
【００４２】
次に、接続待ち受け部２は、ＮＩＣ１２からの通知を受けて、通信データ情報１５が格納された物理メモリ位置に基づいて、その物理メモリ位置に対するアクセス効率が良いＣＰＵを選択する。具体的には、接続待ち受け部２は、通信データ情報１５の格納された物理メモリ位置（すなわち、記憶装置１４の中）に対して、アクセス効率が良いＣＰＵ１１を選択する。
【００４３】
そして、接続待ち受け部２は、選択したＣＰＵにおいて動作する受信プロセスに対して、通信データ情報１５の受信処理を割り当てる。具体的には、接続待ち受け部２は、選択したＣＰＵ１１において動作する受信プロセス１６に対して、通信データ情報１５の受信処理を割り当てる。
【００４４】
このようにして、受信プロセス１６が、ＮＩＣ１２が受信した通信データ情報１５に対する受信処理を行う。受信プロセス１６自身のデータも通信データ情報１５も自ノード１０の記憶装置１４にあるので、受信プロセス１６は、リモートアクセスを増加することなく、メモリアクセス効率が良い状態において受信処理を行うことができる。
【００４５】
次に、今度は、ノード２０のＮＩＣ２２が、ネットワーク１０００からの接続要求を受信した場合、ＮＩＣ２２は、受信した通信データを含む通信データ情報２５を、記憶装置２４に保存する。そして、ＮＩＣ２２は、通信データ情報２５を受信したことを、接続待ち受け部２に対して通知する。
【００４６】
接続待ち受け部２は、ＮＩＣ２２からの通知を受けて、通信データ情報２５の格納された物理メモリ位置（すなわち、記憶装置２４の中）に対して、アクセス効率が良いＣＰＵ２１を選択する。
【００４７】
そして、接続待ち受け部２は、選択したＣＰＵ２１において動作する受信プロセス２６に対して、通信データ情報２５の受信処理を割り当てる。
【００４８】
このようにして、今度は、受信プロセス２６が、ＮＩＣ２２が受信した通信データ情報２５に対する受信処理を行う。受信プロセス２６自身のデータも通信データ情報２５も自ノード２０の記憶装置２４にあるので、受信プロセス２６も、リモートアクセスを増加することなく、メモリアクセス効率が良い状態において受信処理を行うことができる。
【００４９】
以上説明したように、本実施形態には、１つのソケットで待ち受けている通信に対する受信処理を、受信したＮＩＣに応じて、メモリアクセスの効率が良いように複数のプロセスに対して振り分けることができるという効果がある。これにより、あるＮＩＣを介して通信されるセッション群は、そのＮＩＣが利用する記憶装置に対してアクセス効率の良い位置の受信プロセスが担当するので、メモリのリモートアクセスやキャッシュ競合が減少するという効果も生じる。また、受信したＮＩＣに応じた振り分けが可能であることから、本実施形態には、ＮＩＣの構成変更およびＩＰアドレスの変更などの際に、情報処理システム１の設定変更を行う必要がないという効果もある。
【００５０】
その理由は、接続待ち受け部２が、通信データ情報１５が格納された物理メモリ位置に基づいて、その物理メモリ位置に対するアクセス効率が良いＣＰＵを選択し、そのＣＰＵにおいて動作する受信プロセスに対して処理を割り当てることができるからである。すなわち、本実施形態は、「背景技術」欄に記述した一般的な方法のようにＮＩＣが受信する前に処理を行う受信プロセスを定めるのではなく、受信したＮＩＣに応じて、複数の受信プロセスの中から、アクセス効率が良い受信プロセスを選択することができるからである。
【００５１】
さらに、ネットワークマルチパス（ボンディング）、またはリンクアグリゲーションなどの技術によってＮＩＣが仮想化されている場合にも、ＩＰアドレスと受信プロセスの間の関連付けが制御できるので、効率的な運用が可能になるという効果がある。
【００５２】
ネットワークマルチパス（ボンディング）とは、１つの情報処理システムに搭載した複数のＮＩＣを、１つの仮想的なＮＩＣとして扱う技術である。また、リンクアグリゲーションとは、複数の物理リンクを束ねて、１つの論理リンクとして扱う通信制御技術である。どちらの技術も、一つのソケットで待ち受けている通信に対して、ネットワークの通信回線およびＮＩＣの負荷を分散することにより、多数のセッションの通信を処理可能とすることができる。しかし、一般的な情報処理システムでは、これらの通信制御技術によって、着信するＮＩＣを分散しても、ＩＰアドレスとＮＩＣとを関連付ける仕組みがないことにより、受信プロセスを効率よく割り当てることができないという課題があった。
【００５３】
本実施形態によれば、あらかじめ複数の受信プロセスを各ノードの負荷を考慮して分散配置しておくことにより、情報処理システム１が、各ＮＩＣに効率よく分散して着信することに連動して、効率の良い受信プロセスの割り当てが可能になるという効果がある。
【００５４】
＜第２の実施形態＞
次に、上述した第１の実施形態を基本とする第２の実施形態について説明する。以下では、第２の実施形態に係る特徴的な部分を中心に説明し、第１の実施形態と同様な構成を有する第２の実施形態の構成要素には、第１の実施形態で付した参照符号と同一の参照符号を付し、その構成要素について重複する詳細な説明は省略する。
【００５５】
まず、図２を参照して、以下に本実施形態の構成を説明する。図２は、本発明の第２の実施形態に係る情報処理システム１００の構成を示すブロック図である。
【００５６】
本実施形態は、第１の実施形態を、ＮＵＭＡアーキテクチャの情報処理システム１００に適用した具体例である。ＮＵＭＡアーキテクチャの構造および特性は、「背景技術」欄において上述した通りである。
【００５７】
また、本実施形態では、ソケット通信を具体例として、情報処理システム１００が、受信プロセスおよび着信する通信セッションを管理する様子を詳細に説明する。したがって、本実施形態は、ソケット通信における管理に利用されるアフィニティ指定部１０１および待ち受けソケット情報２００とを含む点が、上述した第１の実施形態と異なる。また、本実施形態は、接続待ち受け部１０２が、アフィニティ指定部１０１および待ち受けソケット情報２００とを用いて、通信を管理する点が、上述した第１の実施形態と異なる。
【００５８】
図２を参照すると、本実施形態に係る情報処理システム１００は、４つのＮＵＭＡノード１１０〜１４０を含む。本実施形態において、情報処理システム１００は、一例として、４つのＮＵＭＡノードを有するが、これに限定されない。すなわち、情報処理システム１００は、２つ以上のＮＵＭＡノードを含むことができる。
【００５９】
情報処理システム１００は、情報処理システム１を基本とする。すなわち、情報処理システム１００は、ＮＵＭＡノード１１０〜１４０に含まれるＣＰＵを用いて実行されるコンピュータ・プログラム（ソフトウェア・プログラム）の制御により動作する一般的なマルチプロセッサの情報処理システム（コンピュータ）によって構成されても良い。または、情報処理システム１００の各部が、専用のハードウェアデバイス、または論理回路によって構成されても良い。なお、情報処理システム１００をコンピュータによって実現したハードウェア構成例については、図７を参照して後述する。
【００６０】
ＮＵＭＡノード１２０〜１４０は、アフィニティ指定部１０１、接続待ち受け部１０２、および待ち受けソケット情報２００を除いて、ＮＵＭＡノード１１０と基本的に同じ構成を有する。以下の説明においては、特別にＮＵＭＡノード１２０〜１４０に関して記述する部分を除き、ＮＵＭＡノード１１０の各構成の説明をもって、ＮＵＭＡノード１２０〜１４０の各構成の説明に代えることができる。アフィニティ指定部１０１、接続待ち受け部１０２、および待ち受けソケット情報２００は、情報処理システム１００において、１つである。図２において、これら３つは、一例として、ＮＵＭＡノード１１０において動作するが、これに限定されない。なお、これら３つは、いずれか１つのノードにおいて動作してもよいが、複数のノードにおいて、一部の機能を分散して動作してもよい。また、本実施形態において、これら３つは、情報処理システム１００を制御するオペレーティングシステム（ＯＳ：Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）に含めてもよい。
【００６１】
なお、図２において、ＮＵＭＡノード１３０および１４０の各部は省略されているが、ＮＵＭＡノード１３０および１４０は、ＮＵＭＡノード１２０と同様の構成を有する。ＮＵＭＡノード１３０の各部の符号は、ＮＵＭＡノード１２０の各部の符号「２１」〜「２６」を、「３１」〜「３６」と置き替えることにより表される。同様にＮＵＭＡノード１４０の各部の符号は、ＮＵＭＡノード１２０の各部の符号「２１」〜「２６」を、「４１」〜「４６」と置き替えることにより表される。
【００６２】
ＮＵＭＡノード１１０は、受信プロセス１６、ＣＰＵ１１、通信制御部（ＮＩＣ）１２、アフィニティ指定部１０１、接続待ち受け部１０２、記憶装置１４を有する。記憶装置１４は、通信データ情報１５、および待ち受けソケット情報２００を格納することができる。
【００６３】
本実施形態においても、各ＣＰＵと各記憶装置のアクセス範囲およびアクセス効率における特徴は、第１の実施形態と同様である。例えば、本実施形態においても、情報処理システム１００に含まれる各ＣＰＵが、他のＣＰＵに対応づけられる記憶装置に対して、アクセスすることが可能である。本実施形態においては、自ノードに含まれる記憶装置が、各機能部にとって、もっともアクセス効率の良い（最近傍の）記憶装置である。
【００６４】
なお、ＮＵＭＡアーキテクチャの特性の１つとして、本実施形態においては、情報処理システム１００に含まれる全ＣＰＵが、共通のメモリアドレス空間を持つ前提とする。したがって、本実施形態においては、各記憶装置は、物理アドレスの範囲（開始アドレスから終了アドレスまで）によって識別可能である。例えば、接続待ち受け部１０２は、各記憶装置の物理アドレスの範囲を表す情報をあらかじめ持つことにより、通信データ情報１５の物理アドレスから、それを格納する記憶装置が、記憶装置１４であることを知ることができる。
【００６５】
ＣＰＵ１１、ＮＩＣ１２、記憶装置１４、通信データ情報１５の構成および動作は、上述した以外は、第１の実施形態における同名の機能部と同様であるので、重複する詳細な説明は省略する。
【００６６】
受信プロセス１６は、第１の実施形態における受信プロセス１６を基本とする。すなわち、受信プロセス１６は、ＣＰＵ１１において動作する。また、受信プロセス１６は、ノード１０において効率的に動作できるように、受信プロセス１６自身のデータを主に記憶装置１４に格納している。ただし、本実施形態においては、受信プロセス１６は、図示しないアプリケーションなどによって起動される。
【００６７】
アフィニティ指定部１０１は、受信プロセス１６〜４６（または、図示しないアプリケーションなど）から要求を受けて、接続待ち受け部１０２に対して、「近傍ＣＰＵ優先起床フラグ２０１」を指定する。近傍ＣＰＵ優先起床フラグ２０１は、接続待ち受け部１０２に対して、本実施形態による通信制御の実行を指定する設定情報である。近傍ＣＰＵ優先起床フラグが指定されない場合、接続待ち受け部１０２は、一般的なソケット通信が指定されたと解釈する。
【００６８】
接続待ち受け部１０２は、第１の実施形態における接続待ち受け部２を基本とする。本実施形態においては、接続待ち受け部１０２は、受信プロセス１６〜４６、ＮＩＣ１２〜４２を介して受信するセッション、および、近傍ＣＰＵ優先起床フラグ２０１を登録することができる待ち受けソケット情報２００を生成する。
【００６９】
以下に、待ち受けソケット情報２００の詳細な構造を、図３を参照して説明する。図３は、第２の実施形態に係る情報処理システム１００の各部と待ち受けソケット情報２００との関係の一例を表す概念図である。
【００７０】
図３を参照すると、待ち受けソケット情報２００は、近傍ＣＰＵ優先起床フラグ２０１と、各ＣＰＵ１１〜４１に対応する待ちキュー２１１〜２１４およびセッションキュー２２１〜２２４とを含むことができる。近傍ＣＰＵ優先起床フラグ２０１は、アフィニティ指定部１０１を介して、当該フラグが指定されたことを表す情報を含むことができる。待ちキュー２１１〜２１４は、受信待ち状態の受信プロセス１６〜４６を表す情報を、各ＣＰＵ１１〜４１ごとに登録することができるキューである。セッションキュー２２１〜２２４は、各ＮＩＣ１２〜４２に着信したセッションを処理する受信プロセスがない場合に、到着（受信）済みのセッションを登録することができるキューである。接続待ち受け部１０２は、待ちキュー２１１〜２１４、およびセッションキュー２２１〜２２４を、先入れ先出し（ＦＩＦＯ：Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）によって処理する。
【００７１】
接続待ち受け部１０２は、各ＮＩＣ１２〜４２から各通信データ情報１５〜４５の受信を通知されたとき、待ちキュー２１１〜２１４に基づいて、受信プロセス１６〜４６を選択する。そして、接続待ち受け部１０２は、選択した受信プロセスに対して各通信データ情報１５〜４５の処理を割り当てることができる。また、接続待ち受け部１０２は、各受信プロセス１６〜４６から受付要求を受けたとき、セッションキュー２２１〜２２４に基づいて、受信プロセス１６〜４６に対して、処理待ち状態のセッション（通信データ情報１５〜４５のいずれか）の処理を割り当てることができる。
【００７２】
接続待ち受け部１０２は、これらの割り当て処理の際に、第１の実施形態を基本とする選択処理を実行する。すなわち、接続待ち受け部１０２は、各通信データ情報１５〜４５の物理アドレスに基づいて、受信処理が可能な受信プロセス１６〜４６から、最もメモリアクセス効率の良い受信プロセス１６〜４６を選択する。
【００７３】
次に、上述した構成を備える本実施形態の動作について詳細に説明する。初めに、本実施形態の理解の参考として、一般的なソケット通信における処理の概要を簡単に説明する。一般的なソケット通信においてデータの受信処理が可能になるまでには、ソケット生成処理と、受付要求処理と、セッション受付処理との３段階の処理がある。
【００７４】
まず、ソケット生成処理が実行される。情報処理システムにおいて、アプリケーションがデータの受信を行おうとする場合、まず、アプリケーションは、ＯＳの機能（ｌｉｓｔｅｎシステムコール等）を呼び出す。そして、ＯＳの一般的な機能を有する接続待ち受け部が、システムコールの呼び出しに対して、一般的な待ち受けソケットを生成する。
【００７５】
上記のソケット生成処理の後、受付要求処理が実行される。アプリケーションによって生成された受信プロセスが、その待ち受けソケットを指定して、受付要求（ａｃｃｅｐｔシステムコール等）を呼び出す。接続待ち受け部は、受付要求に応じて、待ち受けソケットに含まれる「待ちキュー」に受信プロセスを表す情報を登録する（以下、「受信プロセスを登録する」のように省略する）。受信プロセスは、接続待ち受け部から受付要求が返されるまで、受信待ち状態となる（休眠する）。
【００７６】
上記の受付要求処理の後、情報処理システムは、通信相手であるクライアントからのセッション要求を受け付けるセッション受付処理が実行可能となる。以下に、セッション受付処理の動作を説明する。
【００７７】
セッション受付処理は、情報処理システムのＮＩＣが、クライアントからセッション要求（ＳＹＮ（ｓｙｎｃｈｒｏｎｉｚｅ）パケット）を受信することにより開始される。ＳＹＮパケットは、ＣＰＵまたはメモリごとに配置されたいずれかのＮＩＣを介して、通信データ情報としてメモリに格納される。セッション要求の受信後、接続待ち受け部などが、クライアントに対してＳＹＮＡＣＫ（ＳＹＮ  ａｃｋｎｏｗｌｅｄｇｍｅｎｔ）パケットを送信し、それに対する応答のＡＣＫパケットを受信することにより、セッションが成立する。
【００７８】
セッションが成立すると、接続待ち受け部は、そのセッションに対する割当処理を行う。すなわち、接続待ち受け部は、成立したセッションに関するＩＰアドレス、およびポート番号を含むネットワークアドレスなどに基づいて、そのセッションを適切な待ち受けソケットに振り分ける。接続待ち受け部は、その待ち受けソケットの待ちキューに登録されている受信プロセスがあれば、その受信プロセスを起床することにより、セッションの通信データ情報の処理を割り当てる。もし、受信待ち状態の受信プロセスが１つもない場合は、接続待ち受け部は、待ち受けソケットに含まれる「セッションキュー」に、成立したセッションをチェーン（登録）した後、受信プロセスから新たな受付要求が到着するまで待つ。そして、接続待ち受け部は、その後、受付要求を発行した受信プロセスに対して、セッションキューに登録されていたセッション（通信データ情報）の処理を割り当てる。以上が、セッション受付処理である。
【００７９】
最終的に、通信データ情報の処理を割り当てられた受信プロセスが、そのセッションに対する受信処理を行う。
【００８０】
一般的なソケット通信において、上記の「待ちキュー」および「セッションキュー」は、待ち受けソケットに対して単一のキューとして構成されている。
【００８１】
このような一般的なソケット通信における処理を踏まえて、以下に、本実施形態に係る情報処理システム１００の動作を説明する。本実施形態における処理は、上記の一般的なソケット通信の処理を基本として、それぞれの段階において、処理の追加、または、一部の処理の変更を行うことにより実現される。
【００８２】
まず、図４を参照して、ソケット生成処理の後に行われる本実施形態の動作を説明する。図４は、第２の実施形態に係る情報処理システム１００におけるフラグ付与の動作を示すフローチャートである。
【００８３】
まず、情報処理システム１００において、アプリケーション（図示せず）が、データの受信に際して、上述した一般的なソケット生成処理を実行する。なお、上記の一般的なソケット通信の処理の説明における「接続待ち受け部」は、「接続待ち受け部１０２」に読み替えてもよい。ソケット生成処理が終了した時点における「待ち受けソケット」は、まだ一般的なソケット通信におけるそれである。なお、この動作説明において、ソケットは、情報処理システム１００に含まれるすべてのＮＩＣ１２〜４２から受信できるように生成される前提とする。この状態において、図４に示すフラグ付与の動作を実行する。
【００８４】
図４を参照すると、まず、アプリケーションによって生成された受信プロセス１６〜４６の何れか（またはアプリケーション）が、アフィニティ指定部１０１を介して、生成された待ち受けソケットに対する近傍ＣＰＵ優先起床フラグ付与を要求する（ステップＡ１００）。例えば、受信プロセス１６〜４６は、生成された待ち受けソケットを指定して、フラグ付与を要求するシステムコールを呼び出すなどの方法により、アフィニティ指定部１０１に対して、フラグ付与の要求を行う。
【００８５】
アフィニティ指定部１０１は、接続待ち受け部１０２に対して、指定された待ち受けソケットの情報と、近傍ＣＰＵ優先起床フラグ付与の要求を受けたことを伝える。接続待ち受け部１０２は、指定された待ち受けソケット情報に対して、近傍ＣＰＵ優先起床フラグ２０１を設定する（ステップＢ１１０）。
【００８６】
次に、接続待ち受け部１０２は、指定された待ち受けソケット情報に対して、情報処理システム１００に含まれる各ＣＰＵ１１〜４１ごとの待ちキュー、および、セッションキューを拡張する（ステップＢ１１１）。具体的には、接続待ち受け部１０２は、情報処理システム１００に含まれるＣＰＵの数（４つ）に対応する待ち受けキュー２１１〜２１４と、セッションキュー２２１〜２２４とを生成する。このようにして、一般的な待ち受けソケット情報は、図３に示す待ち受けソケット情報２００のように拡張される。以上が、フラグ付与の動作である。
【００８７】
次に、情報処理システム１００において、上述した一般的な受付要求処理に替えて、図６に示す、本実施形態に係る受付要求処理が実行される。図６は、第２の実施形態における接続待ち受け部１０２の受付要求処理の動作を示すフローチャートである。以下では、図３に示す受信プロセス１６が受付要求（ａｃｃｅｐｔシステムコール等）を呼び出した場合を具体例として、受付要求処理の動作を説明する。
【００８８】
まず、受信プロセス１６が、待ち受けソケット情報２００を指定して、受付要求を呼び出すと、接続待ち受け部１０２が、図６に示す動作を実行する。
【００８９】
図６を参照すると、接続待ち受け部１０２は、まず、待ち受けソケット情報２００において、近傍ＣＰＵ優先起床フラグ２０１が設定されているかどうかを確認する（ステップＤ３０１）。
【００９０】
近傍ＣＰＵ優先起床フラグ２０１が設定されていない（すなわち、一般的なソケット通信が指定されている）場合、接続待ち受け部１０２は、一般的な受付要求の処理として、セッションキューの先頭のセッションを割り当てる（ステップＤ３０２）。このときのセッションキューは、一般的な待ち受けソケットに含まれるキューである。一般的な受付要求の処理の結果、受付要求を呼び出した受信プロセスは、割り当てられたセッションの処理が可能になる。
【００９１】
一方、ステップＤ３０１において、近傍ＣＰＵ優先起床フラグ２０１が設定されている場合、接続待ち受け部１０２は、受付要求を呼び出した受信プロセス１６が動作するＣＰＵ１１に対して、対応付けられているセッションキュー２２１を選択する（ステップＤ３１０）。
【００９２】
そして、接続待ち受け部１０２は、選択したセッションキュー２２１にセッションが登録されているかどうかを確認する（ステップＤ３１１）。なお、セッションキューに対するセッション登録の動作は、セッション受付処理の動作説明において後述する。
【００９３】
選択したセッションキュー２２１においてセッションが登録されている場合、接続待ち受け部１０２は、受付要求を呼び出した受信プロセス１６に対して、選んだセッションキュー２２１の先頭のセッションを割り当てる（ステップＤ３１２）。すなわち、図３に示す具体例の場合、接続待ち受け部１０２（図２）は、受信プロセス１６に対して、通信データ情報１５の処理を割り当てる。
【００９４】
この結果、受付要求を呼び出した受信プロセス１６が、最もアクセス効率良く処理することができるＮＩＣ１２に到着済みのセッション（通信データ情報１５）の受信処理を行うことが可能になる。その理由は、受信プロセス１６は、セッションの通信データ情報１５と、プロセス自身のデータとの両方に対して、リモートアクセスなしに効率良くアクセスすることができるからである。
【００９５】
一方、ステップＤ３１１において、選択したセッションキュー２２１にセッションが登録されていない場合、接続待ち受け部１０２は、他のセッションキューにセッションが登録されているかどうかを確認する（ステップＤ３２０）。セッションが登録されている場合、接続待ち受け部１０２は、他のセッションキューから、セッションが登録されているキューを１つ選ぶ。なお、このとき、接続待ち受け部１０２は、ＣＰＵ１１になるべく近いＮＵＭＡノードのＣＰＵに対応づけられたセッションキューを選んでもよい。例えば、図２、図３において、ＣＰＵ１１からＮＵＭＡノード１２０の記憶装置２４の方が、ＮＵＭＡノード１３０および１４０の記憶装置３４および４４よりもアクセス効率が良い（近い）前提とする。この場合、接続待ち受け部１０２は、まず、ＮＵＭＡノード１２０のＣＰＵ１２に対応づけられたセッションキュー２２２を確認してもよい。
【００９６】
ステップＤ３２０においてセッションが登録されているセッションキューを選べた場合、接続待ち受け部１０２は、受付要求を呼び出した受信プロセス１６に対して、選んだセッションキューの先頭のセッションを割り当てる（ステップＤ３１２）。具体的には、接続待ち受け部１０２は、受信プロセス１６に対して、セッションキュー２２２に登録されたセッション（通信データ情報２５）の受信処理を割り当てる。
【００９７】
この結果、受付要求を呼び出した受信プロセス１６が、情報処理システム１００に到着済みのセッションの中では、比較的アクセス効率良く処理することができるセッション（通信データ情報２５）の受信処理を行うことが可能になる。
【００９８】
一方、ステップＤ３２０において、セッションが登録されたセッションキューが一つもない場合、接続待ち受け部１０２は、受付要求を呼び出した受信プロセス１６を、受信プロセス１６が動作するＣＰＵ１１に対応する待ちキュー２１１に登録する（ステップＤ３２１）。このようにして、接続待ち受け部１０２は、受付要求を呼び出した受信プロセス１６が動作するＣＰＵ１１に対応するセッションキュー２２１を最優先として、受信プロセス１６にセッションの処理を割り当てることができる。また、まだセッションが着信していない場合、接続待ち受け部１０２は、受信プロセス１６〜４６が動作するＣＰＵ１１〜４１ごとに分けて、受付要求を呼び出した受信プロセス１６〜４６を待ちキュー２１１〜２１４に登録することができる。
【００９９】
以上が、本実施形態に係る受付要求処理の動作である。
【０１００】
次に、情報処理装置１００が、図示しないクライアントから送られたセッション要求を受信した場合に行う、セッション受付処理を説明する。セッション要求（ＳＹＮパケット）が到着したとき、受信したＮＩＣ１２〜４２のいずれかが、そのＳＹＮパケットを含む通信データ情報１５〜４５を自ノードの記憶装置１４〜４４に格納する。その後、接続待ち受け部１０２が、図５に示す割当処理を含むセッション受付処理を行う。
【０１０１】
図５は、第２の実施形態における接続待ち受け部１０２の受信したセッションに対する割当処理の動作を示すフローチャートである。図５に示す割当処理は、上述した一般的なセッション受付処理に含まれる割当処理に替えて実行される。以下では、図３に示す待ちキュー２１１〜２１４の状態において、ＮＩＣ１２がセッション要求を受信した場合を具体例として、セッション受付処理の動作を説明する。なお、図３に示す待ちキュー２１１〜２１４の状態とは、待ちキュー２１１、２１３および２１４には、受信待ち状態の受信プロセスが登録されている状態である。また、このとき、待ちキュー２１２には、受信プロセスが登録されていない状態である。
【０１０２】
まず、ＮＩＣ１２が、クライアントから送られたセッション要求を受信すると、受信した通信データを含む通信データ情報１５を、記憶装置１４に保存する。そして、ＮＩＣ１２は、通信データ情報１５を受信したことを、接続待ち受け部１０２に対して通知する。このときのＮＩＣ１２の動作は、第１の実施形態と同様である。
【０１０３】
本実施形態では、接続待ち受け部１０２は、このとき、セッションが成立するまでの処理を実行する。
【０１０４】
セッションが成立すると、接続待ち受け部１０２は、そのセッションに対する受信処理を行う受信プロセスを割り当てる割当処理を行う。
【０１０５】
図５を参照すると、接続待ち受け部１０２は、まず、待ち受けソケット情報２００において、近傍ＣＰＵ優先起床フラグ２０１が設定されているかどうかを確認する（ステップＣ２０１）。
【０１０６】
近傍ＣＰＵ優先起床フラグ２０１が設定されていない（すなわち、一般的なソケット通信が指定されている）場合、接続待ち受け部１０２は、一般的な割当処理として、待ちキューの先頭の受信プロセスにそのセッションの処理を割り当てる（ステップＣ２０２）。このときの待ちキューは、一般的な待ち受けソケットに含まれるキューである。一般的な割当処理の結果、割り当てを受けた受信プロセスが、受信されたセッションに対する受信処理を行うことが可能になる。
【０１０７】
一方、ステップＣ２０１において、近傍ＣＰＵ優先起床フラグ２０１が設定されている場合、接続待ち受け部１０２は、ＮＩＣ１２によって通知された通信データ情報１５に対して、最近傍のＣＰＵ１１を選択する（ステップＣ２１０）。すなわち、接続待ち受け部１０２は、通信データ情報１５が格納された物理メモリ位置に基づいて、その物理メモリ位置に対するアクセス効率が良いＣＰＵを選択する。具体的には、例えば、ＮＩＣ１２がセッション要求を受信した場合、接続待ち受け部１０２は、通信データ情報１５の物理アドレスに基づいて、最近傍のＣＰＵ１１を選択する。
【０１０８】
通信データ情報１５の物理アドレスに基づいて最近傍のＣＰＵ１１を選択する方法には様々な方法がある。例えば、接続待ち受け部１０２が、あらかじめ、共通のメモリアドレス空間における各記憶装置１４の対応範囲を示す開始物理アドレスおよび終了物理アドレスを含むマッピング情報などを保持してもよい。そして、接続待ち受け部１０２は、例えば、通信データ情報１５の開始位置を示す物理アドレスを、そのマッピング情報と照合することにより、対応する記憶装置１４を判別してもよい。最終的に、接続待ち受け部１０２は、判別した記憶装置１４に対して最近傍のＣＰＵであるＣＰＵ１１を、通信データ情報１５の最近傍のＣＰＵ１１として選択することができる。
【０１０９】
そして、接続待ち受け部１０２は、選択した最近傍のＣＰＵ１１に対応する待ちキュー２１１に、受信プロセス１６〜４６が登録されているかどうかを確認する（ステップＣ２１１）。
【０１１０】
最近傍のＣＰＵに対応する待ちキュー２１１に、受信プロセス１６が登録されている場合、接続待ち受け部１０２は、受信したセッションに対して、選択した待ちキュー２１１の先頭の受信プロセス１６を割り当てる（ステップＣ２１２）。すなわち、接続待ち受け部１０２は、休眠している受信プロセス１６を起床することにより、通信データ情報１５の処理を割り当てる。
【０１１１】
この結果、起床された受信プロセス１６が、最もアクセス効率よく処理することができるＮＩＣ１２に到着したセッションの受信処理を行うことが可能になる。
【０１１２】
一方、ステップＣ２１１において、最近傍のＣＰＵに対応する待ちキューに、受信プロセスが登録されていない場合、接続待ち受け部１０２は、他のセッションキューにセッションが登録されているかどうかを確認する（ステップＣ２２０）。ここでは、ＮＩＣ２２がセッション要求を受信した場合を、具体的として説明する。ＮＩＣ２２がセッション要求を受信すると、通信データ情報２５が記憶装置２４に格納される。したがって、最近傍のＣＰＵは、ＣＰＵ２１である。最近傍のＣＰＵに対応する待ちキュー２１２には、受信プロセスが登録されていない。
【０１１３】
このとき、接続待ち受け部１０２は、他の待ちキュー２１１、２１３、または２１４から、受信プロセスが登録されているキューを１つ選ぶ。なお、このとき、接続待ち受け部１０２は、ＣＰＵ２１になるべく近いＮＵＭＡノードのＣＰＵに対応づけられた待ちキューを選んでもよい。例えば、図２、図３において、ＣＰＵ２１が動作するＮＵＭＡノード１２０に隣接するＮＵＭＡノード１１０または１３０の記憶装置１４または３４の方が、ＮＵＭＡノード１４０の記憶装置４４よりもアクセス効率が良い（近い）とする。この場合、接続待ち受け部１０２は、ＮＵＭＡノード１１０または１３０のＣＰＵ１１または１３に対応づけられた待ちキュー２１１または２１３を確認してもよい。ここでは、接続待ち受け部１０２は、待ちキュー２１３を選択したこととする。
【０１１４】
ステップＣ２２０において受信プロセスが登録されている待ちキューを選べた場合、接続待ち受け部１０２は、受信したセッションに対して、選んだ待ちキュー２１３の先頭の受信プロセス４６を割り当てる（ステップＣ２１２）。すなわち、接続待ち受け部１０２は、休眠している受信プロセス３６を起床することにより、通信データ情報２５の処理を割り当てる。
【０１１５】
この結果、起床された受信プロセス３６が、比較的アクセス効率良く処理することができる、隣のＮＵＭＡノード１２０のＮＩＣ２２に到着したセッションの受信処理を行うことが可能になる。このように、接続待ち受け部１０２は、受信処理を行うことが可能な受信プロセスにおいて、最も近い受信プロセスを選んで受信処理を割り当てることができる。
【０１１６】
一方、ステップＣ２２０において、受信プロセスが登録された待ちキューが一つもない場合、接続待ち受け部１０２は、受信した通信データを含む通信データ情報１５〜４５に対して最近傍のＣＰＵ１１〜４１を選ぶ。そして、接続待ち受け部１０２は、到着したセッション（通信データ情報１５〜４５）を示す情報を、その最近傍のＣＰＵ１１〜４１に対応するセッションキュー２２１〜２２４に登録する（ステップＣ２２１）。このようにして、接続待ち受け部１０２は、受信した通信データを含む通信データ情報に最近傍のＣＰＵに対応する待ちキューを最優先として、その通信データ情報に対するアクセス効率が良い受信プロセスに受信処理を割り当てることができる。また、セッションが到着したときに、受信待ち状態の受信プロセスがない場合、接続待ち受け部１０２は、ＣＰＵ１１〜４１ごとに、セッションの通信データを含む通信データ情報１５〜４５を、到着したセッション（通信データ情報）に最近傍のＣＰＵに対応するセッションキュー２２１〜２２４に登録することができる。以上が、本実施形態に係る割当処理の動作である。
【０１１７】
このようにして、本実施形態には、上述した第１の実施形態と同様の効果に加えて、さらに、一般的なソケット通信との共存ができるという効果もある。
【０１１８】
その理由は、アフィニティ指定部１０１が、受信プロセスまたはアプリケーションなどから要求を受けて、本実施形態に係る通信制御の実行を指定する近傍ＣＰＵ優先起床フラグ２０１を指定することができるからである。また、接続待ち受け部１０２は、近傍ＣＰＵ優先起床フラグ２０１の指定に応じて、一般的なソケット通信と本実施形態に係る通信制御とを切り替えることができるからである。
【０１１９】
なお、接続待ち受け部１０２が、必ずしも、一般的なソケット通信の処理を実行しなくてもよい。例えば、図５のステップＣ２０２、セッション受付処理におけるセッションが成立するまでの処理、および図６のステップＤ３０２などは、一般的なＯＳなどによって実行されてもよい。
【０１２０】
また、本実施形態では、説明を簡潔にするために、すべてのＮＵＭＡノードに受信プロセスおよびＮＩＣがある構成としたが、これに限定されない。すなわち、複数のＮＵＭＡノードのうち、受信プロセスが動作しないＮＵＭＡノードがあってもよい。また、ＮＩＣを備えていないＮＵＭＡノードがあってもよい。
（第２の実施形態の変形例）
なお、本実施形態の変形例としては以下のようなものが考えられる。
【０１２１】
例えば、図５のステップＣ２１１および２２０において、接続待ち受け部１０２は、最近傍のＣＰＵに対応する待ちキューに、受信プロセスが登録されていない場合（ステップＣ２１１）、すぐに他の待ちキュー（次善）を確認する（ステップＣ２２０）が、これに限らない。すなわち、接続待ち受け部１０２は、ステップＣ２１１の後、タイマーなどにより、一定の期間待機してから、ステップＣ２２０を実行してもよい。これにより、接続待ち受け部１０２は、最近傍のＣＰＵで動作する受信プロセス（最善）が出現することを待つことができる。
【０１２２】
同様に、図６のステップＤ３１１およびＤ３２０において、接続待ち受け部１０２は、選択したセッションキュー２２１にセッションが登録されていない場合（ステップＤ３１１）、すぐに他のセッションキュー(次善)を確認する（ステップＤ３２０）が、これに限らない。すなわち、接続待ち受け部１０２は、ステップＤ３１１の後、タイマーなどにより、一定の期間待機してから、ステップＤ３２０を実行してもよい。これにより、接続待ち受け部１０２は、最もアクセス効率良く処理できるセッション（最善）が到着することを待つことができる。
【０１２３】
また、他の変形例として、接続待ち受け部１０２は、セッションに対する受信プロセスを割り当てる割当処理において、通信データ情報に対して最近傍のＣＰＵを選択した後（ステップＣ２１０）、受信待ち状態である受信プロセスに対して、最近傍のＣＰＵを通知してもよい。または、接続待ち受け部１０２は、図５に示すステップＣ２１０以降の割当処理に替えて、受信待ち状態である受信プロセスに対して、セッション要求を受信したＮＩＣを通知してもよい。
【０１２４】
この場合、あらかじめ起動しておく受信プロセスは、１つだけにすることができる。すなわち、セッション要求を受信してから、あらかじめ起動している受信プロセスが、上記の最近傍のＣＰＵの通知に基づいて、最適な受信処理を実行できる受信プロセスを新たに起動して受信処理を割り当てることができる。または、あらかじめ起動している受信プロセスが、セッション要求を受信したＮＩＣの通知に基づいて、当該セッションの処理に最適なＣＰＵを決定し、そのＣＰＵにおいて新たに起動した受信プロセスに対して受信処理を割り当てることができる。なお、このとき、待ちキュー２１１〜２１４は１つでよいので、待ち受けソケット情報２００の構造と管理が簡易になるという効果もある。以上が、変形例である。
【０１２５】
なお、上述した各実施形態において図１および図２に示した各部は、それぞれ独立したハードウェア回路で構成されていてもよいし、ソフトウェアプログラムの機能（処理）単位（ソフトウェアモジュール）と捕らえることができる。
【０１２６】
ただし、これらの図面に示した各部の区分けは、説明の便宜上の構成であり、実装に際しては、様々な構成が想定され得る。このような場合のハードウェア環境の一例を、図７を参照して説明する。
【０１２７】
図７は、本発明の各実施形態、および、その変形例に係る情報処理システムに適用可能なコンピュータ（情報処理装置）の構成を例示する図である。すなわち、図７は、上述した各実施形態における情報処理システム１、および１００の少なくとも何れかを実現可能なコンピュータの構成であって、上述した各実施形態における各機能を実現可能なハードウェア環境を示す。
【０１２８】
図７に示したコンピュータ９００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９０１、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９０２、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９０３、通信インタフェース（Ｉ／Ｆ）９０４、ディスプレイ９０５、及びハードディスク装置（ＨＤＤ）９０６を備え、これらがバス９０７を介して接続された構成を有する。なお、コンピュータ９００は、ＣＰＵ９０１、ＲＡＭ９０３、ＲＯＭ９０２、通信インタフェース９０４の少なくとも一部を備えるノード９１０を複数有することができる。各ノード９１０同士は、バス９０７、または、その他のバス等により相互に接続される。なお、図７に示したコンピュータが情報処理システム１、または１００として機能する場合、ディスプレイ９０５は常時設けられる必要はない。また、通信インタフェース９０４は、上述した各実施形態において、当該各コンピュータ間における通信を実現する一般的な通信手段である。ハードディスク装置９０６には、プログラム群９０６Ａと、各種の記憶情報９０６Ｂとが格納されている。プログラム群９０６Ａは、例えば、上述した図４乃至図６に示した各ブロック（各部）に対応する機能を実現するためのコンピュータ・プログラムである。このようなハードウェア構成において、ＣＰＵ９０１は、コンピュータ９００の全体の動作を司る。
【０１２９】
そして、上述した各実施形態を例に説明した本発明は、各実施形態の説明において参照したブロック構成図（図１および図２）あるいはフローチャート（図４乃至図６）の機能を実現可能なコンピュータ・プログラムを供給した後、そのコンピュータ・プログラムを、当該ハードウェアのＣＰＵ９０１に読み出して実行することによって達成される。また、このコンピュータ内に供給されたコンピュータ・プログラムは、読み書き可能な一時記憶メモリ９０３またはハードディスク装置９０６などの不揮発性の記憶デバイス（記憶媒体）に格納すれば良い。また、通信データ情報１５〜４５、および待ち受けソケット情報２００は、そのコンピュータ・プログラムの実行に際して、ＲＡＭ９０３に格納すればよい。
【０１３０】
また、前記の場合において、当該各装置内へのコンピュータ・プログラムの供給方法は、フロッピーディスク（登録商標）やＣＤ−ＲＯＭ等の各種記録媒体を介して当該装置内にインストールする方法や、インターネット等の通信ネットワーク１０００を介して外部よりダウンロードする方法等のように、現在では一般的な手順を採用することができる。そして、このような場合において、本発明は、係るコンピュータ・プログラムを構成するコード、或いは係るコードが記録されたところの、コンピュータ読み取り可能な記憶媒体によって構成されると捉えることができる。
【０１３１】
なお、上述した実施形態の一部または全部は、以下の付記のようにも記載されうるが、以下の付記に限定されるものではない。
【０１３２】
（付記１）
それぞれ記憶装置を備えた複数のプロセッサと、
通信ネットワークから通信データを受信し、受信した前記通信データを、アクセス効率がより良い前記記憶装置に格納する通信制御手段と、
前記通信データが格納された物理メモリ位置に基づいて、前記物理メモリ位置に対するアクセス効率がより良い前記プロセッサを選択し、前記プロセッサにおいて動作する受信プロセスに対して、前記通信データの処理を割り当てる割当処理を行う接続待ち受け手段と
を有する情報処理システム。
【０１３３】
（付記２）
前記通信データを処理可能な受信プロセスが動作するプロセッサごとの待ちキュー情報をさらに有し、前記待ちキュー情報は、待機状態である前記受信プロセスの情報を含み、
前記接続待ち受け手段は、前記割当処理において、前記記憶装置と各プロセッサとの距離を示す距離情報に基づいて、前記物理メモリ位置に最も近い最近傍プロセッサを選択し、前記待ちキュー情報に基づいて、前記最近傍プロセッサ、または、前記物理メモリ位置にできるだけ近い他のプロセッサにおいて動作する前記受信プロセスを起床することによって、前記受信プロセスに対して前記通信データの処理を割り当て、
起床された前記受信プロセスが前記通信データに対する受信処理を行う
付記１記載の情報処理システム。
（付記３）
前記接続待ち受け手段は、前記受信プロセスの親プロセスに対して、前記物理メモリ位置に最も近いプロセッサを示す近傍プロセッサ情報を通知することによって割当処理を行い、
前記親プロセスは、前記近傍プロセッサ情報に基づいて、新たな受信プロセスを生成し、前記新たな受信プロセスが、前記通信データに対する受信処理を行う
付記１記載の情報処理システム。
【０１３４】
（付記４）
前記接続待ち受け手段は、前記最近傍プロセッサにおいて動作する待機状態の受信プロセスがなかった場合に、前記最近傍プロセッサにおいて動作する受信プロセスが待機状態になることを所定の時間において待ち、
前記受信プロセスが待機状態となったときは、前記最近傍プロセッサにおいて動作する前記受信プロセスに対して、前記通信データの処理を割り当て、
前記受信プロセスが待機状態とならなかったときは、前記物理メモリ位置にできるだけ近い、前記最近傍プロセッサ以外の他のプロセッサにおいて動作する受信プロセスに対して、前記通信データの処理を割り当てる
付記２記載の情報処理システム。
【０１３５】
（付記５）
前記通信データを受信する前に、複数の受信プロセスによって受信処理を行うことを示すアフィニティ情報が指定されたときに、前記待ちキュー情報を生成するアフィニティ指定手段をさらに有し、
前記接続待ち受け手段は、前記アフィニティ情報が指定された場合に、前記割当処理を実行する
付記１、２、または４のいずれかに記載の情報処理システム。
【０１３６】
（付記６）
前記通信制御手段は、前記通信データを、前記通信制御手段自身に近い記憶装置に格納し、
前記通信データは、セッション要求情報を含み、
前記接続待ち受け手段は、セッション成立の際に前記割当処理を行う
付記１乃至５のいずれかに記載の情報処理システム。
【０１３７】
（付記７）
通信ネットワークから通信データを受信し、
受信した前記通信データを、アクセス効率がより良い記憶装置に格納し、
前記通信データが格納された物理メモリ位置に基づいて、前記物理メモリ位置に対するアクセス効率がより良いプロセッサを選択し、
前記プロセッサにおいて動作する受信プロセスに対して、前記通信データの処理を割り当てる割当処理を行う制御方法。
【０１３８】
（付記８）
前記通信データを受信する前に、
前記通信データを処理可能な受信プロセスが動作するプロセッサごとの待ちキュー情報を生成し、
前記受信プロセスが待機状態になった際に、前記待ちキュー情報に、待機状態である前記受信プロセスの情報を格納し、
前記割当処理において、
前記記憶装置と各プロセッサとの距離を示す距離情報に基づいて、前記物理メモリ位置に最も近い最近傍プロセッサを選択し、
前記待ちキュー情報に基づいて、前記最近傍プロセッサ、または、前記物理メモリ位置にできるだけ近い他のプロセッサにおいて動作する前記受信プロセスを起床することによって、前記受信プロセスに対して前記通信データの処理を割り当て、
起床された前記受信プロセスに前記通信データに対する受信処理を実行させる
付記７記載の制御方法。
【０１３９】
（付記９）
前記割当処理の際に、
前記受信プロセスの親プロセスに対して、前記物理メモリ位置に最も近いプロセッサを示す近傍プロセッサ情報を通知し、
前記親プロセスは、前記近傍プロセッサ情報に基づいて、新たな受信プロセスを生成し、前記新たな受信プロセスが、前記通信データに対する受信処理を行う
付記７記載の制御方法。
【０１４０】
（付記１０）
前記割当処理の際に、
前記最近傍プロセッサにおいて動作する待機状態の受信プロセスがなかった場合に、前記最近傍プロセッサにおいて動作する受信プロセスが待機状態になることを所定の時間において待ち、
前記受信プロセスが待機状態となったときは、前記最近傍プロセッサにおいて動作する前記受信プロセスに対して、前記通信データの処理を割り当て、
前記受信プロセスが待機状態とならなかったときは、前記物理メモリ位置にできるだけ近い、前記最近傍プロセッサ以外の他のプロセッサにおいて動作する受信プロセスに対して、前記通信データの処理を割り当てる
付記８記載の制御方法。
【０１４１】
（付記１１）
前記通信データを受信する前に、複数の受信プロセスによって受信処理を行うことを示すアフィニティ情報が指定されたときに、前記待ちキュー情報を生成し、
前記アフィニティ情報が指定された場合に、前記割当処理を実行する
付記７、８、または１０のいずれかに記載の制御方法。
【０１４２】
（付記１２）
セッション要求情報を含む前記通信データを受信した際に、前記通信データを受信した通信制御手段に近い記憶装置に、前記通信データを格納し、
セッション成立の際に前記割当処理を行う
付記７乃至１１のいずれかに記載の制御方法。
【０１４３】
（付記１３）
通信ネットワークから通信データを受信し、受信した前記通信データを、アクセス効率がより良い記憶装置に格納する通信制御処理と、
前記通信データが格納された物理メモリ位置に基づいて、前記物理メモリ位置に対するアクセス効率がより良いプロセッサを選択し、前記プロセッサにおいて動作する受信プロセスに対して、前記通信データの処理を割り当てる割当処理を行う接続待ち受け処理と
をコンピュータに実行させるコンピュータ・プログラム。
【０１４４】
（付記１４）
前記接続待ち受け処理において、
前記通信データを受信する前に、前記通信データを処理可能な受信プロセスが動作するプロセッサごとの待ちキュー情報を生成し、前記受信プロセスが待機状態になった際に、前記待ちキュー情報に、待機状態である前記受信プロセスの情報を格納し、
前記割当処理において、前記記憶装置と各プロセッサとの距離を示す距離情報に基づいて、前記物理メモリ位置に最も近い最近傍プロセッサを選択し、前記待ちキュー情報に基づいて、前記最近傍プロセッサ、または、前記物理メモリ位置にできるだけ近い他のプロセッサにおいて動作する前記受信プロセスを起床することによって、前記受信プロセスに対して前記通信データの処理を割り当て、
起床された前記受信プロセスに前記通信データに対する受信処理を実行させる  付記１３記載のコンピュータ・プログラム。
【０１４５】
（付記１５）
前記接続待ち受け処理において、
前記受信プロセスの親プロセスに対して、前記物理メモリ位置に最も近いプロセッサを示す近傍プロセッサ情報を通知することにより前記割当処理を行う
付記１３記載のコンピュータ・プログラム。
【符号の説明】
【０１４６】
１、１００    情報処理システム
２、１０２    接続待ち受け部
１０、２０    ノード
１１、２１、３１、４１    プロセッサ（ＣＰＵ）
１２、２２、３２、４２    通信制御部（ＮＩＣ）
１４、２４、３４、４４    記憶装置
１５、２５、３５、４５    通信データ情報
１６、２６、３６、４６    受信プロセス
１０１    アフィニティ指定部
１１０、１２０、１３０、１４０ＮＵＭＡノード
２００    待ち受けソケット情報
２０１    近傍ＣＰＵ優先起床フラグ
２１１、２１２、２１３、２１４    待ちキュー
２２１、２２２、２２３、２２４    セッションキュー
９００    情報処理システム（コンピュータ）
９０１    ＣＰＵ
９０２    ＲＯＭ
９０３    ＲＡＭ
９０４    通信インタフェース（Ｉ／Ｆ）
９０５    ディスプレイ
９０６    ハードディスク装置（ＨＤＤ）
９０６Ａ    プログラム群
９０６Ｂ    各種の記憶情報
９０７    バス
９１０    ノード
１０００    ネットワーク（通信ネットワーク）
【図１】
2015184960.tif 000003
【図２】
2015184960.tif 000004
【図３】
2015184960.tif 000005
【図４】
2015184960.tif 000006
【図５】
2015184960.tif 000007
【図６】
2015184960.tif 000008
【図７】
2015184960.tif 000009