(57)【要約】グラフィックスプロセッシングユニット（ＧＰＵ）主導の通信のためのネットワークパケットテンプレーティングを行うためのシステム、装置、及び方法が開示されている。中央演算処理装置（ＣＰＵ）は、テンプレートに従ってネットワークパケットを作成し、ネットワークパケットのフィールドの第１のサブセットに静的データを入れる。次に、ＣＰＵはネットワークパケットをメモリに記憶する。ＧＰＵはカーネルの実行を開始し、カーネルが実行を完了する前にカーネル内のネットワーク通信要求を検出する。この決定に応じて、ＧＰＵは、ネットワークパケットのフィールドの第２のサブセットにランタイムデータを入れる。そして、ＧＰＵは、ネットワークパケットは処理可能状態であるという通知を生成する。ネットワークインターフェースコントローラ（ＮＩＣ）は、通知を検出することに応じて、フィールドの第１のサブセットから、及びフィールドの第２のサブセットから取得したデータを用いてネットワークパケットを処理する。【選択図】図７
2021530022.tif 000002
【特許請求の範囲】
【請求項１】
メモリと、
第１のプロセッサであって、テンプレートに従ってネットワークパケットを作成して、前記ネットワークパケットのフィールドの第１のサブセットにデータを入れることと、前記メモリに前記ネットワークパケットを記憶することと、を行うように構成された、第１のプロセッサと、
第２のプロセッサであって、カーネルの実行を開始することと、前記カーネルが実行を完了する前に、前記カーネル内のネットワーク通信要求を検出することに応じて、前記ネットワークパケットのフィールドの第２のサブセットにデータを入れることと、前記ネットワークパケットは処理可能状態であるという通知を生成することと、を行うように構成された、前記第２のプロセッサと、
前記カーネルが実行を完了する前に、前記通知を検出することに応じて、前記ネットワークパケットを処理するように構成されたネットワークインターフェースコントローラと、を含む、システム。
【請求項２】
前記ネットワークインターフェースコントローラは、フィールドの前記第１のサブセットから、及びフィールドの前記第２のサブセットから取得されたデータを用いて前記ネットワークパケットを処理する、請求項１に記載のシステム。
【請求項３】
フィールドの前記第１のサブセットには静的データが含まれ、
フィールドの前記第２のサブセットにはランタイムデータが含まれる、請求項１に記載のシステム。
【請求項４】
フィールドの前記第１のサブセットには、ネットワーク制御ビットフィールド及びメモリアクセスキーフィールドが含まれ、
フィールドの前記第２のサブセットには、転送元オフセットフィールド、転送先オフセットフィールド、及び動作タイプフィールドが含まれる、請求項１に記載のシステム。
【請求項５】
前記第１のプロセッサは、前記ネットワークパケットを作成し、前記第２のプロセッサが前記ネットワーク通信要求を検出する前に、前記ネットワークパケットテンプレートのフィールドの前記第１のサブセットにデータを入れるように構成されている、請求項１に記載のシステム。
【請求項６】
前記第１のプロセッサは、テンプレートに従って前記ネットワークパケットを作成し、第１の条件を検出することに応じてのみ、待ち行列に前記ネットワークパケットを記憶するように構成されている、請求項１に記載のシステム。
【請求項７】
前記第１の条件は、前記待ち行列の占有レベルが閾値を下回ることである、請求項６に記載のシステム。
【請求項８】
テンプレートに従って、第１のプロセッサによって、ネットワークパケットを作成して、前記ネットワークパケットのフィールドの第１のサブセットにデータを入れることと、
前記第１のプロセッサにより、前記ネットワークパケットをメモリに記憶することと、
第２のプロセッサでカーネルの実行を開始することと、
前記カーネルが実行を完了する前に、前記カーネル内のネットワーク通信要求を検出することに応じて、
前記第２のプロセッサによって、前記ネットワークパケットのフィールドの第２のサブセットにデータを入れることと、
前記第２のプロセッサによって、前記ネットワークパケットテンプレートは処理可能状態であるという通知を作成することと、
前記第２のプロセッサで前記カーネルが実行を完了する前に、前記通知を検出することに応じて、ネットワークインターフェースコントローラによって前記ネットワークパケットテンプレートを処理することと、を含む、方法。
【請求項９】
フィールドの前記第１のサブセットから、及びフィールドの前記第２のサブセットから取得されたデータを用いて前記ネットワークパケットを処理することをさらに含む、請求項８に記載の方法。
【請求項１０】
フィールドの前記第１のサブセットには静的データが含まれ、
フィールドの前記第２のサブセットにはランタイムデータが含まれる、請求項８に記載の方法。
【請求項１１】
フィールドの前記第１のサブセットには、ネットワーク制御ビットフィールド及びメモリアクセスキーフィールドが含まれ、
フィールドの前記第２のサブセットには、転送元オフセットフィールド、転送先オフセットフィールド、及び動作タイプフィールドが含まれる、請求項８に記載の方法。
【請求項１２】
前記第１のプロセッサによって、前記ネットワークパケットを作成することと、前記第２のプロセッサが前記ネットワーク通信要求を検出する前に、前記ネットワークパケットのフィールドの前記第１のサブセットにデータを入れることと、をさらに含む、請求項８に記載の方法。
【請求項１３】
前記第１のプロセッサによって、テンプレートに従って前記ネットワークパケットを作成することと、第１の条件を検出することに応じてのみ、待ち行列に前記ネットワークパケットを記憶することと、をさらに含む、請求項８に記載の方法。
【請求項１４】
前記第１の条件は、前記待ち行列の占有レベルが閾値を下回ることである、請求項１３に記載の方法。
【請求項１５】
メモリと、複数の計算ユニットとを含むプロセッサであって、
前記複数の計算ユニットの１つ以上の計算ユニットでカーネルの実行を開始することと、
前記カーネルが実行を完了する前に、前記カーネル内のネットワーク通信要求を検出することに応じて、
フィールドの第１のサブセットのみにデータが入っている状態で、前記メモリ内にネットワークパケットを配置することと、
前記ネットワークパケットのフィールドの第２のサブセットにデータを入れることと、
前記ネットワークパケットテンプレートは処理可能状態であるという通知を生成することと、を行うように構成されている、プロセッサ。
【請求項１６】
フィールドの前記第１のサブセットには静的データが含まれ、フィールドの前記第２のサブセットにはランタイムデータが含まれる、請求項１５に記載のプロセッサ。
【請求項１７】
フィールドの前記第１のサブセットには、ネットワーク制御ビットフィールド及びメモリアクセスキーフィールドが含まれ、
フィールドの前記第２のサブセットには、転送元オフセットフィールド、転送先オフセットフィールド、及び動作タイプフィールドが含まれる、請求項１５に記載のプロセッサ。
【請求項１８】
前記プロセッサが前記ネットワーク通信要求を検出する前に、前記ネットワークパケットのフィールドの前記第１のサブセットにデータが入る、請求項１５に記載のプロセッサ。
【請求項１９】
前記プロセッサはさらに、フィールドの前記第１のサブセットにデータが入った前記ネットワークパケットを待ち行列に加えるときを決定するための閾値をプログラミングするように構成されている、請求項１５に記載のプロセッサ。
【請求項２０】
前記プロセッサはさらに、前記通知をネットワークインターフェースコントローラに伝えて、前記ネットワークパケットを処理させるように構成されている、請求項１５に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、政府支援によって、米国エネルギー省から授与されたＬａｗｒｅｎｃｅ  Ｌｉｖｅｒｍｏｒｅ  Ｎａｔｉｏｎａｌ  ＳｅｃｕｒｉｔｙとのＰａｔｈＦｏｒｗａｒｄＰｒｏｊｅｃｔ（主契約番号ＤＥＡＣ５２−０７ＮＡ２７３４４、下請契約番号Ｂ６２０７１７）の下で行われた。米国政府は本発明において一定の権利を有する。
【背景技術】
【０００２】
中央演算処理装置（ＣＰＵ）などの汎用プロセッサは典型的に、ソフトウェアアプリケーションに対する入出力（Ｉ／Ｏ）動作を実行する。複数のプロセッサが含まれるシステムでは、ＣＰＵが、ネットワークメッセージを生成することができる唯一のプロセッサである場合がある。システムには、汎用プロセッサに加えてデータ並列プロセッサも含まれる可能性がある。データ並列プロセッサは高並列実行アーキテクチャを有している。データ並列プロセッサには、グラフィックスプロセッシングユニット（ＧＰＵ）、デジタルシグナルプロセッサ（ＤＳＰ）などが含まれる可能性がある。データ並列プロセッサは、ＣＰＵがデータ並列プロセッサに代わってネットワーク通信を調整するのを待つ間、計算の遅延を受ける。ＣＰＵ及びＧＰＵを伴うコンピューティングシステムでは、ＣＰＵは「ホスト」と言われることが多い。これらのシステムでは、ＧＰＵはネットワーク動作に関しては「二流市民（ｓｅｃｏｎｄ  ｃｌａｓｓ  ｃｉｔｉｚｅｎ）」である。このため、ＧＰＵがネットワーク動作を開始する能力は限定され、ＧＰＵが開始した任意のネットワーク動作にＣＰＵを関与させる必要がある。ＧＰＵに対するネットワークメッセージを生成するためにホストを用いることには潜在的に、ＧＰＵからホストへ、及びホストからネットワークインターフェースへの複数のバックツーバック往復が伴い、性能の低下を招くことになる。
【０００３】
本明細書で説明する方法及びメカニズムの利点は、以下の説明を添付図面とともに参照することによってより良好に理解され得る。
【図面の簡単な説明】
【０００４】
【図１】コンピューティングシステムの１つの実施態様のブロック図である。
【図２】コンピューティングシステムの別の実施態様のブロック図である。
【図３】ＣＰＵからＧＰＵへ移行されるネットワーク制御経路の１つの実施態様のタイミング図を例示する図である。
【図４】ネットワークパケットテンプレートを記憶するための待ち行列の１つの実施態様を例示する図である。
【図５】ネットワークパケットテンプレートの１つの実施態様を例示する図である。
【図６】ネットワークパケットテンプレートの別の実施態様を例示する図である。
【図７】ネットワークパケットテンプレートを作成及び使用するための方法の１つの実施態様を例示する汎用フロー図である。
【図８】待ち行列にネットワークパケットテンプレートを加えるときを決定するための方法の１つの実施態様を例示する汎用フロー図である。
【図９】待ち行列にネットワークパケットテンプレートを加えるときを決定するための方法の別の実施態様を例示する汎用フロー図である。
【発明を実施するための形態】
【０００５】
以下の説明では、本明細書で示す方法及びメカニズムの十分な理解が得られるように、多くの具体的な詳細について述べる。しかし、当業者であれば分かるように、これらの具体的な詳細を伴うことなく種々の実施態様を実施してもよい。場合によっては、良く知られた構造、コンポーネント、信号、コンピュータプログラム命令、及び技術については、本明細書で説明するアプローチが不明瞭になることを回避するために、詳細には示していない。当然のことながら、説明を簡単及び明瞭にするために、図に示した要素は必ずしも一定の比率では描かれていない。たとえば、要素のいくつかについての寸法は他の要素に対して誇張されている場合がある。
【０００６】
本明細書では、ネットワークパケットテンプレーティングを実施するための種々のシステム、装置、及び方法について開示している。第１のプロセッサ（たとえば、中央演算処理装置（ＣＰＵ））が、テンプレートに従ってネットワークパケットを作成して、ネットワークパケットのフィールドの第１のサブセットに静的データを入れる。次に、第１のプロセッサはネットワークパケットをメモリに記憶する。第２のプロセッサ（たとえば、グラフィックスプロセッシングユニット（ＧＰＵ））がカーネルの実行を開始して、カーネルが実行を完了する前にネットワーク通信要求を検出する。ネットワーク通信要求を検出することに応じて、第２のプロセッサは、ネットワークパケットのフィールドの第２のサブセットにランタイムデータを入れる。そして、第２のプロセッサは、ネットワークパケットは処理可能状態であるという通知を生成する。ネットワークインターフェースコントローラ（ＮＩＣ）は、通知を検出することに応じて、フィールドの第１のサブセットから、及びフィールドの第２のサブセットから取得したデータを用いて、ネットワークパケットを処理する。
【０００７】
１つの実施態様では、第１及び第２のプロセッサによってアクセス可能なメモリ内に環状バッファが保持される。環状バッファは複数のネットワークパケットを記憶する。１つの実施態様では、第１のプロセッサは環状バッファのステータスを周期的にチェックし、存在しているネットワークパケットの数が閾値を下回った場合、第１のプロセッサは環状バッファに１つ以上のネットワークパケットを加える。環状バッファにネットワークパケットを加えるとき、第１のプロセッサは、環状バッファに加えられた各ネットワークパケットのフィールドの第１のサブセットにデータを入れる。１つの実施態様では、フィールドの第１のサブセットには、ネットワーク制御ビットフィールド及びメモリアクセスキーフィールドが含まれる。１つの実施態様では、フィールドの第２のサブセットには、転送元オフセットフィールド、転送先オフセットフィールド、及び動作タイプフィールドが含まれる。
【０００８】
次に図１を参照して、コンピューティングシステム１００の１つの実施態様のブロック図を示す。１つの実施態様では、コンピューティングシステム１００には、少なくともプロセッサ１０５Ａ〜Ｎ、入出力（Ｉ／Ｏ）インターフェース１２０、バス１２５、メモリコントローラ（複数可）１３０、ネットワークインターフェースコントローラ（ＮＩＣ）１３５、及びメモリ装置（複数可）１４０が含まれる。他の実施態様では、コンピューティングシステム１００には他のコンポーネントが含まれ、及び／またはコンピューティングシステム１００は異なる方法で配置されている。プロセッサ１０５Ａ〜Ｎは、システム１００に含まれる任意の数のプロセッサを表す。１つの実施態様では、プロセッサ１０５Ａは中央演算処理装置（ＣＰＵ）などの汎用プロセッサである。１つの実施態様では、プロセッサ１０５Ｎは高並列アーキテクチャを伴うデータ並列プロセッサである。データ並列プロセッサには、グラフィックスプロセッシングユニット（ＧＰＵ）、デジタルシグナルプロセッサ（ＤＳＰ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）などが含まれる。いくつかの実施態様では、プロセッサ１０５Ａ〜Ｎには複数のデータ並列プロセッサが含まれる。
【０００９】
メモリコントローラ（複数可）１３０は、プロセッサ１０５Ａ〜ＮとＩ／Ｏインターフェース１２０に結合されたＩ／Ｏデバイス（図示せず）とがアクセス可能な任意の数及びタイプのメモリコントローラを表す。メモリコントローラ（複数可）１３０は任意の数及びタイプのメモリ装置（複数可）１４０に結合されている。メモリ装置（複数可）１４０は任意の数及びタイプのメモリ装置を表す。たとえば、メモリ装置（複数可）１４０内のメモリのタイプには、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、強誘電体ランダムアクセスメモリ（ＦｅＲＡＭ）などが含まれる。１つの実施態様では、所与のメモリ装置１４０には、ネットワークパケットテンプレートに従って第１のプロセッサ１０５Ａが生成した新規作成のネットワークパケットを記憶するための環状バッファ１５０が含まれる。第１のプロセッサ１０５Ａは、新規作成の各ネットワークパケットに静的情報を入れる。１つの実施態様では、所与のメモリ装置１４０は第２のプロセッサ１０５Ｎにローカルである。第２のプロセッサがネットワーク伝送を開始できる状態にあるとき、第２のプロセッサ１０５Ｎは、環状バッファ１５０に記憶されたネットワークパケットを動的なランタイム情報によって更新し、そして第２のプロセッサ１０５ＮはＮＩＣ１３５に、ネットワークパケットは処理可能状態であると通知する。ＮＩＣ１３５はネットワークパケットを処理して、要求されたネットワーク通信をネットワーク１４５上で実行する。本明細書で用いる場合、ネットワークパケットとは、複数のフィールドによってフォーマットされたデータ構造である。データ構造は、第１のプロセッサ１０５Ａによって形成され、第２のプロセッサ１０５Ｂによって更新される。言い換えれば、ネットワークパケットは、第１のプロセッサ１０５Ａによって書き込まれるフィールドの第１のサブセットと、第２のプロセッサ１０５Ｎによって書き込まれ及び／または更新されるフィールドの第２のサブセットとを有するフォーマットされたデータ構造である。
【００１０】
Ｉ／Ｏインターフェース１２０は、任意の数及びタイプのＩ／Ｏインターフェースを表す（たとえば、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、ＰＣＩ拡張（ＰＣＩＸ）、ＰＣＩＥ（ＰＣＩエクスプレス）バス、ギガビットイーサネット（ＧＢＥ）バス、ユニバーサルシリアルバス（ＵＳＢ））。Ｉ／Ｏインターフェース１２０には種々のタイプの周辺デバイス（図示せず）が結合される。このような周辺デバイスには、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティックまたは他のタイプのゲームコントローラ、メディア記録装置、外部記憶装置、ネットワークインターフェースカードなどが含まれるが、これらに限定されない。ネットワークインターフェースコントローラ（ＮＩＣ）１３５はネットワーク１４５を介してネットワークメッセージを受信し、送信する。１つの実施態様では、所与のプロセッサ１０５Ｎは、ＮＩＣ１３５がネットワークパケットを処理する要求を生成する。１つの実施態様では、ＮＩＣ１３５は、プロセッサ１０５Ａの関与を伴うことなく、プロセッサ１０５Ｎが生成した要求を処理する。この実施態様では、プロセッサ１０５ＡはＣＰＵであり、プロセッサ１０５ＮはＧＰＵである。他の実施態様では、他のタイプのプロセッサがこれらの動作を実行することができる。
【００１１】
ネットワーク１４５は、たとえば、無線接続、直接ローカルエリアネットワーク（ＬＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、イントラネット、インターネット、ケーブルネットワーク、パケット交換網、光ファイバネットワーク、ルータ、ストレージエリアネットワーク、または他のタイプのネットワークを含む、任意のタイプのネットワークまたはネットワークの組み合わせを表す。ＬＡＮの例には、イーサネットネットワーク、ファイバー分散データインターフェース（ＦＤＤＩ）ネットワーク、及びトークンリングネットワークが含まれる。種々の実施態様では、ネットワーク１４５にはさらに、リモートダイレクトメモリアクセス（ＲＤＭＡ）ハードウェア及び／またはソフトウェア、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）ハードウェア及び／またはソフトウェア、ルータ、リピータ、スイッチ、グリッド、及び／または他のコンポーネントが含まれる。
【００１２】
種々の実施態様では、コンピューティングシステム１００は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェラブルデバイス、または他の種々のタイプのコンピューティングシステムもしくはデバイスのいずれかである。コンピューティングシステム１００のコンポーネントの数は実施態様ごとに変わることに注意されたい。たとえば、他の実施態様では、各コンポーネントは図１に示す数よりも多いかまたは少ない。また他の実施態様では、コンピューティングシステム１００には、図１に示していない他のコンポーネントが含まれることに注意されたい。さらに、他の実施態様では、コンピューティングシステム１００は図１に示したもの以外の方法で構築される。
【００１３】
次に図２を参照して、コンピューティングシステム２００の別の実施態様のブロック図を示す。１つの実施態様では、システム２００には、ＧＰＵ２０５、システムメモリ２２５、及びローカルメモリ２３０が含まれる。またシステム２００には、図が不明瞭になることを回避するために図示しない他のコンポーネントが含まれる。ＧＰＵ２０５には少なくとも、コマンドプロセッサ２３５、ディスパッチユニット２５０、計算ユニット２５５Ａ〜Ｎ、メモリコントローラ２２０、グローバルデータシェア２７０、レベルワン（Ｌ１）キャッシュ２６５、及びレベルツー（Ｌ２）キャッシュ２６０が含まれる。他の実施態様では、ＧＰＵ２０５には他のコンポーネントが含まれ、例示したコンポーネントのうちの１つ以上が省略され、たとえ図２には１つのインスタンスのみが示されていてもコンポーネントの複数のインスタンスを有し、及び／または他の好適な態様で構成されている。
【００１４】
種々の実施態様では、コンピューティングシステム２００は種々のタイプのソフトウェアアプリケーションのいずれかを実行する。１つの実施態様では、所与のソフトウェアアプリケーションを実行する一部として、コンピューティングシステム２００のホストＣＰＵ（図示せず）は、ＧＰＵ２０５上で行うべきカーネルを開始する。本明細書で用いる場合、用語「カーネル」または「計算カーネル」は、１つ以上の計算ユニット上で１つ以上のスレッドとして開始及び実行される実行可能命令を含む機能またはタスクとして規定される。コマンドプロセッサ２３５はホストＣＰＵからカーネルを受け取って、ディスパッチユニット２５０にカーネルを出して、計算ユニット２５５Ａ〜Ｎにディスパッチする。計算ユニット２５５Ａ〜Ｎ上で実行されるカーネル内のスレッドは、環状バッファ２４０に記憶されたネットワークパケットをランタイム情報により更新することによってネットワーク通信を開始し、そしてＮＩＣ（図示せず）に通知する。ＮＩＣは、対応する通知を受け取ることに応じて、所与のネットワークパケットを処理する。図２に図示しないが、１つの実施態様では、計算ユニット２５５Ａ〜Ｎには１つ以上のキャッシュ及び／またはローカルメモリも各計算ユニット２５５Ａ〜Ｎ内に含まれている。
【００１５】
次に図３を参照して、ＣＰＵからＧＰＵへ移行されているネットワーク制御経路の１つの実施態様のタイミング図３００を示す。１つの実施態様では、ＣＰＵ３２０はＧＰＵ３２５上でカーネル３３５を開始し、そしてＧＰＵ３２５はＣＰＵ３２０とは独立にカーネル３３５を実行する。ＧＰＵ３２５がカーネル３３５を実行する間、ＣＰＵ３２０は他のタスクを実行することができる。いくつかの実施態様では、ＣＰＵ３２０は他のＧＰＵに結合されて、ＣＰＵ３２０は他のＧＰＵ上でカーネルを開始することができる。これらのカーネルは、ＧＰＵ３２５上でカーネル３３５と並列に実行される。ＣＰＵ３２０はテンプレートに従ってネットワークパケットを生成し、各ネットワークパケットのフィールドの一部にデータを入れる。そして、ＣＰＵ３２０は、ＧＰＵ３２５及びＮＩＣ３１５がアクセス可能な場所に各ネットワークパケットを記憶する。ＣＰＵ３２０は、ＧＰＵ３２５からの明示的な要求を待つことなく先行してネットワークパケットを生成する。
【００１６】
カーネル３３５を実行する間、カーネル３３５が終了するのを待たずに、ＧＰＵ３２５は所与のネットワークパケットのフィールドの残りの部分にデータを入れ、そして、ＧＰＵ３２５は、送るブロック３４０で図示されているように、ネットワークパケット要求をネットワークインターフェースコントローラ（ＮＩＣ）３１５に送る。ＧＰＵ３２５は、このネットワーク要求をＮＩＣ３１５に、ＣＰＵ３２０による何らの関与も伴わずに送ることに注意されたい。ＮＩＣ３１５は、ネットワークパケット要求を処理して、その要求をネットワーク上に置き、一方で、置くブロック３４５で図示されるように、カーネル３３５は続けて実行する。図３に図示しないが、カーネル３３５は複数のネットワークパケット要求をＮＩＣ３１５に送り、それらはカーネル３３５の実行中にＮＩＣ３１５によって処理されることに注意されたい。後の時点で、カーネル３３５の実行は完了し、完了ブロック３５０によって表される。
【００１７】
次に図４を参照して、ネットワークパケットを記憶するための待ち行列４００の１つの実施態様の図を示す。１つの実施態様では、待ち行列４００は円形待ち行列であり、動作は先入れ先出し（ＦＩＦＯ）原理に基づいて行われて、最後の位置は最初の位置に戻って接続され円形を作っている。本明細書では「円形待ち行列」は「環状バッファ」とも言われることに注意されたい。他の実施態様では、待ち行列４００は、他の種々のタイプのデータ構造のいずれかを用いて実施される。１つの実施態様では、待ち行列４００は、ＣＰＵ、ＧＰＵ、及びＮＩＣを含むコンピューティングシステムによって用いられる。
【００１８】
１つの実施態様では、ＣＰＵ４１５は待ち行列４００にネットワークパケットを加える。各ネットワークパケットはネットワークパケットテンプレートに従って生成される。本明細書で用いる場合、「ネットワークパケットテンプレート」は、通信パケットの構造として規定され、第１のプロセッサによって作成されるが、１つ以上の空フィールドが第２のプロセッサによって記入及び／または更新される。言い換えれば、「ネットワークパケットテンプレート」によって通信パケットの構造が規定されるが、通信パケットの中身の少なくとも一部は第２のプロセッサによって記入される。典型的に、ＣＰＵ４１５は、ネットワークパケットのフィールドの一部に静的情報（たとえば、ネットワーク制御ビット、メモリアクセスキー（Ｒｋｅｙ））を記入することを、待ち行列４００内の利用可能なスロットにパケットを記憶する前に行う。第２のプロセッサがフィールドの第２のサブセットをネットワークパケットに書き込んだ後に、ネットワークパケットを処理する通知がＮＩＣ４２０に伝えられる。言い換えれば、第２のプロセッサがフィールドをすべて記入することを完了してＮＩＣ４２０に対する通知を生成したら、ネットワークパケットは準備完了になる。１つの実施態様では、第２のプロセッサは、ドアベルレジスタに通知を書き込むことによって、ＮＩＣ４２０にネットワークパケットは準備ができていることを通知する。他の実施態様では、第２のプロセッサはＮＩＣ４２０に通知を伝えるために他の技術を用いる。
【００１９】
１つの実施態様では、ＣＰＵ４１５は、新規作成のネットワークパケットを待ち行列４００に周期的に加える。たとえば、ＣＰＵ４１５は待ち行列４００のステータスを周期的にチェックする。１つの実施態様では、各待ち行列項目には、待ち行列項目に有効なネットワークパケットが記憶されているか否かを示す有効インジケータが含まれる。本明細書では、「待ち行列項目」は「待ち行列スロット」とも言われることに注意されたい。１つの実施態様では、有効インジケータが示すように待ち行列４００に何らかの未使用の（すなわち、利用可能な）スロットがある場合、ＣＰＵ４１５は、待ち行列４００のこれらの空項目に１つ以上のネットワークパケットを加える。別の実施態様では、待ち行列４００に現時点で記憶されているネットワークパケットの数が閾値よりも少ない場合、ＣＰＵ４１５は待ち行列４００の利用可能なスロットに１つ以上のネットワークパケットを加える。種々の実施態様では、ＣＰＵ４１５が待ち行列４００に加える４１５ネットワークパケットの数は固定されているか、プログラム可能であるか、利用可能なスロットの数に基づいているか、または他の好適な仕方で決定される。
【００２０】
１つの実施態様では、ＮＩＣ４２０は、処理すべき待ち行列４００内の次の場所を指し示すポインタを保持する。ＮＩＣ４２０が通知を受け取ってネットワークパケットを処理した後、ＮＩＣ４２０は待ち行列内の次の場所を指し示すポインタを増加させる。同様に、ＧＰＵ４２５は、待ち行列４００内の、変更された後にＮＩＣ４２０によって処理できる状態にあるネットワークパケットを記憶する場所を指し示すポインタを保持する。１つの実施態様では、ＧＰＵ４２５が保持するポインタは、ＮＩＣ４２０が保持するポインタから１つの待ち行列要素だけずれている。同様に、１つの実施態様では、ＣＰＵ４１５は、待ち行列４００内の、新規作成のネットワークパケットを記憶するための利用可能な場所を指し示すポインタを保持する。
【００２１】
１つの実施態様では、ＣＰＵ４１５は、新規作成のネットワークパケットを記憶するために利用可能な何らかの項目があるか否かを判定するために、待ち行列４００の項目を照会する。１つの実施態様では、ＣＰＵ４１５が待ち行列４００内に利用可能な項目を検出した場合、ＣＰＵ４１５は新しいネットワークパケットを生成して、利用可能な項目内にネットワークパケットを記憶する。別の実施態様では、ＣＰＵ４１５が待ち行列４００内に利用可能な項目を検出し、また第１の条件が満たされている場合、ＣＰＵ４１５は新しいネットワークパケットを生成して、利用可能な項目内にネットワークパケットを記憶する。１つの実施態様では、第１の条件は、待ち行列４００では、ＧＰＵ４２５によって使用できる状態にあるネットワークパケットの数が閾値数よりも少ないことである。他の実施態様では、第１の条件は他の種々のタイプの条件のいずれかである。種々の実施態様では、ＣＰＵ４１５はネットワークパケットを先行して、また臨界経路の外に作成する。このようにして、ＧＰＵ４２５がネットワークパケットを生成する必要があるとき、ＧＰＵ４２５は、待ち行列４００に記憶されたネットワークパケットにリアルタイムでアクセスして、ＣＰＵ４１５の何らの関与も伴うことなく、ＮＩＣ４２０がすぐに消費するようにネットワークパケットを設定する。
【００２２】
次に図５を参照して、ネットワークパケットテンプレート５０５の１つの実施態様の図を示す。種々の実施態様では、ネットワークパケットテンプレートには、本明細書で説明するように、種々の静的情報及びランタイム情報を有する複数のインジケータ及び／またはフィールドが含まれる。たとえば、１つの実施態様では、ネットワークパケットテンプレート５０５には、有効インジケータ５１０、パケット準備完了インジケータ５１５、及び複数のフィールド５２０Ａ〜Ｎが含まれる。他の実施態様では、ネットワークパケットテンプレート５０５には他の数及び／もしくは他のタイプのインジケータ及びフィールドが含まれ、ならびに／またはネットワークパケットテンプレート５０５は他の好適な仕方で構築される。
【００２３】
１つの実施態様では、有効インジケータ５１０は項目に有効なネットワークパケットが記憶されているか否かを示す。有効なネットワークパケットとは、第１のプロセッサ（たとえば、ＣＰＵ）によって作成及び初期化されていて、第２のプロセッサによる更新（たとえば、ＧＰＵ、メモリ（ＰＩＭ）デバイスにおける処理）ができる状態にあるパケットである。１つの実施態様では、パケット準備完了インジケータ５１５は、ＮＩＣによって処理可能状態であるネットワークパケットが項目に記憶されるときを特定する。種々の実施態様では、フィールド５２０Ａ〜Ｎには種々のネットワーク通信設定のいずれかが記憶されている。１つの実施態様では、ネットワークパケットがネットワークパケットテンプレート５０５に従って作成されるときに、フィールド５２０Ａ〜Ｎの第１のサブセットが第１のプロセッサによってプログラムされ、第２のプロセッサがネットワーク伝送を開始する必要があるときに、フィールド５２０Ａ〜Ｎの第２のサブセットがリアルタイムでプログラムされる。
【００２４】
次に図６を参照して、ネットワークパケットテンプレート６０５の別の実施態様の図を示す。１つの実施態様では、ネットワークパケットテンプレート６０５には、有効インジケータ６１０及びパケット準備完了インジケータ６１５が含まれる。またネットワークパケットテンプレート６０５には、ネットワーク制御ビット６２０及びメモリアクセスキー６２５が含まれる。１つの実施態様では、第１のプロセッサ（たとえば、ＣＰＵ）は、テンプレート６０５に従ってネットワークパケットを作成して、第２のプロセッサ（たとえば、ＧＰＵ）がアクセス可能なメモリ内の待ち行列（たとえば、図４の待ち行列４００）にそのネットワークパケットを記憶するときに、ネットワーク制御ビット６２０及びメモリアクセスキー６２５に対するフィールドに記入する。図示しないが、他の実施態様では、ネットワークパケットテンプレート６０５には、待ち行列にネットワークパケットを作成及び記憶した際に、第１のプロセッサによって記入される１つ以上の他のフィールドも含まれる。
【００２５】
またネットワークパケットテンプレート６０５には、第２のプロセッサによってランタイム情報が動的に記入される種々のフィールドも含まれる。たとえば、１つの実施態様では、ネットワークパケットテンプレート６０５には、転送元オフセット６３０、転送先オフセット６３５、及び動作タイプ６４０（第２のプロセッサによってランタイム情報が記入される）が含まれる。転送元オフセット６３０は、転送元バッファまたは転送元メモリ装置内のどこでデータの転送を始めるかを特定する。転送先オフセット６３５は、転送先バッファまたは転送先メモリ装置内のどこに転送データを記憶するかを特定する。動作タイプ６４０は、行うべき動作のタイプ（たとえば、読み出し、書き込み、アトミック）を特定する。他の実施態様では、ネットワークパケットテンプレート６０５には、第２のプロセッサによってランタイム情報が動的に記入される他の数及びタイプのフィールドが含まれることに注意されたい。また、さらなる実施態様では、ネットワークパケットテンプレート６０５は他の好適な仕方で構築される。
【００２６】
次に図７を参照して、ネットワークパケットテンプレートを作成及び使用するための方法７００の１つの実施態様を示す。説明の目的上、この実施態様におけるステップ及び図８のステップは順番に示している。しかし、説明した方法の種々の実施態様において、説明する要素のうちの１つ以上は同時に行われるか、図示したものとは異なる順番で行われるか、または完全に省略されることに注意されたい。他のさらなる要素も必要に応じて行われる。本明細書で説明する種々のシステムまたは装置のいずれかは、方法７００を実施するように構成されている。
【００２７】
第１のプロセッサは、テンプレートに従ってネットワークパケットを作成して、ネットワークパケットのフィールドの第１のサブセットにデータを入れる（ブロック７０５）。１つの実施態様では、第１のプロセッサはＣＰＵである。第１のプロセッサは、第２のプロセッサがアクセス可能な場所にネットワークパケットを記憶する（ブロック７１０）。１つの実施態様では、第１のプロセッサは、ネットワークパケットテンプレートに対する明示的な要求を第２のプロセッサから受け取ることなく、ステップ７０５及び７１０を実行する。この結果、ステップ７０５及び７１０を先行して、また臨界経路の外で行うことができる。１つの実施態様では、準備完了フラグは、第１のプロセッサによって記憶されたネットワークパケットに対して設定されておらず、ネットワークパケットがまだＮＩＣによって処理可能状態ではないことを示している。また準備完了フラグが設定されていないことは、ネットワークパケットが準備完了になる前に第２のプロセッサが依然としてネットワークパケットにもっとデータを加える必要があることも示している。
【００２８】
また、第１のプロセッサは第２のプロセッサ上でカーネルを開始する（ブロック７１５）。１つの実施態様では、第２のプロセッサはＧＰＵである。ステップ７１５はしばしば、ステップ７０５及び７１０と並列に行われるか、またはステップ７０５及び７１０よりも前に行われることに注意されたい。次に、カーネルの実行中に、第２のプロセッサは、カーネルがネットワーク通信要求を検出することに応じて、ネットワークパケットのフィールドの第２のサブセットにデータを入れる（ブロック７２０）。そして、第２のプロセッサはＮＩＣに、ネットワークパケットは処理可能状態であることを通知する（ブロック７２５）。次にＮＩＣは、フィールドの第１のサブセット及びフィールドの第２のサブセットから取得したデータを用いて、ネットワークパケットを処理する（ブロック７３０）。ブロック７３０の後に、方法７００は終了する。
【００２９】
次に図８を参照して、待ち行列にネットワークパケットテンプレートを加えるときを決定するための方法８００の１つの実施態様を示す。第１のプロセッサは、ネットワークパケットを記憶する待ち行列のステータスをモニタする（ブロック８０５）。待ち行列に対して第１の条件が検出されたら（条件ブロック８１０、「ｙｅｓ」肢）、第１のプロセッサは１つ以上のネットワークパケットを作成して待ち行列に加える（ブロック８１５）。１つの実施態様では、第１の条件は、待ち行列の占有レベルが閾値を下回ることである。占有レベルは、待ち行列に記憶され、第２のプロセッサがデータを入れられる状態である有効なネットワークパケットの個数として特定される。１つの実施態様では、閾値は、待ち行列に記憶されたネットワークパケットを更新する第２のプロセッサによってプログラムされる。この実施態様では、第２のプロセッサは、現時点で第２のプロセッサによって実行されているカーネルのステータスに基づいて閾値を調整する。たとえば、１つの実施態様では、第２のプロセッサが、比較的大きな数のネットワーク要求を生成しているカーネルを実行する場合、第２のプロセッサは、第１のプロセッサが多数のネットワークパケットを待ち行列上に保持することが確実になるように閾値を動的に下げる。他の実施態様では、第２のプロセッサは１つ以上の他の因子に基づいて閾値を調整する。
【００３０】
別の実施態様では、第１の条件は、待ち行列が、ネットワークパケットを記憶するための１つ以上の利用可能なスロットを有することである。他の実施態様では、第１の条件は他の種々のタイプの条件のいずれかである。待ち行列に対して第１の条件が検出されなかった場合（条件ブロック８１０、「ｎｏ」肢）、第１のプロセッサは、待ち行列のステータスを再びチェックする前に、プログラム可能な時間、待機する（ブロック８２０）。１つの実施態様では、プログラム可能な時間は、現時点で実行されているカーネルに対応付けられる１つ以上の因子に基づいて、第２のプロセッサによって決定される。ブロック８２０の後に、方法８００はブロック８０５に戻る。
【００３１】
次に図９を参照して、待ち行列にネットワークパケットテンプレートを加えるときを決定するための方法９００の別の実施態様を示す。第１のプロセッサ（たとえば、ＣＰＵ）及び第２のプロセッサ（たとえば、ＧＰＵ）を有するシステムでは、第２のプロセッサが、ネットワークパケットを記憶する待ち行列のステータスをモニタする（ブロック９０５）。待ち行列に対して第１の条件が検出された場合（条件ブロック９１０、「ｙｅｓ」肢）、第２のプロセッサは、１つ以上のネットワークパケットを作成して待ち行列に加えるために、第１のプロセッサに対して割り込みを生成する（ブロック９１５）。割り込みを受け取ることに応じて、第１のプロセッサは１つ以上のネットワークパケットを作成して待ち行列に加える（ブロック９２０）。
【００３２】
１つの実施態様では、第１の条件は、待ち行列の占有レベルが閾値を下回ることである。占有レベルは、待ち行列に記憶され、１つ以上のフィールドに第２のプロセッサによってデータを入れられる状態である有効なネットワークパケットの個数であると特定される。別の実施態様では、第１の条件は、待ち行列が、ネットワークパケットを記憶するための１つ以上の利用可能なスロットを有することである。他の実施態様では、第１の条件は他の種々のタイプの条件のいずれかである。待ち行列に対して第１の条件が検出されなかった場合（条件ブロック９１０、「ｎｏ」肢）、第２のプロセッサは、待ち行列のステータスを再びチェックする前に、プログラム可能な時間、待機する（ブロック９２５）。ブロック９２５の後に、方法９００はブロック９０５に戻る。
【００３３】
種々の実施態様では、ソフトウェアアプリケーションのプログラム命令を用いて、本明細書で説明した方法及び／またはメカニズムを実施する。たとえば、汎用または専用プロセッサによって実行可能なプログラム命令が考えられる。種々の実施態様では、このようなプログラム命令は高レベルプログラミング言語によって表される。他の実施態様では、プログラム命令を高レベルプログラミング言語からバイナリ、中間、または他の形式にコンパイルする。代替的に、プログラム命令は、ハードウェアの動作または設計を記述するように記述される。このようなプログラム命令をＣなどの高水準プログラミング言語によって表す。代替的に、ベリログなどのハードウェア設計言葉（ＨＤＬ）を用いる。種々の実施態様では、プログラム命令を種々の非一時的なコンピュータ可読記憶媒体のいずれかに記憶する。記憶媒体は、使用中にコンピューティングシステムによってアクセス可能であり、プログラム命令をコンピューティングシステムに送ってプログラムを実行させる。概して言えば、このようなコンピューティングシステムには、プログラム命令を実行するように構成された少なくとも１つ以上のメモリと、１つ以上のプロセッサが含まれる。
【００３４】
強調しておかなければならないのは、前述した実施態様は単に実施態様の非限定的な例であるということである。開示内容が十分に理解されたら、多くの変形及び変更が当業者には明らかになる。以下の特許請求の範囲は、このような変形及び変更をすべて受け入れると解釈すべきであることが意図されている。
【図１】
2021530022.tif 000003
【図２】
2021530022.tif 000004
【図３】
2021530022.tif 000005
【図４】
2021530022.tif 000006
【図５】
2021530022.tif 000007
【図６】
2021530022.tif 000008
【図７】
2021530022.tif 000009
【図８】
2021530022.tif 000010
【図９】
2021530022.tif 000011
【国際調査報告】
2021530022.tif 000012
2021530022.tif 000013
2021530022.tif 000014