(57)【要約】【課題】受信した通信パケットを各プロセッサコアに正しく振り分けることができるようにすることを目的とする。【解決手段】ポート番号ファイル３１０は、ＣＰＵコア毎に、ＣＰＵコアを識別するコア識別子と、コア識別子に対応付けられた割り当てポート番号とが登録されたファイルである。パケット通信部２１０が通信パケット３００Ｒを受信した場合、ＣＰＵコア選択部２３０は通信パケット３００Ｒに含まれる送信先ポート番号と同じ割り当てポート番号に対応付けられたコア識別子を、ポート番号ファイル３１０から選択する。割り込み発生部２４０は選択されたコア識別子によって識別されるＣＰＵコアに割り込みを発生する。【選択図】図２
2015170947.tif 000002
【特許請求の範囲】
【請求項１】
マルチコアプロセッサに含まれるプロセッサコア毎に、前記プロセッサコアを識別するコア識別子と、前記コア識別子に対応付けられた割り当てポート番号と、を含んだポート番号ファイルを記憶するポート番号記憶部と、
送信先ポート番号を含んだ通信パケットを受信する通信パケット受信部と、
前記通信パケット受信部が前記通信パケットを受信した場合、前記通信パケットに含まれる前記送信先ポート番号と同じ割り当てポート番号に対応付けられたコア識別子を、前記ポート番号ファイルから選択するコア識別子選択部と、
前記コア識別子選択部によって選択された前記コア識別子によって識別されるプロセッサコアに割り込みを発生する割り込み発生部と
を備えることを特徴とする通信装置。
【請求項２】
前記マルチコアプロセッサに含まれる第一のプロセッサコアが第一の割り当てポート番号を生成した場合、前記第一のプロセッサコアを識別する第一のコア識別子と、前記第一のコア識別子に対応付けた前記第一の割り当てポート番号と、を前記ポート番号ファイルに登録するポート番号登録部を備える
ことを特徴とする請求項１に記載の通信装置。
【請求項３】
前記ポート番号登録部は、前記第一のプロセッサコアがソケットインタフェースの接続関数と送信関数とのいずれかを実行したときに、前記第一のコア識別子と前記第一の割り当てポート番号とを前記ポート番号ファイルに登録する
ことを特徴とする請求項２に記載の通信装置。
【請求項４】
前記ポート番号登録部は、前記第一のプロセッサコアがソケットインタフェースのバインド関数と待機関数と受付関数とのいずれかを実行したときに、前記第一のコア識別子と前記第一の割り当てポート番号とを前記ポート番号ファイルに登録する
ことを特徴とする請求項２に記載の通信装置。
【請求項５】
前記通信装置は、ポート番号変更部を備え、
前記ポート番号変更部は、前記マルチコアプロセッサに含まれる第二のプロセッサコアが前記第一の割り当てポート番号を生成した場合、前記第一の割り当てポート番号とは異なる第二の割り当てポート番号を生成し、
前記ポート番号登録部は、前記第二のプロセッサコアを識別する第二のコア識別子と、前記第二のコア識別子に対応付けた前記第二の割り当てポート番号と、を前記ポート番号ファイルに登録する
ことを特徴とする請求項２に記載の通信装置。
【請求項６】
前記第一のプロセッサコアが前記第一の割り当てポート番号を無効にした場合、前記第一のコア識別子と前記第一の割り当てポート番号とを、前記ポート番号ファイルから削除するポート番号削除部を備える
ことを特徴とする請求項２に記載の通信装置。
【請求項７】
前記ポート番号削除部は、前記第一のプロセッサコアがソケットインタフェースのクローズ関数と切断関数と停止関数とのいずれかを実行したときに、前記第一のコア識別子と前記第一の割り当てポート番号とを前記ポート番号ファイルから削除する
ことを特徴とする請求項６に記載の通信装置。
【請求項８】
前記第一の割り当てポート番号を利用した前回の通信から経過した経過時間が通信待ち時間を超えた場合、前記第一のコア識別子と前記第一の割り当てポート番号とを、前記ポート番号ファイルから削除するポート番号削除部を備える
ことを特徴とする請求項２に記載の通信装置。
【請求項９】
請求項１から請求項８のいずれかの通信装置を備えるコンピュータ。
【請求項１０】
ポート番号ファイルを使用する通信プログラムであって、
前記ポート番号ファイルは、マルチコアプロセッサに含まれるプロセッサコア毎に、前記プロセッサコアを識別するコア識別子と、前記コア識別子に対応付けられた割り当てポート番号とを含むファイルであり、
送信先ポート番号を含んだ通信パケットを受信する通信パケット受信処理と、
前記通信パケット受信処理によって前記通信パケットを受信した場合、前記通信パケットに含まれる前記送信先ポート番号と同じ割り当てポート番号に対応付けられたコア識別子を、前記ポート番号ファイルから選択するコア識別子選択処理と、
前記コア識別子選択処理によって選択された前記コア識別子によって識別されるプロセッサコアに割り込みを発生する割り込み発生処理と
をプロセッサに実行させるための通信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアプロセッサ用の通信装置に関するものである。
【背景技術】
【０００２】
マルチコアプロセッサは１つのプロセッサパッケージであり、複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を内蔵する。マルチコアプロセッサは、複数のＣＰＵを用いて並列処理を行うことができるため、ＣＰＵを１つだけ備えるシングルコアプロセッサよりも処理能力が高い。
外部周辺機器を使用するためのインタフェースはマルチコアプロセッサの複数のＣＰＵによって共有されるため、インタフェースおよび複数のＣＰＵの利用効率を上げるための様々な排他制御技術が検討されている。
【０００３】
マルチコアプロセッサが１つのイーサネットインタフェースを使用する場合、受信パケットは固定的に１つのＣＰＵに割り振られる。そのＣＰＵは受信パケットの通信処理を行うＣＰＵを判断する受信判定処理を行い、受信判定処理によって判断されたＣＰＵが受信パケットの通信処理を行う。そのため、受信パケットが割り振られるＣＰＵに受信判定処理を行うための処理負荷が発生する。イーサネットは登録商標である。
【０００４】
受信判定処理は、ハードウェアまたはソフトウェアによって実現されている。例えば、受信判定処理は、一種のルータのようなハードウェアによって実現される。しかし、ルータのようなハードウェアをマルチコアプロセッサに搭載してしまうと、マルチコアプロセッサが大規模なものになってしまい、また、製造コストが高くなってしまう。
【０００５】
特許文献１は、受信判定処理をソフトウェアによって実現する技術を開示している。
但し、ソフトウェアによって受信判定処理が実現されるため、通信処理用のアプリケーションソフトウェアを変更する必要があった。
【０００６】
特許文献２は、受信判定処理をハードウェアによって実現する技術を開示している。
その技術は、受信パケットが有するリアルタイム性の情報に基づいて受信判定処理を行うものである。但し、各ＣＰＵが異なる通信処理を行う場合の受信判定処理については開示されていない。
【０００７】
特許文献３、４も、受信判定処理をハードウェアによって実現する技術を開示している。
それらの技術は、各ＣＰＵに処理負荷を分散することができるが、各ＣＰＵが異なる通信処理を行う場合には受信判定処理を行うことができない。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００８−１２９７６７号公報
【特許文献２】特開２００８−０５９５７７号公報
【特許文献３】特開２０１０−２２６５４３号公報
【特許文献４】国際公開第２０１２／１０５６７７号
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明は、受信した通信パケットを各プロセッサコアに正しく振り分けることができるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
本発明の通信装置は、
マルチコアプロセッサに含まれるプロセッサコア毎に、前記プロセッサコアを識別するコア識別子と、前記コア識別子に対応付けられた割り当てポート番号と、を含んだポート番号ファイルを記憶するポート番号記憶部と、
送信先ポート番号を含んだ通信パケットを受信する通信パケット受信部と、
前記通信パケット受信部が前記通信パケットを受信した場合、前記通信パケットに含まれる前記送信先ポート番号と同じ割り当てポート番号に対応付けられたコア識別子を、前記ポート番号ファイルから選択するコア識別子選択部と、
前記コア識別子選択部によって選択された前記コア識別子によって識別されるプロセッサコアに割り込みを発生する割り込み発生部とを備える。
【発明の効果】
【００１１】
本発明によれば、受信した通信パケットを各プロセッサコアに正しく振り分けることができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１におけるコンピュータ１００の構成図である。
【図２】実施の形態１におけるイーサネットインタフェース２００の構成図である。
【図３】実施の形態１における通信パケット３００の構成図である。
【図４】実施の形態１におけるコンピュータ１００のクライアント処理を示すフローチャートである。
【図５】実施の形態１におけるコンピュータ１００のクライアント処理を示すフローチャートである。
【図６】実施の形態１におけるコンピュータ１００のクライアント処理を示すフローチャートである。
【図７】実施の形態１におけるポート番号ファイル３１０の構成図である。
【図８】実施の形態１におけるコンピュータ１００のサーバ処理を示すフローチャートである。
【図９】実施の形態１におけるコンピュータ１００のサーバ処理を示すフローチャートである。
【図１０】実施の形態１におけるコンピュータ１００のサーバ処理を示すフローチャートである。
【図１１】実施の形態１におけるコンピュータ１００のハードウェア構成を示す図である。
【図１２】実施の形態１におけるイーサネットインタフェース２００のハードウェア構成を示す図である。
【図１３】実施の形態２におけるイーサネットインタフェース２００の構成図である。
【図１４】実施の形態２におけるポート番号ファイル３１０の構成図である。
【図１５】実施の形態３におけるイーサネットインタフェース２００の構成図である。
【図１６】実施の形態３におけるポート番号ファイル３１０の構成図である。
【発明を実施するための形態】
【００１３】
実施の形態１．
受信した通信パケットを各プロセッサコアに正しく振り分ける形態について説明する。
なお、本実施の形態は、通信パケットを振り分ける簡易な専用のハードウェアを用いる。これにより、上位のアプリケーションソフトウェアを変更せず、受信した通信パケットを振り分ける負荷を各プロセッサコアにかけず、受信した通信パケットを各プロセッサコアに正しく振り分けることができるようにすることを目的とする。
【００１４】
図１は、実施の形態１におけるコンピュータ１００の構成図である。
実施の形態１におけるコンピュータ１００の構成について、図１に基づいて説明する。但し、コンピュータ１００の構成は図１に示す構成と異なる構成であっても構わない。
【００１５】
コンピュータ１００は、マルチコアプロセッサ１１０とイーサネットインタフェース２００とを備える。イーサネットは登録商標である。
マルチコアプロセッサ１１０は、ＣＰＵコア１２０ＡとＣＰＵコア１２０Ｂとを備える。但し、マルチコアプロセッサ１１０は３つ以上のＣＰＵコア１２０を備えても構わない。ＣＰＵコア１２０はプロセッサコアともいう。
【００１６】
ＣＰＵコア１２０Ａは、クライアント部１３０と、プロトコルスタック部１４０Ａと、イーサネットドライバ部１５０Ａとを備える。
クライアント部１３０は、サーバ装置１０１にデータ処理を要求するクライアントプログラムを実行する。例えば、クライアント部１３０はＨＴＴＰでストリームデータをサーバ装置１０１へ送信する。ＨＴＴＰはＨｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌの略称である。
【００１７】
プロトコルスタック部１４０Ａはプロトコルスタックを実行する。
プロトコルスタックは、通信プロトコルに従って通信パケットを生成または処理するプログラム群である。
例えば、プロトコルスタックはトランスポート層の通信プロトコル（例えば、ＴＣＰまたはＵＤＰ）に従ってトランスポートパケットを生成または処理するプログラムを含む。トランスポートパケットは通信パケットに含まれるデータであり、ＴＣＰパケットまたはＵＤＰパケットともいう。
ＴＣＰはＴｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌの略称であり、ＵＤＰはＵｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌの略称である。
【００１８】
イーサネットドライバ部１５０Ａはイーサネットドライバを実行する。イーサネットドライバはイーサネットインタフェース２００を制御するプログラムである。
【００１９】
ＣＰＵコア１２０Ｂは、サーバ部１６０と、プロトコルスタック部１４０Ｂと、イーサネットドライバ部１５０Ｂとを備える。
サーバ部１６０は、クライアント装置１０２の要求に基づいてデータ処理を実行するサーバプログラムを実行する。例えば、サーバ部１６０はＨＴＴＰでクライアント装置１０２からコマンドを受信する。
プロトコルスタック部１４０Ｂの機能は、ＣＰＵコア１２０Ａのプロトコルスタック部１４０Ａと同様である。
イーサネットドライバ部１５０Ｂの機能は、ＣＰＵコア１２０のイーサネットドライバ部１５０Ｂと同様である。
【００２０】
イーサネットインタフェース２００は通信パケットを送受信する通信装置（ハードウェア）である。
つまり、イーサネットインタフェース２００は、プロトコルスタック部１４０によって生成された通信パケットを、ネットワーク１０９を介して送信先（例えば、サーバ装置１０１）に送信する。
また、イーサネットインタフェース２００は、送信元（例えば、クライアント装置１０２）から送信された通信パケットを、ネットワーク１０９を介して受信する。
【００２１】
図２は、実施の形態１におけるイーサネットインタフェース２００の構成図である。
実施の形態１におけるイーサネットインタフェース２００の構成について、図２に基づいて説明する。但し、イーサネットインタフェース２００の構成は図２に示す構成と異なる構成であっても構わない。
【００２２】
イーサネットインタフェース２００は、パケット通信部２１０と、ポート番号登録部２２０と、ＣＰＵコア選択部２３０（コア識別子選択部の一例）と、割り込み発生部２４０と、ポート番号削除部２５０とを備える。
さらに、イーサネットインタフェース２００は、受信バッファ部２９１と、送信バッファ部２９２と、ポート番号記憶部２９３とを備える。
【００２３】
パケット通信部２１０は、送信バッファ部２９２が記憶する通信パケット３００Ｓを送信先に送信する。
また、パケット通信部２１０は、送信元から送信された通信パケット３００Ｒを受信し、受信した通信パケット３００Ｒを受信バッファ部２９１に記憶する。
【００２４】
ポート番号登録部２２０は、ＣＰＵコア１２０Ａのプロトコルスタック部１４０が割り当てポート番号ＰＡを生成した場合、ＣＰＵコア１２０Ａを識別するコア識別子ＣＡと、コア識別子ＣＡに対応付けた割り当てポート番号ＰＡと、をポート番号ファイル３１０に登録する。
同様に、ポート番号登録部２２０は、ＣＰＵコア１２０Ｂのプロトコルスタック部１４０が割り当てポート番号ＰＢを生成した場合、ＣＰＵコア１２０Ｂを識別するコア識別子ＣＢと、コア識別子ＣＢに対応付けた割り当てポート番号ＰＢと、をポート番号ファイル３１０に登録する。
【００２５】
ＣＰＵコア選択部２３０は、通信パケット３００Ｒが受信バッファ部２９１に記憶された場合、通信パケット３００Ｒに含まれる送信先ポート番号と同じ割り当てポート番号に対応付けられたコア識別子を、ポート番号ファイル３１０から選択する。
【００２６】
割り込み発生部２４０は、ＣＰＵコア選択部２３０によって選択されたコア識別子によって識別されるＣＰＵコア１２０に割り込みを発生する。
【００２７】
ポート番号削除部２５０は、ＣＰＵコア１２０Ａが割り当てポート番号ＰＡを無効にした場合、ＣＰＵコア１２０Ａを識別するコア識別子ＣＡと、コア識別子ＣＡに対応付けられたポート番号ＰＡと、をポート番号ファイル３１０から削除する。
同様に、ポート番号削除部２５０は、ＣＰＵコア１２０Ｂが割り当てポート番号ＰＢを無効にした場合、ＣＰＵコア１２０Ｂを識別するコア識別子ＣＢと、コア識別子ＣＢに対応付けられたポート番号ＰＢと、をポート番号ファイル３１０から削除する。
【００２８】
受信バッファ部２９１は、パケット通信部２１０によって受信された通信パケット３００Ｒを記憶する。通信パケット３００Ｒは受信パケットである。
送信バッファ部２９２は、各ＣＰＵコア１２０のプロトコルスタック部１４０によって生成された通信パケット３００Ｓを記憶する。通信パケット３００Ｓは送信パケットである。
ポート番号記憶部２９３は、ポート番号ファイル３１０を記憶する。
【００２９】
図３は、実施の形態１における通信パケット３００の構成図である。
実施の形態１における通信パケット３００の構成について、図３に基づいて説明する。但し、通信パケット３００の構成は図３に示す構成と異なる構成であっても構わない。
通信パケット３００Ｓおよび通信パケット３００Ｒは通信パケット３００の一例である。
【００３０】
通信パケット３００はＩＰパケットともいう。ＩＰはＩｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌの略称である。
通信パケット３００は、ＩＰヘッダ３０１と、ＴＣＰヘッダ３０２と、ペイロード３０３とを備える。
ＴＣＰヘッダ３０２は、送信元に割り当てられたポート番号を示す送信元ポート番号３０４と、送信先に割り当てられたポート番号を示す送信先ポート番号３０５とを備える。
【００３１】
図４、図５および図６は、実施の形態１におけるコンピュータ１００のクライアント処理を示すフローチャートである。
実施の形態１におけるコンピュータ１００のクライアント処理について、図４から図６に基づいて説明する。但し、コンピュータ１００のクライアント処理は図４から図６に基づいて説明する処理と異なる処理であっても構わない。
【００３２】
Ｓ１１０において、ＣＰＵコア１２０Ａのクライアント部１３０は、サーバ装置１０１との通信接続を、プロトコルスタック部１４０Ｂに要求する。
Ｓ１１０の後、処理はＳ１１１に進む。
【００３３】
Ｓ１１１において、ＣＰＵコア１２０Ａのプロトコルスタック部１４０Ａは、ソケットＡＰＩのｓｏｃｋｅｔ関数（ソケット関数の一例）を実行する。ＡＰＩはＡｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅの略称である。ソケットＡＰＩはソケットインタフェースともいう。
ｓｏｃｋｅｔ関数は通信ソケットを生成する関数である。ｓｏｃｋｅｔ関数を実行したときのコンピュータ１００の動作は、従来のコンピュータと同様である。
Ｓ１１１の後、処理はＳ１１２に進む。
【００３４】
Ｓ１１２において、ＣＰＵコア１２０Ａのプロトコルスタック部１４０Ａは、ソケットＡＰＩのｃｏｎｎｅｃｔ関数（接続関数の一例）を実行する。
ｃｏｎｎｅｃｔ関数は通信ソケットに割り当てる割り当てポート番号を生成し、通信先（例えば、サーバ装置１０１）に通信接続する関数である。ｃｏｎｎｅｃｔ関数を実行したときのコンピュータ１００の動作は、従来のコンピュータと同様である。
【００３５】
但し、プロトコルスタック部１４０Ａは、割り当てポート番号ＰＡを生成したときに、コア識別子ＣＡと割り当てポート番号ＰＡとをイーサネットドライバ部１５０Ａに通知する。
そして、イーサネットドライバ部１５０Ａは、通知されたコア識別子ＣＡと割り当てポート番号ＰＡとを、イーサネットインタフェース２００のポート番号登録部２２０に通知する。
コア識別子ＣＡと割り当てポート番号ＰＡとがイーサネットインタフェース２００のポート番号登録部２２０に通知された後、処理はＳ１１３に進む。
Ｓ１１２の後、処理はＳ１２０に進む。
【００３６】
Ｓ１１３において、イーサネットインタフェース２００のポート番号登録部２２０は、通知されたコア識別子ＣＡと割り当てポート番号ＰＡとをポート番号ファイル３１０に登録する。
Ｓ１１３の後、処理はＳ１２０に進む。
【００３７】
図７は、実施の形態１におけるポート番号ファイル３１０の構成図である。
実施の形態１におけるポート番号ファイル３１０の構成について、図７に基づいて説明する。但し、ポート番号ファイル３１０の構成は図７に示す構成と異なる構成であっても構わない。
【００３８】
ポート番号ファイル３１０は１つ以上のエントリを備える。エントリは図中の１行に相当する。
各エントリは、互いに対応付けられたコア識別子と割り当てポート番号と有効フラグ値とを含んでいる。
有効フラグ値はエントリが有効なエントリであるか否かを示す値である。有効フラグ値１はエントリが有効であることを意味し、有効フラグ値０はエントリが無効であることを意味する。
【００３９】
例えば、コア識別子ＰＡおよび割り当てポート番号ＰＡが通知された場合、ポート番号登録部２２０は以下のように動作する。ここで、コア識別子ＰＡが０であり、割り当てポート番号ＰＡが６１００であるものとする。
ポート番号登録部２２０は、有効フラグ値が０であるエントリをポート番号ファイル３１０から選択する。
そして、ポート番号登録部２２０は、選択したエントリにコア識別子０と割り当てポート番号６１００とを設定し、選択したエントリの有効フラグ値を１に更新する。
図４に戻り、Ｓ１２０から説明を続ける。
【００４０】
Ｓ１２０において、ＣＰＵコア１２０Ａのクライアント部１３０がプロトコルスタック部１４０Ａにデータ送信を要求した場合（ＹＥＳ）、処理はＳ１２１に進む。
クライアント部１３０がプロトコルスタック部１４０Ａにデータ送信を要求していない場合（ＮＯ）、処理はＳ１３０（図５参照）に進む。
【００４１】
Ｓ１２１において、ＣＰＵコア１２０Ａのプロトコルスタック部１４０Ａは、ソケットＡＰＩのｓｅｎｄ関数（送信関数の一例）を実行する。ｓｅｎｄ関数の実行によって、割り当てポート番号を送信元ポート番号として含んだ通信パケット３００Ｓが生成され、生成された通信パケット３００ＳがＣＰＵコア１２０Ａ用の送信バッファ（図示省略）に書き込まれる。ＣＰＵコア１２０Ａ用の送信バッファはコンピュータ１００に備わるものである。
そして、イーサネットドライバ部１５０Ａは、ＣＰＵコア１２０Ａ用の送信バッファから通信パケット３００Ｓを読み出し、読み出した通信パケット３００Ｓをイーサネットインタフェース２００の送信バッファ部２９２に書き込む。
Ｓ１２１の後、処理はＳ１２２に進む。
【００４２】
Ｓ１２２において、イーサネットインタフェース２００のパケット通信部２１０は、送信バッファ部２９２から通信パケット３００Ｓを読み出し、読み出した通信パケット３００Ｓをサーバ装置１０１に送信する。
Ｓ１２２の後、処理はＳ１２０に戻る。
【００４３】
Ｓ１３０（図５参照）において、イーサネットインタフェース２００のパケット通信部２１０が通信パケット３００Ｒを受信した場合（ＹＥＳ）、パケット通信部２１０は通信パケット３００Ｒを受信バッファ部２９１に書き込み、処理はＳ１３１に進む。
イーサネットインタフェース２００のパケット通信部２１０が通信パケット３００Ｒを受信していない場合（ＮＯ）、処理はＳ１４０（図６参照）に進む。
【００４４】
Ｓ１３１において、イーサネットインタフェース２００のＣＰＵコア選択部２３０は、受信バッファ部２９１に記憶された通信パケット３００Ｒから送信先ポート番号を取得する。
そして、ＣＰＵコア選択部２３０は、送信先ポート番号と同じ割り当てポート番号ＰＡに対応付けられたコア識別子ＣＡを、ポート番号ファイル３１０から選択する。
選択されたコア識別子によって識別されるＣＰＵコア１２０は、ＣＰＵコア１２０Ａである。
Ｓ１３１の後、処理はＳ１３２に進む。
【００４５】
Ｓ１３２において、イーサネットインタフェース２００の割り込み発生部２４０は、Ｓ１３１で選択されたコア識別子ＣＡによって識別されるＣＰＵコア１２０Ａに割り込みを発生する。
Ｓ１３２の後、処理はＳ１３３に進む。
【００４６】
Ｓ１３３において、ＣＰＵコア１２０Ａのイーサネットドライバ部１５０Ａはイーサネットインタフェース２００の受信バッファ部２９１から通信パケット３００Ｒを読み出し、読み出した通信パケット３００ＲをＣＰＵコア１２０Ａ用の受信バッファ（図示省略）に書き込む。ＣＰＵコア１２０Ａ用の受信バッファはコンピュータ１００に備わるものである。
そして、ＣＰＵコア１２０Ａのプロトコルスタック部１４０Ａは、ソケットＡＰＩのｒｅｃｖ関数（受信関数の一例）を実行する。ｒｅｃｖ関数の実行により、ＣＰＵコア１２０Ａ用の受信バッファから通信パケット３００Ｒが読み出され、読み出された通信パケット３００Ｒが処理される。
例えば、プロトコルスタック部１４０Ａは、複数の通信パケット３００Ｒのそれぞれに含まれるペイロード３０３を結合することによって、受信データを生成する。そして、クライアント部１３０は受信データを処理する。例えば、受信データはサーバ装置１０１の処理結果を示すデータである。
Ｓ１３３の後、処理はＳ１２０（図４参照）に戻る。
【００４７】
Ｓ１４０（図６参照）において、ＣＰＵコア１２０Ａのクライアント部１３０がプロトコルスタック部１４０Ａにサーバ装置１０１との通信接続の切断を要求した場合（ＹＥＳ）、処理はＳ１４１に進む。
ＣＰＵコア１２０Ａのクライアント部１３０がプロトコルスタック部１４０Ａにサーバ装置１０１との通信接続の切断を要求していない場合（ＮＯ）、処理はＳ１２０（図４参照）に戻る。
【００４８】
Ｓ１４１において、ＣＰＵコア１２０Ａのプロトコルスタック部１４０Ａは、ソケットＡＰＩのｃｌｏｓｅ関数（クローズ関数の一例）を実行する。
ｃｌｏｓｅ関数は通信先（例えば、サーバ装置１０１）との通信接続を切断し、通信ソケットを削除する関数である。ｃｌｏｓｅ関数を実行したときのコンピュータ１００の動作は、従来のコンピュータと同様である。
【００４９】
但し、プロトコルスタック部１４０Ａは、通信ソケットを削除することによって割り当てポートＰＡを無効にしたときに、コア識別子ＣＡと割り当てポート番号ＰＡとをイーサネットドライバ部１５０に通知する。
そして、イーサネットドライバ部１５０は、通知されたコア識別子ＣＡと割り当てポート番号ＰＡとをポート番号削除部２５０に通知する。
コア識別子ＣＡと割り当てポート番号ＰＡとがポート番号削除部２５０に通知された後、処理はＳ１４２に進む。
Ｓ１４１の後、クライアント処理は終了する。
【００５０】
Ｓ１４２において、イーサネットインタフェース２００のポート番号削除部２５０は、通知されたコア識別子ＣＡと割り当てポート番号ＰＡとの組と同じ組を、ポート番号ファイル３１０から駆除する。
例えば、ポート番号削除部２５０は、通知されたコア識別子ＣＡと割り当てポート番号ＰＡとを含んだエントリをポート番号ファイル３１０（図７参照）から選択し、選択したエントリに含まれる有効フラグ値を０に更新する。有効フラグ値０はエントリが無効であることを意味する。
Ｓ１４２の後、クライアント処理は終了する。
【００５１】
上記のクライアント処理において、ポート番号登録部２２０は、ｃｏｎｎｅｃｔ関数が実行されたときに、割り当てポート番号ＰＡの登録を行っている（図４のＳ１１３参照）。
但し、ポート番号登録部２２０は、ｓｅｎｄ関数が実行されたとき（図４のＳ１２１参照）に、割り当てポート番号ＰＡの登録を行っても構わない。
【００５２】
上記のクライアント処理において、プロトコルスタック部１４０Ａは、ソケットＡＰＩのｃｌｏｓｅ関数を実行することによって、割り当てポート番号ＰＡを無効にしている（図６のＳ１４１参照）。
但し、プロトコルスタック部１４０Ａは、ソケットＡＰＩのｄｉｓｃｏｎｎｅｃｔ関数（切断関数の一例）またはｓｈｕｔｄｏｗｎ関数（停止関数の一例）を実行することによって、割り当てポート番号ＰＡを無効にしても構わない。
ｄｉｓｃｏｎｎｅｃｔ関数は通信先との通信接続を切断する関数である。通信接続が切断されることによって割り当てポート番号ＰＡは無効になる。
ｓｈｕｔｄｏｗｎ関数は通信ソケットを無効にする関数である。通信ソケットが無効にされることによって割り当てポート番号ＰＡは無効になる。
【００５３】
上記のクライアント処理において、ポート番号削除部２５０は、ｃｌｏｓｅ関数が実行されたときに割り当てポート番号ＰＡの削除を行っている（図６のＳ１４２参照）。
但し、ポート番号削除部２５０は、ｄｉｓｃｏｎｎｅｃｔ関数またはｓｈｕｔｄｏｗｎ関数が実行されたときに、割り当てポート番号ＰＡの削除を行っても構わない。
【００５４】
図８、図９および図１０は、実施の形態１におけるコンピュータ１００のサーバ処理を示すフローチャートである。
実施の形態１におけるコンピュータ１００のサーバ処理について、図８から図１０に基づいて説明する。但し、コンピュータ１００のサーバ処理は図８から図１０に基づいて説明する処理と異なる処理であっても構わない。
【００５５】
Ｓ２１０において、ＣＰＵコア１２０Ｂのサーバ部１６０は、クライアント装置１０２との通信接続を、プロトコルスタック部１４０Ｂに要求する。
Ｓ２１０の後、処理はＳ２１１に進む。
【００５６】
Ｓ２１１において、ＣＰＵコア１２０Ｂのプロトコルスタック部１４０Ｂは、ソケットＡＰＩのｓｏｃｋｅｔ関数（ソケット関数の一例）を実行することによって、通信ソケットを生成する（図４のＳ１１１と同様の）。
Ｓ２１１の後、処理はＳ２１２に進む。
【００５７】
Ｓ２１２において、ＣＰＵコア１２０Ｂのプロトコルスタック部１４０Ｂは、ソケットＡＰＩのｂｉｎｄ関数（バインド関数の一例）を実行する。
ｂｉｎｄ関数は通信ソケットに割り当てる割り当てポート番号を生成する関数である。ｂｉｎｄ関数を実行したときのコンピュータ１００の動作は、従来のコンピュータと同様である。
【００５８】
但し、プロトコルスタック部１４０Ｂは、割り当てポート番号ＰＢを生成したときに、コア識別子ＣＢと割り当てポート番号ＰＢとをイーサネットドライバ部１５０Ｂに通知する。
そして、イーサネットドライバ部１５０Ｂは、通知されたコア識別子ＣＢと割り当てポート番号ＰＢとを、イーサネットインタフェース２００のポート番号登録部２２０に通知する。
コア識別子ＣＢと割り当てポート番号ＰＢとがイーサネットインタフェース２００のポート番号登録部２２０に通知された後、処理はＳ２１３に進む。
Ｓ２１２の後、処理はＳ２１４に進む。
【００５９】
Ｓ２１３において、イーサネットインタフェース２００のポート番号登録部２２０は、通知されたコア識別子ＣＢと割り当てポート番号ＰＢとをポート番号ファイル３１０に登録する（図４のＳ１１３と同様）。
Ｓ２１３の後、処理はＳ２１４に進む。
【００６０】
Ｓ２１４において、ＣＰＵコア１２０Ｂのプロトコルスタック部１４０Ｂは、ソケットＡＰＩのｌｉｓｔｅｎ関数（待機関数の一例）を実行する。
ｌｉｓｔｅｎ関数は、通信先（例えば、クライアント装置１０２）からの通信接続を待機する関数である。ｌｉｓｔｅｎ関数を実行したときのコンピュータ１００の動作は、従来のコンピュータと同様である。
Ｓ２１４の後、処理はＳ２１５に進む。
【００６１】
Ｓ２１５において、ＣＰＵコア１２０Ｂのプロトコルスタック部１４０Ｂは、ソケットＡＰＩのａｃｃｅｐｔ関数（受付関数の一例）を実行する。
ａｃｃｅｐｔ関数は、通信先からの通信接続を受け付ける関数である。ａｃｃｅｐｔ関数を実行したときのコンピュータ１００の動作は、従来のコンピュータと同様である。
Ｓ２１５の後、処理はＳ２２０に進む。
【００６２】
Ｓ２２０において、ＣＰＵコア１２０Ｂのサーバ部１６０がプロトコルスタック部１４０Ｂにデータ処理を要求した場合（ＹＥＳ）、処理はＳ２２１に進む。
ＣＰＵコア１２０Ｂのサーバ部１６０がプロトコルスタック部１４０Ｂにデータ処理を要求していない場合（ＮＯ）、処理はＳ２３０（図９参照）に進む。
【００６３】
Ｓ２２１において、ＣＰＵコア１２０Ｂのプロトコルスタック部１４０Ｂは、ソケットＡＰＩのｓｅｎｄ関数（送信関数の一例）を実行することによって、通信パケット３００Ｓを生成する（図４のＳ１２１と同様）。Ｓ２２１の後、処理はＳ２２２に進む。
Ｓ２２２において、イーサネットインタフェース２００のパケット通信部２１０は、通信パケット３００Ｓをクライアント装置１０２に送信する（図４のＳ１２２と同様）。
Ｓ２２２の後、処理はＳ２２０に戻る。
【００６４】
Ｓ２３０（図９参照）において、イーサネットインタフェース２００のパケット通信部２１０が通信パケット３００Ｒを受信した場合（ＹＥＳ）、パケット通信部２１０は通信パケット３００Ｒを受信バッファ部２９１に書き込み、処理はＳ２３１に進む。
イーサネットインタフェース２００のパケット通信部２１０が通信パケット３００Ｒを受信していない場合（ＮＯ）、処理はＳ２４０（図１０参照）に進む。
【００６５】
Ｓ２３１において、イーサネットインタフェース２００のＣＰＵコア選択部２３０は、通信パケット３００Ｒに含まれる送信先ポート番号に基づいて、ＣＰＵコア１２０Ｂのコア識別子ＣＢを選択する（図５のＳ１３１と同様）。
Ｓ２３１の後、処理はＳ２３２に進む。
【００６６】
Ｓ２３２において、イーサネットインタフェース２００の割り込み発生部２４０は、Ｓ２３１で選択されたコア識別子ＣＢによって識別されるＣＰＵコア１２０Ｂに割り込みを発生する。
Ｓ２３２の後、処理はＳ２３３に進む。
【００６７】
Ｓ２３３において、ＣＰＵコア１２０Ｂのプロトコルスタック部１４０Ｂは、ソケットＡＰＩのｒｅｃｖ関数（受信関数の一例）を実行することによって、通信パケット３００Ｒを処理する（図５のＳ１３３と同様）。
Ｓ２３３の後、処理はＳ２２０（図８参照）に戻る。
【００６８】
Ｓ２４０（図１０参照）において、ＣＰＵコア１２０Ｂのサーバ部１６０がプロトコルスタック部１４０Ｂにクライアント装置１０２との通信接続の切断を要求した場合（ＮＯ）、処理はＳ２４１に進む。
ＣＰＵコア１２０Ｂのサーバ部１６０がプロトコルスタック部１４０Ｂのクライアント装置１０２との通信接続の切断を要求していない場合（ＮＯ）、処理はＳ２２０（図８参照）に戻る。
【００６９】
Ｓ２４１において、ＣＰＵコア１２０Ｂのプロトコルスタック部１４０Ｂは、ソケットＡＰＩのｃｌｏｓｅ関数（クローズ関数の一例）を実行することによって、割り当てポート番号ＰＢを無効にする（図６のＳ１４１と同様）。
Ｓ２４１の後、処理はＳ２４２に進む。
【００７０】
Ｓ２４２において、イーサネットインタフェース２００のポート番号削除部２５０は、Ｓ２４１で無効にされた割り当てポート番号ＰＢをポート番号ファイル３１０から削除する（図６のＳ１４２と同様）。
Ｓ２４２の後、サーバ処理は終了する。
【００７１】
上記のサーバ処理において、ポート番号登録部２２０は、ｂｉｎｄ関数が実行されたときに、割り当てポート番号ＰＢの登録を行っている（図８のＳ２１３参照）。
但し、ポート番号登録部２２０は、ｌｉｓｔｅｎ関数、ａｃｃｅｐｔ関数またはｓｅｎｄ関数が実行されたとき（図８のＳ２１４、Ｓ２１５およびＳ２２１参照）に、割り当てポート番号ＰＢの登録を行っても構わない。
【００７２】
上記のサーバ処理において、プロトコルスタック部１４０Ｂは、ソケットＡＰＩのｃｌｏｓｅ関数を実行することによって、割り当てポート番号ＰＢを無効にしている（図１０のＳ２４１参照）。
但し、プロトコルスタック部１４０Ｂは、ソケットＡＰＩのｄｉｓｃｏｎｎｅｃｔ関数（切断関数の一例）またはｓｈｕｔｄｏｗｎ関数（停止関数の一例）を実行することによって、割り当てポート番号ＰＢを無効にしても構わない。
【００７３】
上記のサーバ処理において、ポート番号削除部２５０は、ｃｌｏｓｅ関数が実行されたときに割り当てポート番号ＰＢの削除を行っている（図１０のＳ２４２参照）。
但し、ポート番号削除部２５０は、ｄｉｓｃｏｎｎｅｃｔ関数またはｓｈｕｔｄｏｗｎ関数が実行されたときに、割り当てポート番号ＰＢの削除を行っても構わない。
【００７４】
図１１は、実施の形態１におけるコンピュータ１００のハードウェア構成を示す図である。
実施の形態１におけるコンピュータ１００のハードウェア構成について、図１１に基づいて説明する。但し、コンピュータ１００のハードウェア構成は図１１に示す構成と異なる構成であってもよい。
【００７５】
コンピュータ１００は、演算装置９０１、補助記憶装置９０２、主記憶装置９０３、通信装置９０４および入出力装置９０５を備える。
演算装置９０１、補助記憶装置９０２、主記憶装置９０３、通信装置９０４および入出力装置９０５はバス９０９に接続している。
【００７６】
演算装置９０１は、プログラムを実行するマルチコアプロセッサ１１０である。
補助記憶装置９０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリまたはハードディスク装置である。
主記憶装置９０３は、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
通信装置９０４は、通信パケット３００を通信するイーサネットインタフェース２００である。
入出力装置９０５は、例えば、マウス、キーボード、ディスプレイ装置である。
【００７７】
プログラムは、補助記憶装置９０２に記憶される。
例えば、オペレーティングシステム（ＯＳ）が補助記憶装置９０２に記憶される。また、「〜部」として説明している機能を実現するプログラムが補助記憶装置９０２に記憶される。
プログラムは、主記憶装置９０３にロードされ、演算装置９０１に読み込まれ、演算装置９０１によって実行される。
【００７８】
「〜の判断」、「〜の判定」、「〜の抽出」、「〜の検知」、「〜の設定」、「〜の登録」、「〜の選択」、「〜の生成」、「〜の入力」、「〜の出力」等の処理の結果を示す情報、データ、ファイル、信号値または変数値が主記憶装置９０３または補助記憶装置９０２に記憶される。
【００７９】
図１２は、実施の形態１におけるイーサネットインタフェース２００のハードウェア構成を示す図である。
実施の形態１におけるイーサネットインタフェース２００のハードウェア構成について、図１２に基づいて説明する。但し、イーサネットインタフェース２００のハードウェア構成は図１２に示す構成と異なる構成であってもよい。
【００８０】
イーサネットインタフェース２００は、演算装置９１１、バッファ９１２、メモリ９１３および通信回路９１４を備える。
演算装置９１１、バッファ９１２、メモリ９１３および通信回路９１４はバス９１９に接続している。
【００８１】
演算装置９１１は通信用のプロセッサである。
バッファ９１２は通信パケット３００を記憶する送信バッファおよび受信バッファである。
メモリ９１３はプログラムなどを記憶する。
通信回路９１４は、有線または無線で、インターネット、ＬＡＮ（ローカルエリアネットワーク）、電話回線網またはその他のネットワークを介して通信を行う。
【００８２】
プログラムはメモリ９１３に記憶される。例えば、「〜部」として説明している機能を実現するプログラムがメモリ９１３に記憶される。
プログラムは演算装置９０１によって実行される。
【００８３】
「〜の判断」、「〜の判定」、「〜の抽出」、「〜の検知」、「〜の設定」、「〜の登録」、「〜の選択」、「〜の生成」、「〜の入力」、「〜の出力」等の処理の結果を示す情報、データ、ファイル、信号値または変数値が主記憶装置９０３または補助記憶装置９０２に記憶される。
【００８４】
実施の形態１により、ソフトウェアとハードウェアとが連携して受信パケットを各ＣＰＵコアに振り分けることができる。また、受信パケットを各ＣＰＵコアに振り分けるためのソフトウェアとハードウェアの製造コストを抑えることができる。例えば、クライアントプログラムまたはサーバプログラムなどのアプリケーションは改修せずに使用することができる。また、ルータのようなハードウェアは不要である。
実施の形態１は、通信パケットを振り分ける簡易な専用のハードウェアを用いる。これにより、上位のアプリケーションソフトウェアを変更せず、受信した通信パケットを振り分ける負荷を各プロセッサコアにかけず、受信した通信パケットを各プロセッサコアに正しく振り分けることができる。
【００８５】
実施の形態２．
ポート番号削除部２５０が通信のタイムアウトが発生したときに割り当てポート番号を削除する形態について説明する。
以下、実施の形態１と異なる事項について主に説明する。説明を省略する事項については実施の形態１と同様である。
【００８６】
コンピュータ１００の構成は実施の形態１（図１参照）と同様である。
【００８７】
図１３は、実施の形態２におけるイーサネットインタフェース２００の構成図である。
実施の形態２におけるイーサネットインタフェース２００の構成について、図１３に基づいて説明する。但し、イーサネットインタフェース２００の構成は図１３に示す構成と異なる構成であっても構わない。
【００８８】
イーサネットインタフェース２００は、実施の形態１（図２）で説明した機能に加えて、タイムアウト検出部２６０を備える。
【００８９】
タイムアウト検出部２６０は、ポート番号ファイル３１０に登録された割り当てポート番号毎に、前回の通信時から経過した経過時間を計測する。
そして、タイムアウト検出部２６０は、計測した経過時間が所定の通信待ち時間を超えた場合に、割り当てポート番号をポート番号削除部２５０に通知する。
【００９０】
ポート番号削除部２５０は、タイムアウト検出部２６０から通知された割り当てポート番号と、割り当てポート番号に対応付けられたコア識別子と、をポート番号ファイル３１０から削除する（図６のＳ１４２と同様）。
【００９１】
図１４は、実施の形態２におけるポート番号ファイル３１０の構成図である。
実施の形態２におけるポート番号ファイル３１０の構成について、図１４に基づいて説明する。但し、ポート番号ファイル３１０の構成は図１４に示す構成と異なる構成であっても構わない。
【００９２】
ポート番号ファイル３１０のエントリ（行）は、実施の形態１（図７参照）で説明した項目に加えて、経過時間を備える。
ポート番号登録部２２０は、割り当てポート番号を登録するときに、割り当てポート番号を登録するエントリの経過時間を初期化する。例えば、経過時間の初期値は０である。
タイムアウト検出部２６０は、定期的に、有効フラグ値が１である各エントリの経過時間をカウントアップする。
【００９３】
コンピュータ１００のクライアント処理は、実施の形態１（図４から図６参照）と同様である。また、コンピュータ１００のサーバ処理は、実施の形態１（図８から図１０参照）と同様である。
但し、タイムアウト検出部２６０は、通信パケット３００Ｓが送信されるとき（Ｓ１２０、Ｓ２２０）に、通信パケット３００Ｓに含まれる送信元パケット番号と同じ割り当てポート番号を含んだエントリをポート番号ファイル３１０から選択する。そして、タイムアウト検出部２６０は、選択したエントリに含まれる経過時間を初期化する。
また、タイムアウト検出部２６０は、通信パケット３００Ｒが受信されるとき（Ｓ１３０、Ｓ２３０）に、通信パケット３００Ｒに含まれる送信先パケット番号と同じ割り当てポート番号を含んだエントリをポート番号ファイル３１０から選択する。そして、タイムアウト検出部２６０は、選択したエントリに含まれる経過時間を初期化する。
【００９４】
実施の形態２により、通信のタイムアウト時に割り当てポート番号を無効にすることができる。
【００９５】
実施の形態３．
複数のＣＰＵコア１２０において割り当てポート番号が競合する場合の形態について説明する。
以下、実施の形態１と異なる事項について主に説明する。説明を省略する事項は実施の形態１と同様である。
【００９６】
コンピュータ１００の構成は実施の形態１（図１参照）と同様である。
【００９７】
図１５は、実施の形態３におけるイーサネットインタフェース２００の構成図である。
実施の形態３におけるイーサネットインタフェース２００の構成について、図１５に基づいて説明する。但し、イーサネットインタフェース２００の構成は図１５に示す構成と異なる構成であっても構わない。
【００９８】
イーサネットインタフェース２００は、実施の形態１（図２参照）で説明した機能に加えて、ポート番号変更部２７０を備える。
【００９９】
ポート番号変更部２７０は、ＣＰＵコア１２０Ｂのプロトコルスタック部１４０Ｂが他のＣＰＵコア１２０Ａのプロトコルスタック部１４０Ａによって生成された割り当てポート番号と同じ割り当てポート番号を生成した場合、新たな割り当てポート番号を生成する。つまり、ポート番号変更部２７０は、既存の割り当てポート番号と重複する割り当てポート番号を変更する。
【０１００】
図１６は、実施の形態３におけるポート番号ファイル３１０の構成図である。
実施の形態３におけるポート番号ファイル３１０の構成について、図１６に基づいて説明する。但し、ポート番号ファイル３１０の構成は図１６に示す構成と異なる構成であっても構わない。
【０１０１】
ポート番号ファイル３１０のエントリ（行）は、実施の形態１（図７参照）で説明した構成に加えて、オフセット値を備える。
ポート番号登録部２２０は、割り当てポート番号が変更された場合、割り当てポート番号に加算されたオフセット値を割り当てポート番号と共に登録する。但し、オフセット値は減算される値であっても構わない。
【０１０２】
コンピュータ１００のクライアント処理は、実施の形態１（図４から図６参照）と同様である。また、コンピュータ１００のサーバ処理は、実施の形態１（図８から図１０参照）と同様である。
但し、割り当てポート番号の登録時（Ｓ１１３、Ｓ２１３）、通信パケット３００Ｓの送信時（Ｓ１２２、Ｓ２２２）および通信パケット３００Ｒの受信時（Ｓ１３１、Ｓ２３１）に、ポート番号変更部２７０の処理が以下のように加わる。
【０１０３】
割り当てポート番号の登録時（Ｓ１１３、Ｓ２１３）において、ポート番号変更部２７０は、プロトコルスタック部１４０によって生成された割り当てポート番号を、ポート番号ファイル３１０に含まれる各割り当てポート番号と比較する。なお、生成された割り当てポート番号と比較される各割り当てポート番号は、有効なエントリ（有効フラグ値が１）に含まれる割り当てポート番号である。
生成された割り当てポート番号と同じ割り当てポート番号がある場合、ポート番号変更部２７０は、生成された割り当てポート番号に所定のオフセット値（例えば、４００）を加算する。つまり、ポート番号変更部２７０は割り当てポート番号を変更する。なお、オフセット値を加算後の割り当てポート番号と同じ割り当てポート番号がある場合、ポート番号変更部２７０は、オフセット値を加算後の割り当てポート番号に追加のオフセット値（例えば、１）を加算する。
その後、ポート番号登録部２２０は、割り当てポート番号をポート番号ファイル３１０に登録する。登録する割り当てポート番号がオフセット値を加算後の割り当てポート番号である場合、ポート番号登録部２２０は、割り当てポート番号と共にオフセット値を登録する。
【０１０４】
通信パケット３００Ｓの送信時（Ｓ１２２、Ｓ２２２）において、ポート番号変更部２７０は、通信パケット３００Ｓに含まれる送信元ポート番号と同じ割り当てポート番号に対応付けられたオフセット値をポート番号ファイル３１０から選択する。
そして、ポート番号変更部２７０は選択したオフセット値を送信元ポート番号に加算する。つまり、ポート番号変更部２７０は、通信パケット３００Ｓの送信元ポート番号を、オフセット値を加算後の割り当てポート番号に変更する。但し、オフセット値が０である場合、送信元ポート番号の変更（オフセット値の加算）は不要である。
その後、パケット通信部２１０は通信パケット３００Ｓを送信する。
【０１０５】
通信パケット３００Ｒの受信時（Ｓ１３１、Ｓ２３１）において、ＣＰＵコア選択部２３０は、通信パケット３００Ｒに含まれる送信先ポート番号と同じ割り当てポート番号に対応付けられたコア識別子を、ポート番号ファイル３１０から選択する。
その後、ポート番号変更部２７０は、通信パケット３００Ｒに含まれる送信先ポート番号と同じ割り当てポート番号に対応付けられたオフセット値を、ポート番号ファイル３１０から選択する。
そして、ポート番号変更部２７０は選択したオフセット値を送信先ポート番号から減算する。つまり、ポート番号変更部２７０は通信パケット３００Ｒの送信先ポート番号をプロトコルスタック部１４０によって生成された割り当てポート番号に変更する。但し、オフセット値が０である場合、送信先ポート番号の変更（オフセット値の減算）は不要である。
【０１０６】
実施の形態３において、ＣＰＵコア１２０毎に割り当てポート番号の範囲を定めてもよい。
例えば、ＣＰＵコア１２０Ａ用の割り当てポート番号を０から３２７６７に定めて、ＣＰＵコア１２０Ｂ用の割り当てポート番号を３２７６８から６５５３５に定める。
この場合、ＣＰＵコア１２０Ｂ用のオフセット値を３２７６８にする。そして、プロトコルスタック部１４０Ｂによって割り当てポート番号が生成された場合、ポート番号変更部２７０は、重複する割り当てポート番号の有無に関わらず、生成された割り当てポート番号にオフセット値３２７６８を加算する。一方、ポート番号変更部２７０は、プロトコルスタック部１４０Ａによって生成されたいずれの割り当てポート番号にもオフセット値を加算しない。
【０１０７】
実施の形態３により、ＣＰＵコア１２０間で割り当てポート番号が競合しないようにすることができる。
【０１０８】
各実施の形態は、コンピュータ１００の形態の一例である。
つまり、コンピュータ１００は、各実施の形態で説明した構成要素の一部を備えなくても構わない。また、コンピュータ１００は、各実施の形態で説明していない構成要素を備えても構わない。さらに、コンピュータ１００は、各実施の形態の構成要素の一部または全てを組み合わせたものであっても構わない。
例えば、実施の形態３で説明したコンピュータ１００は、実施の形態２で説明したように通信のタイムアウト時に割り当てポート番号を無効にするための構成を備えても構わない。
【０１０９】
各実施の形態においてフローチャート等を用いて説明した処理手順は、各実施の形態に係る方法およびプログラムの処理手順の一例である。各実施の形態に係る方法およびプログラムは、各実施の形態で説明した処理手順と一部異なる処理手順で実現されても構わない。
「〜部」は「〜処理」「〜工程」「〜プログラム」「〜装置」などに読み替えることができる。
【符号の説明】
【０１１０】
１００  コンピュータ、１０１  サーバ装置、１０２  クライアント装置、１０９  ネットワーク、１１０  マルチコアプロセッサ、１２０  ＣＰＵコア、１３０  クライアント部、１４０  プロトコルスタック部、１５０  イーサネットドライバ部、２００  イーサネットインタフェース、２１０  パケット通信部、２２０  ポート番号登録部、２３０  ＣＰＵコア選択部、２４０  割り込み発生部、２５０  ポート番号削除部、２６０  タイムアウト検出部、２７０  ポート番号変更部、２９１  受信バッファ部、２９２  送信バッファ部、２９３  ポート番号記憶部、３００  通信パケット、３０１  ＩＰヘッダ、３０２  ＴＣＰヘッダ、３０３  ペイロード、３０４  送信元ポート番号、３０５  送信先ポート番号、３１０  ポート番号ファイル、９０１  演算装置、９０２  補助記憶装置、９０３  主記憶装置、９０４  通信装置、９０５  入出力装置、９０９  バス、９１１  演算装置、９１２  バッファ、９１３  メモリ、９１４  通信回路、９１９  バス。
【図１】
2015170947.tif 000003
【図２】
2015170947.tif 000004
【図３】
2015170947.tif 000005
【図４】
2015170947.tif 000006
【図５】
2015170947.tif 000007
【図６】
2015170947.tif 000008
【図７】
2015170947.tif 000009
【図８】
2015170947.tif 000010
【図９】
2015170947.tif 000011
【図１０】
2015170947.tif 000012
【図１１】
2015170947.tif 000013
【図１２】
2015170947.tif 000014
【図１３】
2015170947.tif 000015
【図１４】
2015170947.tif 000016
【図１５】
2015170947.tif 000017
【図１６】
2015170947.tif 000018