首页 / 专利库 / 资料储存系统 / 高速缓冲存储器 / コンテキスト切換キャッシュシステム及びコンテキスト切換方法

コンテキスト切換キャッシュシステム及びコンテキスト切換方法

阅读:1026发布:2020-06-29

专利汇可以提供コンテキスト切換キャッシュシステム及びコンテキスト切換方法专利检索,专利查询,专利分析的服务。并且【課題】全体的なシステム性能を著しく向上させ、サーバ又は他のデータのためのハードウェア及びパワー要求を低減するように改良されたコンテキスト切換キャッシュシステム及びコンテキスト切換方法を提供する。【解決手段】コンテキスト切換キャッシュシステムは、メモリバスに接続され、それぞれが関連するキャッシュ状態のキャッシュを有する複数のオフロードプロセッサと、オフロードプロセッサに接続されたコンテキストメモリと、オフロードプロセッサの少なくとも1つとコンテキストメモリとの間でキャッシュ状態の転送を指示するように構成されたスケジューリング回路とを備える。【選択図】図1,下面是コンテキスト切換キャッシュシステム及びコンテキスト切換方法专利的具体信息内容。

コンテキスト切換キャッシュシステムにおいて、 メモリバスに接続され、それぞれが関連するキャッシュ状態のキャッシュを有する複数のオフロードプロセッサと、 前記オフロードプロセッサに接続されたコンテキストメモリと、 前記オフロードプロセッサの少なくとも1つと前記コンテキストメモリとの間でキャッシュ状態の転送を指示するように構成されたスケジューリング回路とを備えるコンテキスト切換キャッシュシステム。前記複数のオフロードプロセッサは、キャッシュ状態にアクセスするためのアクセラレータコヒーレントポートを有する請求項1記載のコンテキスト切換キャッシュシステム。前記関連するキャッシュ状態は、オフロードプロセッサレジスタの状態、オフロードプロセッサによる実行のための命令、スタックポインタ、プログラムカウンタ、オフロードプロセッサによる実行のためにプリフェッチされた命令、オフロードプロセッサによる使用のためのプリフェッチされたデータ及びオフロードプロセッサのキャッシュに書き込まれたデータからなるグループから選択される少なくとも1つを含む請求項1記載のコンテキスト切換キャッシュシステム。前記オフロードプロセッサの少なくとも1つは、オペレーティングシステム(OS)を動作させるように構成され、前記スケジューリング回路は、前記OSと協働して、処理セッションのためのコンテキストが前記オフロードプロセッサの前記キャッシュ内で物理的に連続するように設定する請求項1記載のコンテキスト切換キャッシュシステム。前記オフロードプロセッサの少なくとも1つは、オペレーティングシステム(OS)を動作させるように構成され、前記スケジューリング回路は、前記OSと協して、処理セッションのためのコンテキストを、前記オフロードプロセッサのキャッシュ内で物理的に連続するように設定し、及び前記オフロードプロセッサのキャッシュ内で処理セッションのカラー、サイズ及び開始物理アドレスを設定する請求項1記載のコンテキスト切換キャッシュシステム。前記オフロードプロセッサの少なくとも1つは、オペレーティングシステム(OS)を動作させるように構成され、前記スケジューリング回路は、前記OSと協力して、処理セッションのためのコンテキストを、前記オフロードプロセッサのキャッシュ内で物理的に連続するように設定し、及び前記オフロードプロセッサのキャッシュ内で処理セッションのカラー、サイズ及び開始物理アドレス、並びにキャッシュ内で許容できるセッションの数、キャッシュ内の所与のカラーについてセッションを検索できる位置の数を設定する請求項1記載のコンテキスト切換キャッシュシステム。前記スケジューリング回路は、1つのオフロードプロセッサのキャッシュ状態を他のオフロードプロセッサのキャッシュに転送することを指示するように構成される請求項1記載のコンテキスト切換キャッシュシステム。前記スケジューリング回路は、前記オフロードプロセッサの1つに関連する第1のセッションを停止し、前記オフロードプロセッサのキャッシュ状態を保存し、第2のキューに入れられているネットワークパケットの処理を開始することによって第1のキュー内のネットワークパケットの処理の優先順位付けを行うように構成される請求項1記載のコンテキスト切換キャッシュシステム。前記関連するキャッシュ状態は、オフロードプロセッサレジスタの状態、オフロードプロセッサによる実行のための命令、スタックポインタ、プログラムカウンタ、オフロードプロセッサによる実行のためにプリフェッチされた命令、オフロードプロセッサによる使用のためのプリフェッチされたデータ及びオフロードプロセッサのキャッシュに書き込まれたデータからなるグループから選択される少なくとも1つを含み、 前記オフロードプロセッサの少なくとも1つは、オペレーティングシステム(OS)を動作させるように構成され、前記スケジューリング回路は、前記OSと協力して、セッションコンテキストを、前記オフロードプロセッサのキャッシュ内で物理的に連続するように設定する請求項1記載のコンテキスト切換キャッシュシステム。前記スケジューリング回路は、前記メモリバスを介する前記オフロードプロセッサの少なくとも1つと前記コンテキストメモリとの間のキャッシュ状態の転送を指示するように構成される請求項1記載のコンテキスト切換キャッシュシステム。前記コンテキストメモリは、少なくとも1つの低遅延メモリデバイスを含む請求項1記載のコンテキスト切換キャッシュシステム。メモリバスを介する処理のためにデータを受信し、それぞれが関連するキャッシュ状態のキャッシュを有する複数のオフロードプロセッサのコンテキスト切換方法において、 スケジューリング回路の動作によって、複数のオフロードプロセッサの少なくとも1つのキャッシュからコンテキストメモリへのバルク読出によって、キャッシュ状態の仮想メモリ位置及び物理メモリ位置を揃えて、キャッシュ状態を保存することを指示するステップと、 前記スケジューリング回路の動作によって、前記オフロードプロセッサの少なくとも1つに、処理のために前記キャッシュ状態を転送することを指示するステップと、を有するコンテキスト切換方法。前記バルク読出は、アクセラレータコヒーレントポートを介して行われる請求項12記載のコンテキスト切換方法。前記関連するキャッシュ状態は、オフロードプロセッサレジスタの状態、オフロードプロセッサによる実行のための命令、スタックポインタ、プログラムカウンタ、オフロードプロセッサによる実行のためにプリフェッチされた命令、オフロードプロセッサによる使用のためのプリフェッチされたデータ及びオフロードプロセッサのキャッシュに書き込まれたデータからなるグループから選択される少なくとも1つを含む請求項12記載のコンテキスト切換方法。前記キャッシュ状態は、セッションコンテキストを含み、前記オフロードプロセッサ上で動作するオペレーティングシステム(OS)と、前記スケジューリング回路とが協働して、前記オフロードプロセッサのキャッシュ内で前記セッションコンテキストが物理的に連続するようにするステップを更に有する請求項12記載のコンテキスト切換方法。処理セッションの初期化において、処理セッションのセッションカラー、セッションサイズ及び開始物理キャッシュアドレスをスケジューリング回路に通信するステップを更に有する請求項12記載のコンテキスト切換方法。複数の処理セッションのそれぞれの開始アドレス、オフロードプロセッサのキャッシュにおいて許容できるセッションの数、所与のカラーについてセッションを検索できる位置の数を決定するステップを更に有する請求項12記載のコンテキスト切換方法。1つのオフロードプロセッサの1つのキャッシュ状態を他のオフロードプロセッサのキャッシュに転送するステップを更に有する請求項12記載のコンテキスト切換方法。オフロードプロセッサの1つに関連する第1のセッションを停止し、前記オフロードプロセッサのキャッシュ状態を保存し、第2のキューに入れられているネットワークパケットの処理を開始することによって、前記メモリバスを介して受信した第1のキュー内のネットワークパケットの処理の優先順位付けを行うステップを更に有する請求項12記載のコンテキスト切換方法。オフロードプロセッサによって実行される処理のセッションコンテキストが前記オフロードプロセッサのキャッシュ内で物理的に連続するように設定するステップを更に有する請求項12記載のコンテキスト切換方法。前記キャッシュから前記コンテキストメモリへのバルク読出は、前記メモリバスを介する低遅延メモリデバイスへのバルク読出を含む請求項12記載のコンテキスト切換方法。それぞれが関連するキャッシュ状態のキャッシュを有する複数のオフロードプロセッサのコンテキスト切換方法において、 メモリバスに接続されたソケットを介して、処理のためのネットワークパケットを受信するステップと、 前記ネットワークパケットを処理のために複数のセッションに組織化するステップと、 スケジューリング回路の動作によって、前記オフロードプロセッサの少なくとも1つのキャッシュ状態をコンテキストメモリに読み出すバルク読出によって、キャッシュ状態の仮想メモリ位置及び物理メモリ位置を揃えて、少なくとも1つのセッションの処理を中断させるステップと、 前記スケジューリング回路の動作によって、前記オフロードプロセッサの少なくとも1つに、処理のために前記キャッシュ状態を転送することを指示するステップとを有するコンテキスト切換方法。前記バルク読出は、アクセラレータコヒーレントポートを介して行われる請求項22記載のコンテキスト切換方法。前記関連するキャッシュ状態は、オフロードプロセッサレジスタの状態、オフロードプロセッサによる実行のための命令、スタックポインタ、プログラムカウンタ、オフロードプロセッサによる実行のためにプリフェッチされた命令、オフロードプロセッサによる使用のためのプリフェッチされたデータ及びオフロードプロセッサのキャッシュに書き込まれたデータからなるグループから選択される少なくとも1つを含む請求項22記載のコンテキスト切換方法。前記キャッシュ状態は、セッションコンテキストを含み、前記オフロードプロセッサ上で動作するオペレーティングシステム(OS)と、前記スケジューリング回路とが協働して、前記オフロードプロセッサのキャッシュ内で前記セッションコンテキストが物理的に連続するようにするステップを更に有する請求項22記載のコンテキスト切換方法。処理セッションの初期化において、処理セッションのセッションカラー、セッションサイズ及び開始物理キャッシュアドレスをスケジューリング回路に通信するステップを更に有する請求項22記載のコンテキスト切換方法。複数の処理セッションのそれぞれの開始アドレス、オフロードプロセッサのキャッシュにおいて許容できるセッションの数、所与のカラーについてセッションを検索できる位置の数を決定するステップを更に有する請求項22記載のコンテキスト切換方法。1つのオフロードプロセッサの1つのキャッシュ状態を他のオフロードプロセッサのキャッシュに転送するステップを更に有する請求項22記載のコンテキスト切換方法。オフロードプロセッサの1つに関連する第1のセッションを停止し、前記オフロードプロセッサのキャッシュ状態を保存し、第2のキューに入れられているネットワークパケットの処理を開始することによって、前記メモリバスを介して受信した第1のキュー内のネットワークパケットの処理の優先順位付けを行うステップを更に有する請求項22記載のコンテキスト切換方法。前記少なくとも1つのセッションの処理を中断させるステップは、先取りモードで動作して、セッション実行を制御するステップを含む請求項22記載のコンテキスト切換方法。前記ネットワークパケットを受信するステップは、前記メモリバスを介して、デュアルインラインメモリモジュール(DIMM)互換ソケットを経由してネットワークパケットを受信するステップを含む請求項22記載のコンテキスト切換方法。

说明书全文

本発明は、メモリバスに接続されたモジュールを含むコンピュータシステムのための、オフロードプロセッサによる確定的(deterministic)なコンテキスト切換キャッシュシステム及びコンテキスト切換方法に関する。

コンテキスト切換(プロセス切換又はタスク切換とも呼ばれる。)は、1つのプロセス又はスレッドの実行から他のプロセス又はスレッドの実行にプロセッサを切り換えることを意味する。コンテキスト切換の間、プロセスの状態(コンテキスト)は、メモリに保存され、これにより、後に同じポイントから実行を再開できる。これによって、複数のプロセスが単一のプロセッサを共有し、マルチタスキングオペレーティングシステムをサポートすることができる。

一般的に、プロセスは、実行中又は動作中のプログラムのインスタンスであり、プロセスは並列的に動作でき、その親プロセスと共にアドレス領域(すなわち、様々なメモリ位置)及び他のリソースを共有することができる。コンテキストは、通常、特定の時刻におけるプロセッサのレジスタ及びプログラムカウンタのコンテンツを含む。オペレーティングシステムは、第1のプロセスの実行を中断させ、そのプロセスのコンテキストをメモリに保存し、次に第2のプロセスのコンテキストをメモリから読み出し、プロセッサのレジスタにおいてこのコンテキストを復元することができる。第2のプロセスを終了又は中断した後、第1のプロセスのコンテキストを再ロードして、第1のプロセスの実行を再開することができる。

しかしながら、コンテキスト切換は、演算負荷が大きい。コンテキスト切換は、かなりの処理時間を必要とすることがあり、この時間は、1秒あたり数十回から数百回行われるコンテキスト切換毎に数ナノ秒の桁の時間を要することがある。現代のプロセッサは、数百又は数千の個別のプロセスを扱うことがあるため、コンテキスト切換に費やされる時間は、プロセッサ時間に関してシステムの大きなコストとなるという問題がある。

本発明は、このような問題に鑑みてなされたもので、その目的とするところは、全体的なシステム性能を著しく向上させ、サーバ又は他のデータのためのハードウェア及びパワー要求を低減するように改良されたコンテキスト切換キャッシュシステム及びコンテキスト切換方法を提供することにある。

システムにおけるプロセッサのコンテキスト切換のためのシステム、ハードウェア及び方法の実施形態を開示する。実施形態は、それぞれがメモリバスに接続された複数のオフロードプロセッサを含むことができ、各オフロードプロセッサは、関連するキャッシュ状態のキャッシュを有する。複数のオフロードプロセッサには、メモリバスを介して低遅延メモリを接続でき、スケジューリング回路を用いて、オフロードプロセッサの少なくとも1つから低遅延メモリにキャッシュ状態を保存させ、後にメモリバスを介してオフロードプロセッサの少なくとも1つにキャッシュ状態を転送する。

ARM(登録商標)アーキテクチャプロセッサの使用に関連する実施形態では、複数のオフロードプロセッサは、改善された速度でキャッシュ状態にアクセスするためにアクセラレータコヒーレントポート(accelerator coherency port)を有していてもよい。他の実施形態では、以下に限定されるものではないが、共通モジュールは、オフロードプロセッサ、低遅延メモリ及びスケジューリング回路をサポートし、デュアルインラインメモリモジュール(dual in line memory module:DIMM)ソケットを含むメモリソケット仲介接続を介して、外部ネットワークパケットへのアクセスを提供する。

幾つかの実施形態では、関連するキャッシュ状態は、レジスタ保存領域に保存されるプロセッサレジスタの状態、実行されるパイプライン内の命令、スタックポインタ及びプログラムカウンタ、セッションによる実行を待機するプリフェッチされた命令及びデータ、並びに直近にキャッシュに書き込まれたデータの1つを含む。システムは、更に、複数のオフロードプロセッサの少なくとも1つで動作するオペレーティングシステム(operating system:OS)を含むことができる。

OS及びスケジューリング回路は、協働して、セッションコンテキストをキャッシュ内で物理的に連続させる。セッション初期化に応じて、セッションカラー、サイズ及び開始物理アドレスをスケジューラ回路に通信でき、及びメモリアロケータを用いて、各セッションの開始アドレス、キャッシュ内で許容されるセッションの数、所与のカラーについてセッションを検索できる位置の数を決定できる。

幾つかの実施形態では、複数のオフロードプロセッサの1つによって保存されたキャッシュ状態を他のオフロードプロセッサに転送することができる。特定のアプリケーションでは、スケジューリング回路は、オフロードプロセッサの1つに関連する第1のセッションを停止し、オフロードプロセッサのキャッシュ状態を保存し、第2のキューに入れられているネットワークパケットの処理を開始することによってメモリバスを介して受け取った第1のキュー内のネットワークパケットの処理を優先させることができる。

また、実施形態は、メモリバスを介して複数のオフロードプロセッサに接続された低遅延メモリを使用する、それぞれがメモリバスに接続された複数のオフロードプロセッサのコンテキスト切換方法を含むことができる。コンテキスト切換方法は、スケジューリング回路の動作によって、複数のオフロードプロセッサの少なくとも1つのキャッシュから低遅延メモリへのバルク読出によって、キャッシュ状態の仮想メモリ位置及び物理メモリ位置を揃えて、キャッシュ状態を保存することを指示するステップを含む。

次に、スケジューリング回路の動作によって、オフロードプロセッサの少なくとも1つに、処理のためにキャッシュ状態を転送することを指示する。上述した構造的な実施形態と同様に、共通モジュールは、オフロードプロセッサ、低遅延メモリ及びスケジューリング回路をサポートし、DIMMソケット又は他のメモリソケット接続を介して、外部ネットワークパケットへのアクセスを提供する。

本発明によれば、全体的なシステム性能を著しく向上させ、サーバ又は他のデータのためのハードウェア及びパワー要求を低減するように改良されたコンテキスト切換キャッシュシステム及びコンテキスト切換方法を提供することができる。

実施形態に基づくコンテキスト切換を有するシステムを示す図である。

カラーリングなしで物理インデクスキャッシュ内のページ競合を示す図である。

仮想インデクスキャッシュを示す図である。

実施形態に基づき仮想的/物理的に整列されたキャッシュを示す図である。

様々な実施形態に基づく処理モジュールを示す図である。

様々な実施形態に基づく処理モジュールを示す図である。

様々な実施形態に基づく処理モジュールを示す図である。

様々な実施形態に基づく処理モジュールを示す図である。

従来のデュアルインラインメモリモジュールを示す図である。

他の実施形態に基づくシステムを示す図である。

一実施形態に基づく、コンテキスト切換能を有する、メモリバスに接続されたオフロード処理モジュールを備えるシステムを示す図である。

特定の実施形態に基づくコンテキスト切換動作を示すフローチャートである。

以下、複数の図面を参照して様々な実施形態について説明する。これらの実施形態は、システムメモリバスに接続されたオフロードプロセッサによってコンテキストを切換えるモジュール、システム及び方法を示す。このようなオフロードプロセッサは、ホストプロセッサに加えて、システムメモリバスに接続してもよく、ホストプロセッサから独立して、システムメモリバスを介して転送されるデータに対して動作することができる。

特定の実施形態では、オフロードプロセッサは、低遅延メモリにアクセスでき、これによって、高速コンテキスト切換のためのコンテキストデータの高速書込及び高速読出が実現する。

特定の実施形態では、処理モジュールは、インラインメモリモジュール(例えば、デュアルインラインモリモジュール(dual in line memory module:DIMM))をシステムメモリバスに接続するための物理スロットに挿入することができる。

図1は、一実施形態に基づくシステム100を示している。システム100は、1つ以上のオフロードプロセッサ118、スケジューラ116及びコンテキストメモリ120を含むことができる。オフロードプロセッサ118は、キャッシュメモリに関連して動作する1つ以上のプロセッサコアを含むことができる。コンテキスト切換動作では、オフロードプロセッサ118の第1の処理タスクのコンテキストは、コンテキストメモリ120に保存でき、オフロードプロセッサ118は、新しい処理タスクを引き受けることができる。

後に、保存されたコンテキストをコンテキストメモリ120からオフロードプロセッサ118に復元し、オフロードプロセッサ118は、第1の処理タスクを再開できる。特定の実施形態では、コンテキストデータの保存及び復元は、オフロードプロセッサ118のキャッシュと、コンテキストメモリ120との間のデータ転送を含むことができる。

スケジューラ116は、受信した処理要求に基づいて、オフロードプロセッサ118のコンテキスト切換を調整できる。したがって、スケジューラ116は、オフロードプロセッサ118のためのコンテキストデータの位置と同様に、オフロードプロセッサ118の状態を知ることができ、又はここにアクセスすることができる。コンテキストデータ位置は、コンテキストメモリ120内の位置と共にプロセッサキャッシュ内の位置を含むことができる。また、スケジューラ116は、オフロードプロセッサ118の状態を追跡し又はこの状態によって更新できる。

以上のように、コンテキストメモリ120は、オフロードプロセッサ118のコンテキストデータを後に読み出せるように保存できる。コンテキストメモリ120は、オフロードプロセッサのキャッシュメモリから分離されていてもよい。幾つかの実施形態では、コンテキストメモリ120は、システム内の他のメモリと比べて低遅延のメモリであってもよく、これによって、速やかなコンテキスト保存及び読出が可能になる。幾つかの実施形態では、コンテキストメモリ120は、コンテキストデータ以外のデータを保存できる。

ここに示す特定の実施形態では、オフロードプロセッサ118、スケジューラ116及びコンテキストメモリ120は、メモリバス124に接続されたモジュール122の一部であってもよい。オフロードプロセッサ118による実行のためのデータ及び処理タスクは、メモリバス124を介して受信できる。幾つかの実施形態では、オフロードプロセッサ118とコンテキストメモリ120との間のコンテキストデータの転送は、メモリバス124を介して行われる。但し、他の実施形態では、モジュール122上の異なるデータ経路を介してこのような転送を行ってもよい。

図1に示す特定の実施形態、すなわち、システム100は、更に、第2の仮想スイッチ(以下、「第2のスイッチ」、ともいう)114、メモリコントローラ112、ホストプロセッサ110、入出力(I/O)機構108及び第1のスイッチ106を含むことができる。モジュール122上に第2のスイッチ114を設けてもよい。図1の特定のシステム100は、ネットワークパケット処理スケジューリング及びトラフィック管理を提供するが、他の実施形態では、他のタイプの処理タスクのためのコンテキスト切換動作又はこれと同様の動作を行ってもよい。

図1の特定の実施形態では、第1のスイッチ(以下、「第1の仮想スイッチ」、又は単に「スイッチ」ともいう)106は、データソース102からデータパケット104を受信し、及び/又はデータソース102にデータパケット104を送信する。データソース102は、適切な如何なるパケットデータのソースであってもよく、インターネット、ネットワーククラウド、データセンタ間又はデータセンタ内ネットワーク、クラスタコンピュータ、ラックシステム、複数又は個別のサーバ又はパーソナルコンピュータ等であってもよい。

データは、パケット形式であっても、スイッチベースであってもよいが、特定の実施形態では、処理を容易にするため、非パケットデータをパケットに変換又はカプセル化する。データパケットは、通常、ある特性を有し、トランスポートプロトコル番号、ソース及び宛先ポート番号、又はソース及び宛先インターネットプロトコル(Internet Protocol:IP)アドレスを含む。データパケットは、更に、パケット分類及び管理の補助となる関連するメタデータを有することができる。

スイッチ106は、仮想スイッチ(入出力デバイス)であってもよい。スイッチ106は、以下に限定されるわけではないが、周辺機器コンポーネント相互接続(peripheral component interconnect:PCI)規格と互換性を有するデバイス及び/又はPCI又はPCIeバス107を介してホストマザーボードに接続するPCIエキスプレス(PCI express:PCIe)デバイスであってもよい。更に、スイッチ106は、ネットワークインタフェースコントローラ(network interface controller:NIC)、ホストバスアダプタ、集中型ネットワークアダプタ、切換型又は非同期伝送モード(asynchronous transfer mode:ATM)ネットワークインタフェース等を含むことができる。

幾つかの実施形態では、スイッチ106は、シングルルート入出力仮想化(single root I/O virtualization:SR−IOV)インタフェース等の入出力仮想化スキームを採用して、単一のネットワーク入出力デバイスを複数のデバイスと同様に扱うことができる。SR−IOVは、物理的制御及び仮想機能の両方を提供することによって、様々なPCIeハードウェア機能間のリソースへの個別のアクセスを実現する。

一実施形態では、スイッチ106は、OpenFlowソフトウェアによって定義されたネットワーキングをサポートし、コントロールプレーンを抽象化することができる。第1の仮想スイッチ106のコントロールプレーンは、ルート判定、ターゲットノード識別等の機能を実行する。

スイッチ106は、ネットワークパケットを検査し、コントロールプレーンを用いて、ネットワークパケットのために適切な出力ポートを作成する能力を有することができる。スイッチ106のフォワーディングプレーンは、ネットワークパケットに関連するネットワークパケット又はデータフローのためのルート計算に基づいて、パケットを出力インタフェースに転送することができる。

スイッチ106のアウトプットインタフェースを入出力バスに接続してもよく、一実施形態では、スイッチ106は、メモリ読出又は書込動作(ダイレクトメモリアクセス動作)のために、ネットワークパケットを直接的に(又は入出力機構108を介して間接的に)メモリバス相互接続(以下、単に「メモリバス」ともいう)109に転送する能力を有することができる。あるアプリケーションでは、機能上、コントロールプレーン機能に基づいて、ネットワークパケットを特定のメモリ位置へのトランスポートに割り当てることができる。

入出力機構108及びメモリバス相互接続109に接続されたスイッチ106は、更に、ホストプロセッサ110にも接続できる。ホストプロセッサ110は、演算サービスを提供することができるプロビジョニングエージェント(provisioning agent)111を含む1つ以上のホストプロセッサを含むことができる。プロビジョニングエージェント111は、オペレーティングシステム又はホストプロセッサ110上で実行されるユーザコードの一部であってもよい。プロビジョニングエージェント111は、通常、システム100によって提供される仮想機能ドライバを初期化し、これとインタラクトする。

仮想機能ドライバは、ダイレクトメモリアドレッシング(direct memory addressing:DMA)が必要である場合にメモリスペースの仮想アドレスを提供する役割を有する。各デバイスドライバは、物理アドレスにマッピングされる仮想アドレスに割り当てることができる。デバイスモデルを用いて、物理デバイスのエミュレーションを行い、作成することができる複数の仮想機能(virtual function:VF)のそれぞれをホストプロセッサ110が認識できるようにすることができる。

デバイスモデルを複数回複製して、VFドライバ(仮想入出力デバイスとインタラクトするドライバ)が物理デバイスとインタラクトしているように錯覚させることもできる。例えば、任意のデバイスモデルを用いてVFドライバが接続できるネットワークアダプタをエミュレートしてもよい。

デバイスモデル及びVFドライバは、特権モード(privileged mode)又は非特権モード(non-privileged mode)の何れで動作してもよい。どのデバイスがデバイスモデル及びVFドライバに対応するコードをホストし/実行するかについては、制約はない。但し、コードは、入出力インタフェースの複数のコピーを作成するために、デバイスモデル及びVFドライバの複数のコピーを作成する能力を有することができる。

また、幾つかの実施形態では、オペレーティングシステムは、VFドライバによってサポートされるアプリケーションのために、定義された物理アドレス領域を作成することができる。更に、ホストオペレーティングシステムは、アプリケーション又はプロビジョニングエージェントに仮想メモリアドレス領域を割り当てることができる。

プロビジョニングエージェント111は、ホストオペレーティングシステムを仲介して、仮想アドレスと使用可能な物理アドレス領域のサブセットとの間のマッピングを作成する。プロビジョニングエージェント111は、各VFドライバを作成して、これらを定義された仮想アドレス領域に割り当てる役割を有することができる。

また、第2の仮想スイッチ114は、メモリバス109を用いて、メモリコントローラ112に接続できる。第2の仮想スイッチ114は、メモリバス109からのトラフィックを受信し、オフロードプロセッサ118への、及びオフロードプロセッサ118からのトラフィックに切換えることができる。

ここで、トラフィックとは、以下に限定されるわけではないが、プロビジョニングエージェント111によって作成され及び割り当てられた仮想デバイスへのデータフローを含んでいてもよく、このデータフローの処理は、オフロードプロセッサ118によってサポートされる。

第2の仮想スイッチ114のフォワーディングプレーンは、メモリバス109からオフロードプロセッサ118への又はオフロードプロセッサ118からメモリバス109に戻るパケットを伝送することができる。あるアプリケーションでは、ここに開示するシステムアーキテクチャは、ホストプロセッサ110への割込をゼロ又は最小限にして、オフロードプロセッサ118にネットワークパケットを直接的に通信する。

第2の仮想スイッチ114は、パケットを受信し、定義された調停及びスケジューリングスキームに基づいて、これらを分類した後に、異なるハードウェアスケジューラに配信する能力を有していてもよい。ハードウェアスケジューラ116は、パケットを受信し、1つ以上の個別のセッションで処理されるようにスケジューリングされたフローセッションに割り当てることができる。

スケジューラ116は、コンテキストの切換を含むオフロードプロセッサ118よって実行される処理タスクを制御できる。幾つかの実施形態では、スケジューラ116は、メモリバス124を介して受信されたデータに含まれるメタデータ(又はこのようなデータから導出されるメタデータ)を用いて、オフロードプロセッサ118のタスクのスケジューリング/切換を行う。また、メモリバスを介して受信されるコマンド又はフラグによるコマンドベースのスケジューラの制御を行ってもよい。

図1の特定の実施形態では、スケジューラ116を用いて、受信パケットのトラフィック管理を実現することができる。あるソースからのパケット、あるトラフィッククラスに関連するパケット、特定のアプリケーションに関するパケット又はあるソケットに供給されるパケットは、セッションフローの一部と呼ばれ、セッションメタデータを用いて分類できる。

セッションメタデータは、多くの場合、パケットの優先順位を定める基準として機能し、受信パケットは、セッションメタデータに基づいて並べ替えることができる。このパケットの並べ替えは、1つ以上のバッファで行うことができ、これらのフローのトラフィックシェイプを変更できる。

セッションメタデータに基づいて並べ替えられるセッションのパケットは、特定のトラフィック管理キューに送られ、トラフィック管理キューは、調停回路(図示せず)を用いて調停されて、出力ポートに供給される。調停回路は、これらのパケットフローをダウンストリームのパケット処理/終端リソースに直接的に供給してもよい。一実施形態では、スレッド及びキュー管理を統合し、このスレッドによって、ネットワークデータのダウンストリームリソース処理終端のスループットを向上させる。

図1に示すように、スケジューラ116に到着するデータは、オフロードプロセッサ118において終端(terminated)されるパケットデータであってもよく、又は処理、変更又は切換えられるパケットデータであってもよい。スケジューラ116は、パケットデータの検査に基づいて、受信パケットを対応するアプリケーションセッションに区分する役割を有していてもよい。スケジューラ116は、パケットを検査し、関連するパケットの特徴を特定する回路を有することができる。

幾つかの実施形態では、スケジューラ116は、ネットワークスタックの一部をオフロードし、このようなネットワークスタック処理によって生じるオーバーヘッドからオフロードプロセッサ118を解放することができる。特定の実施形態では、スケジューラ116は、TCP/トランスポートオフロード、暗号化/平文化オフロード、セグメント化及び再構築等の何れかを実行してもよく、これにより、オフロードプロセッサは、ネットワークパケットのペイロードを直接的に使用することができる。

スケジューラ116は、更に、セッションに属するパケットを特定のトラフィック管理キューに転送する能力を有することができる。スケジューラ116は、このような複数のセッションのそれぞれの汎用OSへのスケジューリングを制御することができる。各ステージにおいて実行される動作を最適化するスケジューラ116によって、汎用OSを含むステージのパイプラインに亘るセッションの持続性をサポートできる。このような動作の特定の実施形態については、後に更に詳細に説明する。

スケジューラ116は、適切な如何なる形式を有していてもよく、例えば、引用によって本願に組み込まれる、2007年8月4日に発行されたDalalによる米国特許7,760,715号(以下に、715特許と呼ぶ。)に開示されている。スケジューリング回路の全部又は一部をスケジューラとして用いてもよい。715特許は、ダウンストリーム実行リソースを考慮に入れるスケジューリング回路を開示している。これらのキュー内の各セッションフローは、出力ポートを介してダウンストリームネットワーク要素に送り出される。

スケジューラは、調停回路を用いて、複数のトラフィック管理出力キューのアクセスを調停して、有効な出力ポートに割り当てる。それぞれの出力ポートは、パケットバッファを介して、オフロードプロセッサコアの1つに接続できる。パケットバッファは、更に、ヘッダプール(header pool)及びパケットボディプール(packet body pool)を含んでいてもよい。ヘッダプールには、オフロードプロセッサ118によって処理されるパケットのヘッダのみを格納することができる。

また、処理すべきパケットのサイズが十分小さい場合、ヘッダプールは、パケットの全体を格納してもよい。パケットは、オフロードプロセッサで実行される処理の性質に応じて、ヘッダプール又はパケットボディプールに転送することができる。パケットの処理、オーバレイ、解析、フィルタリング、及び同様な他のアプリケーションでは、パケットヘッダのみをオフロードプロセッサ118に転送することが適切な場合がある。

これらの場合、パケットヘッダの処理によって、パケットボディをパケットヘッダに結合して、出力インタフェースから転送してもよく、パケットボディを削除してもよい。パケットの終端を必要とするアプリケーションでは、パケットボディ全体を転送してもよい。そして、オフロードプロセッサは、パケットを受信し、これらに対して適切なアプリケーションセッションを実行することができる。

スケジューラ116は、オフロードプロセッサ118上の異なるセッションをスケジューリングすることができ、このようなセッションを調整して、コンテキスト切換の間のオーバーヘッドを減少させる。スケジューラ116は、ラインレート速度で送信キュー間又はセッションフロー間の調停を行うだけではなく、終端されたセッション間の調停を非常に高速で行う。スケジューラ116は、オフロードプロセッサ118上のセッションのキューを管理でき、及びOS上の新しいアプリケーションセッションを呼び出す役割を有している。スケジューラ116は、OSに対し、トラフィックに基づいて、新たなセッションのためのパケットが使用可能であることを通知することができる。

また、スケジューラ116には、オフロードプロセッサ118の実行リソースの状態、実行リソース上で動作中の現在のセッション及びこのセッションに割り当てられたメモリ領域、並びにオフロードプロセッサキャッシュ内のセッションコンテキストの位置を通知できる。これにより、スケジューラ116は、実行リソースの状態を用いて、トラフィック管理及び調停判定を行うことができる。

ここに示す実施形態では、スケジューラ116は、オペレーティングシステム上のスレッド管理を受信パケットのトラフィック管理に統合することができる。ハードウェアスケジューラは、トラフィック管理キュー及びオフロードプロセッサ118上の処理エンティティを含むコンポーネントの範囲に亘ってセッションフローの持続性を維持することができる。オフロードプロセッサ118上で動作するOSは、処理中の特定のキューに、実行リソース、例えば、プロセッササイクル及びメモリを割り当てることができる。

更に、OSは、特定のキューのためにスレッド又はスレッドのグループを割り当てることができ、これによって、汎用処理要素は、キューを独立したエンティティとして取り扱うことができる。汎用(general purpose:GP)処理リソース(例えば、オフロードプロセッサリソース)上で複数のセッションを動作させ、それぞれがスケジューラ116上のキュー内の特定のセッションフローからのデータを処理することによって、スケジューラ116及びGP処理リソースを緊密に統合できる。これによって、トラフィック管理及びスケジューラ116、並びにGP処理リソースに亘って、セッション情報内に持続的な要素を導入できる。

幾つかの実施形態では、オフロードプロセッサ118のOSは、リソース間のコンテキスト切換に関連するペナルティ及びオーバーヘッドを低減するように前のOSから変更できる。これによって、ハードウェアスケジューラは、更に、キュー間のシームレスな切換を行うことができ、この結果、実行リソースがこれらを異なるセッションとして実行する。

特定の実施形態では、スケジューラ116は、トラフィック受信パケットの管理を実現することができる。あるソースからのパケット、あるトラフィッククラスに関連するパケット、特定のアプリケーションに関するパケット又はあるソケットに供給されるパケットは、セッションフローの一部と呼ばれ、セッションメタデータを用いて分類できる。

セッションメタデータは、多くの場合、パケットの優先順位を定める基準として機能でき、受信パケットは、セッションメタデータに基づいて並べ替えられる。このパケットの並べ替えは、1つ以上のバッファで行うことができ、これらのフローのトラフィックシェイプを変更できる。セッションメタデータに基づいて並べ替えられるセッションのパケットは、特定のトラフィック管理キューに送られ、トラフィック管理キューは、調停回路を用いて調停されて、出力ポートに供給される。

調停回路は、これらのパケットフローをダウンストリームのパケット処理/終端リソース(例えば、オフロードプロセッサ)に直接的に供給してもよい。一実施形態では、スレッド及びキュー管理を統合し、このスレッドによって、ネットワークデータのダウンストリームリソース処理終端のスループットを向上させる。

受信ネットワークパケット(及びフロー)のトラフィック管理、調停及びスケジューリングを行うことに加えて、スケジューラ116は、オフロードプロセッサ118のOS上の終端されたセッション間でオーバーヘッドが最小のコンテキスト切換を可能にする。

オフロードプロセッサ118上の複数のセッションの切換によって、複数のセッションを非常に高速に終端させることができる。ここに示す実施形態では、コンテキストモジュール120の動作によって速やかなコンテキスト切換を行うことができる。特定の実施形態では、効率的な低遅延コンテキストサービスのために、システム100内にコンテキストメモリ120を設けてもよい。

ここに示す特定の実施形態では、第2のスイッチ114の動作によってスケジューラ116にパケットを転送することができる。スケジューラ116は、オフロードプロセッサ118上のセッション及び新たなセッションを切り換える役割及びコンテキストメモリ120内のコンテキストの保存を開始する役割の両方を有することができる。

セッションのコンテキストは、以下に限定されるものではないが、レジスタ保存領域に保存されるプロセッサレジスタの状態、実行されるパイプライン内の命令、スタックポインタ及びプログラムカウンタ、セッションによる実行を待機するプリフェッチされた命令及びデータ、並びに直近にキャッシュに書き込まれたデータ及びオフロードプロセッサ118上で実行されるセッションを特定できる他の関連情報を含むことができる。

特定の実施形態では、セッションID、キャッシュ内のセッションインデクス及び開始物理アドレスの組合せを用いてセッションコンテキストを特定できる。

図4を用いて更に詳細に説明するように、変換スキームを用いて、仮想メモリ内のセッションの連続するページがオフロードプロセッサ118のキャッシュ内でも物理的に連続するようにできる。キャッシュ内のセッションのこの連続性によって、セッションコンテキストをバルク読出して、「コンテキストスナップショット」として、コンテキストメモリ120に保存でき、これは、オペレーティングシステム(OS)がプロセッサリソースをセッションに戻すように切換えたとき、このコンテキストメモリ120から読み込むことができる。

セッションコンテキストをコンテキストメモリ120(低遅延メモリが好ましく、したがって、システムのメインメモリより数桁速い動作能力を有するものがよい。)からシームレスにフェッチする能力によって、オフロードプロセッサ118のL2キャッシュのサイズを実質的に拡張することができる。

幾つかの実施形態では、システム100のOSは、入出力メモリ管理ユニット(input output memory management unit:IOMMU)(図示せず)において、最適化を実現し、変換ルックアサイドバッファ(translation lookaside buffer:TLB)(又は同等のルックアップ構造)によって、各セッションのコンテンツを一意的に特定することができる。このような構成によって、セッション切換の間にアドレス変換を一意的に特定し、TLBの外部にあるページテーブルキャッシュ(page table cache)に転送することができる。

ページテーブルキャッシュを使用することによって、TLBのサイズを拡張することができる。また、仮想メモリにおいて連続する位置が、物理メモリ及び物理インデクスキャッシュ(physically indexed cache)においても連続する位置にあるため、セッションを特定するために必要なアドレス変換の回数が大幅に減少する。

図1に示す特定の実施形態では、システム100は、出力セッション及びパケット終端サービスに適合させることができる。幾つかの実施形態では、ネットワークスタック処理の制御は、スケジューラ116によって実行できる。すなわち、スケジューラ116は、トラフィック管理キュー、調停回路及びネットワークスタックオフロードデバイスとして機能できる。スケジューラ116は、オフロードプロセッサ118に代わって、セッションの全体及びフロー管理を扱う役割を有することができる。

このような構成では、オフロードプロセッサ118は、セッションに関係するパケットをバッファに直接的に供給でき、このバッファからパケットデータを取り出して使用することができる。ネットワークスタックの処理は、ネットワークによって生じる割込を処理する(割込サービスルーチンを実行する)カーネルモードへの切換を回避するように最適化してもよい。これによって、可能な限り小さいオーバーヘッドでセッションのコンテキストをシームレスに切り換えるようにシステム100を最適化できる。

図1に示すように、ここに開示するシステム100では、PCI、ファイバチャネル等の複数のタイプの従来の入出力バスを使用することができる。また、バスアーキテクチャは、関連するJEDECスタンダード、DIMMデータ転送プロトコル、ハイパートランスポート(Hypertransport)又は他の適切なあらゆる高速、低遅延相互接続システムに基づいて構成することができる。

オフロードプロセッサ118は、ダブルデータレート(double data rate:DDR)ダイナミックランダムアクセスメモリ(dynamic random access memory:DRAM)、遅延減少DRAM(reduced latency DRAM:RLDRAM(登録商標))、埋込型DRAM、次世代スタックドメモリ、例えば、ハイブリッドメモリキューブ(Hybrid Memory Cube:HMC(登録商標))、フラッシュ又は他の適切なメモリ、個別のロジック又はバス管理チップ、プログラマブルユニット、例えば、フィールドプログラマブルゲートアレイ(field programmable gate array:FPGA)、カスタム設計された特定用途向け集積回路(application specific integrated circuit:ASIC)、及び省エネルギ汎用プロセッサ、例えば、ARM(登録商標)、ARC(登録商標)、Tensilica(登録商標)、MIPS(登録商標)、Strong(登録商標)/ARM(登録商標)又はRISCアーキテクチャに基づくプロセッサを含んでいてもよい。

ホストプロセッサ110は、インテル又はAMDx86アーキテクチャ、インテルItanium(登録商標)アーキテクチャ、MIPS(登録商標)アーキテクチャ、SPARC(登録商標)アーキテクチャ等に基づくプロセッサを含む汎用プロセッサを含むことができる。

後述するように、図1のシステムによって実行されるような処理を実行する従来のシステムは、複数の処理コア上で動作する複数のスレッド上で実行することができる。このようにタスクを複数のスレッドコンテキストに並列化することによって、スループットを高めることができる。MIPS(登録商標)等のプロセッサアーキテクチャは、1サイクルあたりのインストラクションの数を多くするために、深いインストラクションパイプラインを含んでいてもよい。

更に、マルチスレッドプログラミング環境を実現する能力によって、既存のプロセッサリソースをより効率的に利用することができる。ハードウェア上の並列実行を更に向上させるために、プロセッサアーキテクチャは、複数のプロセッサコアを含んでいてもよい。

同じタイプのコアを含むマルチコアアーキテクチャは、均質コア(homogeneous core)アーキテクチャと呼ばれ、スレッド又はプロセスを複数のコアに亘って並列化することによって、より高いインストラクションスループットを提供する。しかしながら、このような均質コアアーキテクチャでは、メモリ等の共用リソースは、少数のプロセッサで消費される。

更に他の実施形態では、ラック又は個々のサーバ上に設けられた個々のラックユニット又はブレードに接続された複数のモジュール上に複数のオフロードプロセッサ又はホストプロセッサを設けてもよい。これらは、更にクラスタ及びデータセンタにグループ化することができる。なお、これらは、空間的に、同じ建物又は同じ都市内に位置していてもよく、それぞれ異なる国にあってもよい。また、これらは、如何なるグループ化レベルを相互に接続してもよく、及び/又は公共又は個人用のクラウドインターネットに接続してもよい。

このような従来の手法では、メモリ及び入出力アクセスが大量のプロセッサオーバヘッドを引き起こすことがある。更に、上述したように、従来の汎用処理ユニットのコンテキスト切換は、演算の負荷が大きい。

したがって、プロセッサスループットを向上させるために、ネットワーク接続された複数のアプリケーションを扱うネットワーク接続された演算リソースにおいて、コンテキスト切換オーバーヘッドを低減することが望ましい。

従来のサーバ負荷は、多くの場合、例えば、HTML、ビデオ、パケットレベルサービス、セキュリティ及び分析等のライトタッチ処理であっても、複雑なトランスポート、広いメモリ帯域幅、(ランダムにアクセスされ、並列化され、高度に使用可能な)過剰な量のデータ帯域幅を必要とすることがある。更に、アイドルプロセッサが、そのピーク電力消費の50%以上を消費している。

これに対し、図1に示す実施形態又はその均等物では、「ライトタッチ」処理負荷に関連する複雑なトランスポート、広いデータ帯域幅、頻繁なランダムアクセスは、複数のオフロードプロセッサ118のプロセッサコア上で作成されるソケットアブストラクションの背後で取り扱うことができる。同時に、「ヘビータッチ」高負荷演算は、ホストプロセッサ110のプロセッサコア(例えば、x86プロセッサコア)上のソケットアブストラクションによって取り扱うことができる。

このようなソフトウェアソケットによって、ライトタッチ(例えば、ARM(登録商標))プロセッサコアと、ヘビータッチ(例えば、x86プロセッサコア)との間でこれらの負荷を自然に区分けすることができる。実施形態に基づく新しいアプリケーションレベルソケットの使用によって、オフロードプロセッサ118及びホストプロセッサ110に亘ってサーバ負荷を分散させることができる。

ここに開示する実施形態の動作を明瞭にするため、図2及び図3を参照して、従来のキャッシュスキームを説明する。仮想メモリを実装する現代のオペレーティングシステムは、プロセスのために仮想メモリ及び物理メモリの両方の割当を行い、この結果、プロセス実行の際に仮想メモリから物理メモリへの変換及び仮想的にアドレス指定されたメモリへのアクセスが行われる。

プロセスのためのメモリの管理では、仮想アドレス範囲の割当と、仮想アドレスによってマッピングされる対応する物理アドレスとの間での調整は、通常、行われない。このような調整の欠如は、プロセスが実行される際に、プロセッサキャッシュオーバヘッド及び有効性の両方に影響する。

従来のシステムでは、プロセッサは、実行中の各プロセスのために仮想メモリ内で連続するメモリページを割り当てる。また、プロセッサは、物理メモリ内のページも割り当てるが、これらは、必ずしも連続しない。2つのアドレッシングスキーム間で変換トランスレーションスキームを確立し、仮想メモリのアブストラクションが物理メモリページによって正しくサポートされることを確実にする。

プロセッサは、プロセッサの近くに設けられたキャッシュブロックを用いて、データを速やかに処理する要求を満たす。従来のキャッシュは、階層的に構成することができる。例えば、レベル1(L1)キャッシュがプロセッサに最も近く、これにL2、L3等が続く。L2は、L1のバックアップとして機能する。プロセスの物理アドレスの一部によってインデクスキャッシュについては、メモリ管理ユニット(MMU)ページのサイズを超えるアドレス範囲に亘って仮想メモリと物理メモリの割当の間に相関性が欠如していると、プロセッサキャッシュが無計画で非効率なものとなる。これによってキャッシュオーバヘッドが増大し、コンテキスト切換動作の間に遅延が生じる。

物理的にアドレス指定されるキャッシュでは、仮想メモリ内の次のページのためのキャッシュエントリが、キャッシュ内の次の連続するページに対応していないことがあり、したがって、達成される総合性能が低下することがある。例えば、図2では、仮想メモリ130の連続するページ(プロセス1のページ1,2)は、物理メモリ132内の物理アドレスが(プロセッサの)物理インデクスキャッシュ134の同じ位置を指しているため、キャッシュ内で競合している。すなわち、プロセッサキャッシュ(134)には、物理インデクスが付されており、物理メモリ132内の複数のページの複数のアドレスがプロセッサキャッシュの同じページへのインデクスを有している。

更に、複数のプロセスが共有されているキャッシュにアクセスする場合、OSがプロセスに物理メモリを割り当てる際の総合的なキャッシュ性能が考慮されていないことが多い。このような考慮がなされていないために、コンテキスト切換の間に異なるプロセス(例えば、図2におけるプロセス1及びプロセス2)がキャッシュ内でスラッシングを生じ、これによって、お互いのラインが不必要に移動し、この結果、プロセスを再開する際に不定数のキャッシュミス/フィルが生じ、又はコンテキスト切換の際のラインライトバックの数が増加する。

図3に示す他の従来の構成では、プロセスの仮想アドレスの一部によって、別の手法でプロセッサキャッシュにインデクスを付すことができる。仮想インデクスキャッシュ(virtually indexed cache)は、プロセッサの仮想アドレスのビットのセクションを用いてアクセスされる。

図3に示すように、仮想メモリ130内で連続するページは、仮想インデクス付けされたキャッシュ136内でも連続する。プロセッサキャッシュに仮想インデクスを付す際には、物理メモリ132の割当と仮想アドレスの割当との調整に注意を払う必要はない。プログラムは、仮想アドレス範囲をスイープしながら、プロセッサキャッシュ内の空間的位置の利益を享受する。このようなセットアソシアティブキャッシュ(set-associative cache)は、インデクスに対応する複数のエントリを有することができる。所与のキャッシュインデクスにマッピングされる所与のページは、特定のセット内のどこにあってもよい。

キャッシュエントリが使用できる位置が複数ある場合、セットアソシアティブキャッシュによって、プロセッサがキャッシュ内でエントリを可能な限り長く使用するように努めるため、(図2に示すように)コンテキスト切換の際にキャッシュ内にスラッシングを生じさせる問題は、ある程度軽減される。このために、キャッシュは、最低使用頻度(least recently used)アルゴリズムを採用する。

この結果、オペレーティングシステムが従う仮想アドレス指定スキームに関連する幾つかの問題が緩和されるが、キャッシュのサイズに制約が生じる。したがって、最近使用したエントリが無効にされ/フラッシュされないことを確実にするため、より大きい、マルチウェイセットアソシアティブキャッシュが必要とされる場合がある。マルチウェイセットアソシアティブキャッシュの比較回路は、並列比較に対応するために複雑になる場合があり、これによって、キャッシュに関連する回路レベルの複雑性が高まる。

従来のオペレーティングシステムの幾つかでは、仮想アドレス指定スキームに起因するキャッシュミスの問題に対処するために「ページカラーリング(page coloring)」と呼ばれるキャッシュ制御方式を採用している。プロセッサキャッシュに物理インデクスが付された場合、オペレーティングシステムは、同じカラーのキャッシュ内の位置にインデクスが付されていない物理メモリ位置を検索するように制約される。

このようなキャッシュ制御スキームの下では、オペレーティングシステムは、物理インデクスキャッシュ(physically indexed cache)内のハッシュしたインデクスに基づいて、全ての仮想アドレスについて、使用可能な物理メモリ内のページを評価する必要がある。幾つかの物理アドレスは、導出されたインデクスが同じカラーのものであるために許可されない。

したがって、物理インデクスキャッシュについて、仮想メモリ内の全てのページがカラーリングされ、対応するキャッシュ位置を特定し、次のページを物理メモリに、したがって、同じカラーのキャッシュ位置に割り当てるかを判定する。

このプロセスは、ページ毎に繰り返され、煩雑な作業となることがある。ページカラーリングによって、キャッシュ効率が向上するが、最近使用したページが上書きされないように各ページのカラーを識別する必要があるため、メモリ管理及び変換ユニット上のオーバーヘッドが増大する。これに応じて、キャッシュ内の前の仮想メモリページのカラーのインジケータを維持する必要であるので、オペレーティングシステムの複雑性のレベルが高くなる。

仮想インデクスキャッシュでは、キャッシュアクセス遅延が大きいにもかかわらず、エイリアシングが広がる問題がある。エイリアシングの場合、物理メモリの同じページにマッピングされる(異なるインデクスを有する)複数の仮想アドレスが(インデクスが異なるために)キャッシュ内の別の場所にある。ページカラーリングによって、仮想ページ及び物理ページが同じカラーを有することができ、したがって、キャッシュ内で同じセットを占める。

ページカラーリングによって、エイリアスは、キャッシュ内の同じラインと同じ上位ビット及びインデクスを共有する。これによって、エイリアシングの問題が解消される。また、ページカラーリングは、メモリ割当に制約を生じさせる。新しい物理ページをページフォールト(page fault)に割り当てる場合、メモリ管理アルゴリズムは、仮想カラーとして同じカラーのページを空きリストから選択しなければならない。システムは、仮想領域を系統的に割り当てるので、異なるプログラムのページが同じカラーを有しやすく、したがって、ある物理的カラーが他のカラーより頻度が高くなることもある。

したがって、ページカラーリングは、ページフォールトレートに影響を与えることがある。更に、幾つかの物理的カラーが優勢になると、物理アドレスによってアクセスされる2次キャッシュにおいてプログラム間でマッピング競合が生じやすくなる。このように、ここに説明した従来のページカラーリングの手法では、プロセッサが非常に大きな問題に直面する。仮想ページのそれぞれは、物理メモリ内の異なるページを占有することができ、したがって、これらは、異なるキャッシュカラーを占有するが、プロセッサは、全てのページのそれぞれのアドレス変換を保存する必要がある。

プロセスが十分大きく、各プロセスが複数の仮想ページを含む場合、ページカラーリングアルゴリズムは、非常に複雑になる。また、これによって、プロセッサの仮想メモリのページ毎に同等な物理アドレスを特定する必要があるため、TLB側でも処理が複雑になる。コンテキスト切換は、TLBエントリを無効にする傾向があるので、プロセッサは、ページウォークを行い、TLBエントリを満たす必要があり、これによって、通常のコンテキスト切換に不確定性及び遅延が追加される。

このようにして、一般的に入手可能な従来のオペレーティングシステムでは、コンテキスト切換の結果、キャッシュ内で競合が生じ、及びプロセス/スレッドが再開されたときにTLBミスが生じる。プロセス/スレッドが再開すると、スレッドのワーキングセットがキャッシュにリロードされるので、不確定の数の命令及びデータキャッシュミスが生じる(すなわち、スレッドがユーザ領域内で再開され、命令を実行すると、命令は、通常、アプリケーションデータと共に、キャッシュにロードする必要がある)。

スイッチイン(すなわち、プロセス/スレッドの再開)において、TLBマッピングは、その目的で予約されたレジスタに書き込まれている新しいスレッドのページテーブルに基づいて、完全又は部分的に無効にすることができる。スレッドが実行されると、TLBミスの結果(ハードウェア又はソフトウェアによる)ページテーブルウォークが行われ、この結果、TLBフィルの状態となる。

これらのTLBミスのそれぞれは、例外(例えば、ページテーブルウォークを実行する際にメモリアクセスによって生成されるオーバーヘッド並びにページテーブルがキャッシュにない場合、関連するキャッシュミス/メモリ負荷)に起因するパイプラインストール(pipeline stall)を含むハードウェアコストを有する。

これらのコストは、プロセッサ内で、プロセスの連続するラン間で行われている処理に依存し、したがって、固定されたコストではない。更に、これらの追加的な遅延がコンテキスト切換のコストに加えられ、プロセスの実行の効率が低下する。このように、以上で説明したキャッシュ制御方式は、処理時間、メモリ要求又は他のオペレーティングシステムが制御するリソースに関して不確定(non-deterministic)であり、システム動作の全体的な効率を低下させている。

図4は、実施形態に基づくキャッシュ制御システムを示している。キャッシュ制御システムでは、セッションコンテンツは、物理インデクスキャッシュ134’内で連続することができる。この実施形態は、変換スキームを用いて、仮想メモリ130内のセッションの連続するページが物理インデクスキャッシュ134内でも物理的に連続するようにできる。

上述した不確定的なキャッシュ制御方式に比べて、少なくともコンテキスト切換動作の継続時間を確定的にすることができる。この実施形態では、前のプロセスのコンテキストを新しいプロセスのコンテキストに置き換えることは、図1のコンテキストメモリ120等の外部の低遅延メモリから新しいプロセスのコンテキストを転送することを含む。

コンテキスト切換のプロセスにおいて、(アクセスによって大きな遅延が生じる可能性がある場合)システムのメインメモリへのアクセスを回避できる。プロセスコンテキストは、コンテキストメモリ120(これは、低遅延メモリであってもよい。)からプリフェッチされる。

他のコンテキスト切換に必要である場合、プロセスコンテキストは、再びコンテキストメモリ120に保存してもよい。このようにして、サイクル数及び実行する必要がある動作の数によってコンテキスト切換動作を定義できるので、確定的なコンテキスト切換を達成することができる。更に低遅延メモリを用いて、コンテキストデータを保存することによって、速やかなコンテキスト切換を行うことができる。

図5〜図10は、上述したコンテキスト切換を含むことができるモジュールのハードウェアによる実施形態の側面を示している。特定の実施形態では、このような処理モジュールは、DIMM搭載可能モジュールを含むことができる。

図5は、一実施形態に基づく処理モジュール200のブロック図である。処理モジュール200は、物理コネクタ(後述する「インラインモジュールコネクタ」であり、単に「コネクタ」ともいう)202、メモリインタフェース204、調停ロジック206、オフロードプロセッサ208、ローカルメモリ210及び制御ロジック212を含むことができる。コネクタ202は、システムメモリバスへの物理接続を提供できる。これに対し、ホストプロセッサは、メモリコントローラ等を介してシステムメモリバスにアクセスできる。

特定の実施形態では、コネクタ202は、コンピュータシステムのデュアルインラインメモリモジュール(dual in-line memory module:DIMM)スロットに互換性を有することができる。したがって、複数のDIMMスロットを含むシステムは、1つ以上の処理モジュール200を備えていてもよく、又は処理モジュール及びDIMMモジュールの組み合わせを備えていてもよい。

メモリインタフェース204は、システムメモリバス上のデータ転送を検出でき、適切な場合、処理モジュール200に書込データを保存し及び/又は処理モジュール200から読出データを読み出すことができる。このようなデータ転送は、特定のネットワーク識別子を有するパケットデータの受信を含むことができる。幾つかの実施形態では、メモリインタフェース204は、スレーブインタフェースであってもよく、この場合、データ転送は、処理モジュール200とは別に設けられているマスタデバイスによって制御される。

特定の実施形態では、メモリインタフェース204は、ダイレクトメモリアクセス(direct memory access:DMA)スレーブであってもよく、DMAマスタによって開始されたシステムメモリバスを介するDMA転送を担ってもよい。幾つかの実施形態では、DMAマスタは、ホストプロセッサとは異なるデバイスであってもよい。このような構成では、処理モジュール200は、ホストプロセッサリソースを消費することなく、処理すべきデータを受け取り(例えば、DMA書込)、及び処理されたデータを送り出す(例えば、DMA読出)ことができる。

調停ロジック206は、処理モジュール200内でのデータアクセスの競合を調停することができる。幾つかの実施形態では、調停ロジック206は、オフロードプロセッサ208によるアクセスと、処理モジュール200の外部のアクセスとの間で調停を行うことができる。

なお、処理モジュール200は、同時に動作する複数の箇所を含むことができる。なお、調停ロジック206によって調停されるアクセスは、処理モジュール200によって占有される物理システムメモリ領域へのアクセス及び他のリソース(例えば、オフロードプロセッサ又はホストプロセッサのキャッシュメモリ)へのアクセスを含むことができる。

したがって、調停ロジック206のための調停規則は、アプリケーションに応じて異ならせることができる。

幾つかの実施形態では、このような調停規則は、所与の処理モジュール200のために固定されている。このような場合、異なる処理モジュールを切り替えることによって、異なるアプリケーションに対応することができる。また、他の実施形態として、このような調停規則を変更可能にしてもよい。

オフロードプロセッサ208は、システムメモリバスを介して転送されるデータを処理できる1つ以上のプロセッサを含むことができる。幾つかの実施形態では、オフロードプロセッサは、汎用オペレーティングシステム又はサーバアプリケーション、例えば、Apache(登録商標)(特定の一具体例に過ぎない)等を実行し、プロセッサコンテキストを保存し及び読み出すことができる。

オフロードプロセッサ208によって実行される演算タスクは、ハードウェアスケジューラによって管理することができる。オフロードプロセッサ208は、処理モジュール200にバッファリングされたデータを処理することができる。これに加えて又はこれに代えて、オフロードプロセッサ208は、システムメモリ領域の他の場所に保存されたデータにアクセスできる。

幾つかの実施形態では、オフロードプロセッサ208は、コンテキスト情報を保存するように構成されたキャッシュメモリを含むことができる。オフロードプロセッサ208は、複数のコア又は1つのコアを含むことができる。

処理モジュール200は、ホストプロセッサを有するシステム(図示せず)に含ませてもよい。幾つかの実施形態では、オフロードプロセッサ208は、ホストプロセッサとは異なるタイプのプロセッサであってもよい。

特定の実施形態では、オフロードプロセッサ208は、ホストプロセッサに比べて、消費電力が小さく及び/又は演算パワーが低くてもよい。特定の実施形態では、オフロードプロセッサ208は、「非力な(wimpy)」コアプロセッサであってもよく、ホストプロセッサは、「強力な(brawny)」コアプロセッサであってもよい。また、他の実施形態では、オフロードプロセッサ208は、あらゆるホストプロセッサと同等な演算能力を有していてもよい。

特定の実施形態では、ホストプロセッサは、x86タイプのプロセッサであってもよく、オフロードプロセッサ208は、ARM(登録商標)、ARC(登録商標)、Tensilica(登録商標)、MIPS(登録商標)、Strong(登録商標)/ARM(登録商標)又はRISCタイププロセッサであってもよく、これらは僅かな具体例に過ぎない。

ローカルメモリ210をオフロードプロセッサ208に接続して、コンテキスト情報を保存できるようにしてもよい。これによって、オフロードプロセッサ208は、現在のコンテキスト情報を保存し、新しい演算タスクへの切換を行った後、コンテキスト情報を読み出して、前のタスクを再開することができる。特定の実施形態では、ローカルメモリ210は、システム内の他のメモリに比べて遅延が小さいメモリであってもよい。

幾つかの実施形態では、コンテキスト情報の保存は、オフロードプロセッサ208のキャッシュをコピーすることを含む。

幾つかの実施形態では、同じタイプの複数のオフロードプロセッサ208がローカルメモリ210内の同じ領域にアクセスできる。これによって、1つのオフロードプロセッサによって保存されたコンテキストを、異なるオフロードプロセッサが再開することもできる。

制御ロジック212は、オフロードプロセッサ208が実行する処理タスクを制御できる。

幾つかの実施形態では、制御ロジック212は、データ評価器214、スケジューラ216及び切換コントローラ218を含むものと概念化できるハードウェアスケジューラとみなすことができる。データ評価器214は、システムメモリバスを介して転送される書込データから「メタデータ」を抽出することができる。ここで用いる「メタデータ」という用語は、書込データのブロックの1つ以上の所定の位置に埋込まれ、書込データのブロックの全て又は一部について実行すべき処理を示し、及び/又はデータが属する特定のタスク/プロセス(例えば、分類データ)を示すあらゆる情報を含む。幾つかの実施形態では、メタデータは、書込データのブロックのためのより高レベルの組織化を示すデータであってもよい。

特定の実施形態では、メタデータは、1つ以上のネットワークパケットのヘッダ情報であってもよい(ヘッダ情報は、より上位のレイヤのパケット構造内にカプセル化してもよい)。

スケジューラ216(例えば、ハードウェアスケジューラ)は、オフロードプロセッサ208のための演算タスクを順序付けることができる。幾つかの実施形態では、スケジューラ216は、スケジュールを生成でき、スケジュールは、処理すべき書込データが受信される都度、継続的に更新される。特定の実施形態では、スケジューラ216は、オフロードプロセッサ208のコンテキスト切換の能力に基づいて、このようなスケジュールを生成することができる。これによって、モジュール上の演算の優先順位をオンザフライ(on the fly)方式で調整できる。

特定の実施形態では、スケジューラ216は、演算タスクに応じて、物理アドレス領域(例えば、ローカルメモリ210内のメモリ位置)の一部をオフロードプロセッサ208に割り当てることができる。そして、オフロードプロセッサ208は、このような異なる領域間の切換を行い、各切換の前にコンテキスト情報を保存し、後に、メモリ領域に戻る際に、コンテキスト情報を復元することができる。

切換コントローラ218は、オフロードプロセッサ208の演算処理を制御できる。特定の実施形態では、切換コントローラ218は、スケジューラ216に基づき、オフロードプロセッサ208にコンテキストを切換えさせることができる。なお、コンテキスト切換動作は、切換コントローラ218からの単一のコマンドに応じて実行される「アトミック(atomic)」な動作であってもよい。これに加えて又はこれに代えて、切換コントローラ218は、現在のコンテキスト情報を保存する、コンテキスト情報を復元する等の命令セットを発行できる。

幾つかの実施形態では、処理モジュール200は、バッファメモリ(図示せず)を含むことができる。バッファメモリは、受信した書込データを処理モジュール上に保存できる。バッファメモリは、完全に異なるメモリデバイスのセット上で実現してもよく、ロジック及び/又はオフロードプロセッサに埋込まれたメモリであってもよい。埋込型のメモリの場合、調停ロジック206は、バッファメモリへのアクセスを調停できる。

幾つかの実施形態では、バッファメモリは、システムの物理メモリ領域の一部に対応できる。システムメモリ領域の残りの部分は、同様の他の処理モジュールに対応していてもよく、及び/又は同じシステムメモリバスに接続されたメモリモジュールに対応していてもよい。

幾つかの実施形態では、バッファメモリは、ローカルメモリ210とは異なっていてもよい。例えば、バッファメモリのアクセス時間は、ローカルメモリ210より長くてもよい。また、他の実施形態として、バッファメモリ及びローカルメモリを同様のメモリデバイスで実現してもよい。

特定の実施形態では、処理のための書込データは、予想された最大フローレートを有することができる。処理モジュール200は、このようなフローレートで、又はこのようなフローレートより速く、このようなデータを処理するように構成できる。これによって、マスタデバイス(図示せず)は、「プロセス内で」データを上書きしてしまう危険なしで、処理モジュールにデータを書き込むことができる。

処理モジュール200の様々な演算要素は、1つ以上の集積回路デバイス(IC)として実現することができる。なお、図5に示す様々なコンポーネントは、同じ又は異なるICで構成してもよい。例えば、制御ロジック212、メモリインタフェース204及び/又は調停ロジック206を1つ以上のロジックIC上で実現してもよく、オフロードプロセッサ208及びローカルメモリ210は、独立したICであってもよい。ロジックICは、固定ロジック(例えば、特定用途向けIC)であってもよく、プログラマブルロジック(例えば、フィールドプログラマブルゲートアレイ(field programmable gate array:FPGA))であってもよく、これらの組合せであってもよい。

以上のハードウェア及びシステムは、従来のコンピュータシステムに比べて、演算性能が向上するという利点を有する。x86プロセッサに基づくシステムを含む従来のシステムは、このような高ボリュームアプリケーションに対応する性能が不十分であることも多い。x86プロセッサは、アイドリング状態であってもかなりの量の電力を消費し、広帯域パケット解析又は他の高ボリューム処理タスクのための略々連続的な動作によって、プロセッサエネルギコストが主要なプライス要素となる。

更に、従来のシステムは、コンテキスト切換のコストが高いという問題を有し、ホストプロセッサが実行する必要がある命令は、1つのスレッドから他のスレッドへの切換えを含み得る。このような切換は、スレッドのためにコンテキストを保存し及び復元する必要が生じる。このようなコンテキストデータがホストキャッシュメモリにある場合、このようなコンテキスト切換は、比較的高速に行うことができる。一方、このようなコンテキストデータがキャッシュメモリにない場合(すなわち、キャッシュミス)、システムメモリからデータを読み込む必要があり、これによって、数サイクル分の遅延が生じることがある。コンテキスト切換の間にキャッシュミスが連続すると、システム性能が低下する場合がある。

図6は、従来の多くのサーバシステムで生じる高ボリューム処理又はコンテキスト切換に関連する問題を低減できる1つの特定の実施形態に基づく処理モジュール200−1を示している。処理モジュール200−1は、プリント回路板(PCB)タイプ基板222に搭載されるIC220−0/1を含むことができる。PCBタイプ基板222は、インラインモジュールコネクタ(in-line module connector)202を含むことができ、インラインモジュールコネクタ202は、特定の実施形態では、DIMM互換コネクタであってもよい。IC220−0は、複数の機能が統合されたシステムオンチップ(system-on-chip:SoC)タイプのデバイスであってもよい。

ここに示す特定の実施形態では、IC220−0は、埋込プロセッサ、ロジック及びメモリを含むことができる。このような埋込プロセッサは、上述したオフロードプロセッサ208又はその均等物であってもよい。このようなロジックは、上述した制御ロジック212、メモリインタフェース204及び/又は調停ロジック206又はこれらの均等物であってもよい。このようなメモリは、上述したローカルメモリ210、オフロードプロセッサ208のためのキャッシュメモリ、バッファメモリ又はこれらの均等物であってもよい。ロジックIC220−1は、ロジックIC220−0に含まれていないロジック機能を提供できる。

図7は、他の特定の実施形態に基づく処理モジュール200−2を示している。処理モジュール200−2は、図6と同様のPCBタイプ基板222に搭載されるIC220−2,−3,−4,−5を含むことができる。但し、図6とは異なり、処理モジュール機能は、複数の単目的タイプのICに亘って分散されている。IC220−2は、プロセッサICであってもよく、オフロードプロセッサ208であってもよい。

IC220−3は、メモリICであってもよく、ローカルメモリ210、バッファメモリ又はこれらの組合せを含んでいてもよい。IC220−4は、ロジックICであってもよく、制御ロジック212を含んでいてもよく、特定の実施形態では、FPGAであってもよい。IC220−5は、他のロジックICであってもよく、メモリインタフェース204及び調停ロジック206を含んでいてもよく、特定の実施形態では、これも、FPGAであってもよい。

なお、図6及び図7は、様々な具体例のうちの2つを例示しているに過ぎない。単一SoCタイプICを含む適切な如何なる数のICに亘って、処理モジュールの様々な機能を分散させてもよい。

図8は、特定の実施形態に基づく処理モジュール200−1又は処理モジュール200−2の反対面を示している。処理モジュール200−3は、図6と同様に、PCBタイプ基板222に搭載された、1つを220−6として示す複数のメモリICを含むことができる。なお、ここに示す反対面には、様々な処理及びロジックコンポーネントを搭載できる。メモリIC220−6は、システムの物理メモリ領域の一部を表すように構成してもよい。

メモリIC220−6は、他の処理モジュールコンポーネントから独立して、従来の手法でアクセスされるシステムメモリを提供し、他の処理モジュールコンポーネントが処理できる書込データを保存するバッファメモリとして機能し、又はプロセッサコンテキスト情報を保存するローカルメモリとして機能する等の機能の何れか又は全てを実行できる。

図9は、上述した処理モジュール又はその均等物と共にメモリバスに接続される(メモリ機能のみを提供する)従来のDIMMモジュールを示している。

図10は、一実施形態に基づくシステム230を示している。システム230は、(1つを226として示す)複数のインラインモジュールスロットを介してアクセス可能なシステムメモリバス228を含むことができる。実施形態においては、スロット226の何れか又は全てには、上述した処理モジュール200又はその均等物を挿入してもよい。全てのスロット226に処理モジュール200を挿入しない場合、使用可能なスロットには、従来のインラインメモリモジュール224を挿入してもよい。特定の実施形態では、スロット226は、DIMMスロットであってもよい。

幾つかの実施形態では、処理モジュール200は、1つのスロットに挿入してもよい。また、他の実施形態では、処理モジュールは、複数のスロットを占有してもよい。

更に、幾つかの実施形態では、システムメモリバス228に1つ以上のホストプロセッサ及び/又は入出力デバイス(図示せず)を接続してもよい。

以上、様々な実施形態に基づく処理モジュールについて説明したが、以下では、特定の実施形態に基づく、メモリバスを介してサーバ又は同様のシステムに接続することができるオフロード処理モジュールの動作について説明する。

図11は、実施形態に基づき、オフロードプロセッサにおいてコンテキスト切換を実行できるシステム301を示している。この具体例では、システム301は、モジュール上に配置されている(1つを300として示す)1つ以上の演算ユニットにパケットデータを転送でき、このモジュールは、特定の実施形態では、既存のメモリモジュールと互換性があるコネクタを含むことができる。

幾つかの実施形態では、演算ユニット300は、この実施形態に説明する処理モジュール又はその均等物を含むことができる。演算ユニット300は、メモリバス(「システムバス」又は「システムメモリバス」ともいう)316を介して伝送されるパケットを捕捉し又はアクセスすることができ、このようなパケットに対し、以下に限定されるものではないが、終端又はメタデータ処理を含む処理を施すことができる。システムメモリバス316は、上述したシステムメモリバス(例えば、228)又はその均等物であってもよい。

図11に示すように、システム301は、外部ソースからパケット又は他の入出力データを受け取ることができる入出力デバイス302を含むことができる。幾つかの実施形態では、入出力デバイス302は、物理デバイスが生成する物理的又は仮想機能を含み、ネットワーク、他のコンピュータ又は仮想マシンからパケット又は他の入出力データを受信することができる。ここに示す特定の実施形態では、入出力デバイス302は、入力バッファ302a(例えば、DMAリングバッファ)及び入出力仮想化機能(プログラム)302bを有するネットワークインタフェースカード(network interface card:NIC)を含むことできる。

ある実施形態では、入出力デバイス302は、パケットのために必要なメモリ動作の詳細(すなわち、読出/書込、ソース/宛先)を含むデスクリプタを書くことができる。このようなデスクリプタには、(例えば、システム301のオペレーティングシステムによって)仮想メモリ位置を割り当てることができる。そして、入出力デバイス302は、入出力メモリ管理ユニット(input output memory management unit:IOMMU)304と通信し、IOMMU304は、IOMMU機能304bによって仮想アドレスを対応する物理アドレスに変換することができる。

ここに示す特定の実施形態では、このような変換のための変換ルックアサイドバッファ(translation look-aside buffer:TLB)304aを用いることができる。そして、入出力デバイスとシステムメモリ位置との間のデータの読出又は書込の仮想機能は、システム301のメモリコントローラ306bを介して、ダイレクトメモリ転送(例えば、DMA)によって実行できる。入出力デバイス302は、ホストバス(例えば、PCIeバス)312によって、IOMMU304に接続できる。

1つの特定の実施形態では、ホストバス312は、周辺機器コンポーネント相互接続(peripheral component interconnect:PCI)タイプのバスであってもよい。IOMMU304は、中央演算処理装置入出力(central processing unit I/O :CPUIO)306aにおいて、ホスト処理セクション306に接続できる。ここに示す実施形態では、このような接続314は、ハイパートランスポート(HyperTransport:HT)プロトコルをサポートできる。

ここに示す実施形態では、ホスト処理セクション306は、CPUIO306a、メモリコントローラ306b、処理コア(以下、「ホストプロセッサ」ともいう)306c及び対応するプロビジョニングエージェント306dを含むことができる。

特定の実施形態では、演算ユニット300は、標準のインラインモジュール接続を介してシステムバス316に接続でき、このモジュール接続は、特定の実施形態では、DIMMタイプスロットを含むことができる。

ここに示す実施形態では、メモリバス316は、DDR3タイプメモリバスであってもよい。他の実施形態は、適切な如何なるシステムメモリバスも含んでいてもよい。パケットデータは、メモリコントローラ306bによって、メモリバス316を介して、DMAスレーブインタフェース(以下、「DMAスレーブデバイスモジュール」、「DMAスレーブモジュール」又は「DMAデバイス」ともいう)310aに送ることができる。DMAスレーブインタフェース310aは、DMA書込から、メモリバス316を介して、カプセル化された読出/書込命令を受信するように構成できる。

ハードウェアスケジューラ(308b/c/d/e/h)は、セッションメタデータを用いてフローに応じて受信パケットを分類することによって受信パケットに対するトラフィック管理を実行できる。パケットは、セッション優先順位に基づいて、オンボードメモリ(310b/308a/308m)の出力のためのキューに入れることができる。

オフロードプロセッサ(以下、「汎用プロセッサ」又は「汎用処理要素」ともいう)308iが特定のセッションのためのパケットを処理する準備が整ったとハードウェアスケジューラが判断した場合、ハードウェアスケジューラは、そのセッションへのコンテキスト切換をオンボードメモリにシグナリングする。この優先順位付けの手法を用いることによって、従来の手法に比較して、コンテキスト切換オーバーヘッドを低減できる。すなわち、ハードウェアスケジューラは、コンテキスト切換を決定でき、この結果、ダウンストリームリソース(例えば、オフロードプロセッサ308i)の性能を最適化することができる。

上述のように、特定の実施形態では、オフロードプロセッサ308iは、「非力な(wimpy)」コアプロセッサであってもよい。幾つかの実施形態では、ホストプロセッサ306cは、「強力な(brawny)」コアプロセッサ(例えば、x86又「ヘビータッチ(heavy touch)」演算動作を行う能力を有する他のプロセッサ)であってもよい。入出力デバイス302は、受信パケットに応じて、ホストプロセッサ割込をトリガできるように構成できるが、幾つかの実施形態では、このような割込を無効にして、ホストプロセッサ306cの処理のオーバーヘッドを低減することができる。

幾つかの特定の実施形態では、オフロードプロセッサ308iは、ARM(登録商標)、ARC(登録商標)、Tensilica(登録商標)、MIPS(登録商標)、Strong(登録商標)/ARM(登録商標)又は「ライトタッチ(light touch)」動作を扱う能力がある他の如何なるプロセッサであってもよく、好ましくは、オフロードプロセッサは、汎用オペレーティングシステムを動作させ、複数のセッションを実行することができ、これらのセッションは、ハードウェアスケジューラによって、コンテキスト切換オーバーヘッドを低減するように最適化されて動作する。

図11に示すように、実際の動作では、システム301は、ネットワークインタフェースを介して外部ネットワークからパケットを受信することができる。パケットは、分類ロジック及び入出力デバイス302が採用するスキームに基づいて、ホストプロセッサ306c又はオフロードプロセッサ308iの何れかに宛てられる。

特定の実施形態では、入出力デバイス302は、仮想化されたNICとして動作することができ、特定の論理ネットワークのためのパケット又はある仮想MAC(virtual MAC:VMAC)アドレスへのパケットは、個別のキューに入れられ、宛先論理エンティティに送ることができる。このような構成では、パケットを異なるエンティティに転送することができる。幾つかの実施形態では、このようなエンティティのそれぞれは、仮想ドライバを有することができ、仮想デバイスモデルを用いて、接続された仮想ネットワークと通信することができる。

幾つかの実施形態では、複数のデバイスを用いて、トラフィックを特定のメモリアドレスに向け直す(redirect)ことができる。したがって、ネットワークデバイスのそれぞれは、論理エンティティのメモリ位置にパケットを転送しているかのように動作する。しかしながら、実際には、このようなパケットは、1つ以上のオフロードプロセッサ(例えば、308i)が処理できるメモリアドレスに転送されている。特定の実施形態では、このような転送は、物理メモリアドレスに宛てられ、したがって、処理から論理エンティティを取り除くことができ、ホストプロセッサは、このようなパケット処理から解放される。

したがって、実施形態は、特定のネットワークデータを供給できるメモリ「ブラックボックス(black box)」を提供するものと概念化できる。このようなメモリブラックボックスは、データを取り扱い(例えば、データを処理し)、要求に応じて、このようなデータを返す。

図11に示すように、幾つかの実施形態では、入出力デバイス302は、ネットワーク又は演算デバイスからデータパケットを受け取ることができる。データパケットは、例えば、トランスポートプロトコル番号、ソース及び宛先ポート番号、ソース及び宛先IPアドレス等を含むある特徴を有することができる。データパケットは、更に、メタデータを有することができ、メタデータの処理(308d)は、パケットの分類及び管理に役立つ。

入出力デバイス302は、以下に限定されるわけではないが、周辺機器コンポーネント相互接続(peripheral component interconnect:PCI)規格と互換性を有するデバイス及び/又はPCI又はPCIeバス(例えば、312)を介してホストマザーボードに接続するPCIエキスプレス(PCI express:PCIe)デバイスであってもよい。入出力デバイスの具体例としては、ネットワークインタフェースコントローラ(network interface controller:NIC)、ホストバスアダプタ、集中型ネットワークアダプタ、切換型又は非同期伝送モード(asynchronous transfer mode:ATM)ネットワークインタフェース等を含むことができる。

複数の論理エンティティが同じ入出力デバイス302にアクセスできるアブストラクションスキームを提供するために、入出力デバイスを仮想化して、複数の仮想デバイスを提供し、それぞれの仮想デバイスが物理的入出力デバイスの幾つかの機能を実行できるようにしてもよい。実施形態に基づく入出力仮想化プログラム(例えば、302b)は、異なるメモリ位置(したがって、メモリバス上のモジュールに取り付けられた異なるオフロードプロセッサ)にトラフィックを向け直すことができる。

これを達成するために、入出力デバイス302(例えば、ネットワークカード)は、入出力仮想化(input/output virtualization:IOV)アーキテクチャ(例えば、シングルルートIOV)をサポートする制御機能(controlling function:CF)及び複数の仮想機能(virtual function:VF)インタフェースを含む幾つかの機能的部分に区切ってもよい。専用使用のためのランタイムの間に各仮想機能インタフェースにリソースを提供できる。

CF及びVFの具体例は、シングルルート入出力仮想化又はマルチルート入出力仮想化アーキテクチャ等のスキームに基づく物理機能及び仮想機能を含むことができる。CFは、仮想リソースをセットアップ及び管理する物理リソースとして機能する。また、CFは、完全な入出力デバイスとしても機能できる。VFは、複数の論理エンティティ/複数のメモリ領域と通信するために仮想デバイスのアブストラクションを提供する役割を有している。

ホストプロセッサ306c上で動作しているオペレーティングシステム/ハイパーバイザ/何れかの仮想マシン/ユーザコードをデバイスモデル、VFドライバ及びCFのためのドライバにロードしてもよい。デバイスモデルを用いて、物理デバイスのエミュレーションを作成し、作成された複数のVFのそれぞれをホストプロセッサ306cが認識できるようにしてもよい。デバイスモデルを複数回複製し、VFドライバ(仮想入出力デバイスとインタラクトするドライバ)が特定のタイプの物理デバイスとインタラクトしているように錯覚させてもよい。

例えば、任意のデバイスモジュールを用いてインテル(Intel:登録商標)イーサネット(登録商標)集中型ネットワークアダプタ(Converged Network Adapter:CNA)X540−T2等のネットワークアダプタをエミュレートすることによって、入出力デバイス302は、このようなアダプタとインタラクトしていると錯覚する。このような場合、各仮想機能は、上述したCNAの機能をサポートする能力を有していてもよく、すなわち、各物理機能(Physical Function)は、このような機能をサポートできる。

デバイスモデル及びVFドライバは、特権モード(privileged mode)又は非特権モード(non-privileged mode)の何れで実行してもよい。幾つかの実施形態では、デバイスモデル及びVFドライバに対応するコードを何がホストし/実行するかに関する制約はない。但し、コードは、入出力インタフェースの複数のコピーを作成できるようにするために、デバイスモデル及びVFドライバの複数のコピーを作成する能力を有する。

アプリケーション/ユーザレベルコードの一部としてカーネル内で動作するアプリケーション又はプロビジョニングエージェント306dは、ランタイムの間に各VFのための仮想入出力アドレス領域を作成し、これに物理アドレス領域の一部を割り当てることができる。

例えば、VFドライバを扱うアプリケーションがメモリアドレス0xaaaaからメモリアドレス0xffffにパケットを読み出し又は書き込むことを命令した場合、デバイスドライバは、ヘッド/テールポインタ(head and tail pointer)によってデスクリプタキューに入出力デスクリプタを書き込み、入出力デスクリプタは、キューエントリが追加される都度、動的に変更される。また、データ構造は、他のタイプのものであってもよく、以下に限定されるものではないが、リング構造(DMAリングバッファ)302a又はハッシュテーブルであってもよい。

VFは、ドライバによって指示されるアドレス位置からデータを読み出し、又はこのアドレス位置にデータを書き込むことができる。更に、ドライバに割り当てられたアドレス領域へのデータ転送が完了すると、通常、ネットワークパケットを扱うホストプロセッサにトリガされる割込を無効化できる。デバイスに特定の入出力空間を割り当てることは、占有される特定の物理メモリ領域を入出力空間に割り当てることを含むことができる。

他の実施例においては、デスクリプタが受信パケットを処理するための特定のデータ構造に関連している場合、デスクリプタは、書込動作のみを含んでいてもよい。更に、受信データ構造内の各エントリのためのデスクリプタを一定にし、全てのデータ書込を特定のメモリ位置に向け直してもよい。他の実施形態では、連続するエントリのためのデスクリプタがメモリ内の連続するエントリを指示するようにし、受信パケットを連続するメモリ位置に方向付けるようにしてもよい。

これに代えて、オペレーティングシステムは、VFドライバをサポートするアプリケーションのための定義された物理アドレス領域を作成し、仮想メモリアドレス領域をアプリケーション又はプロビジョニングエージェント306dに割り当てることによって、各仮想機能のための仮想アドレスと物理アドレス領域との間のマッピングを作成してもよい。この仮想メモリアドレス領域と物理メモリ領域との間のマッピングは、IOMMUテーブル(例えば、TLB304a)内に保存できる。

メモリ読出又はメモリ書込を実行するアプリケーションは、仮想機能に仮想アドレスを供給でき、ホストプロセッサOSは、物理メモリ位置の特定の部分をこのようなアプリケーションに割り当てることができる。

これに代えて、VFは、読出又は書込、例えば、ダイレクトメモリアクセス(direct memory access:DMA)読出又は書込動作の一部に関する要求を生成するように構成してもよい。仮想アドレスは、IOMMU304によって対応する物理アドレスに変換され、アクセスのために物理アドレスをメモリコントローラに提供してもよい。

すなわち、IOMMU304は、入出力デバイスによって発せられたメモリ要求を修正して、要求内の仮想アドレスを物理アドレスに変更し、メモリアクセスのためのメモリ要求をメモリコントローラに送信してもよい。メモリ要求は、ハイパートランスポート(HyperTransport:HT)314等のプロトコルをサポートするバス314を介して送信してもよい。このような場合、VFは、IOMMU304に仮想メモリアドレスを供給することによってダイレクトメモリアクセスを実行する。

これに代えて、VFが許可する場合、アプリケーションは、物理アドレスをVFデスクリプタに直接的に符号化してもよい。ホストプロセッサ306cが使用する形式の物理アドレスをVFがサポートできない場合、VFデバイスがサポートするハードウェアサイズを有するアパーチャをデスクリプタに符号化して、デバイスのターゲットハードウェアアドレスをVFに通知するようにしてもよい。

アパーチャに変換されるデータは、変換テーブルによって、システムメモリ内の定義された物理アドレス領域にマッピングできる。DMA動作は、プロセッサが実行するソフトウェアによって開始してもよく、直接的又は間接的に入出力デバイスをプログラミングして、DMA動作を実行するようにしてもよい。

図11に示すように、特定の実施形態では、演算ユニット300の一部は、1つ以上のFPGAによって実現することができる。図11のシステムにおいては、演算ユニット300は、DMAスレーブデバイスモジュール310a及び調停器(arbiter)310fを構成するFPGA310を含むことができる。DMAスレーブモジュール310aは、DMA読出/書込要求に応答できるメモリバス316への取付に適する如何なるデバイスであってもよい。

他の実施形態では、DMAスレーブモジュール310aは、メモリバス316を介するブロックデータ転送を行う能力を有する他のインタフェースであってもよい。DMAスレーブモジュール310aは、(メモリ、又は周辺機器から読出を実行する際に)DMAコントローラからデータを受信でき、(DMAスレーブモジュール310aの書込命令を実行する際に)DMAコントローラにデータを転送できる。

DMAスレーブモジュール310aは、メモリバスを介して、(例えば、パケット又はデータバースト等のDDRデータ送信の形式で)カプセル化された、又は対応するメモリバスを介して送信できる他の何らかのフォーマットのDMA読出及び書込命令を受信するように適応化してもよい。

DMAスレーブモジュール310aは、メモリR/WパケットからDMA読出/書込命令を再構築することができる。DMAスレーブモジュール310aは、DMAマスタに対するデータ読出/データ書込の形式でこれらの命令に応答するように適応化してもよく、DMAマスタは、PCIeバスの場合、周辺デバイス内にあってもよく、ISAバスの場合、システムDMAコントローラ内にあってもよい。

DMAデバイス310aが受信した入出力データは、調停のためにキューに入れることができる。調停は、異なるフローのパケットをスケジューリングし、複数のパラメータに基づいて、使用可能な帯域幅へのアクセスを提供するプロセスを含むことができる。

調停器310fは、通常、1つ以上のリクエスタ(requestors)にリソースアクセスを提供する。複数のリクエスタがアクセスを要求する場合、調停器310fは、どのリクエスタがアクセサ(accessor)になるかを判定し、次に、アクセサからリソースインタフェースにデータを渡し、ダウンストリームリソースは、データに対する処理の実行を開始することができる。

データをリソースに完全に転送し、リソースが実行を完了した後、調停器310fは、異なるリクエスタに制御を移すことができ、このサイクルは、適用可能な全てのリクエスタについて繰り返される。図11の実施形態では、調停器310fは、演算ユニット300(例えば、308)の他の部分に受信データを通知できる。

これに代えて、演算ユニット300は、2010年10月12日に発行された米国特許7,813,283号に開示されている調停スキーム(arbitration scheme)を使用してもよく、この文献の全体は、引用によって本願に援用される。幾つかの実施形態では、当分野で周知の他の適切な調停スキームを適用してもよい。これに代えて、本発明の調停スキームは、OpenFlowスイッチ及びOpenFlowコントローラを用いて実現してもよい。

図11に示す特定の実施形態では、演算ユニット300は、更に、通知/プリフェッチ回路310cを備えていてもよく、通知/プリフェッチ回路310cは、DMAスレーブモジュール310aに応答して、及び調停器310fの調停に基づき、バッファメモリ310bに保存されているデータをプリフェッチすることができる。更に、調停器310fは、メモリマッピングされた入出力受入経路310e及び送出経路310gを介して、演算ユニット300の他の部分にアクセスできる。

図11に示すように、ハードウェアスケジューラは、受信パケットのトラフィック管理を実現するスケジューリング回路308b/nを含むことできる。あるソースからのパケット、あるトラフィッククラスに関連するパケット、特定のアプリケーションに関するパケット又はあるソケットに供給されるパケットは、セッションフローの一部と呼ばれ、セッションメタデータを用いて分類できる。このような分類は、分類器308eによって行うことができる。

幾つかの実施形態では、セッションメタデータ308dは、パケットの優先順位及びスケジューリングを定める基準として機能し、受信パケットは、それらのセッションメタデータに基づいて並べ替えることができる。このパケットの並べ替えは、1つ以上のバッファで行うことができ、これらのフローのトラフィックシェイプを変更できる。

このような優先順位付け又はトラフィック管理(traffic management:TM)のために選択されるスケジューリング規則は、遅延(バッファリング)、トラフィックのバースト(バッファリング及びバースティング)、トラフィックの円滑化(バッファリング及びレート制限フロー)、トラフィックの間引き、(バッファの消費を回避するために削除するデータの選択)、又は遅延ジッタ時間的(異なる量によるフローのセルの時間的シフト)によって、及び接続を認めない(例えば、既存のサービスレベル合意(service level agreement:SLA)と追加的なフローのSLAとを同時に保証しない)ことによってフロー及びマイクロフローのトラフィックシェイプ(traffic shape)に影響を与える。

幾つかの実施形態では、演算ユニット300は、切換構造の一部として機能でき、深さ限定出力キュー(depth-limited output queues)をトラフィック管理に提供し、ここへのアクセスは、スケジューリング回路308b/nによって調停される。このような出力キューは、トラフィック管理を受信フローに提供するスケジューリング規則を用いて管理される。これらのキューのそれぞれに入れられたセッションフローは、ダウンストリームネットワーク要素への出力ポートを介して送り出すことができる。

なお、従来のトラフィック管理は、ダウンストリーム要素と既に合意されているSLA合意を除いて、ダウンストリーム要素によるデータの取り扱い及び管理を考慮に入れない。

一方、本発明の実施形態では、スケジューラ回路308b/nは、各出力キューに優先順位を割り当て、受信パケットの並べ替えを行い、これらのキュー内のセッションフローの持続性を維持することができる。スケジューラ回路308b/nを用いて、オフロードプロセッサ308i上で実行される汎用オペレーティングシステム(OS)308jへのこれらの持続的なセッションのそれぞれのスケジューリングを制御することができる。

上述したように、特定のセッションフローのパケットは、特定のキューに属することができる。スケジューラ回路308b/nは、これらのキューの優先順位を制御でき、これによって、これらのキューは、ダウンストリームに位置する汎用(general purpose:GP)処理リソース(例えば、オフロードプロセッサ308i)によって処理されるように調停される。ダウンストリームプロセッサ308i上で動作するOS308jは、処理中の特定のキューに、実行リソース、例えば、プロセッササイクル及びメモリを割り当てることができる。

更に、OS308jは、この特定のキューのためにスレッド又はスレッドのグループを割り当てることができ、これによって、汎用処理要素(オフロードプロセッサ)308iは、これらを独立したエンティティとして取り扱うことができる。GP処理リソース上で複数のセッションが動作でき、スケジューラ回路が設定したキュー内にある特定のセッションフローからのデータをそれぞれが処理することによって、スケジューラ及びダウンストリームリソース(例えば、308i)を緊密に統合することができる。これによって、トラフィック管理/スケジューリング回路及び汎用処理リソース308iに亘って、セッション情報が持続的なものとなる。

各セッションのための専用の演算リソース(例えば、308i)、メモリ領域及びセッションコンテキスト情報は、汎用プロセッサ(オフロードプロセッサ)308iにおいて、各セッションフローを取り扱い、処理し及び/又は終端することによって提供することができる。スケジューラ回路308b/nは、この実行リソースの機能を用いて、ダウンストリームのスケジューリングのためにセッションフローをキューに入れることができる。スケジューラ回路308b/nには、実行リソース(例えば、308i)の状態、実行リソース上で行われている現在のセッション、そのセッションに割り当てられたメモリ領域、及びプロセッサキャッシュ内のセッションコンテキストの位置が通知される。

幾つかの実施形態では、スケジューラ回路308b/nは、更に、実行リソースを1つの状態から他の状態に切り換える切換回路を含んでいてもよい。スケジューラ回路308b/nは、このような能力を用いて、ダウンストリーム実行リソースに切換える準備が整ったキューの間を調停する。更に、ダウンストリーム実行リソースは、リソース間のコンテキスト切換に関連するペナルティ及びオーバーヘッドを減少させるように最適化できる。これによって、スケジューラ回路308b/nは、更に、キュー間のシームレスな切換を行い、この結果、実行リソースがこれらを異なるセッションとして実行する。

幾つかの実施形態では、スケジューラ回路308b/nは、ダウンストリームの処理リソース上の異なるセッションをスケジューリングすることができ、これらのセッションは、コンテキスト切換の間のオーバーヘッドを減少させるように調整されて動作する。サービスの遅延を低減し、演算の使用可能性を設計する際には、ハードウェアコンテキスト切換をネットワークのキューに同期させることが重要である。

ある実施形態では、トラフィックマネージャがキューを選択する際、パイプラインが対応するリソース(例えば、308i)のキャッシュ(例えば、L2キャッシュ)のスワップインを調整し、及び再構築された入出力データを実行プロセスのメモリ領域に転送する。幾つかの場合、キュー内に係留するパケットがなくても、演算は、前のパケットへのサービスに係留されていることがある。一旦、このプロセスがスワッピングされたデータの外側のメモリ参照を行うと、スケジューラ回路(308b/n)は、入出力デバイス302からのデータをキューに入れてスレッドのスケジューリングを続けることができる。

幾つかの実施形態では、データを有さないプロセスに公平なキューを提供するため、最大のコンテキストサイズを処理されるデータとして仮定できる。これによって、キューに十分な演算リソース及びネットワーク帯域幅リソースを提供できる。特定の具体例として、演算リソースは、800MHzで動作するARM(登録商標) A9プロセッサであってもよく、ネットワーク帯域幅は、3Gbpsであってもよい。このような非対称な比率のため、幾つかの実施形態が用いる演算では、(ハードウェアによるセッション固有データのプリフェッチングによってホストプロセッサ負荷の大部分がオフロードされるように)多くの並列セッションを行い、及び汎用のデータ処理を最小量にしてもよい。

したがって、幾つかの実施形態では、スケジューラ回路308b/nは、送り出しキューの間をラインレート速度で調停するのではなく、終端されたセッション間を非常に高い速度で調停するものと概念化できる。汎用OSを含む複数のステージのパイプラインに亘るセッションの持続性は、スケジューラ回路がこのようなパイプラインのステージの何れか又は全てを最適化することによって実現できる。

これに代えて、引用によって本願に援用される、2010年7月20日にDalalに発行された米国特許7,760,715号に示すスケジューリングスキームを用いてもよい。このスキームは、フローを多く選択しすぎた場合に生じる他のリソースのダウンストリーム輻輳を防止するため、又は特定のフローのためのサービス契約を強制的に実施するためにフローの速度を制限することが望ましい場合に有用である。幾つかの実施形態は、汎用OS等のダウンストリームのリソースのサービス契約を実現する調停スキームを含むことができ、これは、シームレスに強制することができる。

図11に示すように、この実施形態に基づくハードウェアスケジューラ又はその均等物は、セッションメタデータに基づいて、受信パケットデータをセッションフローに分類することができる。また、ハードウェアスケジューラ又はその均等物は、調停の前に、これらのフローのトラフィック管理を行い、オフロードプロセッサにおける別個の処理エンティティとしてキューに入れることができる。

幾つかの実施形態では、オフロードプロセッサ(例えば、308i)は、異なるアプリケーション又はトランスポートセッションのパケットを処理できる汎用の処理ユニットであってもよい。このようなオフロードプロセッサは、汎用の命令を実行できる低パワープロセッサであってもよい。オフロードプロセッサは、以下に限定されるものではないが、ARM(登録商標)、ARC(登録商標)、Tensilica(登録商標)、MIPS(登録商標)、Strong(登録商標)/ARM(登録商標)、又はここに説明した機能を実現する他の適切な如何なるプロセッサであってもよい。このようなオフロードプロセッサは、オフロードプロセッサ上で動作する汎用OSを有し、汎用OSは、異なるスレッド又はスレッドグループ間のコンテキスト切換に関連するペナルティを減少させるように最適化されている。

一方、ホストプロセッサ上のコンテキスト切換は、レジスタ退避領域を必要とし、キャッシュ内のコンテキストを処理し、及びTLBエントリが無効又は上書きされた場合、これを復元する必要がある演算負荷が大きいプロセスである場合がある。ホスト処理システム内の命令キャッシュ(Instruction Cache)ミスは、パイプラインストール(pipeline stall)を引き起こすことがあり、データキャッシュミスは、動作の停止を引き起こすことがあり、このようなキャッシュミスは、プロセッサ効率を低下させ、プロセッサオーバヘッドを増加させる。

一方、スケジューラ(スケジューリング)回路308b/n及びこれに関連してオフロードプロセッサ308i上で動作するOS308jも、協働して、OS308j上で動作する異なる処理エンティティ間のコンテキスト切換オーバーヘッドを減少させる。

実施形態は、スケジューラ回路とオフロードプロセッサ308i上のOSとを協働させるメカニズムを含むことができる。ここで、OSは、キャッシュ内に物理的に連続するセッションコンテキストをセットアップする(セッションヒープ(heap)及びスタックのための物理的にカラーリングされたアロケータ(physically colored allocator))。

そして、OSは、セッション初期化の際に、セッションのカラー、サイズ及び開始物理アドレスをスケジューラ回路に通信する。実際のコンテキスト切換の間、スケジューラ回路は、これらのパラメータを用いてキャッシュ内でセッションコンテキストを特定でき、外部の低遅延メモリ(例えば、308g)へのこれらのコンテンツのバルク転送を開始する。

更に、スケジューラ回路は、コンテキストがローカルメモリ308gに保存されると、以前のセッションのプリフェッチを管理できる。特定の実施形態では、ローカルメモリ308gは、低遅延動的ランダムアクセスメモリ(reduced latency dynamic random access memory:RLDRAM(登録商標))等の低遅延メモリであってもよい。したがって、幾つかの実施形態では、キャッシュ内でセッションコンテキストを一意的に特定できる。

幾つかの実施形態では、高速切換速度を確実にするためにコンテキストサイズを制限してもよい。これに加えて又はこれに代えて、実施形態は、セッションコンテキストをローカルメモリ308gに転送するバルク転送メカニズムを含んでいてもよい。

そして、前のセッションに戻るコンテキスト切換の間、ここに保存されているキャッシュコンテンツを読み出し及びプリフェッチすることができる。高速検索のために、ローカルメモリ308g内で異なるコンテキストセッションデータにタグ及び/又は識別情報を付与してもよい。上述のように、1つのオフロードプロセッサによって保存されたコンテキストを、異なるオフロードプロセッサが呼び出すこともできる。

図11の特定の実施形態では、複数のオフロード処理コアを演算FPGA308に統合できる。他のFPGA310内の調停装置回路によって複数の演算FPGAを調停してもよい。演算FPGA(例えば、308)及び調停器FPGA(例えば、310)の組合せは、「XIMM」モジュール又は「Xockets DIMMモジュール」(例えば、演算ユニット300)と呼ばれる。特定のアプリケーションでは、これらのXIMMモジュールは、オフロードプロセッサ上の複数のセッションの実行を仲介する統合トラフィック及びスレッド管理回路を提供できる。

また、図11は、オフロードプロセッサトンネル接続308k、メモリインタフェース308m及びポート308l(アクセラレータコヒーレントポート(accelerator coherency port:ACP)であってもよい。)を示している。メモリインタフェース308mは、バッファメモリ308aにアクセスできる。

幾つかの実施形態では、システム301は、オフロードプロセッサ308iのキャッシュコンテンツにアクセスするためのアクセスユニット(又は「スヌーピング(snooping)」ユニット)308lを有していてもよい。

特定の実施形態では、アクセスされるキャッシュは、L2キャッシュであってもよい。アクセスユニット308lは、外部の非キャッシュメモリ308gからオフロードプロセッサキャッシュにデータをロードし、オフロードプロセッサ308iのキャッシュコンテンツを非キャッシュメモリ308gに転送するポート又は他のアクセス能力を提供できる。演算要素300の一部として、複数のメモリデバイス(例えば、RAM)によってメモリ308gを構成してもよい。したがって、メモリ308gを用いて、セッションのキャッシュコンテンツを保存することができる。

メモリ308gは、1つ以上の低遅延メモリを含むことができ、使用可能なL2キャッシュの補足及び/又は拡張として概念化でき、セッションのコヒーレント領域を拡張する。追加的メモリ308g及びアクセスユニット308lは、セッションのコンテキストをオフロードプロセッサキャッシュにフェッチ及びプリフェッチし、スレッドが再開したとき、以前のワーキングセットの大部分が既にキャッシュ内に存在するようにすることによって、セッション切換におけるキャッシュミスの悪影響を減少させることができる。

1つの特定の実施形態では、セッションのスイッチアウト時に、トンネル308kを介して、オフロードプロセッサ308iのキャッシュコンテンツをメモリ308gに転送することができる。

但し、幾つかの実施形態では、スイッチアウトの一部としてスレッドのレジスタセットをメモリに保存し、これらのレジスタコンテンツをキャッシュ内に残すことができる。したがって、スイッチインの一部としてセッションのコンテンツがプリフェッチされ、オフロードプロセッサ308iのキャッシュに転送されるので、スレッドの再開時にカーネルによってレジスタコンテンツをロードでき、これらのロードは、メモリ308gからではなく、キャッシュから行うことができる。

このように、セッションのキャッシュコンテンツを慎重に管理することによって、レジスタセットの保存及び復元に起因するコンテキスト切換のコスト並びにスイッチインの際のキャッシュミスを大幅に低減でき、最適な場合、これらをゼロにすることができ、この結果、コンテキスト切換オーバーヘッドの2つのソースを排除し、スイッチインセッションにおける有効な処理を再開するための遅延を短縮することができる。

幾つかの実施形態では、アクセス(又はスヌーピング)ユニット(例えば、308l)は、関連するセッションコンテキストが存在するキャッシュ内の全てのラインのインデクスを有することができる。セッションが物理インデクスキャッシュ内の複数の位置に亘って分散されている場合、同じセッションの複数のページにアクセスするために複数のアドレス変換が必要となるため、セッションコンテンツの全てにアクセスすることが煩雑になることがある。

したがって、幾つかの実施形態は、セッションコンテンツが物理インデクスキャッシュ内で連続するページカラーリング方式を含む。セッションデータのためのメモリアロケータは、物理的に連続するページから割当を行い、これにより、セッションのための物理アドレス範囲が制御される。

幾つかの実施形態では、これは、仮想メモリページと、物理メモリページとを揃え、キャッシュ内の同じ位置を指すことによって行われる(例えば、図4)。他の実施形態では、仮想メモリページ及び物理メモリページは、物理インデクスキャッシュ内で同じ位置を指している必要はなく、開始インデクス及びキャッシュ内のエントリのサイズに関する知識が全てのセッションデータにアクセスするために十分であれば、セッションの異なるページが物理メモリ内で連続していてもよい。

更に、セットサイズは、セッションのサイズに等しく、これにより、キャッシュ内のセッションエントリのインデクスが既知になると、インデクス、サイズ及びセットカラーを用いて、セッションコンテンツをキャッシュから外部メモリ(例えば、308g)に完全に転送することができる。

幾つかの実施形態では、オフロードプロセッサのキャッシュ内でセッションの全てのページに同じカラーを割り当てることができる。特定の実施形態では、セッションの全てのページが定義されたカラーのページ境界で開始するようにしてもよい。カラーに割り当てられるページ数は、キャッシュ内のセッションのサイズに基づいて固定できる。

オフロードプロセッサ(例えば、308i)を用いて、特定のタイプのセッションを実行することができ、各セッションのサイズをオフロードプロセッサに事前に通知してもよい。これに基づいて、オフロードプロセッサは、セッション境界において新たなエントリを開始できる。

オフロードプロセッサは、同様に、キャッシュ内のセッション境界にインデクスが付された物理メモリにページを割り当てることができる。キャッシュコンテキストの全体は、セッション境界から開始して保存することができる。この実施形態では、物理インデクスキャッシュにおいて、セッション内の複数のページが連続することができる。

セッションの複数のページは、同じカラーを有することができ(すなわち、これらのページは、同じセットの一部である)、連続的に位置することができる。セッションのページは、セッションのベースインデクスからのオフセットを用いてアクセス可能である。

キャッシュは、ページではなく、セッションとして個別のセットに分割してもよい。1つのセッションから他のセッションに移動する際、メモリ割当スキームは、これらのセッションにアクセスするために用いられるインデクスの最小ビットへのオフセットを用いる。例えば、物理インデクスキャッシュは、512kbのサイズのL2キャッシュであってもよい。

キャッシュは、L2キャッシュ内でセット毎に8つのタグが可能な8ウェイアソシアティブ(8-way associative)であってもよい。したがって、L2内の全てのカラー毎に8つのラインがあり、又はL2内の各カラーが8つの個別のインスタンスを有する。8Kbのセッションコンテキストサイズでは、512KbのL2キャッシュ内に8つの異なるセッション領域があり、又はこれらの選択されたサイズを有する8つのセッションカラーがある。

幾つかの実施形態では、物理メモリアロケータは、時間的に前のセッションのキャッシュエントリ/メインメモリエントリに基づいて、セッションに対応するカラーを特定できる。特定の実施形態では、物理メモリアロケータは、キャッシュエントリを前のセッションに割り当てるために用いられるアドレスの3ビットに基づいて、前のセッションを特定できる。

物理メモリアロケータは、メインメモリ位置に新たなセッションを割り当てることができ(そのカラーは、最近使用したエントリとの幾つかの比較によって決定できる。)、及び最低使用頻度(least recently used)ポリシに基づいて、異なるカラーのセッションに対応するキャッシュエントリを消去する。

他の実施例においては、オフロードプロセッサは、複数のコアを含むことができる。このような実施形態では、各プロセッサコアによる使用のためにキャッシュエントリをロックアウトできる。例えば、オフロードプロセッサが2つのコアを有する場合、カラーの数を半分にして、キャッシュ(すなわち、L2キャッシュ)内のキャッシュラインの所定のセットをプロセッサ間で分割できる。新たなセッションが生成されたとき、セッションのカラー、セッションのインデクス及びセッションサイズを外部のスケジューラに通信できる。この情報は、受信セッションフローのキュー管理のために用いることができる。

また、幾つかの実施形態では、セッションデータとは別にラインをキャッシュにロックすることによって共有テキスト及び何らかの共有データを分離できる。この場合も、物理メモリアロケータ及び物理カラーリング技術を用いることができる。個別の共有データがキャッシュ内にある場合、これをキャッシュにロックし、アクセスユニット(例えば、ACP)による転送がこのようなラインをコピーしないようにできる。セッションデータのためにメモリを割り当てる際、メモリアロケータは、キャッシュ内にあるセッションデータがマッピングされるので、物理カラーを知ることができる。

キャッシュ及びコンテキスト切換管理動作に適切な様々な実施形態について説明したが、以下では、特定の側面を示す具体例について説明する。

図12は、実施形態に基づくシステムのためのオーバーヘッドを低減するコンテキスト切換方法400を示している。最初に、セッションカラーリングが必要かを判定できる(ステップ402)。このような判定は、OSが行ってもよい。セッションカラーリングが不要である場合(ステップ402におけるNo)、OSの初期選択に応じて、ページカラーリングは、存在してもよく、しなくてもよい(ステップ424)。

セッションカラーリングが必要な場合(ステップ402におけるYes)、OSは、メモリアロケータを初期化することができる(ステップ404)。メモリアロケータは、キャッシュ最適化技術を用いて、「セッション」境界に各セッションエントリを割り当てることができる。メモリアロケータは、各セッションの開始アドレス、キャッシュ内で許容されるセッションの数、所与のカラーについてセッションを検索できる位置の数を決定できる。このような動作は、キャッシュサイズ、カラーの数及びセッションのサイズに基づいて有効なセット数を判定することを含んでもよい(ステップ406)。

セッションのためのパケットが到着すると、パケットが現在のセッションのためのものか、異なるセッションのためのものかを判定する(ステップ408)。このような動作は、OSが行うことができる。パケットが異なるセッションからのものであるである場合(ステップ408におけるYes)、パケットが以前のセッションからのものであるかを判定する(ステップ410)。パケットが以前のセッションからのものでない場合(すなわち、新たなセッションのものである場合)、新たなセッションのための十分なメモリがあるかを判定する(ステップ418)。十分な領域がある場合(ステップ418におけるYes)、新たなセッションへの切換を行うことができる(ステップ422)。

このような動作は、セッション境界において新たなセッションを割り当て、現在実行中のプロセスのコンテキストをコンテキストメモリ(外部の低遅延メモリであってもよい。)に保存することを含むことができる。

新たなセッションに使用できるキャッシュメモリがない場合(ステップ418におけるNo)、及び/又はパケットが以前のセッションのためのものである場合(ステップ410におけるYes)、古い/新しいセッションのパケットが同じカラーのものであるかを検査し、判定する(ステップ412)。これらが異なるカラーのものである場合(ステップ412におけるNo)、そのセッションへの切換を行うことができる(ステップ414)。

このような動作は、タスクのためのキャッシュエントリを(以前のセッションのために)読み出すこと又は(新たなセッションのために)作成することを含むことができる。更にこのような動作は、必要であれば、LRUスキームによるキャッシュエントリのフラッシングを含むことができる。

古い/新しいセッションのパケットが同じカラーのものである場合(ステップ412におけるYes)、カラープレッシャを超えることができるかを判定することができる(ステップ416)。カラープレッシャを超えることができる場合、又は他のカラーのセッションが使用できない場合(ステップ416のYes、又は…)、新たなセッションへの切換を行うことができる(ステップ420)。このようなアクションは、キャッシュエントリを作成し、新たなセッションカラーを記憶することを含むことができる。カラープレッシャを超えることができないが他のカラーのセッションが使用可能である場合(ステップ416におけるNo、但し…)、方法は、414に進むことができる。

なお、上述した本発明の例示的な実施形態の説明では、説明を明瞭にするため及び本発明の様々な側面の1つ以上の理解を補助するために、本発明の様々な特徴は、単一の実施形態、図又はその説明において共にグループ化されている。但し、このような開示の手法は、請求の範囲に記載されている発明が各請求項で明示している特徴以外の特徴を要求するという意図を反映しているとは解釈されない。

すなわち、特許請求の範囲は、本発明の側面が上述した実施形態の全ての特徴より少ない特徴で成立することを表している。したがって、詳細な説明に続く特許請求の範囲は、この詳細な説明にも組み込まれ、各請求項は、それ自体が本発明の個別の実施形態を表していると解釈される。

また、本発明の実施形態は、特に開示していない要素及び/又はステップを欠いた状態で実施してもよい。すなわち、要素の省略も本発明の特徴に含まれる。

したがって、ここでは、特定の実施形態の様々な側面を詳細に説明したが、本発明の精神及び範囲から逸脱することなく、実施形態の様々な変更、置換及び変形が可能である。

100,230,301 システム、102 データソース、104 データパケット、106 第1の(仮想)スイッチ、107 PCIeバス、108 入出力(I/O)機構、109 メモリバス、110 ホストプロセッサ、111 プロビジョニングエージェント(provisioning agent)、112 メモリコントローラ、114 第2の(仮想)スイッチ、116 スケジューラ、118 オフロードプロセッサ、120 コンテキストメモリ、122 モジュール、124 メモリバス、130 仮想メモリ、132 物理メモリ、134,134’ 物理インデクスキャッシュ(プロセッサキャッシュ)、136 キャッシュ、200−1/−2/−3 処理モジュール、202 (物理)コネクタ(インラインモジュールコネクタ:in-line module connector)、204 メモリインタフェース、206 調停ロジック、208 オフロードプロセッサ、210 ローカルメモリ、212 制御ロジック、214 データ評価器、216 スケジューラ、218 切換コントローラ、222 プリント回路板(PCB)タイプ基板、220−0/−1/−2/−4/−5/−6 ロジックIC、220−3 メモリIC、224 インラインメモリモジュール、226 スロット、228 システムメモリバス、300 演算ユニット、302 入出力デバイス、302a 入力バッファ(リング構造;DMAリングバッファ)、302b 入出力仮想化機能(プログラム)、304 入出力メモリ管理ユニット(input output memory management unit:IOMMU)、304a 変換ルックアサイドバッファ(translation look-aside buffer:TLB)、304b IOMMU機能、306 ホスト処理セクション、306a 中央演算処理装置入出力(central processing unit I/O :CPUIO)、306b メモリコントローラ、306c 処理コア(ホストプロセッサ)、306d プロビジョニングエージェント、308a バッファメモリ、308d セッションメタデータ、308b/c/d/e/h ハードウェアスケジューラ、308b/n スケジューラ(スケジューリング)回路、308e 分類器、308i オフロードプロセッサ/汎用プロセッサ/汎用処理要素、308j 汎用オペレーティングシステム(OS)、308g ローカルメモリ(低遅延メモリ)、308,308k オフロードプロセッサトンネル接続、308m メモリインタフェース、308g (非キャッシュ)メモリ、308l アクセラレータコヒーレントポート(accelerator coherency port:ACP)/アクセス(又はスヌーピング:snoopingユニット、310b/308a/308m オンボードメモリ、310 FPGA、310a DMAスレーブインタフェース(DMAスレーブデバイスモジュール/スレーブモジュール/デバイス)、312 ホストバス(例えば、PCIeバス)、310b バッファメモリ、310c 通知/プリフェッチ回路、310e 入出力受入経路、310g 送出経路、310f 調停器(arbiter)、314 接続(バス)、316 メモリバス(システムメモリバス/システムバス)

高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈