(57)【要約】【課題】全体的なシステム性能を著しく向上させ、サーバ又は他のデータのためのハードウェア及びパワー要求を低減するように改良されたコンテキスト切換キャッシュシステム及びコンテキスト切換方法を提供する。【解決手段】コンテキスト切換キャッシュシステムは、メモリバスに接続され、それぞれが関連するキャッシュ状態のキャッシュを有する複数のオフロードプロセッサと、オフロードプロセッサに接続されたコンテキストメモリと、オフロードプロセッサの少なくとも１つとコンテキストメモリとの間でキャッシュ状態の転送を指示するように構成されたスケジューリング回路とを備える。【選択図】図１
2016503934.tif 000002
【特許請求の範囲】
【請求項１】
コンテキスト切換キャッシュシステムにおいて、
メモリバスに接続され、それぞれが関連するキャッシュ状態のキャッシュを有する複数のオフロードプロセッサと、
前記オフロードプロセッサに接続されたコンテキストメモリと、
前記オフロードプロセッサの少なくとも１つと前記コンテキストメモリとの間でキャッシュ状態の転送を指示するように構成されたスケジューリング回路とを備えるコンテキスト切換キャッシュシステム。
【請求項２】
前記複数のオフロードプロセッサは、キャッシュ状態にアクセスするためのアクセラレータコヒーレントポートを有する請求項１記載のコンテキスト切換キャッシュシステム。
【請求項３】
前記関連するキャッシュ状態は、オフロードプロセッサレジスタの状態、オフロードプロセッサによる実行のための命令、スタックポインタ、プログラムカウンタ、オフロードプロセッサによる実行のためにプリフェッチされた命令、オフロードプロセッサによる使用のためのプリフェッチされたデータ及びオフロードプロセッサのキャッシュに書き込まれたデータからなるグループから選択される少なくとも１つを含む請求項１記載のコンテキスト切換キャッシュシステム。
【請求項４】
前記オフロードプロセッサの少なくとも１つは、オペレーティングシステム（ＯＳ）を動作させるように構成され、前記スケジューリング回路は、前記ＯＳと協働して、処理セッションのためのコンテキストが前記オフロードプロセッサの前記キャッシュ内で物理的に連続するように設定する請求項１記載のコンテキスト切換キャッシュシステム。
【請求項５】
前記オフロードプロセッサの少なくとも１つは、オペレーティングシステム（ＯＳ）を動作させるように構成され、前記スケジューリング回路は、前記ＯＳと協力して、処理セッションのためのコンテキストを、前記オフロードプロセッサのキャッシュ内で物理的に連続するように設定し、及び前記オフロードプロセッサのキャッシュ内で処理セッションのカラー、サイズ及び開始物理アドレスを設定する請求項１記載のコンテキスト切換キャッシュシステム。
【請求項６】
前記オフロードプロセッサの少なくとも１つは、オペレーティングシステム（ＯＳ）を動作させるように構成され、前記スケジューリング回路は、前記ＯＳと協力して、処理セッションのためのコンテキストを、前記オフロードプロセッサのキャッシュ内で物理的に連続するように設定し、及び前記オフロードプロセッサのキャッシュ内で処理セッションのカラー、サイズ及び開始物理アドレス、並びにキャッシュ内で許容できるセッションの数、キャッシュ内の所与のカラーについてセッションを検索できる位置の数を設定する請求項１記載のコンテキスト切換キャッシュシステム。
【請求項７】
前記スケジューリング回路は、１つのオフロードプロセッサのキャッシュ状態を他のオフロードプロセッサのキャッシュに転送することを指示するように構成される請求項１記載のコンテキスト切換キャッシュシステム。
【請求項８】
前記スケジューリング回路は、前記オフロードプロセッサの１つに関連する第１のセッションを停止し、前記オフロードプロセッサのキャッシュ状態を保存し、第２のキューに入れられているネットワークパケットの処理を開始することによって第１のキュー内のネットワークパケットの処理の優先順位付けを行うように構成される請求項１記載のコンテキスト切換キャッシュシステム。
【請求項９】
前記関連するキャッシュ状態は、オフロードプロセッサレジスタの状態、オフロードプロセッサによる実行のための命令、スタックポインタ、プログラムカウンタ、オフロードプロセッサによる実行のためにプリフェッチされた命令、オフロードプロセッサによる使用のためのプリフェッチされたデータ及びオフロードプロセッサのキャッシュに書き込まれたデータからなるグループから選択される少なくとも１つを含み、
前記オフロードプロセッサの少なくとも１つは、オペレーティングシステム（ＯＳ）を動作させるように構成され、前記スケジューリング回路は、前記ＯＳと協力して、セッションコンテキストを、前記オフロードプロセッサのキャッシュ内で物理的に連続するように設定する請求項１記載のコンテキスト切換キャッシュシステム。
【請求項１０】
前記スケジューリング回路は、前記メモリバスを介する前記オフロードプロセッサの少なくとも１つと前記コンテキストメモリとの間のキャッシュ状態の転送を指示するように構成される請求項１記載のコンテキスト切換キャッシュシステム。
【請求項１１】
前記コンテキストメモリは、少なくとも１つの低遅延メモリデバイスを含む請求項１記載のコンテキスト切換キャッシュシステム。
【請求項１２】
メモリバスを介する処理のためにデータを受信し、それぞれが関連するキャッシュ状態のキャッシュを有する複数のオフロードプロセッサのコンテキスト切換方法において、
スケジューリング回路の動作によって、複数のオフロードプロセッサの少なくとも１つのキャッシュからコンテキストメモリへのバルク読出によって、キャッシュ状態の仮想メモリ位置及び物理メモリ位置を揃えて、キャッシュ状態を保存することを指示するステップと、
前記スケジューリング回路の動作によって、前記オフロードプロセッサの少なくとも１つに、処理のために前記キャッシュ状態を転送することを指示するステップと、を有するコンテキスト切換方法。
【請求項１３】
前記バルク読出は、アクセラレータコヒーレントポートを介して行われる請求項１２記載のコンテキスト切換方法。
【請求項１４】
前記関連するキャッシュ状態は、オフロードプロセッサレジスタの状態、オフロードプロセッサによる実行のための命令、スタックポインタ、プログラムカウンタ、オフロードプロセッサによる実行のためにプリフェッチされた命令、オフロードプロセッサによる使用のためのプリフェッチされたデータ及びオフロードプロセッサのキャッシュに書き込まれたデータからなるグループから選択される少なくとも１つを含む請求項１２記載のコンテキスト切換方法。
【請求項１５】
前記キャッシュ状態は、セッションコンテキストを含み、前記オフロードプロセッサ上で動作するオペレーティングシステム（ＯＳ）と、前記スケジューリング回路とが協働して、前記オフロードプロセッサのキャッシュ内で前記セッションコンテキストが物理的に連続するようにするステップを更に有する請求項１２記載のコンテキスト切換方法。
【請求項１６】
処理セッションの初期化において、処理セッションのセッションカラー、セッションサイズ及び開始物理キャッシュアドレスをスケジューリング回路に通信するステップを更に有する請求項１２記載のコンテキスト切換方法。
【請求項１７】
複数の処理セッションのそれぞれの開始アドレス、オフロードプロセッサのキャッシュにおいて許容できるセッションの数、所与のカラーについてセッションを検索できる位置の数を決定するステップを更に有する請求項１２記載のコンテキスト切換方法。
【請求項１８】
１つのオフロードプロセッサの１つのキャッシュ状態を他のオフロードプロセッサのキャッシュに転送するステップを更に有する請求項１２記載のコンテキスト切換方法。
【請求項１９】
オフロードプロセッサの１つに関連する第１のセッションを停止し、前記オフロードプロセッサのキャッシュ状態を保存し、第２のキューに入れられているネットワークパケットの処理を開始することによって、前記メモリバスを介して受信した第１のキュー内のネットワークパケットの処理の優先順位付けを行うステップを更に有する請求項１２記載のコンテキスト切換方法。
【請求項２０】
オフロードプロセッサによって実行される処理のセッションコンテキストが前記オフロードプロセッサのキャッシュ内で物理的に連続するように設定するステップを更に有する請求項１２記載のコンテキスト切換方法。
【請求項２１】
前記キャッシュから前記コンテキストメモリへのバルク読出は、前記メモリバスを介する低遅延メモリデバイスへのバルク読出を含む請求項１２記載のコンテキスト切換方法。
【請求項２２】
それぞれが関連するキャッシュ状態のキャッシュを有する複数のオフロードプロセッサのコンテキスト切換方法において、
メモリバスに接続されたソケットを介して、処理のためのネットワークパケットを受信するステップと、
前記ネットワークパケットを処理のために複数のセッションに組織化するステップと、
スケジューリング回路の動作によって、前記オフロードプロセッサの少なくとも１つのキャッシュ状態をコンテキストメモリに読み出すバルク読出によって、キャッシュ状態の仮想メモリ位置及び物理メモリ位置を揃えて、少なくとも１つのセッションの処理を中断させるステップと、
前記スケジューリング回路の動作によって、前記オフロードプロセッサの少なくとも１つに、処理のために前記キャッシュ状態を転送することを指示するステップとを有するコンテキスト切換方法。
【請求項２３】
前記バルク読出は、アクセラレータコヒーレントポートを介して行われる請求項２２記載のコンテキスト切換方法。
【請求項２４】
前記関連するキャッシュ状態は、オフロードプロセッサレジスタの状態、オフロードプロセッサによる実行のための命令、スタックポインタ、プログラムカウンタ、オフロードプロセッサによる実行のためにプリフェッチされた命令、オフロードプロセッサによる使用のためのプリフェッチされたデータ及びオフロードプロセッサのキャッシュに書き込まれたデータからなるグループから選択される少なくとも１つを含む請求項２２記載のコンテキスト切換方法。
【請求項２５】
前記キャッシュ状態は、セッションコンテキストを含み、前記オフロードプロセッサ上で動作するオペレーティングシステム（ＯＳ）と、前記スケジューリング回路とが協働して、前記オフロードプロセッサのキャッシュ内で前記セッションコンテキストが物理的に連続するようにするステップを更に有する請求項２２記載のコンテキスト切換方法。
【請求項２６】
処理セッションの初期化において、処理セッションのセッションカラー、セッションサイズ及び開始物理キャッシュアドレスをスケジューリング回路に通信するステップを更に有する請求項２２記載のコンテキスト切換方法。
【請求項２７】
複数の処理セッションのそれぞれの開始アドレス、オフロードプロセッサのキャッシュにおいて許容できるセッションの数、所与のカラーについてセッションを検索できる位置の数を決定するステップを更に有する請求項２２記載のコンテキスト切換方法。
【請求項２８】
１つのオフロードプロセッサの１つのキャッシュ状態を他のオフロードプロセッサのキャッシュに転送するステップを更に有する請求項２２記載のコンテキスト切換方法。
【請求項２９】
オフロードプロセッサの１つに関連する第１のセッションを停止し、前記オフロードプロセッサのキャッシュ状態を保存し、第２のキューに入れられているネットワークパケットの処理を開始することによって、前記メモリバスを介して受信した第１のキュー内のネットワークパケットの処理の優先順位付けを行うステップを更に有する請求項２２記載のコンテキスト切換方法。
【請求項３０】
前記少なくとも１つのセッションの処理を中断させるステップは、先取りモードで動作して、セッション実行を制御するステップを含む請求項２２記載のコンテキスト切換方法。
【請求項３１】
前記ネットワークパケットを受信するステップは、前記メモリバスを介して、デュアルインラインメモリモジュール（ＤＩＭＭ）互換ソケットを経由してネットワークパケットを受信するステップを含む請求項２２記載のコンテキスト切換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリバスに接続されたモジュールを含むコンピュータシステムのための、オフロードプロセッサによる確定的（deterministic）なコンテキスト切換キャッシュシステム及びコンテキスト切換方法に関する。
【背景技術】
【０００２】
コンテキスト切換（プロセス切換又はタスク切換とも呼ばれる。）は、１つのプロセス又はスレッドの実行から他のプロセス又はスレッドの実行にプロセッサを切り換えることを意味する。コンテキスト切換の間、プロセスの状態（コンテキスト）は、メモリに保存され、これにより、後に同じポイントから実行を再開できる。これによって、複数のプロセスが単一のプロセッサを共有し、マルチタスキングオペレーティングシステムをサポートすることができる。
【０００３】
一般的に、プロセスは、実行中又は動作中のプログラムのインスタンスであり、プロセスは並列的に動作でき、その親プロセスと共にアドレス領域（すなわち、様々なメモリ位置）及び他のリソースを共有することができる。コンテキストは、通常、特定の時刻におけるプロセッサのレジスタ及びプログラムカウンタのコンテンツを含む。オペレーティングシステムは、第１のプロセスの実行を中断させ、そのプロセスのコンテキストをメモリに保存し、次に第２のプロセスのコンテキストをメモリから読み出し、プロセッサのレジスタにおいてこのコンテキストを復元することができる。第２のプロセスを終了又は中断した後、第１のプロセスのコンテキストを再ロードして、第１のプロセスの実行を再開することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、コンテキスト切換は、演算負荷が大きい。コンテキスト切換は、かなりの処理時間を必要とすることがあり、この時間は、１秒あたり数十回から数百回行われるコンテキスト切換毎に数ナノ秒の桁の時間を要することがある。現代のプロセッサは、数百又は数千の個別のプロセスを扱うことがあるため、コンテキスト切換に費やされる時間は、プロセッサ時間に関してシステムの大きなコストとなるという問題がある。
【０００５】
本発明は、このような問題に鑑みてなされたもので、その目的とするところは、全体的なシステム性能を著しく向上させ、サーバ又は他のデータのためのハードウェア及びパワー要求を低減するように改良されたコンテキスト切換キャッシュシステム及びコンテキスト切換方法を提供することにある。
【課題を解決するための手段】
【０００６】
システムにおけるプロセッサのコンテキスト切換のためのシステム、ハードウェア及び方法の実施形態を開示する。実施形態は、それぞれがメモリバスに接続された複数のオフロードプロセッサを含むことができ、各オフロードプロセッサは、関連するキャッシュ状態のキャッシュを有する。複数のオフロードプロセッサには、メモリバスを介して低遅延メモリを接続でき、スケジューリング回路を用いて、オフロードプロセッサの少なくとも１つから低遅延メモリにキャッシュ状態を保存させ、後にメモリバスを介してオフロードプロセッサの少なくとも１つにキャッシュ状態を転送する。
【０００７】
ＡＲＭ（登録商標）アーキテクチャプロセッサの使用に関連する実施形態では、複数のオフロードプロセッサは、改善された速度でキャッシュ状態にアクセスするためにアクセラレータコヒーレントポート（accelerator coherency port）を有していてもよい。他の実施形態では、以下に限定されるものではないが、共通モジュールは、オフロードプロセッサ、低遅延メモリ及びスケジューリング回路をサポートし、デュアルインラインメモリモジュール（dual in line memory module：ＤＩＭＭ）ソケットを含むメモリソケット仲介接続を介して、外部ネットワークパケットへのアクセスを提供する。
【０００８】
幾つかの実施形態では、関連するキャッシュ状態は、レジスタ保存領域に保存されるプロセッサレジスタの状態、実行されるパイプライン内の命令、スタックポインタ及びプログラムカウンタ、セッションによる実行を待機するプリフェッチされた命令及びデータ、並びに直近にキャッシュに書き込まれたデータの１つを含む。システムは、更に、複数のオフロードプロセッサの少なくとも１つで動作するオペレーティングシステム（operating system：ＯＳ）を含むことができる。
【０００９】
ＯＳ及びスケジューリング回路は、協働して、セッションコンテキストをキャッシュ内で物理的に連続させる。セッション初期化に応じて、セッションカラー、サイズ及び開始物理アドレスをスケジューラ回路に通信でき、及びメモリアロケータを用いて、各セッションの開始アドレス、キャッシュ内で許容されるセッションの数、所与のカラーについてセッションを検索できる位置の数を決定できる。
【００１０】
幾つかの実施形態では、複数のオフロードプロセッサの１つによって保存されたキャッシュ状態を他のオフロードプロセッサに転送することができる。特定のアプリケーションでは、スケジューリング回路は、オフロードプロセッサの１つに関連する第１のセッションを停止し、オフロードプロセッサのキャッシュ状態を保存し、第２のキューに入れられているネットワークパケットの処理を開始することによってメモリバスを介して受け取った第１のキュー内のネットワークパケットの処理を優先させることができる。
【００１１】
また、実施形態は、メモリバスを介して複数のオフロードプロセッサに接続された低遅延メモリを使用する、それぞれがメモリバスに接続された複数のオフロードプロセッサのコンテキスト切換方法を含むことができる。コンテキスト切換方法は、スケジューリング回路の動作によって、複数のオフロードプロセッサの少なくとも１つのキャッシュから低遅延メモリへのバルク読出によって、キャッシュ状態の仮想メモリ位置及び物理メモリ位置を揃えて、キャッシュ状態を保存することを指示するステップを含む。
【００１２】
次に、スケジューリング回路の動作によって、オフロードプロセッサの少なくとも１つに、処理のためにキャッシュ状態を転送することを指示する。上述した構造的な実施形態と同様に、共通モジュールは、オフロードプロセッサ、低遅延メモリ及びスケジューリング回路をサポートし、ＤＩＭＭソケット又は他のメモリソケット接続を介して、外部ネットワークパケットへのアクセスを提供する。
【発明の効果】
【００１３】
本発明によれば、全体的なシステム性能を著しく向上させ、サーバ又は他のデータのためのハードウェア及びパワー要求を低減するように改良されたコンテキスト切換キャッシュシステム及びコンテキスト切換方法を提供することができる。
【図面の簡単な説明】
【００１４】
【図１】実施形態に基づくコンテキスト切換を有するシステムを示す図である。
【図２】カラーリングなしで物理インデクスキャッシュ内のページ競合を示す図である。
【図３】仮想インデクスキャッシュを示す図である。
【図４】実施形態に基づき仮想的／物理的に整列されたキャッシュを示す図である。
【図５】様々な実施形態に基づく処理モジュールを示す図である。
【図６】様々な実施形態に基づく処理モジュールを示す図である。
【図７】様々な実施形態に基づく処理モジュールを示す図である。
【図８】様々な実施形態に基づく処理モジュールを示す図である。
【図９】従来のデュアルインラインメモリモジュールを示す図である。
【図１０】他の実施形態に基づくシステムを示す図である。
【図１１】一実施形態に基づく、コンテキスト切換能力を有する、メモリバスに接続されたオフロード処理モジュールを備えるシステムを示す図である。
【図１２】特定の実施形態に基づくコンテキスト切換動作を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、複数の図面を参照して様々な実施形態について説明する。これらの実施形態は、システムメモリバスに接続されたオフロードプロセッサによってコンテキストを切換えるモジュール、システム及び方法を示す。このようなオフロードプロセッサは、ホストプロセッサに加えて、システムメモリバスに接続してもよく、ホストプロセッサから独立して、システムメモリバスを介して転送されるデータに対して動作することができる。
【００１６】
特定の実施形態では、オフロードプロセッサは、低遅延メモリにアクセスでき、これによって、高速コンテキスト切換のためのコンテキストデータの高速書込及び高速読出が実現する。
【００１７】
特定の実施形態では、処理モジュールは、インラインメモリモジュール（例えば、デュアルインラインモリモジュール（dual in line memory module：ＤＩＭＭ））をシステムメモリバスに接続するための物理スロットに挿入することができる。
【００１８】
図１は、一実施形態に基づくシステム１００を示している。システム１００は、１つ以上のオフロードプロセッサ１１８、スケジューラ１１６及びコンテキストメモリ１２０を含むことができる。オフロードプロセッサ１１８は、キャッシュメモリに関連して動作する１つ以上のプロセッサコアを含むことができる。コンテキスト切換動作では、オフロードプロセッサ１１８の第１の処理タスクのコンテキストは、コンテキストメモリ１２０に保存でき、オフロードプロセッサ１１８は、新しい処理タスクを引き受けることができる。
【００１９】
後に、保存されたコンテキストをコンテキストメモリ１２０からオフロードプロセッサ１１８に復元し、オフロードプロセッサ１１８は、第１の処理タスクを再開できる。特定の実施形態では、コンテキストデータの保存及び復元は、オフロードプロセッサ１１８のキャッシュと、コンテキストメモリ１２０との間のデータ転送を含むことができる。
【００２０】
スケジューラ１１６は、受信した処理要求に基づいて、オフロードプロセッサ１１８のコンテキスト切換を調整できる。したがって、スケジューラ１１６は、オフロードプロセッサ１１８のためのコンテキストデータの位置と同様に、オフロードプロセッサ１１８の状態を知ることができ、又はここにアクセスすることができる。コンテキストデータ位置は、コンテキストメモリ１２０内の位置と共にプロセッサキャッシュ内の位置を含むことができる。また、スケジューラ１１６は、オフロードプロセッサ１１８の状態を追跡し又はこの状態によって更新できる。
【００２１】
以上のように、コンテキストメモリ１２０は、オフロードプロセッサ１１８のコンテキストデータを後に読み出せるように保存できる。コンテキストメモリ１２０は、オフロードプロセッサのキャッシュメモリから分離されていてもよい。幾つかの実施形態では、コンテキストメモリ１２０は、システム内の他のメモリと比べて低遅延のメモリであってもよく、これによって、速やかなコンテキスト保存及び読出が可能になる。幾つかの実施形態では、コンテキストメモリ１２０は、コンテキストデータ以外のデータを保存できる。
【００２２】
ここに示す特定の実施形態では、オフロードプロセッサ１１８、スケジューラ１１６及びコンテキストメモリ１２０は、メモリバス１２４に接続されたモジュール１２２の一部であってもよい。オフロードプロセッサ１１８による実行のためのデータ及び処理タスクは、メモリバス１２４を介して受信できる。幾つかの実施形態では、オフロードプロセッサ１１８とコンテキストメモリ１２０との間のコンテキストデータの転送は、メモリバス１２４を介して行われる。但し、他の実施形態では、モジュール１２２上の異なるデータ経路を介してこのような転送を行ってもよい。
【００２３】
図１に示す特定の実施形態、すなわち、システム１００は、更に、第２の仮想スイッチ（以下、「第２のスイッチ」、ともいう）１１４、メモリコントローラ１１２、ホストプロセッサ１１０、入出力（Ｉ／Ｏ）機構１０８及び第１のスイッチ１０６を含むことができる。モジュール１２２上に第２のスイッチ１１４を設けてもよい。図１の特定のシステム１００は、ネットワークパケット処理スケジューリング及びトラフィック管理を提供するが、他の実施形態では、他のタイプの処理タスクのためのコンテキスト切換動作又はこれと同様の動作を行ってもよい。
【００２４】
図１の特定の実施形態では、第１のスイッチ（以下、「第１の仮想スイッチ」、又は単に「スイッチ」ともいう）１０６は、データソース１０２からデータパケット１０４を受信し、及び／又はデータソース１０２にデータパケット１０４を送信する。データソース１０２は、適切な如何なるパケットデータのソースであってもよく、インターネット、ネットワーククラウド、データセンタ間又はデータセンタ内ネットワーク、クラスタコンピュータ、ラックシステム、複数又は個別のサーバ又はパーソナルコンピュータ等であってもよい。
【００２５】
データは、パケット形式であっても、スイッチベースであってもよいが、特定の実施形態では、処理を容易にするため、非パケットデータをパケットに変換又はカプセル化する。データパケットは、通常、ある特性を有し、トランスポートプロトコル番号、ソース及び宛先ポート番号、又はソース及び宛先インターネットプロトコル（Internet Protocol：ＩＰ）アドレスを含む。データパケットは、更に、パケット分類及び管理の補助となる関連するメタデータを有することができる。
【００２６】
スイッチ１０６は、仮想スイッチ（入出力デバイス）であってもよい。スイッチ１０６は、以下に限定されるわけではないが、周辺機器コンポーネント相互接続（peripheral component interconnect：ＰＣＩ）規格と互換性を有するデバイス及び／又はＰＣＩ又はＰＣＩｅバス１０７を介してホストマザーボードに接続するＰＣＩエキスプレス（PCI express：ＰＣＩｅ）デバイスであってもよい。更に、スイッチ１０６は、ネットワークインタフェースコントローラ（network interface controller：ＮＩＣ）、ホストバスアダプタ、集中型ネットワークアダプタ、切換型又は非同期伝送モード（asynchronous transfer mode：ＡＴＭ）ネットワークインタフェース等を含むことができる。
【００２７】
幾つかの実施形態では、スイッチ１０６は、シングルルート入出力仮想化（single root I/O virtualization：ＳＲ−ＩＯＶ）インタフェース等の入出力仮想化スキームを採用して、単一のネットワーク入出力デバイスを複数のデバイスと同様に扱うことができる。ＳＲ−ＩＯＶは、物理的制御及び仮想機能の両方を提供することによって、様々なＰＣＩｅハードウェア機能間のリソースへの個別のアクセスを実現する。
【００２８】
一実施形態では、スイッチ１０６は、ＯｐｅｎＦｌｏｗソフトウェアによって定義されたネットワーキングをサポートし、コントロールプレーンを抽象化することができる。第１の仮想スイッチ１０６のコントロールプレーンは、ルート判定、ターゲットノード識別等の機能を実行する。
【００２９】
スイッチ１０６は、ネットワークパケットを検査し、コントロールプレーンを用いて、ネットワークパケットのために適切な出力ポートを作成する能力を有することができる。スイッチ１０６のフォワーディングプレーンは、ネットワークパケットに関連するネットワークパケット又はデータフローのためのルート計算に基づいて、パケットを出力インタフェースに転送することができる。
【００３０】
スイッチ１０６のアウトプットインタフェースを入出力バスに接続してもよく、一実施形態では、スイッチ１０６は、メモリ読出又は書込動作（ダイレクトメモリアクセス動作）のために、ネットワークパケットを直接的に（又は入出力機構１０８を介して間接的に）メモリバス相互接続（以下、単に「メモリバス」ともいう）１０９に転送する能力を有することができる。あるアプリケーションでは、機能上、コントロールプレーン機能に基づいて、ネットワークパケットを特定のメモリ位置へのトランスポートに割り当てることができる。
【００３１】
入出力機構１０８及びメモリバス相互接続１０９に接続されたスイッチ１０６は、更に、ホストプロセッサ１１０にも接続できる。ホストプロセッサ１１０は、演算サービスを提供することができるプロビジョニングエージェント（provisioning agent）１１１を含む１つ以上のホストプロセッサを含むことができる。プロビジョニングエージェント１１１は、オペレーティングシステム又はホストプロセッサ１１０上で実行されるユーザコードの一部であってもよい。プロビジョニングエージェント１１１は、通常、システム１００によって提供される仮想機能ドライバを初期化し、これとインタラクトする。
【００３２】
仮想機能ドライバは、ダイレクトメモリアドレッシング（direct memory addressing：ＤＭＡ）が必要である場合にメモリスペースの仮想アドレスを提供する役割を有する。各デバイスドライバは、物理アドレスにマッピングされる仮想アドレスに割り当てることができる。デバイスモデルを用いて、物理デバイスのエミュレーションを行い、作成することができる複数の仮想機能（virtual function：ＶＦ）のそれぞれをホストプロセッサ１１０が認識できるようにすることができる。
【００３３】
デバイスモデルを複数回複製して、ＶＦドライバ（仮想入出力デバイスとインタラクトするドライバ）が物理デバイスとインタラクトしているように錯覚させることもできる。例えば、任意のデバイスモデルを用いてＶＦドライバが接続できるネットワークアダプタをエミュレートしてもよい。
【００３４】
デバイスモデル及びＶＦドライバは、特権モード（privileged mode）又は非特権モード（non-privileged mode）の何れで動作してもよい。どのデバイスがデバイスモデル及びＶＦドライバに対応するコードをホストし／実行するかについては、制約はない。但し、コードは、入出力インタフェースの複数のコピーを作成するために、デバイスモデル及びＶＦドライバの複数のコピーを作成する能力を有することができる。
【００３５】
また、幾つかの実施形態では、オペレーティングシステムは、ＶＦドライバによってサポートされるアプリケーションのために、定義された物理アドレス領域を作成することができる。更に、ホストオペレーティングシステムは、アプリケーション又はプロビジョニングエージェントに仮想メモリアドレス領域を割り当てることができる。
【００３６】
プロビジョニングエージェント１１１は、ホストオペレーティングシステムを仲介して、仮想アドレスと使用可能な物理アドレス領域のサブセットとの間のマッピングを作成する。プロビジョニングエージェント１１１は、各ＶＦドライバを作成して、これらを定義された仮想アドレス領域に割り当てる役割を有することができる。
【００３７】
また、第２の仮想スイッチ１１４は、メモリバス１０９を用いて、メモリコントローラ１１２に接続できる。第２の仮想スイッチ１１４は、メモリバス１０９からのトラフィックを受信し、オフロードプロセッサ１１８への、及びオフロードプロセッサ１１８からのトラフィックに切換えることができる。
【００３８】
ここで、トラフィックとは、以下に限定されるわけではないが、プロビジョニングエージェント１１１によって作成され及び割り当てられた仮想デバイスへのデータフローを含んでいてもよく、このデータフローの処理は、オフロードプロセッサ１１８によってサポートされる。
【００３９】
第２の仮想スイッチ１１４のフォワーディングプレーンは、メモリバス１０９からオフロードプロセッサ１１８への又はオフロードプロセッサ１１８からメモリバス１０９に戻るパケットを伝送することができる。あるアプリケーションでは、ここに開示するシステムアーキテクチャは、ホストプロセッサ１１０への割込をゼロ又は最小限にして、オフロードプロセッサ１１８にネットワークパケットを直接的に通信する。
【００４０】
第２の仮想スイッチ１１４は、パケットを受信し、定義された調停及びスケジューリングスキームに基づいて、これらを分類した後に、異なるハードウェアスケジューラに配信する能力を有していてもよい。ハードウェアスケジューラ１１６は、パケットを受信し、１つ以上の個別のセッションで処理されるようにスケジューリングされたフローセッションに割り当てることができる。
【００４１】
スケジューラ１１６は、コンテキストの切換を含むオフロードプロセッサ１１８よって実行される処理タスクを制御できる。幾つかの実施形態では、スケジューラ１１６は、メモリバス１２４を介して受信されたデータに含まれるメタデータ（又はこのようなデータから導出されるメタデータ）を用いて、オフロードプロセッサ１１８のタスクのスケジューリング／切換を行う。また、メモリバスを介して受信されるコマンド又はフラグによるコマンドベースのスケジューラの制御を行ってもよい。
【００４２】
図１の特定の実施形態では、スケジューラ１１６を用いて、受信パケットのトラフィック管理を実現することができる。あるソースからのパケット、あるトラフィッククラスに関連するパケット、特定のアプリケーションに関するパケット又はあるソケットに供給されるパケットは、セッションフローの一部と呼ばれ、セッションメタデータを用いて分類できる。
【００４３】
セッションメタデータは、多くの場合、パケットの優先順位を定める基準として機能し、受信パケットは、セッションメタデータに基づいて並べ替えることができる。このパケットの並べ替えは、１つ以上のバッファで行うことができ、これらのフローのトラフィックシェイプを変更できる。
【００４４】
セッションメタデータに基づいて並べ替えられるセッションのパケットは、特定のトラフィック管理キューに送られ、トラフィック管理キューは、調停回路（図示せず）を用いて調停されて、出力ポートに供給される。調停回路は、これらのパケットフローをダウンストリームのパケット処理／終端リソースに直接的に供給してもよい。一実施形態では、スレッド及びキュー管理を統合し、このスレッドによって、ネットワークデータのダウンストリームリソース処理終端のスループットを向上させる。
【００４５】
図１に示すように、スケジューラ１１６に到着するデータは、オフロードプロセッサ１１８において終端（terminated）されるパケットデータであってもよく、又は処理、変更又は切換えられるパケットデータであってもよい。スケジューラ１１６は、パケットデータの検査に基づいて、受信パケットを対応するアプリケーションセッションに区分する役割を有していてもよい。スケジューラ１１６は、パケットを検査し、関連するパケットの特徴を特定する回路を有することができる。
【００４６】
幾つかの実施形態では、スケジューラ１１６は、ネットワークスタックの一部をオフロードし、このようなネットワークスタック処理によって生じるオーバーヘッドからオフロードプロセッサ１１８を解放することができる。特定の実施形態では、スケジューラ１１６は、ＴＣＰ／トランスポートオフロード、暗号化／平文化オフロード、セグメント化及び再構築等の何れかを実行してもよく、これにより、オフロードプロセッサは、ネットワークパケットのペイロードを直接的に使用することができる。
【００４７】
スケジューラ１１６は、更に、セッションに属するパケットを特定のトラフィック管理キューに転送する能力を有することができる。スケジューラ１１６は、このような複数のセッションのそれぞれの汎用ＯＳへのスケジューリングを制御することができる。各ステージにおいて実行される動作を最適化するスケジューラ１１６によって、汎用ＯＳを含むステージのパイプラインに亘るセッションの持続性をサポートできる。このような動作の特定の実施形態については、後に更に詳細に説明する。
【００４８】
スケジューラ１１６は、適切な如何なる形式を有していてもよく、例えば、引用によって本願に組み込まれる、２００７年８月４日に発行されたＤａｌａｌによる米国特許７，７６０，７１５号（以下に、７１５特許と呼ぶ。）に開示されている。スケジューリング回路の全部又は一部をスケジューラとして用いてもよい。７１５特許は、ダウンストリーム実行リソースを考慮に入れるスケジューリング回路を開示している。これらのキュー内の各セッションフローは、出力ポートを介してダウンストリームネットワーク要素に送り出される。
【００４９】
スケジューラは、調停回路を用いて、複数のトラフィック管理出力キューのアクセスを調停して、有効な出力ポートに割り当てる。それぞれの出力ポートは、パケットバッファを介して、オフロードプロセッサコアの１つに接続できる。パケットバッファは、更に、ヘッダプール（header pool）及びパケットボディプール（packet body pool）を含んでいてもよい。ヘッダプールには、オフロードプロセッサ１１８によって処理されるパケットのヘッダのみを格納することができる。
【００５０】
また、処理すべきパケットのサイズが十分小さい場合、ヘッダプールは、パケットの全体を格納してもよい。パケットは、オフロードプロセッサで実行される処理の性質に応じて、ヘッダプール又はパケットボディプールに転送することができる。パケットの処理、オーバレイ、解析、フィルタリング、及び同様な他のアプリケーションでは、パケットヘッダのみをオフロードプロセッサ１１８に転送することが適切な場合がある。
【００５１】
これらの場合、パケットヘッダの処理によって、パケットボディをパケットヘッダに結合して、出力インタフェースから転送してもよく、パケットボディを削除してもよい。パケットの終端を必要とするアプリケーションでは、パケットボディ全体を転送してもよい。そして、オフロードプロセッサは、パケットを受信し、これらに対して適切なアプリケーションセッションを実行することができる。
【００５２】
スケジューラ１１６は、オフロードプロセッサ１１８上の異なるセッションをスケジューリングすることができ、このようなセッションを調整して、コンテキスト切換の間のオーバーヘッドを減少させる。スケジューラ１１６は、ラインレート速度で送信キュー間又はセッションフロー間の調停を行うだけではなく、終端されたセッション間の調停を非常に高速で行う。スケジューラ１１６は、オフロードプロセッサ１１８上のセッションのキューを管理でき、及びＯＳ上の新しいアプリケーションセッションを呼び出す役割を有している。スケジューラ１１６は、ＯＳに対し、トラフィックに基づいて、新たなセッションのためのパケットが使用可能であることを通知することができる。
【００５３】
また、スケジューラ１１６には、オフロードプロセッサ１１８の実行リソースの状態、実行リソース上で動作中の現在のセッション及びこのセッションに割り当てられたメモリ領域、並びにオフロードプロセッサキャッシュ内のセッションコンテキストの位置を通知できる。これにより、スケジューラ１１６は、実行リソースの状態を用いて、トラフィック管理及び調停判定を行うことができる。
【００５４】
ここに示す実施形態では、スケジューラ１１６は、オペレーティングシステム上のスレッド管理を受信パケットのトラフィック管理に統合することができる。ハードウェアスケジューラは、トラフィック管理キュー及びオフロードプロセッサ１１８上の処理エンティティを含むコンポーネントの範囲に亘ってセッションフローの持続性を維持することができる。オフロードプロセッサ１１８上で動作するＯＳは、処理中の特定のキューに、実行リソース、例えば、プロセッササイクル及びメモリを割り当てることができる。
【００５５】
更に、ＯＳは、特定のキューのためにスレッド又はスレッドのグループを割り当てることができ、これによって、汎用処理要素は、キューを独立したエンティティとして取り扱うことができる。汎用（general purpose：ＧＰ）処理リソース（例えば、オフロードプロセッサリソース）上で複数のセッションを動作させ、それぞれがスケジューラ１１６上のキュー内の特定のセッションフローからのデータを処理することによって、スケジューラ１１６及びＧＰ処理リソースを緊密に統合できる。これによって、トラフィック管理及びスケジューラ１１６、並びにＧＰ処理リソースに亘って、セッション情報内に持続的な要素を導入できる。
【００５６】
幾つかの実施形態では、オフロードプロセッサ１１８のＯＳは、リソース間のコンテキスト切換に関連するペナルティ及びオーバーヘッドを低減するように前のＯＳから変更できる。これによって、ハードウェアスケジューラは、更に、キュー間のシームレスな切換を行うことができ、この結果、実行リソースがこれらを異なるセッションとして実行する。
【００５７】
特定の実施形態では、スケジューラ１１６は、トラフィック受信パケットの管理を実現することができる。あるソースからのパケット、あるトラフィッククラスに関連するパケット、特定のアプリケーションに関するパケット又はあるソケットに供給されるパケットは、セッションフローの一部と呼ばれ、セッションメタデータを用いて分類できる。
【００５８】
セッションメタデータは、多くの場合、パケットの優先順位を定める基準として機能でき、受信パケットは、セッションメタデータに基づいて並べ替えられる。このパケットの並べ替えは、１つ以上のバッファで行うことができ、これらのフローのトラフィックシェイプを変更できる。セッションメタデータに基づいて並べ替えられるセッションのパケットは、特定のトラフィック管理キューに送られ、トラフィック管理キューは、調停回路を用いて調停されて、出力ポートに供給される。
【００５９】
調停回路は、これらのパケットフローをダウンストリームのパケット処理／終端リソース（例えば、オフロードプロセッサ）に直接的に供給してもよい。一実施形態では、スレッド及びキュー管理を統合し、このスレッドによって、ネットワークデータのダウンストリームリソース処理終端のスループットを向上させる。
【００６０】
受信ネットワークパケット（及びフロー）のトラフィック管理、調停及びスケジューリングを行うことに加えて、スケジューラ１１６は、オフロードプロセッサ１１８のＯＳ上の終端されたセッション間でオーバーヘッドが最小のコンテキスト切換を可能にする。
【００６１】
オフロードプロセッサ１１８上の複数のセッションの切換によって、複数のセッションを非常に高速に終端させることができる。ここに示す実施形態では、コンテキストモジュール１２０の動作によって速やかなコンテキスト切換を行うことができる。特定の実施形態では、効率的な低遅延コンテキストサービスのために、システム１００内にコンテキストメモリ１２０を設けてもよい。
【００６２】
ここに示す特定の実施形態では、第２のスイッチ１１４の動作によってスケジューラ１１６にパケットを転送することができる。スケジューラ１１６は、オフロードプロセッサ１１８上のセッション及び新たなセッションを切り換える役割及びコンテキストメモリ１２０内のコンテキストの保存を開始する役割の両方を有することができる。
【００６３】
セッションのコンテキストは、以下に限定されるものではないが、レジスタ保存領域に保存されるプロセッサレジスタの状態、実行されるパイプライン内の命令、スタックポインタ及びプログラムカウンタ、セッションによる実行を待機するプリフェッチされた命令及びデータ、並びに直近にキャッシュに書き込まれたデータ及びオフロードプロセッサ１１８上で実行されるセッションを特定できる他の関連情報を含むことができる。
【００６４】
特定の実施形態では、セッションＩＤ、キャッシュ内のセッションインデクス及び開始物理アドレスの組合せを用いてセッションコンテキストを特定できる。
【００６５】
図４を用いて更に詳細に説明するように、変換スキームを用いて、仮想メモリ内のセッションの連続するページがオフロードプロセッサ１１８のキャッシュ内でも物理的に連続するようにできる。キャッシュ内のセッションのこの連続性によって、セッションコンテキストをバルク読出して、「コンテキストスナップショット」として、コンテキストメモリ１２０に保存でき、これは、オペレーティングシステム（ＯＳ）がプロセッサリソースをセッションに戻すように切換えたとき、このコンテキストメモリ１２０から読み込むことができる。
【００６６】
セッションコンテキストをコンテキストメモリ１２０（低遅延メモリが好ましく、したがって、システムのメインメモリより数桁速い動作能力を有するものがよい。）からシームレスにフェッチする能力によって、オフロードプロセッサ１１８のＬ２キャッシュのサイズを実質的に拡張することができる。
【００６７】
幾つかの実施形態では、システム１００のＯＳは、入出力メモリ管理ユニット（input output memory management unit：ＩＯＭＭＵ）（図示せず）において、最適化を実現し、変換ルックアサイドバッファ（translation lookaside buffer：ＴＬＢ）（又は同等のルックアップ構造）によって、各セッションのコンテンツを一意的に特定することができる。このような構成によって、セッション切換の間にアドレス変換を一意的に特定し、ＴＬＢの外部にあるページテーブルキャッシュ（page table cache）に転送することができる。
【００６８】
ページテーブルキャッシュを使用することによって、ＴＬＢのサイズを拡張することができる。また、仮想メモリにおいて連続する位置が、物理メモリ及び物理インデクスキャッシュ（physically indexed cache）においても連続する位置にあるため、セッションを特定するために必要なアドレス変換の回数が大幅に減少する。
【００６９】
図１に示す特定の実施形態では、システム１００は、出力セッション及びパケット終端サービスに適合させることができる。幾つかの実施形態では、ネットワークスタック処理の制御は、スケジューラ１１６によって実行できる。すなわち、スケジューラ１１６は、トラフィック管理キュー、調停回路及びネットワークスタックオフロードデバイスとして機能できる。スケジューラ１１６は、オフロードプロセッサ１１８に代わって、セッションの全体及びフロー管理を扱う役割を有することができる。
【００７０】
このような構成では、オフロードプロセッサ１１８は、セッションに関係するパケットをバッファに直接的に供給でき、このバッファからパケットデータを取り出して使用することができる。ネットワークスタックの処理は、ネットワークによって生じる割込を処理する（割込サービスルーチンを実行する）カーネルモードへの切換を回避するように最適化してもよい。これによって、可能な限り小さいオーバーヘッドでセッションのコンテキストをシームレスに切り換えるようにシステム１００を最適化できる。
【００７１】
図１に示すように、ここに開示するシステム１００では、ＰＣＩ、ファイバチャネル等の複数のタイプの従来の入出力バスを使用することができる。また、バスアーキテクチャは、関連するＪＥＤＥＣスタンダード、ＤＩＭＭデータ転送プロトコル、ハイパートランスポート（Hypertransport）又は他の適切なあらゆる高速、低遅延相互接続システムに基づいて構成することができる。
【００７２】
オフロードプロセッサ１１８は、ダブルデータレート（double data rate：ＤＤＲ）ダイナミックランダムアクセスメモリ（dynamic random access memory：ＤＲＡＭ）、遅延減少ＤＲＡＭ（reduced latency DRAM：ＲＬＤＲＡＭ（登録商標））、埋込型ＤＲＡＭ、次世代スタックドメモリ、例えば、ハイブリッドメモリキューブ（Hybrid Memory Cube：ＨＭＣ（登録商標））、フラッシュ又は他の適切なメモリ、個別のロジック又はバス管理チップ、プログラマブルユニット、例えば、フィールドプログラマブルゲートアレイ（field programmable gate array：ＦＰＧＡ）、カスタム設計された特定用途向け集積回路（application specific integrated circuit：ＡＳＩＣ）、及び省エネルギ汎用プロセッサ、例えば、ＡＲＭ（登録商標）、ＡＲＣ（登録商標）、Ｔｅｎｓｉｌｉｃａ（登録商標）、ＭＩＰＳ（登録商標）、Ｓｔｒｏｎｇ（登録商標）／ＡＲＭ（登録商標）又はＲＩＳＣアーキテクチャに基づくプロセッサを含んでいてもよい。
【００７３】
ホストプロセッサ１１０は、インテル又はＡＭＤｘ８６アーキテクチャ、インテルＩｔａｎｉｕｍ（登録商標）アーキテクチャ、ＭＩＰＳ（登録商標）アーキテクチャ、ＳＰＡＲＣ（登録商標）アーキテクチャ等に基づくプロセッサを含む汎用プロセッサを含むことができる。
【００７４】
後述するように、図１のシステムによって実行されるような処理を実行する従来のシステムは、複数の処理コア上で動作する複数のスレッド上で実行することができる。このようにタスクを複数のスレッドコンテキストに並列化することによって、スループットを高めることができる。ＭＩＰＳ（登録商標）等のプロセッサアーキテクチャは、１サイクルあたりのインストラクションの数を多くするために、深いインストラクションパイプラインを含んでいてもよい。
【００７５】
更に、マルチスレッドプログラミング環境を実現する能力によって、既存のプロセッサリソースをより効率的に利用することができる。ハードウェア上の並列実行を更に向上させるために、プロセッサアーキテクチャは、複数のプロセッサコアを含んでいてもよい。
【００７６】
同じタイプのコアを含むマルチコアアーキテクチャは、均質コア（homogeneous core）アーキテクチャと呼ばれ、スレッド又はプロセスを複数のコアに亘って並列化することによって、より高いインストラクションスループットを提供する。しかしながら、このような均質コアアーキテクチャでは、メモリ等の共用リソースは、少数のプロセッサで消費される。
【００７７】
更に他の実施形態では、ラック又は個々のサーバ上に設けられた個々のラックユニット又はブレードに接続された複数のモジュール上に複数のオフロードプロセッサ又はホストプロセッサを設けてもよい。これらは、更にクラスタ及びデータセンタにグループ化することができる。なお、これらは、空間的に、同じ建物又は同じ都市内に位置していてもよく、それぞれ異なる国にあってもよい。また、これらは、如何なるグループ化レベルを相互に接続してもよく、及び／又は公共又は個人用のクラウドインターネットに接続してもよい。
【００７８】
このような従来の手法では、メモリ及び入出力アクセスが大量のプロセッサオーバヘッドを引き起こすことがある。更に、上述したように、従来の汎用処理ユニットのコンテキスト切換は、演算の負荷が大きい。
【００７９】
したがって、プロセッサスループットを向上させるために、ネットワーク接続された複数のアプリケーションを扱うネットワーク接続された演算リソースにおいて、コンテキスト切換オーバーヘッドを低減することが望ましい。
【００８０】
従来のサーバ負荷は、多くの場合、例えば、ＨＴＭＬ、ビデオ、パケットレベルサービス、セキュリティ及び分析等のライトタッチ処理であっても、複雑なトランスポート、広いメモリ帯域幅、（ランダムにアクセスされ、並列化され、高度に使用可能な）過剰な量のデータ帯域幅を必要とすることがある。更に、アイドルプロセッサが、そのピーク電力消費の５０％以上を消費している。
【００８１】
これに対し、図１に示す実施形態又はその均等物では、「ライトタッチ」処理負荷に関連する複雑なトランスポート、広いデータ帯域幅、頻繁なランダムアクセスは、複数のオフロードプロセッサ１１８のプロセッサコア上で作成されるソケットアブストラクションの背後で取り扱うことができる。同時に、「ヘビータッチ」高負荷演算は、ホストプロセッサ１１０のプロセッサコア（例えば、ｘ８６プロセッサコア）上のソケットアブストラクションによって取り扱うことができる。
【００８２】
このようなソフトウェアソケットによって、ライトタッチ（例えば、ＡＲＭ（登録商標））プロセッサコアと、ヘビータッチ（例えば、ｘ８６プロセッサコア）との間でこれらの負荷を自然に区分けすることができる。実施形態に基づく新しいアプリケーションレベルソケットの使用によって、オフロードプロセッサ１１８及びホストプロセッサ１１０に亘ってサーバ負荷を分散させることができる。
【００８３】
ここに開示する実施形態の動作を明瞭にするため、図２及び図３を参照して、従来のキャッシュスキームを説明する。仮想メモリを実装する現代のオペレーティングシステムは、プロセスのために仮想メモリ及び物理メモリの両方の割当を行い、この結果、プロセス実行の際に仮想メモリから物理メモリへの変換及び仮想的にアドレス指定されたメモリへのアクセスが行われる。
【００８４】
プロセスのためのメモリの管理では、仮想アドレス範囲の割当と、仮想アドレスによってマッピングされる対応する物理アドレスとの間での調整は、通常、行われない。このような調整の欠如は、プロセスが実行される際に、プロセッサキャッシュオーバヘッド及び有効性の両方に影響する。
【００８５】
従来のシステムでは、プロセッサは、実行中の各プロセスのために仮想メモリ内で連続するメモリページを割り当てる。また、プロセッサは、物理メモリ内のページも割り当てるが、これらは、必ずしも連続しない。２つのアドレッシングスキーム間で変換トランスレーションスキームを確立し、仮想メモリのアブストラクションが物理メモリページによって正しくサポートされることを確実にする。
【００８６】
プロセッサは、プロセッサの近くに設けられたキャッシュブロックを用いて、データを速やかに処理する要求を満たす。従来のキャッシュは、階層的に構成することができる。例えば、レベル１（Ｌ１）キャッシュがプロセッサに最も近く、これにＬ２、Ｌ３等が続く。Ｌ２は、Ｌ１のバックアップとして機能する。プロセスの物理アドレスの一部によってインデクスキャッシュについては、メモリ管理ユニット（ＭＭＵ）ページのサイズを超えるアドレス範囲に亘って仮想メモリと物理メモリの割当の間に相関性が欠如していると、プロセッサキャッシュが無計画で非効率なものとなる。これによってキャッシュオーバヘッドが増大し、コンテキスト切換動作の間に遅延が生じる。
【００８７】
物理的にアドレス指定されるキャッシュでは、仮想メモリ内の次のページのためのキャッシュエントリが、キャッシュ内の次の連続するページに対応していないことがあり、したがって、達成される総合性能が低下することがある。例えば、図２では、仮想メモリ１３０の連続するページ（プロセス１のページ１，２）は、物理メモリ１３２内の物理アドレスが（プロセッサの）物理インデクスキャッシュ１３４の同じ位置を指しているため、キャッシュ内で競合している。すなわち、プロセッサキャッシュ（１３４）には、物理インデクスが付されており、物理メモリ１３２内の複数のページの複数のアドレスがプロセッサキャッシュの同じページへのインデクスを有している。
【００８８】
更に、複数のプロセスが共有されているキャッシュにアクセスする場合、ＯＳがプロセスに物理メモリを割り当てる際の総合的なキャッシュ性能が考慮されていないことが多い。このような考慮がなされていないために、コンテキスト切換の間に異なるプロセス（例えば、図２におけるプロセス１及びプロセス２）がキャッシュ内でスラッシングを生じ、これによって、お互いのラインが不必要に移動し、この結果、プロセスを再開する際に不定数のキャッシュミス／フィルが生じ、又はコンテキスト切換の際のラインライトバックの数が増加する。
【００８９】
図３に示す他の従来の構成では、プロセスの仮想アドレスの一部によって、別の手法でプロセッサキャッシュにインデクスを付すことができる。仮想インデクスキャッシュ（virtually indexed cache）は、プロセッサの仮想アドレスのビットのセクションを用いてアクセスされる。
【００９０】
図３に示すように、仮想メモリ１３０内で連続するページは、仮想インデクス付けされたキャッシュ１３６内でも連続する。プロセッサキャッシュに仮想インデクスを付す際には、物理メモリ１３２の割当と仮想アドレスの割当との調整に注意を払う必要はない。プログラムは、仮想アドレス範囲をスイープしながら、プロセッサキャッシュ内の空間的位置の利益を享受する。このようなセットアソシアティブキャッシュ（set-associative cache）は、インデクスに対応する複数のエントリを有することができる。所与のキャッシュインデクスにマッピングされる所与のページは、特定のセット内のどこにあってもよい。
【００９１】
キャッシュエントリが使用できる位置が複数ある場合、セットアソシアティブキャッシュによって、プロセッサがキャッシュ内でエントリを可能な限り長く使用するように努めるため、（図２に示すように）コンテキスト切換の際にキャッシュ内にスラッシングを生じさせる問題は、ある程度軽減される。このために、キャッシュは、最低使用頻度（least recently used）アルゴリズムを採用する。
【００９２】
この結果、オペレーティングシステムが従う仮想アドレス指定スキームに関連する幾つかの問題が緩和されるが、キャッシュのサイズに制約が生じる。したがって、最近使用したエントリが無効にされ／フラッシュされないことを確実にするため、より大きい、マルチウェイセットアソシアティブキャッシュが必要とされる場合がある。マルチウェイセットアソシアティブキャッシュの比較回路は、並列比較に対応するために複雑になる場合があり、これによって、キャッシュに関連する回路レベルの複雑性が高まる。
【００９３】
従来のオペレーティングシステムの幾つかでは、仮想アドレス指定スキームに起因するキャッシュミスの問題に対処するために「ページカラーリング（page coloring）」と呼ばれるキャッシュ制御方式を採用している。プロセッサキャッシュに物理インデクスが付された場合、オペレーティングシステムは、同じカラーのキャッシュ内の位置にインデクスが付されていない物理メモリ位置を検索するように制約される。
【００９４】
このようなキャッシュ制御スキームの下では、オペレーティングシステムは、物理インデクスキャッシュ（physically indexed cache）内のハッシュしたインデクスに基づいて、全ての仮想アドレスについて、使用可能な物理メモリ内のページを評価する必要がある。幾つかの物理アドレスは、導出されたインデクスが同じカラーのものであるために許可されない。
【００９５】
したがって、物理インデクスキャッシュについて、仮想メモリ内の全てのページがカラーリングされ、対応するキャッシュ位置を特定し、次のページを物理メモリに、したがって、同じカラーのキャッシュ位置に割り当てるかを判定する。
【００９６】
このプロセスは、ページ毎に繰り返され、煩雑な作業となることがある。ページカラーリングによって、キャッシュ効率が向上するが、最近使用したページが上書きされないように各ページのカラーを識別する必要があるため、メモリ管理及び変換ユニット上のオーバーヘッドが増大する。これに応じて、キャッシュ内の前の仮想メモリページのカラーのインジケータを維持する必要であるので、オペレーティングシステムの複雑性のレベルが高くなる。
【００９７】
仮想インデクスキャッシュでは、キャッシュアクセス遅延が大きいにもかかわらず、エイリアシングが広がる問題がある。エイリアシングの場合、物理メモリの同じページにマッピングされる（異なるインデクスを有する）複数の仮想アドレスが（インデクスが異なるために）キャッシュ内の別の場所にある。ページカラーリングによって、仮想ページ及び物理ページが同じカラーを有することができ、したがって、キャッシュ内で同じセットを占める。
【００９８】
ページカラーリングによって、エイリアスは、キャッシュ内の同じラインと同じ上位ビット及びインデクスを共有する。これによって、エイリアシングの問題が解消される。また、ページカラーリングは、メモリ割当に制約を生じさせる。新しい物理ページをページフォールト（page fault）に割り当てる場合、メモリ管理アルゴリズムは、仮想カラーとして同じカラーのページを空きリストから選択しなければならない。システムは、仮想領域を系統的に割り当てるので、異なるプログラムのページが同じカラーを有しやすく、したがって、ある物理的カラーが他のカラーより頻度が高くなることもある。
【００９９】
したがって、ページカラーリングは、ページフォールトレートに影響を与えることがある。更に、幾つかの物理的カラーが優勢になると、物理アドレスによってアクセスされる２次キャッシュにおいてプログラム間でマッピング競合が生じやすくなる。このように、ここに説明した従来のページカラーリングの手法では、プロセッサが非常に大きな問題に直面する。仮想ページのそれぞれは、物理メモリ内の異なるページを占有することができ、したがって、これらは、異なるキャッシュカラーを占有するが、プロセッサは、全てのページのそれぞれのアドレス変換を保存する必要がある。
【０１００】
プロセスが十分大きく、各プロセスが複数の仮想ページを含む場合、ページカラーリングアルゴリズムは、非常に複雑になる。また、これによって、プロセッサの仮想メモリのページ毎に同等な物理アドレスを特定する必要があるため、ＴＬＢ側でも処理が複雑になる。コンテキスト切換は、ＴＬＢエントリを無効にする傾向があるので、プロセッサは、ページウォークを行い、ＴＬＢエントリを満たす必要があり、これによって、通常のコンテキスト切換に不確定性及び遅延が追加される。
【０１０１】
このようにして、一般的に入手可能な従来のオペレーティングシステムでは、コンテキスト切換の結果、キャッシュ内で競合が生じ、及びプロセス／スレッドが再開されたときにＴＬＢミスが生じる。プロセス／スレッドが再開すると、スレッドのワーキングセットがキャッシュにリロードされるので、不確定の数の命令及びデータキャッシュミスが生じる（すなわち、スレッドがユーザ領域内で再開され、命令を実行すると、命令は、通常、アプリケーションデータと共に、キャッシュにロードする必要がある）。
【０１０２】
スイッチイン（すなわち、プロセス／スレッドの再開）において、ＴＬＢマッピングは、その目的で予約されたレジスタに書き込まれている新しいスレッドのページテーブルに基づいて、完全又は部分的に無効にすることができる。スレッドが実行されると、ＴＬＢミスの結果（ハードウェア又はソフトウェアによる）ページテーブルウォークが行われ、この結果、ＴＬＢフィルの状態となる。
【０１０３】
これらのＴＬＢミスのそれぞれは、例外（例えば、ページテーブルウォークを実行する際にメモリアクセスによって生成されるオーバーヘッド並びにページテーブルがキャッシュにない場合、関連するキャッシュミス／メモリ負荷）に起因するパイプラインストール（pipeline stall）を含むハードウェアコストを有する。
【０１０４】
これらのコストは、プロセッサ内で、プロセスの連続するラン間で行われている処理に依存し、したがって、固定されたコストではない。更に、これらの追加的な遅延がコンテキスト切換のコストに加えられ、プロセスの実行の効率が低下する。このように、以上で説明したキャッシュ制御方式は、処理時間、メモリ要求又は他のオペレーティングシステムが制御するリソースに関して不確定（non-deterministic）であり、システム動作の全体的な効率を低下させている。
【０１０５】
図４は、実施形態に基づくキャッシュ制御システムを示している。キャッシュ制御システムでは、セッションコンテンツは、物理インデクスキャッシュ１３４’内で連続することができる。この実施形態は、変換スキームを用いて、仮想メモリ１３０内のセッションの連続するページが物理インデクスキャッシュ１３４内でも物理的に連続するようにできる。
【０１０６】
上述した不確定的なキャッシュ制御方式に比べて、少なくともコンテキスト切換動作の継続時間を確定的にすることができる。この実施形態では、前のプロセスのコンテキストを新しいプロセスのコンテキストに置き換えることは、図１のコンテキストメモリ１２０等の外部の低遅延メモリから新しいプロセスのコンテキストを転送することを含む。
【０１０７】
コンテキスト切換のプロセスにおいて、（アクセスによって大きな遅延が生じる可能性がある場合）システムのメインメモリへのアクセスを回避できる。プロセスコンテキストは、コンテキストメモリ１２０（これは、低遅延メモリであってもよい。）からプリフェッチされる。
【０１０８】
他のコンテキスト切換に必要である場合、プロセスコンテキストは、再びコンテキストメモリ１２０に保存してもよい。このようにして、サイクル数及び実行する必要がある動作の数によってコンテキスト切換動作を定義できるので、確定的なコンテキスト切換を達成することができる。更に低遅延メモリを用いて、コンテキストデータを保存することによって、速やかなコンテキスト切換を行うことができる。
【０１０９】
図５〜図１０は、上述したコンテキスト切換を含むことができるモジュールのハードウェアによる実施形態の側面を示している。特定の実施形態では、このような処理モジュールは、ＤＩＭＭ搭載可能モジュールを含むことができる。
【０１１０】
図５は、一実施形態に基づく処理モジュール２００のブロック図である。処理モジュール２００は、物理コネクタ（後述する「インラインモジュールコネクタ」であり、単に「コネクタ」ともいう）２０２、メモリインタフェース２０４、調停ロジック２０６、オフロードプロセッサ２０８、ローカルメモリ２１０及び制御ロジック２１２を含むことができる。コネクタ２０２は、システムメモリバスへの物理接続を提供できる。これに対し、ホストプロセッサは、メモリコントローラ等を介してシステムメモリバスにアクセスできる。
【０１１１】
特定の実施形態では、コネクタ２０２は、コンピュータシステムのデュアルインラインメモリモジュール（dual in-line memory module：ＤＩＭＭ）スロットに互換性を有することができる。したがって、複数のＤＩＭＭスロットを含むシステムは、１つ以上の処理モジュール２００を備えていてもよく、又は処理モジュール及びＤＩＭＭモジュールの組み合わせを備えていてもよい。
【０１１２】
メモリインタフェース２０４は、システムメモリバス上のデータ転送を検出でき、適切な場合、処理モジュール２００に書込データを保存し及び／又は処理モジュール２００から読出データを読み出すことができる。このようなデータ転送は、特定のネットワーク識別子を有するパケットデータの受信を含むことができる。幾つかの実施形態では、メモリインタフェース２０４は、スレーブインタフェースであってもよく、この場合、データ転送は、処理モジュール２００とは別に設けられているマスタデバイスによって制御される。
【０１１３】
特定の実施形態では、メモリインタフェース２０４は、ダイレクトメモリアクセス（direct memory access：ＤＭＡ）スレーブであってもよく、ＤＭＡマスタによって開始されたシステムメモリバスを介するＤＭＡ転送を担ってもよい。幾つかの実施形態では、ＤＭＡマスタは、ホストプロセッサとは異なるデバイスであってもよい。このような構成では、処理モジュール２００は、ホストプロセッサリソースを消費することなく、処理すべきデータを受け取り（例えば、ＤＭＡ書込）、及び処理されたデータを送り出す（例えば、ＤＭＡ読出）ことができる。
【０１１４】
調停ロジック２０６は、処理モジュール２００内でのデータアクセスの競合を調停することができる。幾つかの実施形態では、調停ロジック２０６は、オフロードプロセッサ２０８によるアクセスと、処理モジュール２００の外部のアクセスとの間で調停を行うことができる。
【０１１５】
なお、処理モジュール２００は、同時に動作する複数の箇所を含むことができる。なお、調停ロジック２０６によって調停されるアクセスは、処理モジュール２００によって占有される物理システムメモリ領域へのアクセス及び他のリソース（例えば、オフロードプロセッサ又はホストプロセッサのキャッシュメモリ）へのアクセスを含むことができる。
【０１１６】
したがって、調停ロジック２０６のための調停規則は、アプリケーションに応じて異ならせることができる。
【０１１７】
幾つかの実施形態では、このような調停規則は、所与の処理モジュール２００のために固定されている。このような場合、異なる処理モジュールを切り替えることによって、異なるアプリケーションに対応することができる。また、他の実施形態として、このような調停規則を変更可能にしてもよい。
【０１１８】
オフロードプロセッサ２０８は、システムメモリバスを介して転送されるデータを処理できる１つ以上のプロセッサを含むことができる。幾つかの実施形態では、オフロードプロセッサは、汎用オペレーティングシステム又はサーバアプリケーション、例えば、Ａｐａｃｈｅ（登録商標）（特定の一具体例に過ぎない）等を実行し、プロセッサコンテキストを保存し及び読み出すことができる。
【０１１９】
オフロードプロセッサ２０８によって実行される演算タスクは、ハードウェアスケジューラによって管理することができる。オフロードプロセッサ２０８は、処理モジュール２００にバッファリングされたデータを処理することができる。これに加えて又はこれに代えて、オフロードプロセッサ２０８は、システムメモリ領域の他の場所に保存されたデータにアクセスできる。
【０１２０】
幾つかの実施形態では、オフロードプロセッサ２０８は、コンテキスト情報を保存するように構成されたキャッシュメモリを含むことができる。オフロードプロセッサ２０８は、複数のコア又は１つのコアを含むことができる。
【０１２１】
処理モジュール２００は、ホストプロセッサを有するシステム（図示せず）に含ませてもよい。幾つかの実施形態では、オフロードプロセッサ２０８は、ホストプロセッサとは異なるタイプのプロセッサであってもよい。
【０１２２】
特定の実施形態では、オフロードプロセッサ２０８は、ホストプロセッサに比べて、消費電力が小さく及び／又は演算パワーが低くてもよい。特定の実施形態では、オフロードプロセッサ２０８は、「非力な（wimpy）」コアプロセッサであってもよく、ホストプロセッサは、「強力な（brawny）」コアプロセッサであってもよい。また、他の実施形態では、オフロードプロセッサ２０８は、あらゆるホストプロセッサと同等な演算能力を有していてもよい。
【０１２３】
特定の実施形態では、ホストプロセッサは、ｘ８６タイプのプロセッサであってもよく、オフロードプロセッサ２０８は、ＡＲＭ（登録商標）、ＡＲＣ（登録商標）、Ｔｅｎｓｉｌｉｃａ（登録商標）、ＭＩＰＳ（登録商標）、Ｓｔｒｏｎｇ（登録商標）／ＡＲＭ（登録商標）又はＲＩＳＣタイププロセッサであってもよく、これらは僅かな具体例に過ぎない。
【０１２４】
ローカルメモリ２１０をオフロードプロセッサ２０８に接続して、コンテキスト情報を保存できるようにしてもよい。これによって、オフロードプロセッサ２０８は、現在のコンテキスト情報を保存し、新しい演算タスクへの切換を行った後、コンテキスト情報を読み出して、前のタスクを再開することができる。特定の実施形態では、ローカルメモリ２１０は、システム内の他のメモリに比べて遅延が小さいメモリであってもよい。
【０１２５】
幾つかの実施形態では、コンテキスト情報の保存は、オフロードプロセッサ２０８のキャッシュをコピーすることを含む。
【０１２６】
幾つかの実施形態では、同じタイプの複数のオフロードプロセッサ２０８がローカルメモリ２１０内の同じ領域にアクセスできる。これによって、１つのオフロードプロセッサによって保存されたコンテキストを、異なるオフロードプロセッサが再開することもできる。
【０１２７】
制御ロジック２１２は、オフロードプロセッサ２０８が実行する処理タスクを制御できる。
【０１２８】
幾つかの実施形態では、制御ロジック２１２は、データ評価器２１４、スケジューラ２１６及び切換コントローラ２１８を含むものと概念化できるハードウェアスケジューラとみなすことができる。データ評価器２１４は、システムメモリバスを介して転送される書込データから「メタデータ」を抽出することができる。ここで用いる「メタデータ」という用語は、書込データのブロックの１つ以上の所定の位置に埋込まれ、書込データのブロックの全て又は一部について実行すべき処理を示し、及び／又はデータが属する特定のタスク／プロセス（例えば、分類データ）を示すあらゆる情報を含む。幾つかの実施形態では、メタデータは、書込データのブロックのためのより高レベルの組織化を示すデータであってもよい。
【０１２９】
特定の実施形態では、メタデータは、１つ以上のネットワークパケットのヘッダ情報であってもよい（ヘッダ情報は、より上位のレイヤのパケット構造内にカプセル化してもよい）。
【０１３０】
スケジューラ２１６（例えば、ハードウェアスケジューラ）は、オフロードプロセッサ２０８のための演算タスクを順序付けることができる。幾つかの実施形態では、スケジューラ２１６は、スケジュールを生成でき、スケジュールは、処理すべき書込データが受信される都度、継続的に更新される。特定の実施形態では、スケジューラ２１６は、オフロードプロセッサ２０８のコンテキスト切換の能力に基づいて、このようなスケジュールを生成することができる。これによって、モジュール上の演算の優先順位をオンザフライ（on the fly）方式で調整できる。
【０１３１】
特定の実施形態では、スケジューラ２１６は、演算タスクに応じて、物理アドレス領域（例えば、ローカルメモリ２１０内のメモリ位置）の一部をオフロードプロセッサ２０８に割り当てることができる。そして、オフロードプロセッサ２０８は、このような異なる領域間の切換を行い、各切換の前にコンテキスト情報を保存し、後に、メモリ領域に戻る際に、コンテキスト情報を復元することができる。
【０１３２】
切換コントローラ２１８は、オフロードプロセッサ２０８の演算処理を制御できる。特定の実施形態では、切換コントローラ２１８は、スケジューラ２１６に基づき、オフロードプロセッサ２０８にコンテキストを切換えさせることができる。なお、コンテキスト切換動作は、切換コントローラ２１８からの単一のコマンドに応じて実行される「アトミック（atomic）」な動作であってもよい。これに加えて又はこれに代えて、切換コントローラ２１８は、現在のコンテキスト情報を保存する、コンテキスト情報を復元する等の命令セットを発行できる。
【０１３３】
幾つかの実施形態では、処理モジュール２００は、バッファメモリ（図示せず）を含むことができる。バッファメモリは、受信した書込データを処理モジュール上に保存できる。バッファメモリは、完全に異なるメモリデバイスのセット上で実現してもよく、ロジック及び／又はオフロードプロセッサに埋込まれたメモリであってもよい。埋込型のメモリの場合、調停ロジック２０６は、バッファメモリへのアクセスを調停できる。
【０１３４】
幾つかの実施形態では、バッファメモリは、システムの物理メモリ領域の一部に対応できる。システムメモリ領域の残りの部分は、同様の他の処理モジュールに対応していてもよく、及び／又は同じシステムメモリバスに接続されたメモリモジュールに対応していてもよい。
【０１３５】
幾つかの実施形態では、バッファメモリは、ローカルメモリ２１０とは異なっていてもよい。例えば、バッファメモリのアクセス時間は、ローカルメモリ２１０より長くてもよい。また、他の実施形態として、バッファメモリ及びローカルメモリを同様のメモリデバイスで実現してもよい。
【０１３６】
特定の実施形態では、処理のための書込データは、予想された最大フローレートを有することができる。処理モジュール２００は、このようなフローレートで、又はこのようなフローレートより速く、このようなデータを処理するように構成できる。これによって、マスタデバイス（図示せず）は、「プロセス内で」データを上書きしてしまう危険なしで、処理モジュールにデータを書き込むことができる。
【０１３７】
処理モジュール２００の様々な演算要素は、１つ以上の集積回路デバイス（ＩＣ）として実現することができる。なお、図５に示す様々なコンポーネントは、同じ又は異なるＩＣで構成してもよい。例えば、制御ロジック２１２、メモリインタフェース２０４及び／又は調停ロジック２０６を１つ以上のロジックＩＣ上で実現してもよく、オフロードプロセッサ２０８及びローカルメモリ２１０は、独立したＩＣであってもよい。ロジックＩＣは、固定ロジック（例えば、特定用途向けＩＣ）であってもよく、プログラマブルロジック（例えば、フィールドプログラマブルゲートアレイ（field programmable gate array：ＦＰＧＡ））であってもよく、これらの組合せであってもよい。
【０１３８】
以上のハードウェア及びシステムは、従来のコンピュータシステムに比べて、演算性能が向上するという利点を有する。ｘ８６プロセッサに基づくシステムを含む従来のシステムは、このような高ボリュームアプリケーションに対応する性能が不十分であることも多い。ｘ８６プロセッサは、アイドリング状態であってもかなりの量の電力を消費し、広帯域パケット解析又は他の高ボリューム処理タスクのための略々連続的な動作によって、プロセッサエネルギコストが主要なプライス要素となる。
【０１３９】
更に、従来のシステムは、コンテキスト切換のコストが高いという問題を有し、ホストプロセッサが実行する必要がある命令は、１つのスレッドから他のスレッドへの切換えを含み得る。このような切換は、スレッドのためにコンテキストを保存し及び復元する必要が生じる。このようなコンテキストデータがホストキャッシュメモリにある場合、このようなコンテキスト切換は、比較的高速に行うことができる。一方、このようなコンテキストデータがキャッシュメモリにない場合（すなわち、キャッシュミス）、システムメモリからデータを読み込む必要があり、これによって、数サイクル分の遅延が生じることがある。コンテキスト切換の間にキャッシュミスが連続すると、システム性能が低下する場合がある。
【０１４０】
図６は、従来の多くのサーバシステムで生じる高ボリューム処理又はコンテキスト切換に関連する問題を低減できる１つの特定の実施形態に基づく処理モジュール２００−１を示している。処理モジュール２００−１は、プリント回路板（ＰＣＢ）タイプ基板２２２に搭載されるＩＣ２２０−０／１を含むことができる。ＰＣＢタイプ基板２２２は、インラインモジュールコネクタ（in-line module connector）２０２を含むことができ、インラインモジュールコネクタ２０２は、特定の実施形態では、ＤＩＭＭ互換コネクタであってもよい。ＩＣ２２０−０は、複数の機能が統合されたシステムオンチップ（system-on-chip：ＳｏＣ）タイプのデバイスであってもよい。
【０１４１】
ここに示す特定の実施形態では、ＩＣ２２０−０は、埋込プロセッサ、ロジック及びメモリを含むことができる。このような埋込プロセッサは、上述したオフロードプロセッサ２０８又はその均等物であってもよい。このようなロジックは、上述した制御ロジック２１２、メモリインタフェース２０４及び／又は調停ロジック２０６又はこれらの均等物であってもよい。このようなメモリは、上述したローカルメモリ２１０、オフロードプロセッサ２０８のためのキャッシュメモリ、バッファメモリ又はこれらの均等物であってもよい。ロジックＩＣ２２０−１は、ロジックＩＣ２２０−０に含まれていないロジック機能を提供できる。
【０１４２】
図７は、他の特定の実施形態に基づく処理モジュール２００−２を示している。処理モジュール２００−２は、図６と同様のＰＣＢタイプ基板２２２に搭載されるＩＣ２２０−２，−３，−４，−５を含むことができる。但し、図６とは異なり、処理モジュール機能は、複数の単目的タイプのＩＣに亘って分散されている。ＩＣ２２０−２は、プロセッサＩＣであってもよく、オフロードプロセッサ２０８であってもよい。
【０１４３】
ＩＣ２２０−３は、メモリＩＣであってもよく、ローカルメモリ２１０、バッファメモリ又はこれらの組合せを含んでいてもよい。ＩＣ２２０−４は、ロジックＩＣであってもよく、制御ロジック２１２を含んでいてもよく、特定の実施形態では、ＦＰＧＡであってもよい。ＩＣ２２０−５は、他のロジックＩＣであってもよく、メモリインタフェース２０４及び調停ロジック２０６を含んでいてもよく、特定の実施形態では、これも、ＦＰＧＡであってもよい。
【０１４４】
なお、図６及び図７は、様々な具体例のうちの２つを例示しているに過ぎない。単一ＳｏＣタイプＩＣを含む適切な如何なる数のＩＣに亘って、処理モジュールの様々な機能を分散させてもよい。
【０１４５】
図８は、特定の実施形態に基づく処理モジュール２００−１又は処理モジュール２００−２の反対面を示している。処理モジュール２００−３は、図６と同様に、ＰＣＢタイプ基板２２２に搭載された、１つを２２０−６として示す複数のメモリＩＣを含むことができる。なお、ここに示す反対面には、様々な処理及びロジックコンポーネントを搭載できる。メモリＩＣ２２０−６は、システムの物理メモリ領域の一部を表すように構成してもよい。
【０１４６】
メモリＩＣ２２０−６は、他の処理モジュールコンポーネントから独立して、従来の手法でアクセスされるシステムメモリを提供し、他の処理モジュールコンポーネントが処理できる書込データを保存するバッファメモリとして機能し、又はプロセッサコンテキスト情報を保存するローカルメモリとして機能する等の機能の何れか又は全てを実行できる。
【０１４７】
図９は、上述した処理モジュール又はその均等物と共にメモリバスに接続される（メモリ機能のみを提供する）従来のＤＩＭＭモジュールを示している。
【０１４８】
図１０は、一実施形態に基づくシステム２３０を示している。システム２３０は、（１つを２２６として示す）複数のインラインモジュールスロットを介してアクセス可能なシステムメモリバス２２８を含むことができる。実施形態においては、スロット２２６の何れか又は全てには、上述した処理モジュール２００又はその均等物を挿入してもよい。全てのスロット２２６に処理モジュール２００を挿入しない場合、使用可能なスロットには、従来のインラインメモリモジュール２２４を挿入してもよい。特定の実施形態では、スロット２２６は、ＤＩＭＭスロットであってもよい。
【０１４９】
幾つかの実施形態では、処理モジュール２００は、１つのスロットに挿入してもよい。また、他の実施形態では、処理モジュールは、複数のスロットを占有してもよい。
【０１５０】
更に、幾つかの実施形態では、システムメモリバス２２８に１つ以上のホストプロセッサ及び／又は入出力デバイス（図示せず）を接続してもよい。
【０１５１】
以上、様々な実施形態に基づく処理モジュールについて説明したが、以下では、特定の実施形態に基づく、メモリバスを介してサーバ又は同様のシステムに接続することができるオフロード処理モジュールの動作について説明する。
【０１５２】
図１１は、実施形態に基づき、オフロードプロセッサにおいてコンテキスト切換を実行できるシステム３０１を示している。この具体例では、システム３０１は、モジュール上に配置されている（１つを３００として示す）１つ以上の演算ユニットにパケットデータを転送でき、このモジュールは、特定の実施形態では、既存のメモリモジュールと互換性があるコネクタを含むことができる。
【０１５３】
幾つかの実施形態では、演算ユニット３００は、この実施形態に説明する処理モジュール又はその均等物を含むことができる。演算ユニット３００は、メモリバス（「システムバス」又は「システムメモリバス」ともいう）３１６を介して伝送されるパケットを捕捉し又はアクセスすることができ、このようなパケットに対し、以下に限定されるものではないが、終端又はメタデータ処理を含む処理を施すことができる。システムメモリバス３１６は、上述したシステムメモリバス（例えば、２２８）又はその均等物であってもよい。
【０１５４】
図１１に示すように、システム３０１は、外部ソースからパケット又は他の入出力データを受け取ることができる入出力デバイス３０２を含むことができる。幾つかの実施形態では、入出力デバイス３０２は、物理デバイスが生成する物理的又は仮想機能を含み、ネットワーク、他のコンピュータ又は仮想マシンからパケット又は他の入出力データを受信することができる。ここに示す特定の実施形態では、入出力デバイス３０２は、入力バッファ３０２ａ（例えば、ＤＭＡリングバッファ）及び入出力仮想化機能（プログラム）３０２ｂを有するネットワークインタフェースカード（network interface card：ＮＩＣ）を含むことできる。
【０１５５】
ある実施形態では、入出力デバイス３０２は、パケットのために必要なメモリ動作の詳細（すなわち、読出／書込、ソース／宛先）を含むデスクリプタを書くことができる。このようなデスクリプタには、（例えば、システム３０１のオペレーティングシステムによって）仮想メモリ位置を割り当てることができる。そして、入出力デバイス３０２は、入出力メモリ管理ユニット（input output memory management unit：ＩＯＭＭＵ）３０４と通信し、ＩＯＭＭＵ３０４は、ＩＯＭＭＵ機能３０４ｂによって仮想アドレスを対応する物理アドレスに変換することができる。
【０１５６】
ここに示す特定の実施形態では、このような変換のための変換ルックアサイドバッファ（translation look-aside buffer：ＴＬＢ）３０４ａを用いることができる。そして、入出力デバイスとシステムメモリ位置との間のデータの読出又は書込の仮想機能は、システム３０１のメモリコントローラ３０６ｂを介して、ダイレクトメモリ転送（例えば、ＤＭＡ）によって実行できる。入出力デバイス３０２は、ホストバス（例えば、ＰＣＩｅバス）３１２によって、ＩＯＭＭＵ３０４に接続できる。
【０１５７】
１つの特定の実施形態では、ホストバス３１２は、周辺機器コンポーネント相互接続（peripheral component interconnect：ＰＣＩ）タイプのバスであってもよい。ＩＯＭＭＵ３０４は、中央演算処理装置入出力（central processing unit I/O ：ＣＰＵＩＯ）３０６ａにおいて、ホスト処理セクション３０６に接続できる。ここに示す実施形態では、このような接続３１４は、ハイパートランスポート（HyperTransport：ＨＴ）プロトコルをサポートできる。
【０１５８】
ここに示す実施形態では、ホスト処理セクション３０６は、ＣＰＵＩＯ３０６ａ、メモリコントローラ３０６ｂ、処理コア（以下、「ホストプロセッサ」ともいう）３０６ｃ及び対応するプロビジョニングエージェント３０６ｄを含むことができる。
【０１５９】
特定の実施形態では、演算ユニット３００は、標準のインラインモジュール接続を介してシステムバス３１６に接続でき、このモジュール接続は、特定の実施形態では、ＤＩＭＭタイプスロットを含むことができる。
【０１６０】
ここに示す実施形態では、メモリバス３１６は、ＤＤＲ３タイプメモリバスであってもよい。他の実施形態は、適切な如何なるシステムメモリバスも含んでいてもよい。パケットデータは、メモリコントローラ３０６ｂによって、メモリバス３１６を介して、ＤＭＡスレーブインタフェース（以下、「ＤＭＡスレーブデバイスモジュール」、「ＤＭＡスレーブモジュール」又は「ＤＭＡデバイス」ともいう）３１０ａに送ることができる。ＤＭＡスレーブインタフェース３１０ａは、ＤＭＡ書込から、メモリバス３１６を介して、カプセル化された読出／書込命令を受信するように構成できる。
【０１６１】
ハードウェアスケジューラ（３０８ｂ／ｃ／ｄ／ｅ／ｈ）は、セッションメタデータを用いてフローに応じて受信パケットを分類することによって受信パケットに対するトラフィック管理を実行できる。パケットは、セッション優先順位に基づいて、オンボードメモリ（３１０ｂ／３０８ａ／３０８ｍ）の出力のためのキューに入れることができる。
【０１６２】
オフロードプロセッサ（以下、「汎用プロセッサ」又は「汎用処理要素」ともいう）３０８ｉが特定のセッションのためのパケットを処理する準備が整ったとハードウェアスケジューラが判断した場合、ハードウェアスケジューラは、そのセッションへのコンテキスト切換をオンボードメモリにシグナリングする。この優先順位付けの手法を用いることによって、従来の手法に比較して、コンテキスト切換オーバーヘッドを低減できる。すなわち、ハードウェアスケジューラは、コンテキスト切換を決定でき、この結果、ダウンストリームリソース（例えば、オフロードプロセッサ３０８ｉ）の性能を最適化することができる。
【０１６３】
上述のように、特定の実施形態では、オフロードプロセッサ３０８ｉは、「非力な（wimpy）」コアプロセッサであってもよい。幾つかの実施形態では、ホストプロセッサ３０６ｃは、「強力な（brawny）」コアプロセッサ（例えば、ｘ８６又「ヘビータッチ（heavy touch）」演算動作を行う能力を有する他のプロセッサ）であってもよい。入出力デバイス３０２は、受信パケットに応じて、ホストプロセッサ割込をトリガできるように構成できるが、幾つかの実施形態では、このような割込を無効にして、ホストプロセッサ３０６ｃの処理のオーバーヘッドを低減することができる。
【０１６４】
幾つかの特定の実施形態では、オフロードプロセッサ３０８ｉは、ＡＲＭ（登録商標）、ＡＲＣ（登録商標）、Ｔｅｎｓｉｌｉｃａ（登録商標）、ＭＩＰＳ（登録商標）、Ｓｔｒｏｎｇ（登録商標）／ＡＲＭ（登録商標）又は「ライトタッチ（light touch）」動作を扱う能力がある他の如何なるプロセッサであってもよく、好ましくは、オフロードプロセッサは、汎用オペレーティングシステムを動作させ、複数のセッションを実行することができ、これらのセッションは、ハードウェアスケジューラによって、コンテキスト切換オーバーヘッドを低減するように最適化されて動作する。
【０１６５】
図１１に示すように、実際の動作では、システム３０１は、ネットワークインタフェースを介して外部ネットワークからパケットを受信することができる。パケットは、分類ロジック及び入出力デバイス３０２が採用するスキームに基づいて、ホストプロセッサ３０６ｃ又はオフロードプロセッサ３０８ｉの何れかに宛てられる。
【０１６６】
特定の実施形態では、入出力デバイス３０２は、仮想化されたＮＩＣとして動作することができ、特定の論理ネットワークのためのパケット又はある仮想ＭＡＣ（virtual MAC：ＶＭＡＣ）アドレスへのパケットは、個別のキューに入れられ、宛先論理エンティティに送ることができる。このような構成では、パケットを異なるエンティティに転送することができる。幾つかの実施形態では、このようなエンティティのそれぞれは、仮想ドライバを有することができ、仮想デバイスモデルを用いて、接続された仮想ネットワークと通信することができる。
【０１６７】
幾つかの実施形態では、複数のデバイスを用いて、トラフィックを特定のメモリアドレスに向け直す（redirect）ことができる。したがって、ネットワークデバイスのそれぞれは、論理エンティティのメモリ位置にパケットを転送しているかのように動作する。しかしながら、実際には、このようなパケットは、１つ以上のオフロードプロセッサ（例えば、３０８ｉ）が処理できるメモリアドレスに転送されている。特定の実施形態では、このような転送は、物理メモリアドレスに宛てられ、したがって、処理から論理エンティティを取り除くことができ、ホストプロセッサは、このようなパケット処理から解放される。
【０１６８】
したがって、実施形態は、特定のネットワークデータを供給できるメモリ「ブラックボックス（black box）」を提供するものと概念化できる。このようなメモリブラックボックスは、データを取り扱い（例えば、データを処理し）、要求に応じて、このようなデータを返す。
【０１６９】
図１１に示すように、幾つかの実施形態では、入出力デバイス３０２は、ネットワーク又は演算デバイスからデータパケットを受け取ることができる。データパケットは、例えば、トランスポートプロトコル番号、ソース及び宛先ポート番号、ソース及び宛先ＩＰアドレス等を含むある特徴を有することができる。データパケットは、更に、メタデータを有することができ、メタデータの処理（３０８ｄ）は、パケットの分類及び管理に役立つ。
【０１７０】
入出力デバイス３０２は、以下に限定されるわけではないが、周辺機器コンポーネント相互接続（peripheral component interconnect：ＰＣＩ）規格と互換性を有するデバイス及び／又はＰＣＩ又はＰＣＩｅバス（例えば、３１２）を介してホストマザーボードに接続するＰＣＩエキスプレス（PCI express：ＰＣＩｅ）デバイスであってもよい。入出力デバイスの具体例としては、ネットワークインタフェースコントローラ（network interface controller：ＮＩＣ）、ホストバスアダプタ、集中型ネットワークアダプタ、切換型又は非同期伝送モード（asynchronous transfer mode：ＡＴＭ）ネットワークインタフェース等を含むことができる。
【０１７１】
複数の論理エンティティが同じ入出力デバイス３０２にアクセスできるアブストラクションスキームを提供するために、入出力デバイスを仮想化して、複数の仮想デバイスを提供し、それぞれの仮想デバイスが物理的入出力デバイスの幾つかの機能を実行できるようにしてもよい。実施形態に基づく入出力仮想化プログラム（例えば、３０２ｂ）は、異なるメモリ位置（したがって、メモリバス上のモジュールに取り付けられた異なるオフロードプロセッサ）にトラフィックを向け直すことができる。
【０１７２】
これを達成するために、入出力デバイス３０２（例えば、ネットワークカード）は、入出力仮想化（input/output virtualization：ＩＯＶ）アーキテクチャ（例えば、シングルルートＩＯＶ）をサポートする制御機能（controlling function：ＣＦ）及び複数の仮想機能（virtual function：ＶＦ）インタフェースを含む幾つかの機能的部分に区切ってもよい。専用使用のためのランタイムの間に各仮想機能インタフェースにリソースを提供できる。
【０１７３】
ＣＦ及びＶＦの具体例は、シングルルート入出力仮想化又はマルチルート入出力仮想化アーキテクチャ等のスキームに基づく物理機能及び仮想機能を含むことができる。ＣＦは、仮想リソースをセットアップ及び管理する物理リソースとして機能する。また、ＣＦは、完全な入出力デバイスとしても機能できる。ＶＦは、複数の論理エンティティ／複数のメモリ領域と通信するために仮想デバイスのアブストラクションを提供する役割を有している。
【０１７４】
ホストプロセッサ３０６ｃ上で動作しているオペレーティングシステム／ハイパーバイザ／何れかの仮想マシン／ユーザコードをデバイスモデル、ＶＦドライバ及びＣＦのためのドライバにロードしてもよい。デバイスモデルを用いて、物理デバイスのエミュレーションを作成し、作成された複数のＶＦのそれぞれをホストプロセッサ３０６ｃが認識できるようにしてもよい。デバイスモデルを複数回複製し、ＶＦドライバ（仮想入出力デバイスとインタラクトするドライバ）が特定のタイプの物理デバイスとインタラクトしているように錯覚させてもよい。
【０１７５】
例えば、任意のデバイスモジュールを用いてインテル（Intel：登録商標）イーサネット（登録商標）集中型ネットワークアダプタ（Converged Network Adapter：ＣＮＡ）Ｘ５４０−Ｔ２等のネットワークアダプタをエミュレートすることによって、入出力デバイス３０２は、このようなアダプタとインタラクトしていると錯覚する。このような場合、各仮想機能は、上述したＣＮＡの機能をサポートする能力を有していてもよく、すなわち、各物理機能（Physical Function）は、このような機能をサポートできる。
【０１７６】
デバイスモデル及びＶＦドライバは、特権モード（privileged mode）又は非特権モード（non-privileged mode）の何れで実行してもよい。幾つかの実施形態では、デバイスモデル及びＶＦドライバに対応するコードを何がホストし／実行するかに関する制約はない。但し、コードは、入出力インタフェースの複数のコピーを作成できるようにするために、デバイスモデル及びＶＦドライバの複数のコピーを作成する能力を有する。
【０１７７】
アプリケーション／ユーザレベルコードの一部としてカーネル内で動作するアプリケーション又はプロビジョニングエージェント３０６ｄは、ランタイムの間に各ＶＦのための仮想入出力アドレス領域を作成し、これに物理アドレス領域の一部を割り当てることができる。
【０１７８】
例えば、ＶＦドライバを扱うアプリケーションがメモリアドレス０ｘａａａａからメモリアドレス０ｘｆｆｆｆにパケットを読み出し又は書き込むことを命令した場合、デバイスドライバは、ヘッド／テールポインタ（head and tail pointer）によってデスクリプタキューに入出力デスクリプタを書き込み、入出力デスクリプタは、キューエントリが追加される都度、動的に変更される。また、データ構造は、他のタイプのものであってもよく、以下に限定されるものではないが、リング構造（ＤＭＡリングバッファ）３０２ａ又はハッシュテーブルであってもよい。
【０１７９】
ＶＦは、ドライバによって指示されるアドレス位置からデータを読み出し、又はこのアドレス位置にデータを書き込むことができる。更に、ドライバに割り当てられたアドレス領域へのデータ転送が完了すると、通常、ネットワークパケットを扱うホストプロセッサにトリガされる割込を無効化できる。デバイスに特定の入出力空間を割り当てることは、占有される特定の物理メモリ領域を入出力空間に割り当てることを含むことができる。
【０１８０】
他の実施例においては、デスクリプタが受信パケットを処理するための特定のデータ構造に関連している場合、デスクリプタは、書込動作のみを含んでいてもよい。更に、受信データ構造内の各エントリのためのデスクリプタを一定にし、全てのデータ書込を特定のメモリ位置に向け直してもよい。他の実施形態では、連続するエントリのためのデスクリプタがメモリ内の連続するエントリを指示するようにし、受信パケットを連続するメモリ位置に方向付けるようにしてもよい。
【０１８１】
これに代えて、オペレーティングシステムは、ＶＦドライバをサポートするアプリケーションのための定義された物理アドレス領域を作成し、仮想メモリアドレス領域をアプリケーション又はプロビジョニングエージェント３０６ｄに割り当てることによって、各仮想機能のための仮想アドレスと物理アドレス領域との間のマッピングを作成してもよい。この仮想メモリアドレス領域と物理メモリ領域との間のマッピングは、ＩＯＭＭＵテーブル（例えば、ＴＬＢ３０４ａ）内に保存できる。
【０１８２】
メモリ読出又はメモリ書込を実行するアプリケーションは、仮想機能に仮想アドレスを供給でき、ホストプロセッサＯＳは、物理メモリ位置の特定の部分をこのようなアプリケーションに割り当てることができる。
【０１８３】
これに代えて、ＶＦは、読出又は書込、例えば、ダイレクトメモリアクセス（direct memory access：ＤＭＡ）読出又は書込動作の一部に関する要求を生成するように構成してもよい。仮想アドレスは、ＩＯＭＭＵ３０４によって対応する物理アドレスに変換され、アクセスのために物理アドレスをメモリコントローラに提供してもよい。
【０１８４】
すなわち、ＩＯＭＭＵ３０４は、入出力デバイスによって発せられたメモリ要求を修正して、要求内の仮想アドレスを物理アドレスに変更し、メモリアクセスのためのメモリ要求をメモリコントローラに送信してもよい。メモリ要求は、ハイパートランスポート（HyperTransport：ＨＴ）３１４等のプロトコルをサポートするバス３１４を介して送信してもよい。このような場合、ＶＦは、ＩＯＭＭＵ３０４に仮想メモリアドレスを供給することによってダイレクトメモリアクセスを実行する。
【０１８５】
これに代えて、ＶＦが許可する場合、アプリケーションは、物理アドレスをＶＦデスクリプタに直接的に符号化してもよい。ホストプロセッサ３０６ｃが使用する形式の物理アドレスをＶＦがサポートできない場合、ＶＦデバイスがサポートするハードウェアサイズを有するアパーチャをデスクリプタに符号化して、デバイスのターゲットハードウェアアドレスをＶＦに通知するようにしてもよい。
【０１８６】
アパーチャに変換されるデータは、変換テーブルによって、システムメモリ内の定義された物理アドレス領域にマッピングできる。ＤＭＡ動作は、プロセッサが実行するソフトウェアによって開始してもよく、直接的又は間接的に入出力デバイスをプログラミングして、ＤＭＡ動作を実行するようにしてもよい。
【０１８７】
図１１に示すように、特定の実施形態では、演算ユニット３００の一部は、１つ以上のＦＰＧＡによって実現することができる。図１１のシステムにおいては、演算ユニット３００は、ＤＭＡスレーブデバイスモジュール３１０ａ及び調停器（arbiter）３１０ｆを構成するＦＰＧＡ３１０を含むことができる。ＤＭＡスレーブモジュール３１０ａは、ＤＭＡ読出／書込要求に応答できるメモリバス３１６への取付に適する如何なるデバイスであってもよい。
【０１８８】
他の実施形態では、ＤＭＡスレーブモジュール３１０ａは、メモリバス３１６を介するブロックデータ転送を行う能力を有する他のインタフェースであってもよい。ＤＭＡスレーブモジュール３１０ａは、（メモリ、又は周辺機器から読出を実行する際に）ＤＭＡコントローラからデータを受信でき、（ＤＭＡスレーブモジュール３１０ａの書込命令を実行する際に）ＤＭＡコントローラにデータを転送できる。
【０１８９】
ＤＭＡスレーブモジュール３１０ａは、メモリバスを介して、（例えば、パケット又はデータバースト等のＤＤＲデータ送信の形式で）カプセル化された、又は対応するメモリバスを介して送信できる他の何らかのフォーマットのＤＭＡ読出及び書込命令を受信するように適応化してもよい。
【０１９０】
ＤＭＡスレーブモジュール３１０ａは、メモリＲ／ＷパケットからＤＭＡ読出／書込命令を再構築することができる。ＤＭＡスレーブモジュール３１０ａは、ＤＭＡマスタに対するデータ読出／データ書込の形式でこれらの命令に応答するように適応化してもよく、ＤＭＡマスタは、ＰＣＩｅバスの場合、周辺デバイス内にあってもよく、ＩＳＡバスの場合、システムＤＭＡコントローラ内にあってもよい。
【０１９１】
ＤＭＡデバイス３１０ａが受信した入出力データは、調停のためにキューに入れることができる。調停は、異なるフローのパケットをスケジューリングし、複数のパラメータに基づいて、使用可能な帯域幅へのアクセスを提供するプロセスを含むことができる。
【０１９２】
調停器３１０ｆは、通常、１つ以上のリクエスタ（requestors）にリソースアクセスを提供する。複数のリクエスタがアクセスを要求する場合、調停器３１０ｆは、どのリクエスタがアクセサ（accessor）になるかを判定し、次に、アクセサからリソースインタフェースにデータを渡し、ダウンストリームリソースは、データに対する処理の実行を開始することができる。
【０１９３】
データをリソースに完全に転送し、リソースが実行を完了した後、調停器３１０ｆは、異なるリクエスタに制御を移すことができ、このサイクルは、適用可能な全てのリクエスタについて繰り返される。図１１の実施形態では、調停器３１０ｆは、演算ユニット３００（例えば、３０８）の他の部分に受信データを通知できる。
【０１９４】
これに代えて、演算ユニット３００は、２０１０年１０月１２日に発行された米国特許７，８１３，２８３号に開示されている調停スキーム（arbitration scheme）を使用してもよく、この文献の全体は、引用によって本願に援用される。幾つかの実施形態では、当分野で周知の他の適切な調停スキームを適用してもよい。これに代えて、本発明の調停スキームは、ＯｐｅｎＦｌｏｗスイッチ及びＯｐｅｎＦｌｏｗコントローラを用いて実現してもよい。
【０１９５】
図１１に示す特定の実施形態では、演算ユニット３００は、更に、通知／プリフェッチ回路３１０ｃを備えていてもよく、通知／プリフェッチ回路３１０ｃは、ＤＭＡスレーブモジュール３１０ａに応答して、及び調停器３１０ｆの調停に基づき、バッファメモリ３１０ｂに保存されているデータをプリフェッチすることができる。更に、調停器３１０ｆは、メモリマッピングされた入出力受入経路３１０ｅ及び送出経路３１０ｇを介して、演算ユニット３００の他の部分にアクセスできる。
【０１９６】
図１１に示すように、ハードウェアスケジューラは、受信パケットのトラフィック管理を実現するスケジューリング回路３０８ｂ／ｎを含むことできる。あるソースからのパケット、あるトラフィッククラスに関連するパケット、特定のアプリケーションに関するパケット又はあるソケットに供給されるパケットは、セッションフローの一部と呼ばれ、セッションメタデータを用いて分類できる。このような分類は、分類器３０８ｅによって行うことができる。
【０１９７】
幾つかの実施形態では、セッションメタデータ３０８ｄは、パケットの優先順位及びスケジューリングを定める基準として機能し、受信パケットは、それらのセッションメタデータに基づいて並べ替えることができる。このパケットの並べ替えは、１つ以上のバッファで行うことができ、これらのフローのトラフィックシェイプを変更できる。
【０１９８】
このような優先順位付け又はトラフィック管理（traffic management：ＴＭ）のために選択されるスケジューリング規則は、遅延（バッファリング）、トラフィックのバースト（バッファリング及びバースティング）、トラフィックの円滑化（バッファリング及びレート制限フロー）、トラフィックの間引き、（バッファの消費を回避するために削除するデータの選択）、又は遅延ジッタ時間的（異なる量によるフローのセルの時間的シフト）によって、及び接続を認めない（例えば、既存のサービスレベル合意（service level agreement：ＳＬＡ）と追加的なフローのＳＬＡとを同時に保証しない）ことによってフロー及びマイクロフローのトラフィックシェイプ（traffic shape）に影響を与える。
【０１９９】
幾つかの実施形態では、演算ユニット３００は、切換構造の一部として機能でき、深さ限定出力キュー（depth-limited output queues）をトラフィック管理に提供し、ここへのアクセスは、スケジューリング回路３０８ｂ／ｎによって調停される。このような出力キューは、トラフィック管理を受信フローに提供するスケジューリング規則を用いて管理される。これらのキューのそれぞれに入れられたセッションフローは、ダウンストリームネットワーク要素への出力ポートを介して送り出すことができる。
【０２００】
なお、従来のトラフィック管理は、ダウンストリーム要素と既に合意されているＳＬＡ合意を除いて、ダウンストリーム要素によるデータの取り扱い及び管理を考慮に入れない。
【０２０１】
一方、本発明の実施形態では、スケジューラ回路３０８ｂ／ｎは、各出力キューに優先順位を割り当て、受信パケットの並べ替えを行い、これらのキュー内のセッションフローの持続性を維持することができる。スケジューラ回路３０８ｂ／ｎを用いて、オフロードプロセッサ３０８ｉ上で実行される汎用オペレーティングシステム（ＯＳ）３０８ｊへのこれらの持続的なセッションのそれぞれのスケジューリングを制御することができる。
【０２０２】
上述したように、特定のセッションフローのパケットは、特定のキューに属することができる。スケジューラ回路３０８ｂ／ｎは、これらのキューの優先順位を制御でき、これによって、これらのキューは、ダウンストリームに位置する汎用（general purpose：ＧＰ）処理リソース（例えば、オフロードプロセッサ３０８ｉ）によって処理されるように調停される。ダウンストリームプロセッサ３０８ｉ上で動作するＯＳ３０８ｊは、処理中の特定のキューに、実行リソース、例えば、プロセッササイクル及びメモリを割り当てることができる。
【０２０３】
更に、ＯＳ３０８ｊは、この特定のキューのためにスレッド又はスレッドのグループを割り当てることができ、これによって、汎用処理要素（オフロードプロセッサ）３０８ｉは、これらを独立したエンティティとして取り扱うことができる。ＧＰ処理リソース上で複数のセッションが動作でき、スケジューラ回路が設定したキュー内にある特定のセッションフローからのデータをそれぞれが処理することによって、スケジューラ及びダウンストリームリソース（例えば、３０８ｉ）を緊密に統合することができる。これによって、トラフィック管理／スケジューリング回路及び汎用処理リソース３０８ｉに亘って、セッション情報が持続的なものとなる。
【０２０４】
各セッションのための専用の演算リソース（例えば、３０８ｉ）、メモリ領域及びセッションコンテキスト情報は、汎用プロセッサ（オフロードプロセッサ）３０８ｉにおいて、各セッションフローを取り扱い、処理し及び／又は終端することによって提供することができる。スケジューラ回路３０８ｂ／ｎは、この実行リソースの機能を用いて、ダウンストリームのスケジューリングのためにセッションフローをキューに入れることができる。スケジューラ回路３０８ｂ／ｎには、実行リソース（例えば、３０８ｉ）の状態、実行リソース上で行われている現在のセッション、そのセッションに割り当てられたメモリ領域、及びプロセッサキャッシュ内のセッションコンテキストの位置が通知される。
【０２０５】
幾つかの実施形態では、スケジューラ回路３０８ｂ／ｎは、更に、実行リソースを１つの状態から他の状態に切り換える切換回路を含んでいてもよい。スケジューラ回路３０８ｂ／ｎは、このような能力を用いて、ダウンストリーム実行リソースに切換える準備が整ったキューの間を調停する。更に、ダウンストリーム実行リソースは、リソース間のコンテキスト切換に関連するペナルティ及びオーバーヘッドを減少させるように最適化できる。これによって、スケジューラ回路３０８ｂ／ｎは、更に、キュー間のシームレスな切換を行い、この結果、実行リソースがこれらを異なるセッションとして実行する。
【０２０６】
幾つかの実施形態では、スケジューラ回路３０８ｂ／ｎは、ダウンストリームの処理リソース上の異なるセッションをスケジューリングすることができ、これらのセッションは、コンテキスト切換の間のオーバーヘッドを減少させるように調整されて動作する。サービスの遅延を低減し、演算の使用可能性を設計する際には、ハードウェアコンテキスト切換をネットワークのキューに同期させることが重要である。
【０２０７】
ある実施形態では、トラフィックマネージャがキューを選択する際、パイプラインが対応するリソース（例えば、３０８ｉ）のキャッシュ（例えば、Ｌ２キャッシュ）のスワップインを調整し、及び再構築された入出力データを実行プロセスのメモリ領域に転送する。幾つかの場合、キュー内に係留するパケットがなくても、演算は、前のパケットへのサービスに係留されていることがある。一旦、このプロセスがスワッピングされたデータの外側のメモリ参照を行うと、スケジューラ回路（３０８ｂ／ｎ）は、入出力デバイス３０２からのデータをキューに入れてスレッドのスケジューリングを続けることができる。
【０２０８】
幾つかの実施形態では、データを有さないプロセスに公平なキューを提供するため、最大のコンテキストサイズを処理されるデータとして仮定できる。これによって、キューに十分な演算リソース及びネットワーク帯域幅リソースを提供できる。特定の具体例として、演算リソースは、８００ＭＨｚで動作するＡＲＭ（登録商標）  Ａ９プロセッサであってもよく、ネットワーク帯域幅は、３Ｇｂｐｓであってもよい。このような非対称な比率のため、幾つかの実施形態が用いる演算では、（ハードウェアによるセッション固有データのプリフェッチングによってホストプロセッサ負荷の大部分がオフロードされるように）多くの並列セッションを行い、及び汎用のデータ処理を最小量にしてもよい。
【０２０９】
したがって、幾つかの実施形態では、スケジューラ回路３０８ｂ／ｎは、送り出しキューの間をラインレート速度で調停するのではなく、終端されたセッション間を非常に高い速度で調停するものと概念化できる。汎用ＯＳを含む複数のステージのパイプラインに亘るセッションの持続性は、スケジューラ回路がこのようなパイプラインのステージの何れか又は全てを最適化することによって実現できる。
【０２１０】
これに代えて、引用によって本願に援用される、２０１０年７月２０日にＤａｌａｌに発行された米国特許７，７６０，７１５号に示すスケジューリングスキームを用いてもよい。このスキームは、フローを多く選択しすぎた場合に生じる他のリソースのダウンストリーム輻輳を防止するため、又は特定のフローのためのサービス契約を強制的に実施するためにフローの速度を制限することが望ましい場合に有用である。幾つかの実施形態は、汎用ＯＳ等のダウンストリームのリソースのサービス契約を実現する調停スキームを含むことができ、これは、シームレスに強制することができる。
【０２１１】
図１１に示すように、この実施形態に基づくハードウェアスケジューラ又はその均等物は、セッションメタデータに基づいて、受信パケットデータをセッションフローに分類することができる。また、ハードウェアスケジューラ又はその均等物は、調停の前に、これらのフローのトラフィック管理を行い、オフロードプロセッサにおける別個の処理エンティティとしてキューに入れることができる。
【０２１２】
幾つかの実施形態では、オフロードプロセッサ（例えば、３０８ｉ）は、異なるアプリケーション又はトランスポートセッションのパケットを処理できる汎用の処理ユニットであってもよい。このようなオフロードプロセッサは、汎用の命令を実行できる低パワープロセッサであってもよい。オフロードプロセッサは、以下に限定されるものではないが、ＡＲＭ（登録商標）、ＡＲＣ（登録商標）、Ｔｅｎｓｉｌｉｃａ（登録商標）、ＭＩＰＳ（登録商標）、Ｓｔｒｏｎｇ（登録商標）／ＡＲＭ（登録商標）、又はここに説明した機能を実現する他の適切な如何なるプロセッサであってもよい。このようなオフロードプロセッサは、オフロードプロセッサ上で動作する汎用ＯＳを有し、汎用ＯＳは、異なるスレッド又はスレッドグループ間のコンテキスト切換に関連するペナルティを減少させるように最適化されている。
【０２１３】
一方、ホストプロセッサ上のコンテキスト切換は、レジスタ退避領域を必要とし、キャッシュ内のコンテキストを処理し、及びＴＬＢエントリが無効又は上書きされた場合、これを復元する必要がある演算負荷が大きいプロセスである場合がある。ホスト処理システム内の命令キャッシュ（Instruction Cache）ミスは、パイプラインストール（pipeline stall）を引き起こすことがあり、データキャッシュミスは、動作の停止を引き起こすことがあり、このようなキャッシュミスは、プロセッサ効率を低下させ、プロセッサオーバヘッドを増加させる。
【０２１４】
一方、スケジューラ（スケジューリング）回路３０８ｂ／ｎ及びこれに関連してオフロードプロセッサ３０８ｉ上で動作するＯＳ３０８ｊも、協働して、ＯＳ３０８ｊ上で動作する異なる処理エンティティ間のコンテキスト切換オーバーヘッドを減少させる。
【０２１５】
実施形態は、スケジューラ回路とオフロードプロセッサ３０８ｉ上のＯＳとを協働させるメカニズムを含むことができる。ここで、ＯＳは、キャッシュ内に物理的に連続するセッションコンテキストをセットアップする（セッションヒープ（heap）及びスタックのための物理的にカラーリングされたアロケータ（physically colored allocator））。
【０２１６】
そして、ＯＳは、セッション初期化の際に、セッションのカラー、サイズ及び開始物理アドレスをスケジューラ回路に通信する。実際のコンテキスト切換の間、スケジューラ回路は、これらのパラメータを用いてキャッシュ内でセッションコンテキストを特定でき、外部の低遅延メモリ（例えば、３０８ｇ）へのこれらのコンテンツのバルク転送を開始する。
【０２１７】
更に、スケジューラ回路は、コンテキストがローカルメモリ３０８ｇに保存されると、以前のセッションのプリフェッチを管理できる。特定の実施形態では、ローカルメモリ３０８ｇは、低遅延動的ランダムアクセスメモリ（reduced latency dynamic random access memory：ＲＬＤＲＡＭ（登録商標））等の低遅延メモリであってもよい。したがって、幾つかの実施形態では、キャッシュ内でセッションコンテキストを一意的に特定できる。
【０２１８】
幾つかの実施形態では、高速切換速度を確実にするためにコンテキストサイズを制限してもよい。これに加えて又はこれに代えて、実施形態は、セッションコンテキストをローカルメモリ３０８ｇに転送するバルク転送メカニズムを含んでいてもよい。
【０２１９】
そして、前のセッションに戻るコンテキスト切換の間、ここに保存されているキャッシュコンテンツを読み出し及びプリフェッチすることができる。高速検索のために、ローカルメモリ３０８ｇ内で異なるコンテキストセッションデータにタグ及び／又は識別情報を付与してもよい。上述のように、１つのオフロードプロセッサによって保存されたコンテキストを、異なるオフロードプロセッサが呼び出すこともできる。
【０２２０】
図１１の特定の実施形態では、複数のオフロード処理コアを演算ＦＰＧＡ３０８に統合できる。他のＦＰＧＡ３１０内の調停装置回路によって複数の演算ＦＰＧＡを調停してもよい。演算ＦＰＧＡ（例えば、３０８）及び調停器ＦＰＧＡ（例えば、３１０）の組合せは、「ＸＩＭＭ」モジュール又は「Ｘｏｃｋｅｔｓ  ＤＩＭＭモジュール」（例えば、演算ユニット３００）と呼ばれる。特定のアプリケーションでは、これらのＸＩＭＭモジュールは、オフロードプロセッサ上の複数のセッションの実行を仲介する統合トラフィック及びスレッド管理回路を提供できる。
【０２２１】
また、図１１は、オフロードプロセッサトンネル接続３０８ｋ、メモリインタフェース３０８ｍ及びポート３０８ｌ（アクセラレータコヒーレントポート（accelerator coherency port：ＡＣＰ）であってもよい。）を示している。メモリインタフェース３０８ｍは、バッファメモリ３０８ａにアクセスできる。
【０２２２】
幾つかの実施形態では、システム３０１は、オフロードプロセッサ３０８ｉのキャッシュコンテンツにアクセスするためのアクセスユニット（又は「スヌーピング（snooping）」ユニット）３０８ｌを有していてもよい。
【０２２３】
特定の実施形態では、アクセスされるキャッシュは、Ｌ２キャッシュであってもよい。アクセスユニット３０８ｌは、外部の非キャッシュメモリ３０８ｇからオフロードプロセッサキャッシュにデータをロードし、オフロードプロセッサ３０８ｉのキャッシュコンテンツを非キャッシュメモリ３０８ｇに転送するポート又は他のアクセス能力を提供できる。演算要素３００の一部として、複数のメモリデバイス（例えば、ＲＡＭ）によってメモリ３０８ｇを構成してもよい。したがって、メモリ３０８ｇを用いて、セッションのキャッシュコンテンツを保存することができる。
【０２２４】
メモリ３０８ｇは、１つ以上の低遅延メモリを含むことができ、使用可能なＬ２キャッシュの補足及び／又は拡張として概念化でき、セッションのコヒーレント領域を拡張する。追加的メモリ３０８ｇ及びアクセスユニット３０８ｌは、セッションのコンテキストをオフロードプロセッサキャッシュにフェッチ及びプリフェッチし、スレッドが再開したとき、以前のワーキングセットの大部分が既にキャッシュ内に存在するようにすることによって、セッション切換におけるキャッシュミスの悪影響を減少させることができる。
【０２２５】
１つの特定の実施形態では、セッションのスイッチアウト時に、トンネル３０８ｋを介して、オフロードプロセッサ３０８ｉのキャッシュコンテンツをメモリ３０８ｇに転送することができる。
【０２２６】
但し、幾つかの実施形態では、スイッチアウトの一部としてスレッドのレジスタセットをメモリに保存し、これらのレジスタコンテンツをキャッシュ内に残すことができる。したがって、スイッチインの一部としてセッションのコンテンツがプリフェッチされ、オフロードプロセッサ３０８ｉのキャッシュに転送されるので、スレッドの再開時にカーネルによってレジスタコンテンツをロードでき、これらのロードは、メモリ３０８ｇからではなく、キャッシュから行うことができる。
【０２２７】
このように、セッションのキャッシュコンテンツを慎重に管理することによって、レジスタセットの保存及び復元に起因するコンテキスト切換のコスト並びにスイッチインの際のキャッシュミスを大幅に低減でき、最適な場合、これらをゼロにすることができ、この結果、コンテキスト切換オーバーヘッドの２つのソースを排除し、スイッチインセッションにおける有効な処理を再開するための遅延を短縮することができる。
【０２２８】
幾つかの実施形態では、アクセス（又はスヌーピング）ユニット（例えば、３０８ｌ）は、関連するセッションコンテキストが存在するキャッシュ内の全てのラインのインデクスを有することができる。セッションが物理インデクスキャッシュ内の複数の位置に亘って分散されている場合、同じセッションの複数のページにアクセスするために複数のアドレス変換が必要となるため、セッションコンテンツの全てにアクセスすることが煩雑になることがある。
【０２２９】
したがって、幾つかの実施形態は、セッションコンテンツが物理インデクスキャッシュ内で連続するページカラーリング方式を含む。セッションデータのためのメモリアロケータは、物理的に連続するページから割当を行い、これにより、セッションのための物理アドレス範囲が制御される。
【０２３０】
幾つかの実施形態では、これは、仮想メモリページと、物理メモリページとを揃え、キャッシュ内の同じ位置を指すことによって行われる（例えば、図４）。他の実施形態では、仮想メモリページ及び物理メモリページは、物理インデクスキャッシュ内で同じ位置を指している必要はなく、開始インデクス及びキャッシュ内のエントリのサイズに関する知識が全てのセッションデータにアクセスするために十分であれば、セッションの異なるページが物理メモリ内で連続していてもよい。
【０２３１】
更に、セットサイズは、セッションのサイズに等しく、これにより、キャッシュ内のセッションエントリのインデクスが既知になると、インデクス、サイズ及びセットカラーを用いて、セッションコンテンツをキャッシュから外部メモリ（例えば、３０８ｇ）に完全に転送することができる。
【０２３２】
幾つかの実施形態では、オフロードプロセッサのキャッシュ内でセッションの全てのページに同じカラーを割り当てることができる。特定の実施形態では、セッションの全てのページが定義されたカラーのページ境界で開始するようにしてもよい。カラーに割り当てられるページ数は、キャッシュ内のセッションのサイズに基づいて固定できる。
【０２３３】
オフロードプロセッサ（例えば、３０８ｉ）を用いて、特定のタイプのセッションを実行することができ、各セッションのサイズをオフロードプロセッサに事前に通知してもよい。これに基づいて、オフロードプロセッサは、セッション境界において新たなエントリを開始できる。
【０２３４】
オフロードプロセッサは、同様に、キャッシュ内のセッション境界にインデクスが付された物理メモリにページを割り当てることができる。キャッシュコンテキストの全体は、セッション境界から開始して保存することができる。この実施形態では、物理インデクスキャッシュにおいて、セッション内の複数のページが連続することができる。
【０２３５】
セッションの複数のページは、同じカラーを有することができ（すなわち、これらのページは、同じセットの一部である）、連続的に位置することができる。セッションのページは、セッションのベースインデクスからのオフセットを用いてアクセス可能である。
【０２３６】
キャッシュは、ページではなく、セッションとして個別のセットに分割してもよい。１つのセッションから他のセッションに移動する際、メモリ割当スキームは、これらのセッションにアクセスするために用いられるインデクスの最小ビットへのオフセットを用いる。例えば、物理インデクスキャッシュは、５１２ｋｂのサイズのＬ２キャッシュであってもよい。
【０２３７】
キャッシュは、Ｌ２キャッシュ内でセット毎に８つのタグが可能な８ウェイアソシアティブ（8-way associative）であってもよい。したがって、Ｌ２内の全てのカラー毎に８つのラインがあり、又はＬ２内の各カラーが８つの個別のインスタンスを有する。８Ｋｂのセッションコンテキストサイズでは、５１２ＫｂのＬ２キャッシュ内に８つの異なるセッション領域があり、又はこれらの選択されたサイズを有する８つのセッションカラーがある。
【０２３８】
幾つかの実施形態では、物理メモリアロケータは、時間的に前のセッションのキャッシュエントリ／メインメモリエントリに基づいて、セッションに対応するカラーを特定できる。特定の実施形態では、物理メモリアロケータは、キャッシュエントリを前のセッションに割り当てるために用いられるアドレスの３ビットに基づいて、前のセッションを特定できる。
【０２３９】
物理メモリアロケータは、メインメモリ位置に新たなセッションを割り当てることができ（そのカラーは、最近使用したエントリとの幾つかの比較によって決定できる。）、及び最低使用頻度（least recently used）ポリシに基づいて、異なるカラーのセッションに対応するキャッシュエントリを消去する。
【０２４０】
他の実施例においては、オフロードプロセッサは、複数のコアを含むことができる。このような実施形態では、各プロセッサコアによる使用のためにキャッシュエントリをロックアウトできる。例えば、オフロードプロセッサが２つのコアを有する場合、カラーの数を半分にして、キャッシュ（すなわち、Ｌ２キャッシュ）内のキャッシュラインの所定のセットをプロセッサ間で分割できる。新たなセッションが生成されたとき、セッションのカラー、セッションのインデクス及びセッションサイズを外部のスケジューラに通信できる。この情報は、受信セッションフローのキュー管理のために用いることができる。
【０２４１】
また、幾つかの実施形態では、セッションデータとは別にラインをキャッシュにロックすることによって共有テキスト及び何らかの共有データを分離できる。この場合も、物理メモリアロケータ及び物理カラーリング技術を用いることができる。個別の共有データがキャッシュ内にある場合、これをキャッシュにロックし、アクセスユニット（例えば、ＡＣＰ）による転送がこのようなラインをコピーしないようにできる。セッションデータのためにメモリを割り当てる際、メモリアロケータは、キャッシュ内にあるセッションデータがマッピングされるので、物理カラーを知ることができる。
【０２４２】
キャッシュ及びコンテキスト切換管理動作に適切な様々な実施形態について説明したが、以下では、特定の側面を示す具体例について説明する。
【０２４３】
図１２は、実施形態に基づくシステムのためのオーバーヘッドを低減するコンテキスト切換方法４００を示している。最初に、セッションカラーリングが必要かを判定できる（ステップ４０２）。このような判定は、ＯＳが行ってもよい。セッションカラーリングが不要である場合（ステップ４０２におけるＮｏ）、ＯＳの初期選択に応じて、ページカラーリングは、存在してもよく、しなくてもよい（ステップ４２４）。
【０２４４】
セッションカラーリングが必要な場合（ステップ４０２におけるＹｅｓ）、ＯＳは、メモリアロケータを初期化することができる（ステップ４０４）。メモリアロケータは、キャッシュ最適化技術を用いて、「セッション」境界に各セッションエントリを割り当てることができる。メモリアロケータは、各セッションの開始アドレス、キャッシュ内で許容されるセッションの数、所与のカラーについてセッションを検索できる位置の数を決定できる。このような動作は、キャッシュサイズ、カラーの数及びセッションのサイズに基づいて有効なセット数を判定することを含んでもよい（ステップ４０６）。
【０２４５】
セッションのためのパケットが到着すると、パケットが現在のセッションのためのものか、異なるセッションのためのものかを判定する（ステップ４０８）。このような動作は、ＯＳが行うことができる。パケットが異なるセッションからのものであるである場合（ステップ４０８におけるＹｅｓ）、パケットが以前のセッションからのものであるかを判定する（ステップ４１０）。パケットが以前のセッションからのものでない場合（すなわち、新たなセッションのものである場合）、新たなセッションのための十分なメモリがあるかを判定する（ステップ４１８）。十分な領域がある場合（ステップ４１８におけるＹｅｓ）、新たなセッションへの切換を行うことができる（ステップ４２２）。
【０２４６】
このような動作は、セッション境界において新たなセッションを割り当て、現在実行中のプロセスのコンテキストをコンテキストメモリ（外部の低遅延メモリであってもよい。）に保存することを含むことができる。
【０２４７】
新たなセッションに使用できるキャッシュメモリがない場合（ステップ４１８におけるＮｏ）、及び／又はパケットが以前のセッションのためのものである場合（ステップ４１０におけるＹｅｓ）、古い／新しいセッションのパケットが同じカラーのものであるかを検査し、判定する（ステップ４１２）。これらが異なるカラーのものである場合（ステップ４１２におけるＮｏ）、そのセッションへの切換を行うことができる（ステップ４１４）。
【０２４８】
このような動作は、タスクのためのキャッシュエントリを（以前のセッションのために）読み出すこと又は（新たなセッションのために）作成することを含むことができる。更にこのような動作は、必要であれば、ＬＲＵスキームによるキャッシュエントリのフラッシングを含むことができる。
【０２４９】
古い／新しいセッションのパケットが同じカラーのものである場合（ステップ４１２におけるＹｅｓ）、カラープレッシャを超えることができるかを判定することができる（ステップ４１６）。カラープレッシャを超えることができる場合、又は他のカラーのセッションが使用できない場合（ステップ４１６のＹｅｓ、又は…）、新たなセッションへの切換を行うことができる（ステップ４２０）。このようなアクションは、キャッシュエントリを作成し、新たなセッションカラーを記憶することを含むことができる。カラープレッシャを超えることができないが他のカラーのセッションが使用可能である場合（ステップ４１６におけるＮｏ、但し…）、方法は、４１４に進むことができる。
【０２５０】
なお、上述した本発明の例示的な実施形態の説明では、説明を明瞭にするため及び本発明の様々な側面の１つ以上の理解を補助するために、本発明の様々な特徴は、単一の実施形態、図又はその説明において共にグループ化されている。但し、このような開示の手法は、請求の範囲に記載されている発明が各請求項で明示している特徴以外の特徴を要求するという意図を反映しているとは解釈されない。
【０２５１】
すなわち、特許請求の範囲は、本発明の側面が上述した実施形態の全ての特徴より少ない特徴で成立することを表している。したがって、詳細な説明に続く特許請求の範囲は、この詳細な説明にも組み込まれ、各請求項は、それ自体が本発明の個別の実施形態を表していると解釈される。
【０２５２】
また、本発明の実施形態は、特に開示していない要素及び／又はステップを欠いた状態で実施してもよい。すなわち、要素の省略も本発明の特徴に含まれる。
【０２５３】
したがって、ここでは、特定の実施形態の様々な側面を詳細に説明したが、本発明の精神及び範囲から逸脱することなく、実施形態の様々な変更、置換及び変形が可能である。
【符号の説明】
【０２５４】
１００，２３０，３０１  システム、１０２  データソース、１０４  データパケット、１０６  第１の（仮想）スイッチ、１０７  ＰＣＩｅバス、１０８  入出力（Ｉ／Ｏ）機構、１０９  メモリバス、１１０  ホストプロセッサ、１１１  プロビジョニングエージェント（provisioning agent）、１１２  メモリコントローラ、１１４  第２の（仮想）スイッチ、１１６  スケジューラ、１１８  オフロードプロセッサ、１２０  コンテキストメモリ、１２２  モジュール、１２４  メモリバス、１３０  仮想メモリ、１３２  物理メモリ、１３４，１３４’  物理インデクスキャッシュ（プロセッサキャッシュ）、１３６  キャッシュ、２００−１／−２／−３  処理モジュール、２０２  （物理）コネクタ（インラインモジュールコネクタ：in-line module connector）、２０４  メモリインタフェース、２０６  調停ロジック、２０８  オフロードプロセッサ、２１０  ローカルメモリ、２１２  制御ロジック、２１４  データ評価器、２１６  スケジューラ、２１８  切換コントローラ、２２２  プリント回路板（ＰＣＢ）タイプ基板、２２０−０／−１／−２／−４／−５／−６  ロジックＩＣ、２２０−３  メモリＩＣ、２２４  インラインメモリモジュール、２２６  スロット、２２８  システムメモリバス、３００  演算ユニット、３０２  入出力デバイス、３０２ａ  入力バッファ（リング構造；ＤＭＡリングバッファ）、３０２ｂ  入出力仮想化機能（プログラム）、３０４  入出力メモリ管理ユニット（input output memory management unit：ＩＯＭＭＵ）、３０４ａ  変換ルックアサイドバッファ（translation look-aside buffer：ＴＬＢ）、３０４ｂ  ＩＯＭＭＵ機能、３０６  ホスト処理セクション、３０６ａ  中央演算処理装置入出力（central processing unit I/O ：ＣＰＵＩＯ）、３０６ｂ  メモリコントローラ、３０６ｃ  処理コア（ホストプロセッサ）、３０６ｄ  プロビジョニングエージェント、３０８ａ  バッファメモリ、３０８ｄ  セッションメタデータ、３０８ｂ／ｃ／ｄ／ｅ／ｈ  ハードウェアスケジューラ、３０８ｂ／ｎ  スケジューラ（スケジューリング）回路、３０８ｅ  分類器、３０８ｉ  オフロードプロセッサ／汎用プロセッサ／汎用処理要素、３０８ｊ  汎用オペレーティングシステム（ＯＳ）、３０８ｇ  ローカルメモリ（低遅延メモリ）、３０８，３０８ｋ  オフロードプロセッサトンネル接続、３０８ｍ  メモリインタフェース、３０８ｇ  （非キャッシュ）メモリ、３０８ｌ  アクセラレータコヒーレントポート（accelerator coherency port：ＡＣＰ）／アクセス（又はスヌーピング：snoopingユニット、３１０ｂ／３０８ａ／３０８ｍ  オンボードメモリ、３１０  ＦＰＧＡ、３１０ａ  ＤＭＡスレーブインタフェース（ＤＭＡスレーブデバイスモジュール／スレーブモジュール／デバイス）、３１２  ホストバス（例えば、ＰＣＩｅバス）、３１０ｂ  バッファメモリ、３１０ｃ  通知／プリフェッチ回路、３１０ｅ  入出力受入経路、３１０ｇ  送出経路、３１０ｆ  調停器（arbiter）、３１４  接続（バス）、３１６  メモリバス（システムメモリバス／システムバス）
【図１】
2016503934.tif 000003
【図２】
2016503934.tif 000004
【図３】
2016503934.tif 000005
【図４】
2016503934.tif 000006
【図５】
2016503934.tif 000007
【図６】
2016503934.tif 000008
【図７】
2016503934.tif 000009
【図８】
2016503934.tif 000010
【図９】
2016503934.tif 000011
【図１０】
2016503934.tif 000012
【図１１】
2016503934.tif 000013
【図１２】
2016503934.tif 000014
【国際調査報告】
2016503934.tif 000015