(57)【要約】【課題】  共有メモリを介したマルチプロセッサシステムは、マルチプロセッサシステムでないシステムのアプリケーションを用いてプロセッサ間通信を行えない場合がある。【解決手段】  第１のキャッシュメモリを備えた第１のプロセッサと第２のキャッシュメモリを備えた第２のプロセッサとの間で共有メモリを介してデータを送受信するプロセッサ間通信方法であって、第１のプロセッサは、第２のプロセッサとの間で転送するデータを共有メモリに記憶する転送データ領域を、第１のキャッシュメモリのキャッシュラインの１ラインを全て満たす領域Ａと、満たさない領域Ｂとに分類し、第１のキャッシュメモリのキャッシュラインとアライメントがとれている共有メモリの分割データ領域に、領域Ｂのデータをコピーし、第２のプロセッサは、領域Ａのデータと分割データ領域のデータを第１のプロセッサからのデータとして処理する。【選択図】  図１
2010097252.tif 000002
【特許請求の範囲】
【請求項１】
第１のキャッシュメモリを備えた第１のプロセッサと第２のキャッシュメモリを備えた第２のプロセッサとの間で共有メモリを介してデータを送受信するプロセッサ間通信方法であって、
前記第１のプロセッサは、
前記第２のプロセッサとの間で転送するデータを前記共有メモリに記憶する転送データ領域を、前記第１のキャッシュメモリの１キャッシュラインの全てを満たす第１領域と、満たさない第２領域とに分類し、
前記第１のキャッシュメモリのキャッシュラインとアライメントがとれている前記共有メモリの分割データ領域に、前記第２領域のデータをコピーし、
前記第２のプロセッサは、
前記第１領域のデータと前記分割データ領域のデータを前記第１のプロセッサからのデータとして処理することを特徴とするプロセッサ間通信方法。
【請求項２】
前記第１のプロセッサは、前記共有メモリと前記第１のキャッシュメモリのキャッシュラインとを解析し、前記転送データ領域を前記第１領域と前記第２領域に分類することを特徴とする請求項１に記載のプロセッサ間通信方法。
【請求項３】
前記第１のプロセッサは、前記共有メモリの所定領域に、前記第１領域と前記分割データ領域とを特定するための情報を書き込み、
前記第２のプロセッサは、前記情報に基づいて、前記第１領域のデータと前記分割データ領域のデータに対応する前記第２のキャッシュメモリの領域を無効化することを特徴とする請求項１又は請求項２に記載のプロセッサ間通信方法。
【請求項４】
前記所定領域は、前記第１のプロセッサにおける非キャッシュ領域であることを特徴とする請求項３に記載のプロセッサ間通信方法。
【請求項５】
前記第２領域は前記転送データ領域の先頭を含む領域、最後を含む領域のどちらかまたは両方であることを特徴とする請求項１乃至請求項４の何れか１項に記載のプロセッサ間通信方法。
【請求項６】
前記分割データ領域への前記第２領域のデータのコピーの後に、前記第１のプロセッサは、前記共有メモリの前記第１領域と前記分割データ領域に対応する前記第１のキャッシュメモリの領域のデータを前記共有メモリへ追い出すことを特徴とする請求項１乃至請求項５の何れか１項に記載のプロセッサ間通信方法。
【請求項７】
前記第２のプロセッサは、前記第１のプロセッサから転送準備の完了の通知を受けてから、前記共有メモリの読出しを行うことを特徴とする請求項１乃至請求項６の何れか１項に記載のプロセッサ間通信方法。
【請求項８】
前記通知は、前記第２のプロセッサに割り込み信号を送ることにより行われることを特徴とする請求項７に記載のプロセッサ間通信方法。
【請求項９】
前記通知は、前記第１のプロセッサから書き込み可能であり、前記第２のプロセッサから参照可能であるレジスタを前記第１のプロセッサが所定値に変更し、
前記第２のプロセッサが、前記レジスタが所定値に変更されたことを検知することにより行われることを特徴とする請求項７に記載のプロセッサ間通信方法。
【請求項１０】
前記通知は、前記第１のプロセッサが、前記共有メモリの特定の領域を所定値に変更し、
前記第２のプロセッサが、前記共有メモリの前記特定の領域が前記所定値に変更されたことを検知することにより行われることを特徴とする請求項６に記載のプロセッサ間通信方法。
【請求項１１】
第１のキャッシュメモリを備えた第１のプロセッサと第２のキャッシュメモリを備えた第２のプロセッサとの間で共有メモリを介してデータを送受信するプロセッサ間通信方法であって、
前記第１のプロセッサは、
前記第２のプロセッサとの間で転送するデータを前記共有メモリに記憶する転送データ領域を、前記第１のキャッシュメモリの１キャッシュラインの全てを満たす第１領域と、満たさない第２領域とに分類し、
前記第１のキャッシュメモリのキャッシュラインとアライメントがとれている分割データ領域を前記共有メモリに確保し、
前記第２のプロセッサは、
前記第１のプロセッサとの間で転送するデータを前記共有メモリの前記第１領域と前記分割データ領域に書き込み、
前記第１のプロセッサは、
前記共有メモリの前記第１領域と前記分割データ領域に書き込まれたデータを、前記第２のプロセッサからのデータとして処理することを特徴とするプロセッサ間通信方法。
【請求項１２】
前記第１のプロセッサから読み出した前記共有メモリの前記分割データ領域のデータを、前記共有メモリの第２領域に対応する領域にコピーし、前記共有メモリの第１領域と第２領域のデータを前記第２のプロセッサからのデータとして処理することを特徴とする請求項１１に記載のプロセッサ間通信方法。
【請求項１３】
前記第１のプロセッサは、前記共有メモリと前記第１のキャッシュメモリのキャッシュラインとを解析し、前記転送データ領域を前記第１領域と前記第２領域に分類することを特徴とする請求項１２に記載のプロセッサ間通信方法。
【請求項１４】
前記第１のプロセッサは、前記分割データ領域を確保した後に、前記共有メモリの第１領域と分割データ領域に対応する前記第１のキャッシュメモリの領域のデータを前記共有メモリに追い出すか、無効化することを特徴とする請求項１１乃至請求項１３の何れか１項に記載のプロセッサ間通信方法。
【請求項１５】
前記第１のプロセッサは、前記共有メモリの所定領域に、前記第１領域と前記分割データ領域とを特定するための情報を書き込み、
前記第２のプロセッサは、前記情報に基いて、前記共有メモリにデータを書き込むことを特徴とする請求項１１乃至請求項１４の何れか１項に記載のプロセッサ間通信方法。
【請求項１６】
前記第２のプロセッサは、前記共有メモリにデータを書き込む前に、前記共有メモリの第１領域と分割データ領域に対応する前記第２のキャッシュメモリの領域を無効化することを特徴とする請求項１５に記載のプロセッサ間通信方法。
【請求項１７】
前記所定領域は、前記第１のプロセッサにおける非キャッシュ領域であることを特徴とする請求項１５に記載のプロセッサ間通信方法。
【請求項１８】
前記第２領域は前記転送データ領域の先頭を含む領域、最後を含む領域のどちらかまたは両方であることを特徴とする請求項１１乃至請求項１７の何れか１項に記載のプロセッサ間通信方法。
【請求項１９】
前記第１領域及び分割データ領域へデータ書き込む後、前記第２のプロセッサは、前記共有メモリの前記第１領域と前記分割データ領域に対応する前記第２のキャッシュメモリの領域のデータを前記共有メモリへ追い出すことを特徴とする請求項１１乃至請求項１８の何れか１項に記載のプロセッサ間通信方法。
【請求項２０】
第１のキャッシュメモリを備えた第１のプロセッサと第２のキャッシュメモリを備えた第２のプロセッサとの間で共有メモリを介してデータを送受信するマルチプロセッサシステムであって、
前記第１のプロセッサは、
前記第２のプロセッサとの間で転送するデータを前記共有メモリに記憶する転送データ領域を、前記第１のキャッシュメモリの１キャッシュラインの全てを満たす第１領域と、満たさない第２領域とに分類する分類手段と、
前記第１のキャッシュメモリのキャッシュラインとアライメントがとれている前記共有メモリの分割データ領域に、前記第２領域のデータをコピーするコピー手段と、を有し、
前記第２のプロセッサは、
前記第１領域のデータと前記分割データ領域のデータを前記第１のプロセッサからのデータとして処理する処理手段とを有することを特徴とするマルチプロセッサシステム。
【請求項２１】
第１のキャッシュメモリを備えた第１のプロセッサと第２のキャッシュメモリを備えた第２のプロセッサとの間で共有メモリを介してデータを送受信するマルチプロセッサシステムであって、
前記第１のプロセッサは、
前記第２のプロセッサとの間で転送するデータを前記共有メモリに記憶する転送データ領域を、前記第１のキャッシュメモリの１キャッシュラインの全てを満たす第１領域と、満たさない第２領域とに分類する分類手段と、
前記第１のキャッシュメモリのキャッシュラインとアライメントがとれている分割データ領域を前記共有メモリに確保する確保手段とを有し、
前記第２のプロセッサは、
前記第１のプロセッサとの間で転送するデータを前記共有メモリの前記第１領域と前記分割データ領域に書き込む書込手段を有し、
前記第１のプロセッサは、
前記共有メモリの前記第１領域と前記分割データ領域に書き込まれたデータを、前記第２のプロセッサからのデータとして処理することを特徴とするマルチプロセッサシステム。
【請求項２２】
第１のキャッシュメモリを備えた第１のプロセッサと第２のキャッシュメモリを備えた第２のプロセッサとの間で共有メモリを介してデータを送受信するマルチプロセッサシステムにおける前記第１のプロセッサであって、
前記第２のプロセッサとの間で転送するデータを前記共有メモリに記憶する転送データ領域を、前記第１のキャッシュメモリの１キャッシュラインの全てを満たす第１領域と、満たさない第２領域とに分類する分類手段と、
前記第１のキャッシュメモリのキャッシュラインとアライメントがとれている前記共有メモリの分割データ領域に、前記第２領域のデータをコピーするコピー手段と、を有し、ことを特徴とするマルチプロセッサシステムにおける第１のプロセッサ。
【請求項２３】
第１のキャッシュメモリを備えた第１のプロセッサと第２のキャッシュメモリを備えた第２のプロセッサとの間で共有メモリを介してデータを送受信し、前記第１のプロセッサが、前記第２のプロセッサとの間で転送するデータを前記共有メモリに記憶する転送データ領域を、前記第１のキャッシュメモリの１キャッシュラインの全てを満たす第１領域と、満たさない第２領域とに分類し、前記第１のキャッシュメモリのキャッシュラインとアライメントがとれている分割データ領域を前記共有メモリに確保するマルチプロセッサシステムの前記第２のプロセッサであって、
前記第１のプロセッサとの間で転送するデータを前記共有メモリの前記第１領域と前記分割データ領域に書き込む書込手段と、
前記書込手段による書込み後に、前記第１のプロセッサが、前記共有メモリの前記第１領域と前記分割データ領域に書き込まれたデータを読み出すための通知を行う通知手段と、
を有することを特徴とするマルチプロセッサシステムの第２のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサ環境におけるプロセッサ間通信技術に関する。
【背景技術】
【０００２】
通信処理の高速化、負荷低減のため、通信処理をメインプロセッサと別プロセッサで実施する通信オフロード技術がある。このようなマルチプロセッサ処理では、プロセッサ間に共有メモリを配置し、共有メモリを介してプロセッサ間の通信が行われる。
【０００３】
例えば、アプリケーションが動作するメインプロセッサ側のメインシステムと、通信オフロード用プロセッサ側のサブシステムとの間に共有メモリを配置する。そして、メインプロセッサが転送データを共有メモリに書き込み、通信オフロード用プロセッサに転送データを書き込んだメモリ領域のアドレス情報をプロセッサ間通信により渡す。通信オフロード用プロセッサは、渡されたアドレス情報を用いて転送データを読出し、外部への送受信処理を実施する。
【０００４】
ここで、プロセッサ間で共有メモリを介してデータ転送を行う場合、各プロセッサが備えるキャッシュメモリにキャッシングされているデータを適切に処理しなければならない。キャッシュメモリにキャッシングされているデータの共有メモリへの書き込みを適切に処理できないと、共有メモリのデータが上書きされてしまう可能性があり、システムが正常に動作できなくなってしまうからである。
【０００５】
例えば、固定長（例えば、３２バイト長）のキャッシュラインを複数持つ構成のキャッシュメモリを考える。このようなキャッシュメモリでは、各プロセッサが備えるキャッシュメモリにキャッシングしているデータの共有メモリへの書き込みの際には、書き込むキャッシュライン上に他データが存在しないように制御しなければならない。これは、キャッシュの書き込み操作がキャッシュライン単位で行われるためであり、これを守らなければ、同一キャッシュライン上に存在する他データ領域を上書きしてしまうことになる。この上書きを防止するためには、アプリケーションが共有メモリの転送データ書き込み領域をキャッシュメモリのキャッシュラインにアライメントされたデータを用意するか、アライメントされた領域にコピーする処理が必要である。このような処理は複雑となってしまう。また、そのような処理を持たない従来から使用しているアプリケーションをそのままではマルチプロセッサ環境に適用できない。
【０００６】
また、プロセッサ間で共有メモリを介してデータ転送を行う場合に、キャッシュ機能をオフにすることも考えられる。
【０００７】
しかしながら、キャッシュ機能を完全にオフにした場合には、システムとしての性能が低下してしまい、通信スループットが大きく低下する。
【０００８】
マルチプロセッサ環境で共有メモリを使用してデータ転送する際の技術として、特許文献１、２等がある。
【０００９】
特許文献１は、他プロセッサに属するデータ領域を参照する場合には、自プロセッサの備えるキャッシュメモリにキャッシングされた参照領域に対応するデータを無効化する操作を行う。また、特許文献２は、システム上にキャッシュメモリのコヒーレンス機能を備えることで自動的に各プロセッサの備えるキャッシュメモリの内容を同期させる。
【特許文献１】特開平２−１５６３５
【特許文献２】特開２０００−１９４６８０
【発明の開示】
【発明が解決しようとする課題】
【００１０】
上述のように、共有メモリのデータの上書きを防止するためには複雑な処理が必要となってしまう。また、マルチプロセッサシステムでない従来から使用しているアプリケーションをそのままではマルチプロセッサ環境に適用できない可能性もある。
【００１１】
また、キャッシュ機能を利用しない方法ではシステムとしての性能を低下させてしまう。
【００１２】
本発明は、アプリケーションにおいて転送データ領域のキャッシュラインへのアライメントを意識することなく、当該アプリケーションをマルチプロセッサ環境に適用可能にすることを目的とする。
【課題を解決するための手段】
【００１３】
本発明のプロセッサ間通信方法は、第１のキャッシュメモリを備えた第１のプロセッサと第２のキャッシュメモリを備えた第２のプロセッサとの間で共有メモリを介してデータを送受信するプロセッサ間通信方法であって、前記第１のプロセッサは、前記第２のプロセッサとの間で転送するデータを前記共有メモリに記憶する転送データ領域を、前記第１のキャッシュメモリの１キャッシュラインの全てを満たす第１領域と、満たさない第２領域とに分類し、前記第１のキャッシュメモリのキャッシュラインとアライメントがとれている前記共有メモリの分割データ領域に、前記第２領域のデータをコピーし、前記第２のプロセッサは、前記第１領域のデータと前記分割データ領域のデータを前記第１のプロセッサからのデータとして処理することを特徴とする。
【００１４】
また、第１のキャッシュメモリを備えた第１のプロセッサと第２のキャッシュメモリを備えた第２のプロセッサとの間で共有メモリを介してデータを送受信するプロセッサ間通信方法であって、前記第１のプロセッサは、前記第２のプロセッサとの間で転送するデータを前記共有メモリに記憶する転送データ領域を、前記第１のキャッシュメモリの１キャッシュラインの全てを満たす第１領域と、満たさない第２領域とに分類し、前記第１のキャッシュメモリのキャッシュラインとアライメントがとれている分割データ領域を前記共有メモリに確保し、前記第２のプロセッサは、前記第１のプロセッサとの間で転送するデータを前記共有メモリの前記第１領域と前記分割データ領域に書き込み、前記第１のプロセッサは、前記共有メモリの前記第１領域と前記分割データ領域に書き込まれたデータを、前記第２のプロセッサからのデータとして処理することを特徴とする。
【発明の効果】
【００１５】
本発明によれば、マルチプロセッサシステムでないシステムのアプリケーションを流用できる。
【発明を実施するための最良の形態】
【００１６】
＜実施形態１＞
本発明の一実施形態として、ＴＣＰ／ＩＰ以下の下位層の通信処理を通信オフロード用プロセッサで処理し、アプリケーション用プロセッサの負担を軽減する通信オフロードシステムについて説明する。
【００１７】
本実施形態のシステム構成例を図１に示す。
【００１８】
本実施形態のシステムは、外部の通信装置２と有線ＬＡＮ（または無線ＬＡＮ）によって接続し、通信装置２とＴＣＰ／ＩＰパケット通信が可能な通信装置１である。なお、ＴＣＰ／ＩＰは、Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ略である。
【００１９】
通信装置１は、アプリケーション用プロセッサ１０１と通信オフロード用プロセッサとにより構成されるマルチプロセッサシステムである。以下、通信装置１の構成要素を有する。
【００２０】
アプリケーション用プロセッサ１０１は、ＳＭＢ（Ｓｅｒｖｅｒ  Ｍｅｓｓａｇｅ  Ｂｌｏｃｋ）やメールアプリケーションなどを処理するために使用する第１のプロセッサである。アプリケーション用プロセッサ１０１は、通信装置１のメインプロセッサとして機能する。通信オフロード用プロセッサ１０２は、ＴＣＰ／ＩＰや通信ドライバなどを処理するために使用する第２のプロセッサである。通信オフロード用プロセッサ１０２は、通信装置１のサブプロセッサとして機能する。つまり、通信オフロード用プロセッサ１０２がＴＣＰ／ＩＰ以下の下位層の通信処理を担うことにより、アプリケーション用プロセッサ１０１の付加を軽減する。共有メモリ１０３は、アプリケーション用プロセッサ１０１と通信オフロード用プロセッサ１０２と両方から参照および書き込みが可能なメモリである。キャッシュメモリ１０４は、アプリケーション用プロセッサ１０１が備える第１のキャッシュメモリであり、３２バイト長のキャッシュラインを複数備える。例えば、キャッシュメモリ１０４の全容量は１ＭＢとする。アプリケーション用プロセッサ１０１は、キャッシュメモリ１０４に書き込み、読出しを行うことにより、共有メモリ１０３への書き込み、読出しを行うことができる。キャッシュメモリ１０５は、通信オフロード用プロセッサ１０２が備える第２のキャッシュメモリであり、３２バイト長のキャッシュラインを複数備える。例えば、キャッシュメモリ１０５の全容量は１ＭＢとする。通信オフロード用プロセッサ１０２は、キャッシュメモリ１０５に書き込み、読出しを行うことにより、共有メモリ１０３への書き込み、読出しを行うことができる。キャッシュメモリ１０４、１０５を介して共有メモリ１０３への書き込み、読出しを行う場合には、共有メモリ１０３で使用する領域を対応する領域がキャッシュメモリ１０４、１０５にも確保して行われる。つまり、キャッシュメモリ１０４、１０５と共有メモリ１０３には、同じ領域が確保され、プロセッサがキャッシュメモリの所定領域に書き込んだデータが、共有メモリの対応する領域に書き込まれる。読出しの場合は、共有メモリの所定領域のデータを読み出すと、キャッシュメモリの対応する領域に読み出したデータを書込み、該データをプロセッサが処理することになる。制御回路１０６は、通信オフロード用プロセッサ１０２への割り込み信号およびアプリケーション用プロセッサ１０１への割り込み信号を制御する。ユーザインタフェイス１０７は、ユーザ操作および結果出力（表示等）を行うインタフェイスである。通信インタフェイス１０８は、有線ＬＡＮ（または無線ＬＡＮ）によるデータ送受信を行う。
【００２１】
ここで、アプリケーション用プロセッサ１０１と通信オフロード用プロセッサ１０２は個別のＯＳ（オペレーションシステム）で動作し、それぞれのＯＳは種類が同じであっても異なっていてもよい。アプリケーション用プロセッサ１０１側には、一般的なＢＳＤソケットＡＰＩが実装され、ソケットの実体は通信オフロード用プロセッサ１０２側に実装されている。後述の各種処理は、各プロセッサのＯＳの処理に基いて実行される。しかしながら、後述の各種処理を実行するハード構成（手段）を各プロセッサ内に設けてもよい。例えば、図２、図３の処理を行う場合は、図２、図３の各ステップを実行するハード構成（手段）を各プロセッサ内に設けてもよい。
【００２２】
共有メモリ１０３は、キャッシュ領域と非キャッシュ領域に分けることができる。説明を簡単にするために、ここではアプリケーション用プロセッサ１０１と通信オフロード用プロセッサ１０２から見たキャッシュ領域と非キャッシュ領域の配置とは同じになるように設定されている。
【００２３】
また、アプリケーション用プロセッサ１０１は、通信オフロード用プロセッサ１０２に対して割り込み信号を送信することができる。同様に、通信オフロード用プロセッサ１０２は、アプリケーション用プロセッサ１０１に対して割り込み信号を送信することができる。
【００２４】
割り込み信号は直接相手のプロセッサに送信できるように接続しても良いし、途中に割り込み信号を中継する割り込み制御回路１０６を置いても良い。
【００２５】
本実施形態の処理シーケンスを図２に示す。
【００２６】
以下は、ユーザが通信装置１のユーザインタフェイス１０７を操作して通信装置２へデータ転送する場合の処理である。以下、アプリケーション用プロセッサ１０１による共有メモリ１０３へのデータ書き込み、共有メモリ１０３からのデータ読出しは、キャッシュメモリ１０４を介して行われる。また、通信オフロード用プロセッサ１０２による共有メモリ１０３へのデータ書き込み、共有メモリ１０３からのデータ読出しは、キャッシュメモリ１０５を介して行われる。つまり、共有メモリ１０３にデータを書き込む場合は、キャッシュメモリ１０４、１０５の内容が、共有メモリ１０３に反映される。また、共有メモリ１０３からデータを読み出す場合は、共有メモリ１０３の内容が、キャッシュメモリ１０４、１０５に反映される。
【００２７】
転送データ準備ステップＳ２０１において、アプリケーション用プロセッサ１０１は、アプリケーションレイヤにおいて送信データを共有メモリ１０３上に準備する。送信データが準備された領域を転送データ領域とする。ＳＥＮＤコールステップＳ２０２において、アプリケーション用プロセッサ１０１は、転送データ領域のポインタを引数の一つとし、ソケットＡＰＩの一つであるＳＥＮＤをコールする。付加情報準備ステップＳ２０３において、アプリケーション用プロセッサ１０１は、付加情報領域を共有メモリ１０３上の非キャッシュ領域に確保する。アプリケーション用プロセッサ１０１は、この付加情報領域を、ＳＥＮＤのその他の引数情報を通信オフロード用プロセッサ１０２に渡すための引数情報領域、および通信オフロード用プロセッサ１０２から返り値を受け取るための返り値領域として使う。
【００２８】
アライメント解析ステップＳ２０４において、アプリケーション用プロセッサ１０１は、共有メモリ１０３上の転送データが置かれている転送データ領域とキャッシュメモリ１０４のキャッシュラインとをアライメント解析する。そして、転送データ領域をキャッシュラインを全て満たす領域Ａ（第１領域）と満たさない領域Ｂ（第２領域）とに分類する（図４を参照）。つまり、キャッシュライン毎に、キャッシュラインの先頭からデータが記憶されているか、キャッシュラインの途中からデータが記憶されているかを判定する。そして、１キャッシュラインの全てが転送データ領域となる領域を領域Ａとし、１キャッシュラインの一部だけが転送データ領域となる領域を領域Ｂとして分類する（図４を参照）。図４では、領域Ｂは、転送データ領域の先頭を含む領域と、最後を含む領域の両方である。しかしながら、転送データ領域の先頭が、キャッシュラインの先頭と一致する場合もあるし、転送データ領域の最後が、キャッシュラインの最後と一致する場合もある。これらの場合には、領域Ｂは転送データ領域の先頭を含む領域か、最後を含む領域のいずれか、もしくは、領域Ｂは無いことになる。
【００２９】
分割データコピーステップＳ２０５において、アプリケーション用プロセッサ１０１は、領域Ｂのデータを、共有メモリ１０３上の領域であってキャッシュメモリ１０４のキャッシュラインとアライメントがとれている分割データ領域にメモリコピーする。（図４、図５を参照）
転送情報書き込みステップＳ２０６において、アプリケーション用プロセッサ１０１は、共有メモリ１０３内の非キャッシュ領域である転送情報領域に領域Ａと前記分割データ領域および付加情報領域を特定することができる転送情報を書き込む。キャッシュ追い出しステップＳ２０７において、アプリケーション用プロセッサ１０１は、キャッシュメモリ１０４から領域Ａと分割データ領域のデータを共有メモリ１０３の転送データ領域に書き込む。通知ステップＳ２０８において、アプリケーション用プロセッサ１０１は、通信オフロード用プロセッサ１０２へ割り込み信号を発行し、転送準備が完了したことを通知する。ブロッキングステップＳ２０９において、アプリケーション用プロセッサ１０１は、ＳＥＮＤをコールしたタスクをブロッキングする。
【００３０】
ここで、通知ステップＳ２０８は、割り込み制御回路１０６による割り込み信号の発行で実現できることを説明したが、他の方法でも実現できる。例えば、アプリケーション用プロセッサから書き込み可能であり、通信オフロード用プロセッサから参照可能であるレジスタを用いても実現できる。この場合、アプリケーション用プロセッサが該レジスタを所定値に変更し、通信オフロード用プロセッサが該レジスタの値が所定値に変更されたことを検知するようにすればよい。また、通知ステップＳ２０８は、アプリケーション用プロセッサが共有メモリ１０３の所定領域を所定値に変更し、通信オフロード用プロセッサが該所定領域が所定値に変更されたことを検知する処理でも実現できる。
【００３１】
通信オフロード用プロセッサ１０２は、割り込み処理ステップＳ２１０において、割り込み信号によりアプリケーション用プロセッサ１０１が転送データの送信準備を完了したことを検知する。転送情報読み出しステップＳ２１１において、通信オフロード用プロセッサ１０２は、転送情報領域から転送情報を読み出す。キャッシュ無効化ステップＳ２１２において、通信オフロード用プロセッサ１０２は、キャッシュメモリ１０５の転送情報により特定される領域Ａと分割データ領域を無効化する。ＳＥＮＤＭＳＧコールステップＳ２１３において、通信オフロード用プロセッサ１０２は、領域Ａと分割データ領域とを転送データ、付加情報領域をその他の引数として、ソケットＡＰＩの一つであるＳＥＮＤＭＳＧをコールして送信処理を実行する。
【００３２】
ここで、ＳＥＮＤＭＳＧは、分割された領域のデータを送信することができるソケットのＡＰＩの一つである。また、ＳＥＮＤＭＳＧの代わりにＳＥＮＤを利用することもできる。ＳＥＮＤを利用するためには、一度、別領域に領域Ａと分割データ領域のデータをコピーして一つの連続したデータ領域とした後で、ＳＥＮＤを実施する。
【００３３】
ＳＥＮＤＭＳＧ（またはＳＥＮＤ）がコールされると、通信オフロード用プロセッサ１０２は、ＴＣＰ／ＩＰ処理Ｓ２１４および有線／無線ＬＡＮのドライバ処理Ｓ２１５を実施し、通信装置２に対してデータ送信Ｓ２１６を行う。つまり、ＳＥＮＤＭＳＧ（またはＳＥＮＤ）がコールされると、通信オフロード用プロセッサ１０２は、共有メモリ１０３から転送データを読出してキャッシュメモリ１０５に書き込む。そして、キャッシュメモリ１０５に書き込んだ領域Ａのデータと、分割データ領域のデータとを、転送データとして送信する。また、通信オフロード用プロセッサ１０２は、ＳＥＮＤＭＳＧ（またはＳＥＮＤ）が処理された後の返り値を付加情報領域の返り値領域に書き込む（Ｓ２１７）。
【００３４】
Ｓ２１８において通信オフロード用プロセッサ１０２は、アプリケーション用プロセッサ１０１に割り込み信号を発行して送信処理完了を通知する。
【００３５】
通信オフロード用プロセッサ１０２からの割り込み信号（Ｓ２１８）により、アプリケーション用プロセッサ１０１は、ＳＥＮＤをコールしたタスクのブロッキングを解除する（Ｓ２１９）。そして、アプリケーション用プロセッサ１０１は、Ｓ２２０においてアプリケーションレイヤに返り値を渡す。
【００３６】
上記処理により、共有メモリ１０３を介したプロセッサ間通信を利用した、マルチプロセッサ環境における好適な通信オフロードを実現することができる。
【００３７】
また、上記処理において、ＳＥＮＤの引数情報領域と返り値領域を共有メモリ１０３上のキャッシュ領域に確保し、この領域も含めて転送データ領域としても良い。この場合、通信オフロード用プロセッサ１０２が返り値を書き込み、キャッシングしている返り値領域のデータを共有メモリ１０３に書き込む処理を行う。そして、アプリケーション用プロセッサ１０１が返り値領域のデータを参照する前に、キャッシングしている返り値領域のデータを無効化する処理を行うことで実現できる。
【００３８】
次に、ユーザが通信装置１のユーザインタフェイス１０７を操作して通信装置２からデータ受信する場合の処理を説明する。
【００３９】
受信データ領域準備ステップＳ３０１において、アプリケーション用プロセッサ１０１は、アプリケーションレイヤにおいてデータを受信するための受信データ領域（転送データ領域）を共有メモリ１０３上に準備する。ＲＥＣＶコールステップＳ３０２において、アプリケーション用プロセッサ１０１は、受信データ領域のポインタを引数の一つとし、ソケットＡＰＩの一つであるＲＥＣＶをコールする。付加情報準備ステップＳ３０３において、アプリケーション用プロセッサ１０１は、付加情報領域を共有メモリ１０３上の非キャッシュ領域に確保する。アプリケーション用プロセッサ１０１は、この付加情報領域をＲＥＣＶのその他の引数情報を通信オフロード用プロセッサ１０２に渡すための引数情報領域、および通信オフロード用プロセッサ１０２から返り値を受け取るための返り値領域として使用する。
【００４０】
アライメント解析ステップＳ３０４において、アプリケーション用プロセッサ１０１は、共有メモリ１０３上の受信データ領域とキャッシュメモリ１０４のキャッシュラインとをアライメント解析する。そして、受信データ領域をキャッシュラインを全て満たす（領域Ａ）と満たさない領域Ｂとに分類する（図４を参照）。つまり、キャッシュライン毎に、キャッシュラインの先頭から受信データ領域として確保したか、キャッシュラインの途中から受信データ領域として確保したか、を判定する。そして、キャッシュラインの全てが受信データ領域となる領域を領域Ａとし、キャッシュラインの一部だけが受信データ領域となる領域を領域Ｂとして分類する（図４を参照）。分割データ領域確保ステップＳ３０５において、アプリケーション用プロセッサ１０１は、領域Ｂのデータをコピーする分割データ領域を、共有メモリ１０３上の領域でありキャッシュメモリ１０４のキャッシュラインとアライメントがとれている領域に確保する。（図４、図５を参照）
転送情報書き込みステップＳ３０６において、アプリケーション用プロセッサ１０１は、共有メモリ１０３内の非キャッシュ領域である転送情報領域に領域Ａと分割データ領域および付加情報領域を特定することができる転送情報を書き込む。キャッシュ追い出しステップＳ３０７において、アプリケーション用プロセッサ１０１は、キャッシュメモリ１０４の領域Ａと分割データ領域のキャッシングしているデータを共有メモリ１０３へ書き戻す（または、キャッシングしているデータを破棄する）。第１の通知ステップＳ３０８において、アプリケーション用プロセッサ１０１は、通信オフロード用プロセッサ１０２へ割り込み信号を発行する。ブロッキングステップＳ３０９において、アプリケーション用プロセッサ１０１は、ＲＥＣＶをコールしたタスクをブロッキングする。
【００４１】
ここで、第１の通知ステップＳ３０８は、割り込み制御回路１０６による割り込み信号の発行で実現できることを説明したが、他の処理でも実現できる。例えば、アプリケーション用プロセッサから書き込み可能であり、通信オフロード用プロセッサから参照可能であるレジスタを用いて実現できる。この場合、アプリケーション用プロセッサが該レジスタを所定値に変更し、通信オフロード用プロセッサがレジスタの値が所定値に変更されたことを検知するよにする。
【００４２】
また、第１の通知ステップＳ３０８は、アプリケーション用プロセッサが共有メモリ１０３の所定領域を所定値に変更し、通信オフロード用プロセッサが該所定領域が所定値に変更されたことを検知する処理でも実現できる。
【００４３】
次に、割り込み処理ステップＳ３１０において、通信オフロード用プロセッサ１０２は、割り込み信号によりアプリケーション用プロセッサ１０１の受信準備が完了したことを検知する。転送情報読み出しステップＳ３１１において、通信オフロード用プロセッサ１０２は、転送情報領域から転送情報を読み出す。キャッシュ無効化ステップＳ３１２において、通信オフロード用プロセッサ１０２は、キャッシュメモリ１０５の転送情報により特定される領域Ａと分割データ領域を無効化する。ＲＥＣＶＭＳＧコールステップＳ３１３において、通信オフロード用プロセッサ１０２は、領域Ａと分割データ領域とを受信データ領域、付加情報領域をその他の引数として、ソケットＡＰＩの一つであるＲＥＣＶＭＳＧをコールして受信処理を実行する。
【００４４】
ここで、ＲＥＣＶＭＳＧは分割された領域へデータを受信することができるソケットのＡＰＩの一つである。また、ＲＥＣＶＭＳＧの代わりにＲＥＣＶを利用することもできる。ＲＥＣＶを利用するためには、一度、１つの連続したデータ領域にＲＥＣＶによってデータ受信し、領域Ａと分割データ領域にその受信データをコピーして実施する。
【００４５】
ＲＥＣＶＭＳＧ（またはＲＥＣＶ）がコールされると、通信オフロード用プロセッサ１０２はＴＣＰ／ＩＰ処理Ｓ３１４および有線／無線ＬＡＮのドライバ処理Ｓ３１５を実施し、通信装置２からのデータ受信処理Ｓ３１６を行う。このデータ受信処理Ｓ３１６において受信されたデータは、キャッシュメモリ１０５の受信データ領域（転送データ領域）に記憶される。また、領域Ｂのデータは、分割データ領域にコピーされる。そして、キャッシュメモリ１０５の受信データ領域（転送データ領域）と分割データ領域のデータは共有メモリ１０３に書き込まれる。
【００４６】
また、通信オフロード用プロセッサ１０２は、ＲＥＣＶＭＳＧ（またはＲＥＣＶ）が処理された後の返り値を付加情報領域の返り値領域に書き込む（Ｓ３１７）。
【００４７】
通信オフロード用プロセッサ１０２は、第２の通知ステップＳ３１８を実行して割り込み信号を発行してアプリケーション用プロセッサ１０１に受信処理完了を通知する。該割り込み信号により、アプリケーション用プロセッサ１０１は、ＲＥＣＶをコールしたタスクのブロッキングを解除する（Ｓ３１９）。また、転送データ領域と分割データ領域に書き込まれている受信データをキャッシュメモリ１０４にコピーし（Ｓ３２０）、キャッシュメモリ１０４にコピーした分割データ領域のデータを領域Ｂにコピーする。そして、キャッシュメモリ１０４の受信データ領域（転送データ領域）にデータを、受信データとし、この受信データと返り値をアプリケーションレイヤに渡す（Ｓ３２１）。
【００４８】
なお、キャッシュメモリ１０４にコピーした分割データ領域のデータを領域Ｂにコピーし、受信データ領域（転送データ領域）のデータを受信データとしたが、領域Ａと分割データ領域のデータを受信データとしてアプリケーションレイヤに渡してもよい。
【００４９】
ここで、第２の通知ステップＳ３１８は、割り込み制御回路１０６による割り込み信号の発行で実現できることを説明したが、他の処理でも実現できる。例えば、通信オフロード用プロセッサから書き込み可能でり、通信アプリケーション用プロセッサから参照可能であるレジスタを用いても実現できる。この場合、通信オフロード用プロセッサが該レジスタを所定値に変更し、アプリケーション用プロセッサが該レジスタの値が所定値に変更されたことを検知するようにすればよい。
【００５０】
また、第２の通知ステップＳ３１８は、通信オフロード用プロセッサが共有メモリ１０３の所定領域を所定値に変更し、アプリケーション用プロセッサが該所定領域が所定値に変更されたことを検知する処理でも実現できる。
【００５１】
上記処理により、共有メモリ１０３を介したプロセッサ間通信を利用した、マルチプロセッサ環境における好適な通信オフロードを実現することができる。
【００５２】
また、上記処理において、ＲＥＣＶの引数情報領域と返り値領域を共有メモリ１０３上のキャッシュ領域に確保し、この領域も含めてプロセッサ間通信で転送しても良い。この場合、通信オフロード用プロセッサ１０２において返り値を書き込んだ後、キャッシングしている返り値領域のデータを共有メモリ１０３に書き戻す処理を行う。そして、アプリケーション用プロセッサ１０１において返り値領域のデータを参照する前に、キャッシングしている返り値領域のデータを無効化する処理を行うことで実現できる。
【００５３】
以上のように、比較的簡単な処理により、共有メモリのデータが他のアプリケーションに上書きされ、不具合を起こすことを回避できる。また、キャッシュ機能を完全にオフしないため、通信スループットの低下を軽減できる。また、アプリケーションで転送データ領域のキャッシュラインへのアライメント処理を実施する必要がなくなるので、従来から使用しているアプリケーションを継続して使用することができる。
【００５４】
また、キャッシュコヒーレンシのような高級機能を必要としないので、安価なプロセッサを用いて通信サブシステムを実現することができる。また、転送データの全てをコピーする必要がないので、プロセッサ間通信処理に要する時間を低減することができる。
【図面の簡単な説明】
【００５５】
【図１】本実施形態のシステム構成例
【図２】実施形態１の処理シーケンス
【図３】実施形態２の処理シーケンス
【図４】アライメント解析と分割データコピーの図解
【図５】実施形態の共有メモリの領域構成例
【符号の説明】
【００５６】
１  通信装置
２  外部の通信装置
１０１  アプリケーション用プロセッサ
１０２  通信オフロード用プロセッサ
１０３  共有メモリ
１０４  アプリケーション用プロセッサのキャッシュメモリ
１０５  通信オフロード用プロセッサのキャッシュメモリ
１０６  割り込み信号の制御回路
１０７  ユーザインタフェイス
１０８  通信インタフェイス
【図１】
2010097252.tif 000003
【図２】
2010097252.tif 000004
【図３】
2010097252.tif 000005
【図４】
2010097252.tif 000006
【図５】
2010097252.tif 000007