(57)【特許請求の範囲】
【請求項１】
ネットワークプロトコルユニットを受信する仮想メッセージ送信エンジンを決定する段階と、
前記仮想メッセージ送信エンジンから前記ネットワークプロトコルユニットを受信する仮想メッセージ受信エンジンを決定する段階と、
前記ネットワークプロトコルユニットの内容を１以上のメッセージセグメントに変換する段階と、
前記１以上のメッセージセグメントを前記仮想メッセージ受信エンジンに対応付けられているメモリ領域に送信する段階と
を備え、
前記１以上のメッセージセグメントは、
リンク層と、
送信先仮想メッセージエンジンアドレスと、
再構築タグフィールドと、
メッセージセグメントオフセットフィールドと、
データ部分と
を含む、方法。
【請求項２】
前記送信する段階は、前記メモリ領域の送信先メモリアドレスを特定することなく、前記メモリ領域に前記１以上のメッセージセグメントを送信する段階を有する請求項１に記載の方法。
【請求項３】
前記１以上のメッセージセグメントのうち少なくとも１つを格納するための前記メモリ領域の位置は、前記再構築タグフィールド及び前記メッセージセグメントオフセットフィールドに部分的に基づく、請求項１または２に記載の方法。
【請求項４】
前記ネットワークプロトコルユニットは、イーサネット（登録商標）に準拠している請求項１から３のいずれか１項に記載の方法。
【請求項５】
複数のメッセージセグメントを受信する段階と、
複数のメッセージセグメントを再構築して一のメッセージを作成する段階と、
前記メッセージの内容に基づき第２のネットワークプロトコルユニットを形成する段階と
をさらに備える請求項１から４のいずれか１項に記載の方法。
【請求項６】
受信した前記複数のメッセージセグメントの内容は、制御情報、データ情報、および、管理情報のうち少なくとも１つを含む請求項５に記載の方法。
【請求項７】
受信した前記複数のメッセージセグメントは、コアに対応付けられているメッセージエンジンが送信元である請求項５に記載の方法。
【請求項８】
ネットワークプロトコルユニットを受信して、前記ネットワークプロトコルユニットに対して媒体アクセス制御、フィルタリング、および、バッファリングを実行するロジックと、
前記ネットワークプロトコルユニットに対応付けられている送信先仮想メッセージエンジンを決定するメッセージマッピング部と、
前記ネットワークプロトコルユニットの内容を、少なくとも１つのメッセージセグメントを用いて、前記送信先仮想メッセージエンジンに対応付けられているメモリ領域に、前記少なくとも１つのメッセージセグメントが前記メモリ領域のメモリアドレスを特定することなく、送信するメッセージエンジンと
を備え、
前記少なくとも１つのメッセージセグメントは、
リンク層と、
送信先仮想メッセージエンジンアドレスと、
再構築タグフィールドと、
メッセージセグメントオフセットフィールドと、
データ部分と
を含む、装置。
【請求項９】
前記メッセージマッピング部は、受信側スケーリングに基づいて送信先仮想メッセージエンジンを割り当てる請求項８に記載の装置。
【請求項１０】
前記送信先仮想メッセージエンジンは、コアに対応付けられている請求項８または９に記載の装置。
【請求項１１】
前記メッセージセグメントのうち少なくとも１つを格納するための前記メモリ領域の位置は、前記再構築タグフィールド及び前記メッセージセグメントオフセットフィールドに部分的に基づく、請求項８から１０のいずれか１項に記載の装置。
【請求項１２】
送信されるべきネットワークプロトコルユニットを用意するロジックと、
少なくとも１つのメッセージを受信して、受信した前記少なくとも１つのメッセージの内容を前記送信されるべきネットワークプロトコルユニットを用意するロジックに供給する第２のメッセージエンジンと
をさらに備える請求項８から１１のいずれか１項に記載の装置。
【請求項１３】
ストレージデバイスと、
ネットワークプロトコルユニットを受信するネットワークインターフェースと、
前記ネットワークプロトコルユニットの内容から少なくとも１つのメッセージを形成する第１のメッセージエンジンであって、前記少なくとも１つのメッセージの送信先メモリアドレスを知ることなく、前記少なくとも１つのメッセージを第２のメッセージエンジンに送信する第１のメッセージエンジンと
を備え、
前記少なくとも１つのメッセージセグメントは、
リンク層と、
送信先仮想メッセージエンジンアドレスと、
再構築タグフィールドと、
メッセージセグメントオフセットフィールドと、
データ部分とを含む、システム。
【請求項１４】
前記第１のメッセージエンジンおよび前記第２のメッセージエンジンは、メモリコヒーレンシを維持しない請求項１３に記載のシステム。
【請求項１５】
前記第１のメッセージエンジンおよび前記第２のメッセージエンジンは、同じ物理メモリにアクセスしない請求項１３に記載のシステム。
【請求項１６】
前記第１のメッセージエンジンは、
前記ネットワークプロトコルユニットに対応付けられている送信先仮想メッセージエンジンを決定するメッセージマッピング部と、
少なくとも１つのメッセージを用いて、前記送信先仮想メッセージエンジンに対応付けられているメモリ領域に前記ネットワークプロトコルユニットの内容を、当該メモリ領域のメモリアドレスを特定することなく、送信するロジックと
を有する請求項１３から１５のいずれか１項に記載のシステム。
【請求項１７】
前記メッセージセグメントのうち少なくとも１つを格納するための前記メモリ領域の位置は、前記再構築タグフィールド及び前記メッセージセグメントオフセットフィールドに部分的に基づく、請求項１６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に開示する主題は概して、データ送信技術に関する。
【背景技術】
【０００２】
［関連出願］
本願は、同時係属中の米国特許出願第１２／３１９，０３３号（出願日：２００８年１２月３０日、発明の名称：「割り込み方法」、発明者：クマール（Ｋｕｍａｒ）他）（代理人整理番号：第Ｐ２９５６２号）に関する。
【０００３】
データネットワークにおいて、データ転送の中には、データのメモリ位置を特定して、受信者に当該メモリ位置にあるデータにアクセスさせることによって行なわれるものがある。一例を挙げると、ソフトスイッチ仮想マシンは、イーサネット（登録商標）パケットを仮想化プラットフォーム内のゲスト仮想マシン（ＶＭ）に配信する。ソフトスイッチＶＭおよびゲストＶＭは、パケット転送のために、ページフリッピング、共有ステージングバッファを介したダブルコピー、または、ハイパーバイザコピーを利用することができる。別の例を挙げると、ジェフ・ヒランド（Ｊｅｆｆ  Ｈｉｌｌａｎｄ）著、ＲＤＭＡプロトコル・バーブズ・スペシフィケーション、バージョン１．０（ＲＤＭＡ  Ｐｒｏｔｏｃｏｌ  Ｖｅｒｂｓ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ）（Ｖｅｒｓｉｏｎ１．０）（２００３）で記載されているｉＷＡＲＰ仕様がある。
【０００４】
これらの技術はそれぞれ、データを移動させるという目的の単純さには不釣合いなほど、処理コストが高い。さらに、メモリ空間の共有によって問題が発生し得る。あるメモリ空間が破損すると、当該メモリ空間にアクセスするソフトウェアまたはハードウェアはいずれも動作不良を起こす可能性がある。さらに、中央演算処理装置（ＣＰＵ）が含むコアの数が増加するにつれて、高効率の媒介メモリが存在する可能性が低下する。例えば、送信側と受信側との間に共有キャッシュが存在しない場合には、ＤＲＡＭ内でやり取りを行わざるを得ない。
【０００５】
別の例を挙げると、送信側から受信側へとバッファのデータをコピーする従来の例を考えられたい。送信側がコピーを行なうと、送信先バッファが送信側のデータキャッシュにおいて純粋なキャッシュポリューション（ｐｕｒｅ  ｃａｃｈｅ  ｐｏｌｌｕｔｉｏｎ）となる。受信側がコピーを行なうと、送信元バッファが受信側のデータキャッシュにおいて純粋なキャッシュポリューションとなる。このようなキャッシュの利用エラーは、今日のＣＰＵアーキテクチャでは無くすのが困難または不可能である。場合によっては、メモリ空間を共有することなくデータの転送を可能とするのが望ましい。
【図面の簡単な説明】
【０００６】
本発明の実施形態を、限定ではなく例示を目的として添付図面に図示する。図中では、同様の参照番号は同様の構成要素を示すものとする。
【図１】実施形態に係るシステムを示す図である。
【図２】実施形態に係るメッセージエンジン間での通信の例を示す図である。
【図３】実施形態に係るＶＭＴＥからＶＭＲＥへのメッセージセグメント送信のための初期化プロセスの例を示す図である。
【図４Ａ】実施形態に係るメッセージエンジンを示す簡略ブロック図である。
【図４Ｂ】実施形態に係る、外部装置との間で通信を行うメッセージエンジンを用いるネットワーク通信システムを示すブロック図である。
【図５】実施形態に係るメッセージエンジンを示す上位ブロック図である。
【図６】実施形態に係る、利用可能なＶＭＲＥを定義するコンテクストの形式の一例を示す図である。
【図７】実施形態に係る送信待ち行列内のノーオペレーションコマンドの形式の一例を示す図である。
【図８】実施形態に係る送信待ち行列内のコマンドの形式の一例を示す図である。
【図９】実施形態に係る受信待ち行列の形式の一例を示す図である。
【図１０】実施形態に係るメッセージセグメントの形式の一例を示す図である。
【図１１】実施形態に係る送信要求（ＲＴＳ）メッセージの形式の一例を示す図である。
【図１２】実施形態に係る受信準備完了（ＣＴＳ）メッセージの形式の一例を示す図である。
【図１３Ａ】実施形態に係る、メッセージエンジンを用いてＩＯデバイスからメッセージを転送するプロセスを示すフローチャートの一例である。
【図１３Ｂ】実施形態に係る、ＩＯデバイスにおいてメッセージエンジンを用いてメッセージを受信するプロセスを示すフローチャートの一例である。
【発明を実施するための形態】
【０００７】
本明細書において「一実施形態」または「実施形態」と言う場合、当該実施形態に関連付けて説明する特定の特徴、構造、または、特性が本発明の少なくとも１つの実施形態に含まれることを意味する。このため、「一実施形態において」または「実施形態」という表現が本明細書において何度も用いられているとしても、必ずしも全てが同じ実施形態を意味するものではない。さらに、具体的な特徴、構造、または、特性は、１以上の実施形態において組み合わせるとしてもよい。
【０００８】
図１は、実施形態に係るメッセージエンジン（ＭＥ）を用いるシステムを示す上位概略図である。メッセージエンジンの機能のより詳細な内容については他の図面を参照して説明する。本例によると、第１のメッセージエンジンＭＥ１は、インターコネクトを用いて第２のメッセージエンジンＭＥ２にメッセージを送信することができる。この際、ＭＥ１およびＭＥ２は同じメモリ空間を利用しない。一部の実施形態では、「メッセージ」とは、どのような種類のデータをカプセル化したものとしてもよいが、当該データの送信元メモリバッファのメモリアドレスは含んでおらず、当該データの送信先メモリアドレスを特定していないとしてもよい。一実施形態によると、ＭＥ１は、ＭＥ２の仮想メッセージエンジンアドレス（ＶＭＥＡ）を把握しているが、ＭＥ１によって送信されたデータをＭＥ２が格納するために用いるメモリバッファの送信先メモリアドレスは把握していないとしてよい。また、ＭＥ２は、ＭＥ１のＶＭＥＡは把握しているが、ＭＥ１を用いて送信されるデータの送信元のメモリアドレスは把握していないとしてよい。後述するが、ＶＭＥＡは特定のメッセージエンジンを識別するアドレスであってよい。ＶＭＥＡは、メモリアドレスとは区別されるとしてよい。
【０００９】
メモリ空間を共有しない構成は、アプリケーション毎のメモリアイソレーションを維持できるという利点を持つ。メモリアイソレーションは、あるメモリ空間での欠陥または破損が影響を与えるのは当該メモリ空間を利用しているアプリケーションに限定され、その他のアプリケーションに影響はないという利点を持つ。メモリアイソレーションはさらに、メモリ空間同士の間の共有メモリを永久的または一時的に作成するため、または、メモリ空間同士の間でメモリのページの所有権を移転させるため、または、メモリ空間同士の間で直接データをコピーするために必要なより高次のソフトウェア特権レベルに遷移するために用いられるハードウェアおよびソフトウェアのオーバーヘッドが無くなるという利点も持つ。
【００１０】
ある実施形態によると、メッセージエンジンはメモリのコヒーレンシを維持しないとしてよい。コヒーレンシとは、あるメモリに対する複数のアクセスでは、同じアドレスを用いれば同じデータを読み出すことを保証するプロトコルである。したがって、複数の異なるメッセージエンジンは、メモリのコヒーレンシを維持しないので、コヒーレンシプロトコルのオーバーヘッドが発生しない。各メッセージエンジンは、別々のコヒーレンシドメインで動作するとしてよい。コヒーレンシは、エンドポイント毎に維持されるとしてよい。例えば、コヒーレンシは、スレッドとメッセージエンジンとの間で維持されるとしてよい。
【００１１】
実施形態によると、複数のメッセージエンジンは、同一の物理メモリを共有しない。例えば、複数のメッセージエンジンは、同じＲＡＭチップへのアクセスが禁止されているとしてよい。
【００１２】
仮想メッセージエンジン（ＶＭＥ）は、ホスト物理メッセージエンジン（ＨＰＭＥ）に対する仮想インターフェースのインスタンスである。ＶＭＥは、仮想メモリのメッセージ送受信をサポートする。メッセージエンジンはさらに、ＲＤＭＡ書込動作およびＲＤＭＡ読出動作もサポートするとしてよい。ＶＭＥは、仮想メッセージ送信エンジン（ＶＭＴＥ）または仮想メッセージ受信エンジン（ＶＭＲＥ）のいずれかである。ハイパーバイザまたはその他の特権システムエンティティ（例えば、ネイティブＯＳ内のカーネル）が、一度に１つのＶＭＴＥをスケジューリングするが、１つのＨＰＭＥに同時に複数のＶＭＲＥをスケジューリングするとしてよい。ハイパーバイザまたはその他の特権エンティティは、プロセッサで実行されるソフトウェアルーチンであってよい。
【００１３】
２つの仮想マシンは、ＶＭＴＥが送信するとＶＭＲＥが受信できる状態にある限り、両者間の通信を正方向に進行させるとしてよい。ハイパーバイザは、例えば、対応するソフトウェアスレッドと同時にスケジューリングすることによって、細粒度でＶＭＴＥをスケジューリングするとしてよい。ＶＭＴＥは、ハイパーバイザによってスケジューリングされていない場合には送信を中止するとしてよい。ＨＰＭＥは、同時に複数のＶＭＲＥをサポートするとしてよい。ＶＭＲＥは、ＶＭＴＥまたはＶＭＲＥに対応付けられているＣＰＵスレッドとは無関係にスケジューリングされるとしてよい。ＶＭＲＥが持続すると、スケジューリング量において正方向に進行させる上で有用であるとしてよい。
【００１４】
一部の実施形態によると、ＶＭＲＥまたはＶＭＴＥは、メッセージの送受信にプロセッサの仮想アドレスを利用するとしてよい。これらの仮想アドレスは、ソフトウェアスレッドと同じメモリ変換メカニズムを用いるとしてよい。メッセージ通信に仮想アドレスを用いることによって、既存のソフトウェアメモリ変換メカニズムと重複する別のメモリ制御メカニズムのオーバーヘッドを発生させることなく、アドレス空間分離が容易になる。
【００１５】
ハイパーバイザは、ＶＭＥ（例えば、ＶＭＲＥおよびＶＭＴＥ）のための記述子を、ＶＭＥが論理的に存在しているアドレス空間に特有の仮想アドレスで、構築するとしてよい。ＶＭＥは、任意の仮想アドレス空間内に論理的に存在するとしてよく、例えば、ネイティブオペレーティングシステム（ＯＳ）のカーネルモード、準仮想方式の非ＶＴ型のゲストＯＳのカーネルモード、完全仮想ゲストＯＳのカーネルモード、ネイティブＯＳのユーザモード、準仮想方式の非ＶＴ型のゲストＯＳのユーザモード、完全仮想ゲストＯＳのユーザモード、または、ハイパーバイザに論理的に存在するとしてよい。仮想メッセージエンジンアドレス（ＶＭＥＡ）は、メッセージに対応付けられているＶＭＴＥまたはＶＭＲＥを特定しているとしてよい。
【００１６】
図１の例では、ＭＥ１は、ホスト物理メッセージエンジン（ＨＰＭＥ）を表している。ＭＥ１は、データのソースまたはシンク、例えば、演算素子または入出力（ＩＯもしくはＩ／Ｏ）デバイス（例えば、ネットワークインターフェース）に物理的および論理的に対応付けられているとしてよい。ＭＥ１は、ＩＯデバイスに組み込まれるとしてよい。ＭＥ１に対応付けられている仮想メッセージ送信エンジン（ＶＭＴＥ）は、送信先ＶＭＲＥにメッセージを送信するために、送信先ＶＭＲＥのＶＭＥＡを利用するとしてよい。したがって、ＭＥ１は、送信時には、セグメントを流して正しいＶＭＲＥに到達させる適切なリンクにＶＭＥＡをマッピングする。
【００１７】
本例では、ＭＥ２もまた、ＨＰＭＥを表している。ＭＥ２は、セグメントを受信するべく、ＶＭＥＡを用いて、ＭＥ２にスケジューリングされているＶＭＲＥ群の全てのＶＭＲＥの中から、入力されるメッセージセグメントのＶＭＲＥを特定する。ＭＥ２は、複数のハードウェアスレッドＨＴ０およびＨＴ１によって処理されるメッセージを受信することができる。ＭＥ２は、１以上のハイパースレッドを持つコアに組み込まれるとしてもよい。本例では、ハイパースレッドＨＴ０およびＨＴ１は、受信したメッセージを処理することができる２つのハイパースレッドである。ＭＥ２は、コアの外部に配されるとしてもよいし、または、複数のコアに対応付けられるとしてもよい。メッセージエンジンは、介在する物理層およびリンク層のインターコネクトがメッセージを適切に搬送する限り、ＣＰＵソケットの外部に、例えば、ディスクリートなＩＯデバイスに存在するとしてもよい。
【００１８】
ＭＥ２は、受信したメッセージを、キャッシュヒエラルキーまたはメモリのさまざまなレベルに入れるとしてよい。例えば、受信したメッセージは、全てのコアまたはメインメモリ（例えば、ＤＲＡＭまたはＳＲＡＭ）が共有する最終レベルキャッシュ（ＬＬＣ）、中間レベルキャッシュ（ＭＬＣ）、データキャッシュユニット（ＤＣＵ）のいずれに格納するとしてもよい。ＤＣＵは、ソフトウェアパイプラインに最も近接している最も高速のキャッシュであるとしてよい。
【００１９】
ＭＥ２は仮想化されるとしてよい。あるコアのメッセージエンジンは、ソフトウェアスレッドと同様に、従来のメモリ管理ユニット（ＭＭＵ）のページテーブルで定義されている仮想アドレスを介してシステムソフトウェアとやり取りを行なうとしてよい。メッセージエンジンは、１以上のスレッドと仮想アドレス空間を共有するとしてよいが、システムソフトウェアは、あるメッセージエンジンに対して専用のページテーブル群を構築することができる。
【００２０】
メッセージエンジンは、メッセージを、メッセージインターコネクトを介して搬送するのに適切な１以上のメッセージセグメントに分割するとしてよい。メッセージセグメントは、メモリアドレスは対応付けられておらず、メモリトランザクションの順序通りには並べられておらず、キャッシュヒエラルキーに対してアウトオブバンド方式で搬送されるとしてよい。受信したメッセージセグメントを処理するアプリケーションまたはその他のソフトウェアは、受信側のメッセージエンジンがメッセージセグメントを格納する送信先メモリアドレスを特定するとしてよい。
【００２１】
インターコネクトは、送信側メッセージエンジンから受信側メッセージエンジンへとメッセージセグメントを搬送する搬送媒体として機能するとしてよい。インターコネクトは、コヒーレントメモリインターコネクトと物理リソースを共有するとしてよいが、コヒーレントメモリに対してアウトオブバンド方式で、論理的に区別される搬送媒体として機能する。インターコネクトの例を挙げると、リング方式、クロスバ方式、および／または、メッシュ方式がある。インターコネクトはさらに、ＰＣＩエクスプレス等の外部バスを含むとしてもよい。
【００２２】
図１に示すシステムは、図示はしていないが、ストレージアダプタを用いてストレージデバイスにアクセスする機能をさらに有するとしてよい。例えば、ストレージアダプタは、スモール・コンピュータ・システムズ・インターフェース（ＳＣＳＩ）、ファイバ・チャネル（ＦＣ）および／またはシリアル・アドバンスド・テクノロジー・アタッチメント（Ｓ−ＡＴＡ）等のプロトコルのうちいずれかに準拠したストレージと通信する機能を持つとしてよい。ストレージは、これらに限定されないが、磁気ディスクドライブ、光ディスクドライブ、テープドライブ、内蔵ストレージデバイス、外付けストレージデバイス、フラッシュメモリ、バッテリー・バックアップＳＤＲＡＭ（シンクロナスＤＲＡＭ）および／またはネットワークアクセス可能なストレージデバイス等の不揮発性ストレージデバイスとして実現されるとしてよい。
【００２３】
図２は、実施形態に係るメッセージエンジン間で行なわれる通信の一例を示す図である。仮想メッセージ送信エンジン（ＶＭＴＥ−Ａ）は、ホスト物理メッセージエンジンＨＰＭＥ−Ａに対応付けられている。ハイパーバイザ（不図示）は、送信側メッセージ待ち行列と受信側メッセージ待ち行列との間の接続を１回に限り構築する。この後、ＶＭＥのアドレス空間内の非特権ソフトウェアが、待ち行列にバッファを入れるとしてよい。ソフトウェアが送信待ち行列（ＳＱ）内に送信待ち行列エントリを作成すると、ＶＭＴＥは図２に示す実施形態で説明する送信プロセスを開始するとしてよい。
【００２４】
２０１において、ＶＭＴＥ−Ａは、送信要求（ＲＴＳ）メッセージをＶＭＲＥに送信することによって、受信側メッセージエンジンに対するメッセージセグメントの転送を開始する。ＲＴＳメッセージの形式は、図１１を参照しつつ説明する形式であってよい。本例では、物理受信メッセージエンジンはＨＰＭＥ−Ｂである。仮想受信メッセージエンジンＶＭＲＥ−Ｂは、ＨＰＭＥ−Ｂに対応付けられている。
【００２５】
ＨＰＭＥ−Ａは、以下のプロセスに基づきＲＴＳメッセージを送信するとしてよい。
１．返送されてくる受信準備完了（ＣＴＳ）メッセージにストレージを割り当てる。このストレージは、このメッセージのためのＳＱエントリが占有しているメモリの一部であってよい。送信機は、返送されてくるＣＴＳメッセージを正しく処理するべく、要求ＩＤ（ＲＩＤ）値をこのＣＴＳストレージに対応付けるとしてよい。
２．ＲＴＳメッセージを、送信先ＶＭＥアドレスおよび送信元ＶＭＥアドレス、待ち行列番号（ＱＮ）、メッセージシーケンス番号（ＭＳＮ）、および、要求ＩＤ（ＲＩＤ）で初期化する。
３．ＲＴＳメッセージを送信する。
【００２６】
２０２において、ＨＰＭＥ−Ｂは、受信したメッセージに対して以下の項目をチェックするとしてよい。１）送信先ＶＭＥアドレスがＰＭＥにスケジューリングされているＶＭＲＥのものであるか否か、２）ＱＮが存在しているか否か、および、ＱＮがＶＭＲＥの最大許容ＱＮ以下であるか否か、３）送信先ＶＭＲＥアドレスにおける所定のＱＮに送信することが送信元ＶＭＥアドレスに許可されているか否か、４）ＭＳＮは、ＱＮの最小ＭＳＮ値以上であるか否か、および、５）ＭＳＮは、ＱＮの最大ＭＳＮ値以下であるか否か、を確認する。全ての有効性チェックにパスすれば、ＨＰＭＥ−Ｂは、受信したメッセージセグメントを再構築するために用いられる再構築スロットを要求する。
【００２７】
再構築スロットを割り当てるプロセスは以下の通りであってよい。
１．送信元ＶＭＥアドレス、ＱＮ値、ＭＳＮ値、ＲＩＤ値を再構築予約ステーション（不図示）に供給する。
２．再構築予約ステーションは、再構築スロットの割り当てを試みる。スロットが利用可能であれば、再構築予約ステーションは再構築タグおよびＲＩＤをＣＴＳ送信ハンドラ（不図示）に供給する。再構築予約ステーションは、送信元ＶＭＥアドレス、ＱＮ値、および、ＭＳＮ値等の関連ローカル情報を再構築タグに対応付けられているコンテクストに格納するとしてよい。
３．ＣＴＳ送信ハンドラは、ＲＴに対応付けられている入力データセグメントを処理するべく、セグメント化および再構築層を準備する。
４．ＣＴＳ送信ハンドラは、ＣＴＳメッセージを構築および送信する。ＲＩＤフィールドは、対応付けられているＲＴＳメッセージで送信側から受信したそのままの値を含む。
【００２８】
ＣＴＳメッセージの送信側のセグメント化および再構築層（不図示）は、ＣＴＳメッセージを送信すると即座に、対応付けられている再構築タグに関連する入力データセグメントを受け取る準備が整うとしてよい。
【００２９】
２０３において、ＶＭＲＥ−Ｂは、ＨＰＭＥ−Ｂに対応付けられている仮想メッセージ送信エンジン（不図示）を介して受信準備完了（ＣＴＳ）メッセージの送信を開始することによって、ＶＭＴＥ−Ａからのメッセージの送信を許可する。ＣＴＳメッセージは、他のインフライトのメッセージと当該メッセージとを区別するためにＶＭＲＥが用いる再構築タグ（ＲＴ）値を含む。
【００３０】
ＶＭＲＥ−Ａ（不図示）は、ＨＰＭＥ−Ａに対応付けられており、受信したメッセージを処理するために用いられる。２０４において、ＶＭＲＥ−Ａ（不図示）は、ＨＰＭＥ−ＢからのＣＴＳメッセージを認識する。ＶＭＲＥ−Ａは、ＣＴＳメッセージに含まれるＲＩＤ値に基づき、対応付けられているメッセージを特定するとしてよい。
【００３１】
２０５において、ＶＭＲＥ−Ａは、当該メッセージを「送信準備完了」とマーキングする。ＶＭＴＥ−Ａが現時点でスケジューリングされていれば、ＶＭＴＥ−Ａは、本明細書では２つのセグメントＴＸおよびＴＸ−Ｌを持つものと図示されているメッセージのメモリ領域Ａ（メモリＡ）からメモリ領域Ｂ（メモリＢ）への送信を、データ移動部を用いて開始する。非特権ソフトウェア（不図示）等のデータ受信機は、メッセージの内容を処理するように構成されているが、受信待ち行列（ＲＱ）にメモリ内のバッファを指し示す記述子を入れる。再構築層は、記述子、再構築タグ（ＲＴ）、および、メッセージセグメントオフセット（ＭＳＯ）をメッセージセグメントから読み出して、データ移動部にバッファが指定されているメモリＢ内に当該セグメントを入れるように通知する。記述子、ＲＴ、および、ＭＳＯは、セグメントの送信先がメモリＢであると特定している。再構築層は、メッセージのセグメントが全てメモリ内に入れられると、ＶＭＲＥ−Ｂに通知するとしてよい。
【００３２】
ＶＭＴＥ−Ａは、他のインフライトのメッセージ送信処理に対する送信優先度を考慮しつつセグメントの送信を行なう。ＶＭＲＥ−Ａがメッセージを送信準備完了とマーキングする時点においてＶＭＴＥ−Ａがスケジューリングされていなければ、メッセージの送信はハイパーバイザがＶＭＴＥ−Ａをスケジューリングし直した後に再開するとしてよい。
【００３３】
２０６において、メッセージセグメント、ＴＸ、および、ＴＸ−Ｌがメモリ領域Ｂに到達する。メッセージセグメントは、ＶＭＲＥ−Ｂが当該セグメントが属するメッセージコンテクストを特定するために用いるＲＴフィールドを含む。このコンテクストは、送信元および送信先の仮想メッセージエンジンアドレス、待ち行列番号（ＱＮ）フィールド、および、メッセージシーケンス番号フィールド（ＭＳＮ）を含むとしてよい。
【００３４】
受信側のＰＭＥは、ＲＴに対応付けられているＶＭＲＥを特定する。ＰＭＥが受信コンテクストを特定できない場合、ＰＭＥはセグメントを破棄する。受信側のＰＭＥはさらに、セグメント内で特定されているＭＳＯが受信中のメッセージの範囲内であることを確認する。ＭＳＯが範囲内でなければ、ＰＭＥはセグメントを破棄する。
【００３５】
ＶＭＴＥは、順番通りにセグメントを送信するとしてよいが、メッセージに含まれるセグメントの並び替えが行なわれる場合もある。メッセージ送信先において、再構築層（不図示）は、１）メモリ内にセグメントを入れ、２）以下の条件が全て満たされた場合にのみＶＭＲＥにメッセージ到着を通知し、３）メッセージ到着を通知する場合、再構築層は、ＶＭＲＥにメッセージが制御メッセージかデータメッセージかを示すとしてよい。条件とは、ａ）メッセージのセグメント全てがメモリ内に入っているか否か、ｂ）先行するメッセージ全てのセグメントが全てメモリ内に入っているか否か、である。
【００３６】
メッセージセグメントの受信側は、到着順序に関係なく、当該セグメントがメッセージ内の正しい位置に配されるようにするとしてよい。メッセージ内のＭＳＯフィールドにより、正しい位置にセグメントを配する処理がＶＭＲＥ内で簡便に行なわれる処理となる。しかし、受信側は、メッセージが処理可能な状態になったことを示す前にメッセージのセグメント全てが到着したことを確認するとしてよい。
【００３７】
ＶＭＲＥインターフェースは、以下のアサーションを行なうとしてよい。
１）ソフトウェアが受信待ち行列エントリ（ＲＱＥ）を載せた後、しかし、ＶＭＲＥが再構築されたメッセージが到着して処理可能な状態になった旨を示す前、ＶＭＲＥはメッセージデータバッファ内で任意にメモリを操作するとしてよい。ソフトウェアは、データバッファ内での任意の特定のデータアクセス挙動に依存しないとしてよい。
２）ＶＭＲＥは、ＲＱＥ内で任意にメモリを操作するとしてよい。ソフトウェアは、ＲＱＥ内での任意の特定のデータアクセス挙動に依存しないとしてよい。
３）ＶＭＲＥは、ＲＱヘッダ内でメモリを操作して、ヘッドフィールドを１以上インクリメントするとしてよい。
４）ＶＭＲＥがメッセージが到着した旨を示した後、ソフトウェア（例えば、受信したメッセージを処理するソフトウェア）は、ＲＱヘッダのヘッドフィールドが示すように完了したメッセージは全てメモリ内に配されているものと仮定することができる。
【００３８】
図３は、実施形態に係るＶＭＴＥからＶＭＲＥへのメッセージセグメントの送信のための初期化プロセスの一例を示す図である。３０１において、カーネル／オペレーティングシステム（ＯＳ）は、メッセージエンジンを用いて接続を行うようにハイパーバイザに要求する。
【００３９】
３０２において、ハイパーバイザは、利用可能なＶＭＲＥを記述したコンテクストを含むテーブルを構築する。コンテクストは、メッセージエンジンによるアクセスが可能である。一部の実施形態によると、適切なコンテクストは図６を参照して説明するコンテクストである。
【００４０】
３０３において、ハイパーバイザは、接続の対象である仮想メッセージ受信エンジン（ＶＭＲＥ）および仮想メッセージ送信エンジン（ＶＭＴＥ）の論理アドレスをカーネルに転送する。ＶＭＲＥおよびＶＭＴＥは、メッセージエンジンによる接続に関係している物理メッセージエンジンに対する論理インターフェースとして機能するアドレスに対応する。
【００４１】
３０４において、カーネルはハイパーバイザに自身の送信待ち行列（ＳＱ）を離れた受信待ち行列（ＲＱ）に接続するように要求する。
【００４２】
３０５において、メッセージの受信を制御するメッセージ受信機はメッセージを受信する準備が整っている旨を示す。メッセージ受信機は、これに限定されないが、アプリケーションソフトウェア、カーネル、ソフトスイッチ、または、固定機能アクセラレータであってよい。
【００４３】
３０６において、ハイパーバイザは、ＳＱ、ＲＱ、および、完成待ち行列（ＣＱ）を割り当てて、割り当てられたＳＱ、ＲＱ、および、ＣＱをカーネルに対して示す。
【００４４】
この後、物理送信メッセージエンジンは、部分的にＳＱを用いて特定された内容を、部分的にＲＱを用いて特定された位置に転送する。ＲＱは、ページ割当可能メモリ内に存在するとしてよい。一実施形態によると、送信メッセージエンジンは、データ移動部を用いて、線形アドレスの内容からメッセージセグメントを形成する。尚、線形アドレスはＳＱによって特定される。送信メッセージエンジンは、データ移動部を用いて、メッセージセグメントをメッセージインターコネクト上の内蔵送信保留バッファに入れる。受信メッセージエンジンは、データ移動部を用いて、ＲＱによって特定された線形アドレスにメッセージセグメントを入れる。線形アドレスは、ＣＰＵのページテーブルでマッピングされている複数の連続したアドレスであり、ソフトウェアによってネイティブにアクセス可能であるとしてよい。
【００４５】
完成待ち行列（ＣＱ）によって、ＶＭＥは、ソフトウェアに対してメッセージの受信または送信等の処理を通知することができる。ＣＱは、１以上のＳＱまたは１以上のＲＱに対応付けられているとしてよい。ＣＱ、および、対応付けられているＲＱまたはＳＱは、ＶＭＥと同じアドレス空間内に存在するとしてよい。ＣＱは、連続した仮想アドレス空間内に存在するとしてよい。ＣＱはページ割当可能メモリ内に存在するとしてよく、ＶＭＥは、ＣＱに対する読出または書込を試みるページフォールトを発生させるとしてよい。
【００４６】
ページフォールトは、ＶＭＥが特定の待ち行列についてメッセージの送受信を行なうために用いる仮想バッファにアクセスすると、発生するとしてよい。送信すべきメッセージを持つＶＭＴＥは、当該メッセージのセグメント化して、ＰＭＥに得られたセグメントを供給する処理を開始する。ＰＭＥは、リンククレジットによってスロットリングされている受信側であって、送信待ち行列優先順位決定を注視している受信側にセグメントを送信する。
【００４７】
ＶＭＴＥがメッセージバッファを読み出している間にページフォールトが発生すると、ＶＭＴＥは、以下の処理を行なう。１）このＳＱについてフォールトコンテクストバッファ（不図示）に現在のコンテクストを入れ、２）フォールトが発生した送信待ち行列からのメッセージ送信を停止して、３）ＶＭＥに対応付けられているスレッドに割り込みを発生してフォールトを解除して、４）残り全ての送信待ち行列の処理を通常通りに再開する。
【００４８】
一方、フォールトハンドラスレッドは、以下の処理を実行するとしてよい。
１．フォールトコンテクストバッファから読み出して、フォールトが発生したページをメモリにロードする。
２．メッセージ送信を再開させるべく、フォールトが発生したＳＱのドアベルをＶＭＥに書き込みを行なう。
【００４９】
ドアベルを検出すると、ＶＭＥは以下の処理を行なうとしてよい。
１．優先度がより高いＳＱを通常通り処理し続ける。
２．送信すべきメッセージが優先度が高いＳＱからなくなると、ＶＭＴＥはフォールトが発生したＳＱについてフォールトコンテクストバッファからロードを行なう。
３．フォールトが発生している最初のセグメントからメッセージのセグメント化を再開する。
【００５０】
ＶＭＲＥは、ＰＭＥから受信したセグメントを、メモリ内の対応するメッセージバッファに書き込むことによって、再構築する。ＶＭＲＥが受信待ち行列に書き込んでいる間にページフォールトが発生すると、ＶＭＲＥは以下の処理を行なうとしてよい。
１．このＲＱについてフォールトコンテクストバッファに現在のコンテクストを入れる。
２．送信側ＶＭＴＥにフォールトメッセージを送信する。フォールトメッセージは、フォールトが発生したメッセージセグメントのＭＳＮを示す。
３．ＶＭＲＥに対応付けられているスレッドに割り込みを発生してフォールトを解除する。
４．このメッセージについて受信したその他のメッセージセグメントは全て破棄する。
５．他の待ち行列（ページフォールトが発生していないもの）については通常通りメッセージセグメントの受信および格納を継続する。
【００５１】
フォールトハンドラスレッドは、以下の処理を実行するとしてよい。
１．フォールトコンテクストバッファを読み出して、フォールトが発生したページをメモリに入れる。
２．送信側にフォールトが発生したメッセージの送信を再開するように通知するべく、送信側に対するメッセージを作成する。このメッセージの内容は、ＶＭＴＥの特性に応じて決まる。
【００５２】
図４Ａは、実施形態に係るメッセージエンジンを示す簡略ブロック図である。例えば、メッセージエンジン４００は、任意のその他のメッセージエンジン、例えば、ネットワークインターフェースに含まれているメッセージエンジンに対してメッセージを送信するために用いられるとしてよい。メッセージエンジン４００はさらに、別のメッセージエンジンからメッセージを受信するために用いられるとしてもよい。ネットワークインターフェースは、ネットワークプロトコルユニットを送受信することができるとしてよい。本明細書で用いる場合、「ネットワークプロトコルユニット」という用語は、任意のプロトコル仕様に応じて形成されるヘッダ部分およびペイロード部分を含むパケット、または、フレーム、または、その他の形式の情報を含むとしてよい。
【００５３】
Ｉ／Ｏインターフェース４０２は、媒体アクセス制御（ＭＡＣ）処理、フィルタリング処理、および、周期的冗長検査（ＣＲＣ）処理を、受信したイーサネット（登録商標）フレームに対して実施すると共に、送信すべきイーサネット（登録商標）フレームについて媒体アクセス制御処理を実施するとしてよい。他の実施形態では、Ｉ／Ｏインターフェース４０２は、仕様が異なるフレームおよびパケットのプロトコルエンコードおよびプロトコルデコードを実行するとしてよい。
【００５４】
バッファ４０３−Ａは、Ｉ／Ｏインターフェース４０２による処理が行なわれた後の、受信したイーサネット（登録商標）フレームを格納するとしてよく、バッファ４０３−Ｂは、Ｉ／Ｏインターフェース４０２による処理がまだ行なわれていない送信すべきイーサネット（登録商標）フレームを格納するとしてよい。
【００５５】
メッセージセグメント化ブロック４０４は、バッファ４０３−Ａから受け取るイーサネット（登録商標）フレームをセグメント化して、下層のメッセージインターコネクトに応じたサイズのメッセージを生成することができる。メッセージセグメント化ブロック４０４は、メッセージルーティングテーブル４１０にクエリを行なって、受信したイーサネット（登録商標）フレームの内容を搬送するメッセージを転送すべきメッセージシーケンス番号（ＭＳＮ）、待ち行列番号（ＱＮ）、および、仮想メッセージ受信エンジン（ＶＭＲＥ）を決定するとしてよい。メッセージセグメント化ブロック４０４は、バッファ４０７−Ａに送信すべきメッセージセグメントを転送するとしてよい。バッファ４０７−Ａは、送信待ち行列（ＳＱ）を用いて識別されるとしてよい。メッセージセグメント化ブロック４０４は、データ移動部（不図示）を用いて、バッファ４０７−Ａから、ＶＭＲＥ、ＱＮおよびＭＳＮに対応付けられている位置へと、メッセージセグメントを転送するとしてよい。
【００５６】
バッファ４０７−Ｂは、インターコネクトを介して受信したメッセージセグメントを格納するとしてよい。バッファ４０７−Ｂは、部分的に受信待ち行列（ＲＱ）を用いて識別されるとしてよい。メッセージ再構築ブロック４０６は、データ移動部（不図示）を用いて、バッファ４０７−Ｂにメッセージセグメントを転送するとしてよい。
【００５７】
メッセージ再構築ブロック４０６は、バッファ４０７−Ｂ内のメッセージセグメントを再構築して完全なメッセージを形成し、バッファ４０３−Ｂ内の内容を１以上のネットワークプロトコルユニットで送信するべく供給することができる。
【００５８】
インターフェース４０８は、メッセージセグメント化ブロック４０４からインターコネクトへとメッセージを転送すると共に、インターコネクトからメッセージ再構築ブロック４０６へとメッセージを転送するとしてよい。
【００５９】
図４Ｂは、実施形態に係る、外部装置と通信するためにメッセージエンジンを利用するネットワーク通信システムを示すブロック図である。例えば、システム４５０は、受信（ＲＸ）メッセージエンジン４５４を用いて受信イーサネット（登録商標）フレームを転送するイーサネット（登録商標）準拠ネットワークインターフェースの機能を持つとしてよい。システム４５０はさらに、イーサネット（登録商標）フレームで送信すべきデータ、または、イーサネット（登録商標）ネットワークインターフェースの制御情報あるいは管理情報を含むメッセージを受信するために送信（ＴＸ）メッセージエンジン４５６を利用する。システム４５０は、他の種類のネットワークプロトコルユニット、例えば、これに限定されないが、シリアルＡＴＡおよびインフィニバンドをエンコードおよびデコードするとしてよい。
【００６０】
本例では、ＭＡＣ  ＲＸブロックは、外部のイーサネット（登録商標）ＰＨＹ媒体からイーサネット（登録商標）フレームを受け取る。ＭＡＣ  ＲＸブロックは、未加工のパケットに対してフレーム化処理およびイーサネット（登録商標）ＣＲＣ処理を実行する。フィルタリングブロックは、フィルタのルールに合わないパケットを破棄する。小規模受信（ＲＸ）バッファブロックは、メッセージインターコネクトジッタに対応するべく、バッファリング処理を実現する。
【００６１】
メッセージマッピングブロック４５２は、送信先メッセージエンジンのアドレスおよび小規模ＲＸバッファからのトラフィックのための待ち行列を決定する。例えば、メッセージマッピングブロック４５２は、送信先メッセージエンジンおよびトラフィックのための待ち行列を特定する際には、イーサネット（登録商標）フレームの送信元アドレス、送信先アドレス、および／または、ペイロードを考慮するとしてよい。送信先メッセージエンジンおよび待ち行列は、仮想メッセージ受信エンジン（ＶＭＲＥ）の識別子、待ち行列番号（ＱＮ）、および、メッセージシーケンス番号（ＭＳＮ）に基づき識別されるとしてよい。複数の送信先メッセージエンジンが利用可能であり、各送信先メッセージエンジンはコアに対応付けられている。メッセージマッピングブロック４５２は、他の分配方式を用いることも可能であるが、受信側スケーリング（Ｒｅｃｅｉｖｅ  Ｓｉｄｅ  Ｓｃａｌｉｎｇ：ＲＳＳ）またはアプリケーションターゲットルーティングと同様の分配方式を用いて、イーサネット（登録商標）フレームの内容をコアに分配するとしてよい。メッセージマッピングブロック４５２は、ルックアップ動作に基づき、メッセージセグメントヘッダ（例えば、非データ部分）の内容を決定するとしてよい。
【００６２】
受信（ＲＸ）メッセージエンジン４５４は、メッセージセグメントを作成して、インターコネクトを用いてメッセージを送信先メッセージエンジン（不図示）に送信するとしてよい。送信先メッセージエンジン（不図示）が受信するメッセージは、コア、ハードウェアアクセラレータ、または、ネットワークプロトコルオフロードプロセッサ（例えば、ｉＳＣＳＩ）で処理されるとしてよい。
【００６３】
送信（ＴＸ）メッセージエンジン４５６は、送信元メッセージエンジンからメッセージを受信するとしてよい。ＴＸメッセージエンジン４５６は、オンダイインターコネクトからメッセージセグメントを受信するとしてよい。ＴＸメッセージエンジン４５６は、受信したメッセージのペイロードを確認して、メッセージが制御情報、データ情報、または、管理情報を含むか否かを判断するとしてよい。ＴＸメッセージエンジン４５６は、制御セグメントを制御ブロックへ、管理セグメントを管理ブロックへ、データセグメントをデータブロックへと渡す。
【００６４】
メモリを利用したやり取り（例えば、ＰＣＩ）の代わりに、メッセージを用いて制御情報を送信するとしてよい。例えば、メッセージに含まれる制御情報は、ランタイム挙動を設定および指示するために用いられるとしてよい。例えば、制御メッセージはリンク速度を設定するとしてよい。
【００６５】
制御ブロックは、Ｉ／Ｏブリッジ制御機能、例えば、他の機能ブロックおよび外部のイーサネット（登録商標）ＰＨＹ媒体を制御する機能を実装する。データブロックは、メッセージセグメントからイーサネット（登録商標）データフレームを形成するとしてよい。管理ブロックは、メッセージセグメントから、イーサネット（登録商標）制御フレーム、例えば、一時停止フレームまたはその他のフレームを形成するとしてよい。制御ブロックは、プラットフォーム内の別の箇所にあるコアまたはデバイスとの間で制御メッセージを送受信するとしてよい。例えば、制御ブロックは、Ｉ／Ｏブリッジ内のその他のブロックの設定を可能とする制御メッセージをサポートしているとしてよい。
【００６６】
小規模送信（ＴＸ）バッファブロックは、メッセージインターコネクトジッタに対応するべく、バッファリング処理を実現する。ＭＡＣ送信（ＴＸ）ブロックは、パケットをイーサネット（登録商標）ＰＨＹ媒体に送信する前に、フレーム化処理およびＣＲＣ処理を実行する。
【００６７】
一部の実施形態によると、システム４５０は、従来のディスクリートなネットワークインターフェースよりもプラットフォームにおける専用シリコンが少ない。一部の実施形態によると、システム４５０は、イーサネット（登録商標）ワイヤとコアとの間に効率的な経路を提供して、ダイレクトメモリアクセス（ＤＭＡ）を実行する従来のネットワークインターフェースに比べるとレイテンシを無くしている。一部の実施形態では、ソフトウェアは、従来のネットワークインターフェースの固定シリコンゲートに代えて、ＯＳＩレイヤ２のフィーチャを実現することができる。一部の実施形態によると、システム４５０は、ＤＭＡを行なう従来のネットワークインターフェースとは異なり、パケットを処理するコアを持つ共有コヒーレントメモリを必要としない。
【００６８】
図５は、実施形態に係るメッセージエンジンを示す上位ブロック図である。メッセージエンジン５００は、プロセッサ、コア、または、ハードウェアスレッドからの要求に応じてメッセージセグメントを送信すると共に、プロセッサ、コア、または、ハードウェアスレッドによる処理を行なうべくメッセージセグメントを受信する。
【００６９】
メッセージ送信の場合、メッセージセグメント化ブロック５０４は、送信待ち行列５１２を用いて特定されているメッセージを、インターコネクトを介して送信するべく、セグメント化するとしてよい。図示していないが、メッセージセグメント化ブロック５０４は、データ移動部を用いて、送信待ち行列５１２を用いて特定されているメッセージセグメントを、受信待ち行列（不図示）を用いて特定されている位置へと転送するとしてよい。したがって、メモリ間転送は１のローカルＳＱおよび１のローカルＲＱの内容を用いて実行され、メッセージエンジンは、別のメッセージエンジンの待ち行列とは直接やり取りをしないとしてよい。
【００７０】
インターコネクトから受信するメッセージセグメントの場合、メッセージ再構築ブロック５０６は、メッセージを再構築して、受信待ち行列５１０に格納するとしてよい。図示していないが、メッセージ再構築ブロック５０６は、データ移動部を用いて、別のメッセージエンジンに対応付けられている送信待ち行列（共に不図示）から、受信待ち行列５１０を用いて特定されている位置へとメッセージセグメントを転送するとしてよい。
【００７１】
読出／書込ブロック５０２は、トランスレーションルックアサイドバッファ（ＴＬＢ）５１４から供給される仮想−物理アドレス変換を用いて、仮想メモリ内の送信待ち行列５１２を用いて特定されている位置から、転送すべきメッセージの読出を可能とする。読出／書込ブロック５０２は、トランスレーションルックアサイドバッファ（ＴＬＢ）５１４から供給される仮想−物理アドレス変換を用いて、仮想メモリ内の受信待ち行列５１０を用いて特定されている位置への、メッセージの書込を可能とする。一実施形態によると、読出／書込ブロック５０２は、ハードウェアスレッドと同様に、コヒーレントメモリにメッセージセグメントを書き込むことが出来ると共に、コヒーレントメモリからメッセージセグメントを読み出すことができる。読出／書込ブロック５０２は、コア内のハードウェアスレッドと、キャッシュヒエラルキーおよびメモリ管理ユニット（ＭＭＵ）を共有するとしてよい。
【００７２】
トランスレーションルックアサイドバッファ（ＴＬＢ）５１４およびページミスハンドラ（ＰＭＨ）５１６は、メモリ管理ユニット（ＭＭＵ）の機能を実現する。読出／書込ブロック５０２によって供給される仮想アドレスに応じて、ＴＬＢ５１４は仮想アドレスを物理アドレスに変換する。ハイパースレッドＨＴ０またはＨＴ１は、ＰＭＨ５１６に含まれるエントリのアドレス変換を実行するとしてよい。ＴＬＢ５１４内に利用可能なエントリがない場合、ＰＭＨ５１６はページテーブルアドレスからアドレスを取得して、ＴＬＢ５１４にアドレスを格納する。ＰＭＨ５１６は、１つのコアに対応付けられている複数のハードウェアスレッドによって共有されるとしてよい。また、ＰＭＨ５１６の利用は、１以上のメッセージエンジンに限定されているとしてよい。
【００７３】
インターフェース５０８は、インターコネクトと、メッセージセグメント化ブロック５０４およびメッセージ再構築ブロック５０６との間に、物理層インターフェースを提供するとしてよい。
【００７４】
図６は、実施形態に係る利用可能な仮想メッセージ受信エンジン（ＶＭＲＥ）を定義するコンテクストの形式の一例を示す図である。「バージョン」フィールド（ビット７−０）は、プロトコルのバージョンを示す。「ＡＳＩＤ」フィールドは、仮想−物理アドレス変換のためのトランスレーションルックアサイドバッファ（ＴＬＢ）が利用するアプリケーション空間識別子を特定している。「ＣＲ３」フィールドは、仮想−物理アドレス変換のためのページミスハンドラが利用するページテーブルアドレスを特定している。「待ち行列テーブルアドレス」フィールドは、このＶＭＲＥがサポートしている待ち行列アレイのページ割当可能メモリアドレスを特定している。
【００７５】
物理メッセージエンジン（ＰＭＥ）は、少なくともメッセージの送受信を行なうべく、仮想メッセージエンジン（ＶＭＥ）を用いてハードウェアスレッドに対して仮想化インターフェースを提供する。ＰＭＥはまた、メッセージエンジンハードウェアの制御および設定を目的として、ハードウェアスレッドに対して物理インターフェースを提供する。ＰＭＥに対する物理インターフェースは、仮想メモリ変換を実行しないとしてよい。ＰＭＥの物理インターフェースはむしろ、ホスト物理アドレス空間内のピンド（ｐｉｎｎｅｄ）メモリとやり取りを行なうとしてよい。ＰＭＥの物理インターフェースは、コア内のレジスタともやり取りを行なうとしてよい。
【００７６】
仮想メッセージエンジン（ＶＭＥ）は、ＭＭＵページテーブルを用いてメモリ変換を実行すると共に、仮想メモリとやり取りを行なうとしてよい。ソフトウェアスレッドと同様に、ＶＭＥは、ページテーブル構造の最上部へのＡＳＩＤおよびＣＲ３ポインタと対応付けられているメモリにアクセスする。ＶＭＥは、アドレス空間と対応付けられているソフトウェアスレッドとＡＳＩＤ値およびＣＲ３値を共有するとしてもよいが、これは要件ではない。システムソフトウェアは、ＡＳＩＤで特定されているアドレス空間内のスレッドとしてＶＭＥを扱うとしてよい。例えば、システムソフトウェアは、ＶＭＴＥまたはＶＭＲＥがメッセージの送受信を行なう限り、ＶＭＥが利用するページテーブルを一貫した状態で維持するとしてよい。ソフトウェアスレッドと同様に、標準的なＴＬＢシュートダウン（ｓｈｏｏｔ−ｄｏｗｎ）ルールが適用されるとしてよい。
【００７７】
図７は、実施形態に係る送信待ち行列内のノーオペレーションコマンドのための形式の例を示す図である。送信待ち行列（ＳＱ）のエントリは、メッセージを送信しないというヌル動作を実行するようにＶＭＴＥに指示する。「コマンド」フィールド（ビット７−０）は、ノーオペレーションコマンドの場合は０となる。「即時割り込み（ＩＩ）」フィールドは、設定されている場合、割り込み緩和間隔に関わらず、ＣＱ割り込みを即時に生成するようにＶＭＥに指示する。
【００７８】
図８は、実施形態に係る送信待ち行列内のコマンドの形式の一例を示す図である。このコマンドは、ＶＭＴＥにメッセージを送信するように命令する。「コマンド」フィールド（ビット７−０）は、送信コマンドの場合は１となる。「即時割り込み（ＩＩ）」フィールドは、設定されている場合、割り込み緩和間隔に関わらず、ＣＱ割り込みを即時に生成するようにＶＭＥに指示する。「ＶＭＥアドレス」フィールドは、このメッセージのための送信先ＶＭＲＥを特定している。「待ち行列番号」フィールドは、このメッセージのための送信先待ち行列番号を特定している。「サイズ」フィールドは、送信すべき連続仮想メモリ内のバイト数を特定している。「アドレス」フィールドは、送信すべきデータのキャッシュ可能ページ割当可能メモリ内の仮想アドレスを特定している。
【００７９】
図９は、実施形態に係る受信待ち行列内のエントリの一例を示す図である。「コマンド」フィールド（ビット７−０）は、受信コマンドの場合は０となる。「即時割り込み（ＩＩ）」フィールドは、設定されている場合、割り込み緩和間隔に関わらず、ＣＱ割り込みを即時に生成するようにＶＭＥに指示する。「サイズ」フィールドは、受信バッファの連続仮想メモリ内のバイト数を特定している。この記述子についてメッセージ受信処理が完了すると、ＶＭＲＥは「サイズ」フィールドを更新して、実際に受信したメッセージセグメントの数を含める。「アドレス」フィールドは、受信バッファのキャッシュ可能ページ割当可能メモリ内の仮想アドレスを特定している。
【００８０】
図１０は、実施形態に係るメッセージセグメントの形式の一例を示す図である。「ＲＴ」フィールドは、ＣＴＳメッセージで返送されてきた再構築タグを特定している。「送信先ＶＭＥアドレス」フィールドは、セグメントのための送信先ＶＭＲＥを特定している。「ＭＳＯ」フィールドは、セグメントのメッセージセグメントオフセットを特定している。ＭＳＯは、メッセージの先頭と相対的に決まるこのセグメントの位置を含む。メッセージ全体の最初のセグメントには「０」という番号が割り当てられる。セグメントのデータ部分は、このセグメントのデータペイロードを含む。ペイロードの長さは、リンク層毎に決まる。図示されていないが、メッセージセグメントの形式はさらに、メッセージの最終セグメントである旨を示すための最終フィールドを含むとしてよい。
【００８１】
図１１は、実施形態に係る送信要求（ＲＴＳ）メッセージの形式の一例を示す図である。「コマンド」フィールドは、ＲＴＳメッセージの場合、１に設定される。「送信先ＶＭＥアドレス」フィールドは、メッセージの送信先ＶＭＲＥを特定している。「送信元ＶＭＥアドレス」フィールドは、メッセージの送信元ＶＭＴＥを特定している。「ＱＮ」フィールドは、特定されたアドレス空間識別子における送信先待ち行列番号を特定している。「ＭＳＮ」フィールドは、特定された待ち行列番号におけるメッセージシーケンス番号を特定する。「ＲＩＤ」フィールドは、要求に対応付けられているＣＴＳメッセージで受信側が逐語的に返送する当該要求の要求ＩＤを特定している。
【００８２】
最大メッセージサイズは、ジャンボフレームサイズよりも小さいとしてよい。実施形態によると、１つのＲＴＳメッセージは、同一の接続に属している複数の隣接メッセージについて送信されるとしてよく、隣接メッセージはジャンボフレームを送信するべく用いられる。「メッセージ数」フィールドは、１つのＲＴＳメッセージおよびジャンボフレームに対応付けられているメッセージ数を特定するべく、ＲＴＳメッセージに追加されるとしてよい。例えば、図１１に示す現在の「予約」フィールドの一部は、「メッセージ数」フィールドを含むとしてよい。また、図１０において、ＭＳＯフィールドの一部分は、１つのＲＴＳまたはＲＴ内のメッセージ数を特定するために用いられるとしてもよい。
【００８３】
図１２は、実施形態に係る受信準備完了（ＣＴＳ）メッセージの形式の一例を示す図である。「コマンド」フィールドは、ＣＴＳメッセージの場合、２に設定されるとしてよい。「送信先ＶＭＥアドレス」フィールドは、メッセージの送信先ＶＭＲＥを特定している。「送信元ＶＭＥアドレス」フィールドは、メッセージの送信元ＶＭＴＥを特定している。「ＲＴ」フィールドは、再構築タグを特定している。後続のメッセージセグメントのために、ＶＭＴＥは、メッセージの全セグメントのＲＴフィールドにこの値を入れている。ＲＴ値の上位バイトは０に設定される。ＲＩＤフィールドは、ＲＴＳメッセージ内のＶＭＴＥが供給する要求ＩＤを特定する。「ＲＩＤ」フィールドによって、ＶＭＴＥはＣＴＳメッセージと実行中のＲＴＳメッセージとを相関させることができる。
【００８４】
図１３Ａは、実施形態に係る、メッセージエンジンを用いてＩＯデバイスからメッセージを転送するプロセス１３００を示すフローチャートの一例である。ブロック１３０２は、ネットワークからネットワークプロトコルユニットを受信することを含むとしてよい。例えば、ブロック１３０２は、イーサネット（登録商標）フレームを受信することを含むとしてよい。
【００８５】
ブロック１３０４は、受信したフレームに対応付けられている送信先待ち行列および仮想メッセージ受信エンジン（ＶＭＲＥ）を特定することを含むとしてよい。ＶＭＲＥは、コアによる処理を実施すべきメッセージを受信するメッセージエンジンに対応付けられているとしてよい。ＶＭＲＥおよび送信先待ち行列（ＱＮ）は、図２を参照して説明したように特定されるとしてよい。
【００８６】
ブロック１３０６は、ＶＭＲＥに送信されるべくメッセージをセグメント化することを含むとしてよい。仮想メッセージ送信エンジン（ＶＭＴＥ）がメッセージをセグメント化するとしてよい。メッセージセグメントの形式は、図１０を参照して説明したものであるとしてよい。
【００８７】
ブロック１３０８は、各セグメントを送信先位置に送信することを含むとしてよい。仮想メモリ内の送信先位置は、受信待ち行列に含まれる記述子、再構築タグ（ＲＴ）、およびセグメントから得られるメッセージセグメントオフセット（ＭＳＯ）に部分的に基づき、受信する各セグメントを処理するロジックによって特定されるとしてよい。
【００８８】
図１３Ｂは、実施形態に係る、ＩＯデバイスでメッセージエンジンを用いてメッセージを受信するプロセス１３５０を示すフローチャートの一例である。
【００８９】
ブロック１３５２は、受信したメッセージセグメントを再構築して完全なメッセージを作成することを含むとしてよい。メッセージは、アウトオフオーダで受信されるとしてよい。メッセージ内のメッセージセグメントオフセット（ＭＳＯ）フィールドは、複数のセグメントを適切な順序で並べてメッセージを構成するために用いられるとしてよい。
【００９０】
ブロック１３５４は、メッセージの内容の種類を判断することを含むとしてよい。例えば、内容の種類は、制御、データ、または、管理であってよい。
【００９１】
ブロック１３５６は、送信対象としてデータ情報または制御情報を含むネットワークプロトコルユニットを準備することを含むとしてよい。例えば、ブロック１３５６は、送信対象としてデータ情報または制御情報を含むイーサネット（登録商標）フレームを準備することを含むとしてよい。
【００９２】
本発明の実施形態は、例えば、機械実行可能命令を格納している１以上の機械可読媒体を含むコンピュータプログラム製品として提供されるとしてよい。機械実行可能命令は、コンピュータ、コンピュータネットワーク、または、その他の電子デバイス等の１以上の機械で実行されると、１以上の機械に本発明の実施形態に係る動作を実行させるとしてよい。機械可読媒体は、これに限定されないが、フロッピー（登録商標）ディスク、光ディスク、ＣＤ−ＲＯＭ（コンパクトディスクリードオンリーメモリ）、および、光磁気ディスク、ＲＯＭ（リードオンリーメモリ）、ＲＡＭ（ランダムアクセスメモリ）、ＥＰＲＯＭ（消去可能プログラム可能リードオンリーメモリ）、ＥＥＰＲＯＭ（電気的消去可能プログラム可能リードオンリーメモリ）、磁気カードあるいは光カード、フラッシュメモリ、または、機械実行可能命令を格納するのに適したその他の種類の媒体／機械可読媒体を含むとしてよい。
【００９３】
図面および上記の説明は、本発明の例を挙げている。複数の異なる機能的構成要素として図示されているが、当業者であれば、そのような機能的構成要素のうち１以上を１つの機能的構成要素にまとめることにも想到するであろう。これに代えて、１つの機能的構成要素を複数の機能的構成要素に分割するとしてもよい。一実施形態に係る機能的構成要素を別の実施形態に追加するとしてもよい。例えば、本明細書に記載したプロセスの順序は、変更するとしてもよいし、本明細書に記載した順序には限定されない。さらに、いずれのフローチャートの処理も、図示した順序で実行する必要はなく、処理を全て実行する必要も必ずしもない。また、他の処理に依存しない処理は、他の処理と並列に実行するとしてもよい。しかし、本発明の範囲は、上記の具体例に限定されるものではない本明細書で明示されていようといまいと、構造、寸法、および、使用材料を変更するなど、数多くの点で変更することが可能である。本発明の範囲は少なくとも、特許請求の範囲に記載する程度には広いものである。
【図１】
0005305549.tif 000002
【図２】
0005305549.tif 000003
【図３】
0005305549.tif 000004
【図４Ａ】
0005305549.tif 000005
【図４Ｂ】
0005305549.tif 000006
【図５】
0005305549.tif 000007
【図６】
0005305549.tif 000008
【図７】
0005305549.tif 000009
【図８】
0005305549.tif 000010
【図９】
0005305549.tif 000011
【図１０】
0005305549.tif 000012
【図１１】
0005305549.tif 000013
【図１２】
0005305549.tif 000014
【図１３Ａ】
0005305549.tif 000015
【図１３Ｂ】
0005305549.tif 000016