(57)【要約】  パケット処理システムのためのスケジューリングシステムは、メモリバスに接続され、ネットワークパケットを分類し、分類したネットワークパケットを第１の複数の入出力キューに入れる分類回路と、分類回路から第１の複数の入出力キューを介して受信したネットワークパケットを並べ替え、並べ替えたネットワークパケットを第２の複数の入出力キューに入れるスケジューリング回路と、スケジューリング回路から第２の複数の入出力キューを介して受信したネットワークパケットを複数の出力ポートに方向付ける調停回路と、複数の出力ポートの少なくとも１つに接続され、それぞれネットワークパケットを変更するように構成された複数のオフロードプロセッサとを備える。【選択図】  図１
2016503933.tif 000002
【特許請求の範囲】
【請求項１】
パケット処理システムのためのスケジューリングシステムにおいて、
メモリバスに接続され、ネットワークパケットを分類し、前記分類したネットワークパケットを第１の複数の入出力キューに入れる分類回路と、
前記分類回路から前記第１の複数の入出力キューを介して受信した前記ネットワークパケットを並べ替え、前記並べ替えたネットワークパケットを第２の複数の入出力キューに入れるスケジューリング回路と、
前記スケジューリング回路から前記第２の複数の入出力キューを介して受信した前記ネットワークパケットを複数の出力ポートに方向付ける調停回路と、
前記複数の出力ポートの少なくとも１つに接続され、それぞれ前記ネットワークパケットを変更するように構成された複数のオフロードプロセッサとを備えるスケジューリングシステム。
【請求項２】
前記メモリバスは、ダイレクトメモリアクセスをサポートし、前記複数のオフロードプロセッサは、前記変更されたパケットをメモリバスに戻すことができる請求項１記載のスケジューリングシステム。
【請求項３】
前記分類回路は、セッションメタデータに基づいてネットワークパケットを分類するように構成されている請求項１記載のスケジューリングシステム。
【請求項４】
前記スケジューリング回路は、前記複数のオフロードプロセッサのそれぞれの使用可能性に基づいて、ネットワークパケットを方向付けるように構成されている請求項１記載のスケジューリングシステム。
【請求項５】
前記スケジューリング回路は、セッション優先順位に従ってネットワークパケットを並べ替えるように構成されている請求項１記載のスケジューリングシステム。
【請求項６】
前記スケジューリング回路は、前記複数のオフロードプロセッサの少なくとも１つのためにコンテキスト切換を開始するように構成されている請求項１記載のスケジューリングシステム。
【請求項７】
前記スケジューリング回路は、定義されたトラフィック管理キューにネットワークパケットを転送するように構成されている請求項１記載のスケジューリングシステム。
【請求項８】
前記スケジューリング回路は、前記複数のオフロードプロセッサのそれぞれのためのネットワークパケット処理がいつ完了したかを判定するように構成されている請求項１記載のスケジューリングシステム。
【請求項９】
前記スケジューリング回路は、先取りモードで動作してセッション実行を制御するように構成されている請求項１記載のスケジューリングシステム。
【請求項１０】
パケット処理をスケジューリングする方法において、
セッションメタデータに基づいてネットワークパケットを分類し、前記分類されたネットワークパケットを第１の複数の入出力キューに入れ、定義されたメモリトランスポートプロトコルを有するメモリバスを用いて、ネットワークパケットを分類回路に転送するステップと、
スケジューリング回路を用いて、前記第１の複数の入出力キューから受信したネットワークパケットを並べ替え、前記並べ替えたネットワークパケットを第２の複数の入出力キューに入れるステップと、
調停回路を用いて、前記スケジューリング回路から前記第２の複数の入出力キューを介して受信した前記ネットワークパケットを複数の出力ポートに方向付けるステップと、
複数のオフロードプロセッサを用いてネットワークパケットを変更するステップとを有し、前記複数のオフロードプロセッサのそれぞれは、複数の出力ポートの少なくとも１つに接続され、前記変更されたネットワークパケットを前記メモリバスに方向付けるように構成されている、パケット処理をスケジューリングする方法。
【請求項１１】
前記ネットワークパケットを方向付けるステップは、前記複数のオフロードプロセッサの使用可能性に基づいて行われる請求項１０記載のパケット処理をスケジューリングする方法。
【請求項１２】
前記ネットワークパケットの並べ替えは、前記ネットワークパケットのセッション優先順位に従って行われる請求項１０記載のパケット処理をスケジューリングする方法。
【請求項１３】
前記スケジューリング回路の動作によって、前記複数のオフロードプロセッサの少なくとも１つのためのコンテキスト切換を開始するステップを更に有する請求項１０記載のパケット処理をスケジューリングする方法。
【請求項１４】
前記スケジューリング回路の動作によって、前記ネットワークパケットを定義されたトラフィック管理キューに転送するステップを更に有する請求項１０記載のパケット処理をスケジューリングする方法。
【請求項１５】
前記スケジューリング回路の動作によって、前記複数のオフロードプロセッサのそれぞれのためのパケット処理がいつ完了したかを判定するステップを更に有する請求項１０記載のパケット処理をスケジューリングする方法。
【請求項１６】
前記スケジューリング回路の動作によって、現在のネットワークパケット処理セッションを先取りするステップを更に有する請求項１０記載のパケット処理をスケジューリングする方法。
【請求項１７】
ネットワークパケット処理のためのサービスをスケジューリングする、メモリバスに接続されたモジュールにおいて、
メモリバス接続と、
前記メモリバス接続から受信したネットワークパケットを並べ替え、前記並べ替えたネットワークパケットを複数の入出力キューに入れるように構成されたスケジューリング回路と、
前記メモリバス接続に接続され、それぞれが、前記複数の入出力キュー内のネットワークパケットを変更するように構成された複数のオフロードプロセッサとを備えるモジュール。
【請求項１８】
前記スケジューリング回路は、前記複数のオフロードプロセッサのそれぞれの使用可能性に基づいて、ネットワークパケットを方向付けるように構成されている請求項１７記載のモジュール。
【請求項１９】
前記スケジューリング回路は、前記ネットワークパケットのセッション優先順位に従ってネットワークパケットを並べ替えるように構成されている請求項１７記載のモジュール。
【請求項２０】
前記スケジューリング回路は、前記複数のオフロードプロセッサの少なくとも１つのためにコンテキスト切換を開始するように構成されている請求項１７記載のモジュール。
【請求項２１】
前記スケジューリング回路は、定義されたトラフィック管理キューにネットワークパケットを転送するように構成されている請求項１７記載のモジュール。
【請求項２２】
前記スケジューリング回路は、前記複数のオフロードプロセッサのそれぞれためのネットワークパケット処理がいつ完了したかを判定するように構成されている請求項１７記載のモジュール。
【請求項２３】
前記スケジューリング回路は、先取りモードで動作してセッション実行を制御するように構成されている請求項１７記載のモジュール。
【請求項２４】
前記メモリバス接続は、メモリバスソケットと互換性を有する請求項１７記載のモジュール。
【請求項２５】
前記メモリバス接続は、デュアルインラインメモリモジュール（ＤＩＭＭ）ソケットと互換性を有する請求項１７記載のモジュール。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリバス接続モジュールによってオフロードプロセッサに提供できるコンピュータシステムのためのスケジューリング及びトラフィック管理サービスに関する。
【背景技術】
【０００２】
ネットワークパケットフロー及びパケット処理の効率的な管理は、ネットワーク接続された演算システムの性能を高めるために重要である。ネットワークパケットフローは、ハードウェア構成、処理フロー及びデータフローに応じて大きく変化することがあり、データ処理の必要性は、時間のスケールで、数秒から数時間の範囲に亘って数桁も変化することがある。データフローを柔軟に処理でき、データフローのパターンを認識又は特徴付けでき、データフローのためのルーティング及び処理判定を改善できるシステムによって、ネットワークサービスを実質的に向上させることができる。これは、パケット交換通信を用いるネットワークコンピュータ環境にとって、特に重要である。例えば、ネットワークセキュリティが要求するパケット検査（packet inspection）のために、データフローの遅延が生じることが多い。このようなパケット検査は、パケットのヘッダ又はパケットのペイロードの何れにおいて指示してもよく、プロセッサコンテンツ照合（processor content matching）、挙動異常検出、「ブラックリスト」又は「ホワイトリスト」比較等を含む。他の高度なパケット処理アプリケーションとしては、暗号化／平文化、サービス品質によって制御されるパケット再構築、センサデータのストリーミング又はビデオ／オーディオ信号処理等が含まれる。複雑なデータフローシステムの一部として到着するパケットの処理をスケジューリングする効率的なメカニズムがなければ、ネットワークシステム応答にユーザが容認できない程の遅延が生じることがある。
【０００３】
複雑なデータフローストリームを処理できるパケット切換構造をサポートする一般的に使用されているトラフィック管理回路は、多くの場合、深さ限定出力キュー（depth-limited output queues）を含み、この深さ限定出力キューへのアクセスは、スケジューリング回路によって調停（arbitrate）される。入力キューは、受信データフローのトラフィック管理を提供するスケジューリング規則を用いて管理される。スケジューラは、データフローの優先順位を割り当て又は特定し、これらのデータフローのそれぞれに、出力ポートを提供することができる。複数のデータフローが同じ出力ポートで競合する場合、各出力ポートへの時分割アクセスを提供してもよく、或いは、出力ポートで競合する複数のデータフローは、出力ポートに供給する前に、調停回路によって調停してもよい。しかしながら、トラフィック管理回路は、通常、ダウンストリームのメモリ又は処理要素によるデータの処理又は管理に関連する情報へのアクセスが制限されており、又はこのようなアクセスを有していない。例えば、受信パケットがバッファ内で動的に再割当され、これらのキュー内でセッションフローの持続性が維持されることを補助できれば、優先順位の割当に基づいて、データフロー性能を向上させることができる。このようなパケット処理優先順位付け又はトラフィック管理（traffic management：ＴＭ）のために選択されるスケジューリング規則は、遅延（バッファリング）、トラフィックのバースト（バッファリング及びバースティング）、トラフィックの円滑化（バッファリング及びレート制限フロー）、トラフィックの間引き、（バッファの消費を回避するために削除するデータの選択）、又は遅延ジッタ（異なる量だけ時間的にフローのセルをシフト）によってフロー及びマイクロフローのトラフィックシェイプ（traffic shape）に影響を与える。
【発明の概要】
【課題を解決するための手段】
【０００４】
パケット処理システムのためのスケジューリングシステムとして適切に機能するシステム、ハードウェア及び方法の実施形態を開示する。システムは、メモリバスに接続され、ネットワークパケットを分類する分類回路を備える。分類回路は、分類したネットワークパケットを第１の複数の入出力キューに入れる。スケジューリング回路は、分類回路から第１の複数の入出力キューを介して受信したネットワークパケットを並べ替え、並べ替えたネットワークパケットを第２の複数の入出力キューに入れることができる。調停回路は、スケジューリング回路から第２の複数の入出力キューを介して受信したネットワークパケットを複数の出力ポートに方向付ける。複数のオフロードプロセッサは、複数の出力ポートの少なくとも１つに接続され、それぞれネットワークパケットを変更するように構成されている。
【０００５】
ある実施形態では、メモリバスは、ダイレクトメモリアクセスをサポートし、複数のオフロードプロセッサは、変更されたパケットをメモリバスに戻すことができる。更に、分類回路は、セッションメタデータに基づいてネットワークパケットを分類するように構成できる。更に他の実施形態では、スケジューリング回路は、複数のオフロードプロセッサのそれぞれの使用可能性に基づいて、ネットワークパケットを方向付け、セッション優先順位に従ってネットワークパケットを並べ替え、複数のオフロードプロセッサの少なくとも１つのためにコンテキスト切換を開始し、定義されたトラフィック管理キューにネットワークパケットを転送し、複数のオフロードプロセッサのそれぞれためのネットワークパケット処理がいつ完了したかを判定し、又は先取りモードで動作してセッション実行を制御するように構成される。
【０００６】
他の実施形態であるパケット処理をスケジューリングする方法は、セッションメタデータに基づいてネットワークパケットを分類し、分類されたネットワークパケットを第１の複数の入出力キューに入れ、定義されたメモリトランスポートプロトコルを有するメモリバスを用いて、ネットワークパケットを分類回路に転送するステップを有する。スケジューリング回路は、第１の複数の入出力キューから受信し、並べ替えられたネットワークパケットを第２の複数の入出力キューに入れることができ、調停回路は、スケジューリング回路から第２の複数の入出力キューを介して受信したネットワークパケットを複数の出力ポートに方向付ける。複数のオフロードプロセッサは、ネットワークパケットを変更し、複数のオフロードプロセッサのそれぞれは、複数の出力ポートの少なくとも１つに接続され、変更されたネットワークパケットをメモリバスに方向付けることができる。
【０００７】
他の実施形態は、ネットワークパケット処理のためのサービスをスケジューリングする、メモリバスに接続されたモジュールを含む。このモジュールは、メモリバス接続と、メモリバス接続から受信したネットワークパケットを並べ替え、並べ替えたネットワークパケットを複数の入出力キューに入れるように構成されたスケジューリング回路とを備える。複数のオフロードプロセッサは、メモリバス接続に接続され、それぞれが、複数の入出力キュー内のネットワークパケットを変更できる。メモリバス接続は、メモリバスソケットと互換性を有していてもよく、ある実施形態では、デュアルインラインメモリモジュール（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）の何れで動作してもよい。どのデバイスがデバイスモデル及びＶＦドライバに対応するコードをホストし／実行するかについては、制約はない。但し、コードは、入出力インタフェースの複数のコピーを作成するために、デバイスモデル及びＶＦドライバの複数のコピーを作成する能力を有することができる。また、幾つかの実施形態では、オペレーティングシステムは、ＶＦドライバによってサポートされるアプリケーションのために、定義された物理アドレス領域を作成することができる。更に、ホストオペレーティングシステムは、アプリケーション又はプロビジョニングエージェントに仮想メモリアドレス領域を割り当てることができる。プロビジョニングエージェント１１１は、ホストオペレーティングシステムを仲介して、仮想アドレスと使用可能な物理アドレス領域のサブセットとの間のマッピングを作成する。プロビジョニングエージェント１１１は、各ＶＦドライバを作成して、これらを定義された仮想アドレス領域に割り当てる役割を有することができる。
【００１５】
このようなメモリマッピングの動作によって、スイッチ１０６からオフロードプロセッサセクション１１４／１１６／１１８にデータ（例えば、パケットデータ）を送ることができる。また、第２のスイッチ１１４は、メモリバス１０９によってメモリコントローラ１１２に接続できる。第２のスイッチ１１４は、仮想スイッチであってもよく、メモリバス１０９からのトラフィックを受信し、オフロードプロセッサ１１８への、及びオフロードプロセッサ１１８からのトラフィックに切換えることができる。ここで、トラフィックとは、以下に限定されるわけではないが、プロビジョニングエージェント１１１によって作成され及び割り当てられた仮想デバイスへのデータフローを含んでいてもよく、このデータフローの処理は、オフロードプロセッサ１１８によってサポートされる。第２のスイッチ１１４のフォワーディングプレーンは、メモリバス１０９からオフロードプロセッサ１１８への又はオフロードプロセッサ１１８からメモリバス１０９に戻るパケットを伝送することができる。あるアプリケーションでは、ここに開示するシステムアーキテクチャは、ホストプロセッサ１１０への割込をゼロ又は最小限にして、オフロードプロセッサ１１８にネットワークパケットを直接的に通信することができる。第２のスイッチ１１４は、パケットを受信し、定義された調停及びスケジューリングスキームに基づいて、これらを分類した後に、異なるハードウェアスケジューラに配信する能力を有していてもよい。ハードウェアスケジューラ１１６は、パケットを受信し、オフロードプロセッサ１１８によって実行される１つ以上の個別のセッションで処理されるようにスケジューリングされたフローセッションに割り当てることができる。
【００１６】
特定の実施形態では、スケジューラ１１６を用いて、受信パケットのトラフィック管理を実現することができる。あるソースからのパケット、あるトラフィッククラスに関連するパケット、特定のアプリケーションに関するパケット又はあるソケットに送られるパケットは、セッションフローの一部と呼ばれ、セッションメタデータを用いて分類される。セッションメタデータは、多くの場合、パケットの優先順位を判定する基準としても機能し、したがって、受信パケットは、それらのセッションメタデータに基づいて並べ替えられる。このパケットの並べ替えは、１つ以上のバッファ内で行うことができ、これらのフローのトラフィックシェイプを変更できる。セッションメタデータに基づいて並べ替えられたセッションのパケットは、調停回路（図示せず）を用いて調停された特定のトラフィック管理キューを介して出力ポートに送ることができる。調停回路は、これらのパケットフローをダウンストリームのパケット処理／終端リソースに直接的に供給することができる。ある実施形態では、スレッド及びキュー管理を統合し、このスレッドによって、ネットワークデータのダウンストリームのリソース処理終端のスループットを向上させる。
【００１７】
ここに説明したシステム実施形態では、従来の複数のタイプの入出力バス、例えば、ＰＣＩ、ファイバチャネルを用いることができる。また、バスアーキテクチャは、関連するＪＥＤＥＣスタンダード、ＤＩＭＭデータ転送プロトコル、ハイパートランスポート（Hypertransport）又は他の適切なあらゆる高速、低遅延相互接続システムに基づいて構成することができる。オフロードプロセッサ１１８は、ダブルデータレート（double data rate：ＤＤＲ）ダイナミックランダムアクセスメモリ（dynamic random access memory：ＤＲＡＭ）、遅延減少ＤＲＡＭ（reduced latency DRAM：ＲＬＤＲＡＭ(登録商標)）、埋込型ＤＲＡＭ、次世代スタックドメモリ、例えば、ハイブリッドメモリキューブ（Hybrid Memory Cube：ＨＭＣ(登録商標)）、フラッシュ又は他の適切なメモリ、個別のロジック又はバス管理チップ、プログラマブルユニット、例えば、フィールドプログラマブルゲートアレイ（field programmable gate array：ＦＰＧＡ）、カスタム設計された特定用途向け集積回路（application specific integrated circuit：ＡＳＩＣ）、及び省エネルギ汎用プロセッサ、例えば、ＡＲＭ(登録商標)、ＡＲＣ(登録商標)、Ｔｅｎｓｉｌｉｃａ(登録商標)、ＭＩＰＳ(登録商標)、Ｓｔｒｏｎｇ／ＡＲＭ(登録商標)又はＲＩＳＣアーキテクチャに基づくプロセッサを含んでいてもよい。ホストプロセッサ１１０は、インテル(登録商標)又はＡＭＤｘ８６アーキテクチャ(登録商標)、インテルＩｔａｎｉｕｍアーキテクチャ(登録商標)、ＭＩＰＳアーキテクチャ、ＳＰＡＲＣ(登録商標)アーキテクチャ等に基づくプロセッサを含む汎用プロセッサを含むことができる。
【００１８】
図２は、図１に示す実施形態に関連する動作に適切な、ハードウェアによってスケジューリングされるデータフロー方法１４０の一実施形態を示している。フローチャート１４０に示すように、ハードウェアスケジューラは、セッションに基づいてパケットを区分することによって、トラフィックを管理できる（ステップ１４１）。幾つかの実施形態では、セッションは、パケットのメタデータによって特定される。セッションは、優先順位付けし、キューに入れることができ（ステップ１４２）、１つ以上のオフロードプロセッサで動作する汎用オペレーティングシステム（ＯＳ）を用いて、現在のセッションの実行を制御することができる（ステップ１４３）。ハードウェアスケジューラは、セッションの数、セッションの状態、処理リソース又は将来のスケジューリング要求に関連するＯＳからのフィードバック等のＯＳの現在の状態を用いて、メモリリソースについて競合するプロセス間でスケジューリングの判定又は調停を行うことができる（ステップ１４４）。ある条件が満たされると、ハードウェアスケジューラは、コンテキスト切換を開始でき、ここで、現在のセッションの状態がメモリに保存され、新たなセッションが開始され、又は元のセッションに戻る（ステップ１４５）。
【００１９】
図３は、ハードウェアスケジューラ１５０（すなわち、スケジューリング回路）の一実施形態を示している。ハードウェアスケジューラ１５０は、入力ポート１５２／１５２’と、分類回路１５４と、（１５６として示す）入力キューと、スケジューリング回路１５８／１５８’と、（１６０として示す）出力キューと、調停回路１６２と、出力ポート１６４／１６４’とを備えることができる。ハードウェアスケジューラには、共通のパケット状態レジスタ１６６／１６６’と、パケットバッファ１６８／１６８’と、１つ以上のキャッシュメモリポート１７０（特定の実施形態では、アクセラレータコヒーレントポート（accelerator coherency port：ＡＣＰ）であってもよい。）と、低遅延メモリ１７２とを接続してもよい。なお、図３は、２つの入力ポート１５２／１５２’及び２つの出力ポート１６４／１６４’を有するアーキテクチャを示しているが、他の実施形態では、入力ポート及び出力ポートの数は、１つでもよく、３つ以上でもよい。
【００２０】
ハードウェアスケジューラ１５０は、このようなハードウェアスケジューラの幾つかに接続された調停回路（図示せず）からパケットを受信することができる。ハードウェアスケジューラ１５０は、１つ以上の入力ポート１５２／１５２’において、このようなデータを受信できる。ハードウェアスケジューラ１５０は、分類回路１５４を使用でき、分類回路１５４は、受信パケットを検査し、パケット内のメタデータに基づいてパケットを異なる受信キューに分類する。分類回路１５４は、異なるパケットヘッダを検査し、インターバル整合回路を用いて、受信パケットを区分することができる。適切なインターバル整合回路の具体例は、２００７年８月４日に発行されたＤａｌａｌによる米国特許７，７６０，７１５号（以下に、７１５特許と呼ぶ。）に開示されている。なお、他の適切な如何なる分類スキームを用いて分類回路を実現してもよい。
【００２１】
ハードウェアスケジューラ１５０は、オフロードプロセッサ（図示せず）と通信するために、パケット状態レジスタ１６６／１６６’に接続できる。パケット状態レジスタ１６６／１６６’は、ハードウェアスケジューラ１５０及びオフロードプロセッサで実行されるＯＳの両方によって操作することができる。また、ハードウェアスケジューラ１５０は、パケットバッファ１６８／１６８’に接続して、セッションの送信パケットを保存してもよく、これをオフロードプロセッサＯＳに供給しまたは、オフロードプロセッサＯＳで処理してもよい。パケット状態レジスタ及びパケットバッファの詳細な説明は、後述する実施形態の説明に含まれている。
【００２２】
ハードウェアスケジューラ１５０は、キャッシュメモリポート１７０を用いて、オフロードプロセッサのキャッシュにおいて、現在、オフロードプロセッサＯＳ上で実行されているセッションに関連するデータにアクセスし、コンテキスト切換の間にバルク転送を用いてそのデータを異なるセッションに転送することができる。ハードウェアスケジューラ１５０は、キャッシュ転送を用いて、セッションに関連するオーバーヘッドを減少させることができる。また、ハードウェアスケジューラ１５０は、キャッシュからのセッション関連情報を低遅延メモリ１７２に保存し、後にアクセスすることができる。
【００２３】
上述のように、ハードウェアスケジューラ１５０は、１つ以上の入力ポート１５２／１５２’を有することができる。ハードウェアスケジューラに供給されるデータは、オフロードプロセッサにおいて終端（terminated）されるパケットデータであってもよく、又は処理、変更又は切換えられるパケットデータであってもよい。ハードウェアスケジューラ１５０は、パケットデータの検査に基づいて、受信パケットを対応するアプリケーションセッションに区分する役割を有していてもよい。ハードウェアスケジューラ１５０は、パケットを検査し、関連するパケットの特徴を特定する能力を有することができる。
【００２４】
ハードウェアスケジューラ１５０は、ネットワークスタックの一部をオフロードし、このようなネットワークスタック処理によって生じるオーバーヘッドからオフロードプロセッサを解放してもよい。ハードウェアスケジューラ１５０は、ＴＣＰ／トランスポートオフロード、暗号化／平文化オフロード、セグメント化及び再構築等の何れかを実行してもよく、これにより、オフロードプロセッサは、ネットワークパケットのペイロードを直接的に使用することができる。
【００２５】
幾つかの実施形態では、ハードウェアスケジューラ１５０は、更に、セッションに属するパケットを特定のトラフィック管理キュー（例えば、１５６）に転送し、スケジューリングし、出力キュー（例えば、１６０）に転送する能力を有することができる。ハードウェアスケジューラ１５０を用いて、これらの持続的なセッションの汎用ＯＳへのスケジューリングを制御することができる。パイプライン内の各ステージにおいて最適化を行うハードウェアスケジューラ１５０によって、汎用ＯＳを含むステージのパイプラインに亘るセッションの持続性を向上させることができる（更に詳細に以下で、説明する）。例えば、ハードウェアスケジューラ１５０は、ダウンストリーム実行リソースのアカウントを考慮に入れる。これらのキューのそれぞれに入れられたセッションフローは、出力ポートを介して、ダウンストリームのネットワーク要素に送信される。このようなスケジューリングの１つの特定の具体例は、７１５特許に開示されており、この文献の全体は、引用によって本願に援用される。
【００２６】
また、図３に示すように、ハードウェアスケジューラ１５０は、調停回路１６２を使用して、有効な出力ポートへの複数の管理出力キューのアクセスを調停又は制御する。各出力ポートは、パケットバッファ１６８／１６８’を介して、オフロードプロセッサコアの１つに接続してもよい。パケットバッファ１６８／１６８’は、更に、ヘッダプール（header pool）及びパケットボディプール（packet body pool）を含んでいてもよい。ヘッダプールには、オフロードプロセッサによって処理されるパケットのヘッダのみを格納することができる。また、処理すべきパケットのサイズが十分小さい場合、ヘッダプールには、パケットの全体を格納してもよい。パケットは、オフロードプロセッサで実行される処理の性質に応じて、ヘッダプールまたはパケットボディプールに転送することができる。パケットの処理、オーバレイ、解析、フィルタリング、及び同様な他のアプリケーションでは、パケットヘッダのみをオフロードプロセッサに転送することが適切な場合がある。これらの場合、パケットヘッダの処理によって、パケットボディをパケットヘッダに結合して、出力インタフェースから転送してもよく、パケットボディを削除してもよい。パケットの終端を必要とするアプリケーションでは、パケットボディ全体を転送してもよい。オフロードプロセッサコアは、パケットを受信し、これらに対して適切なアプリケーションセッションを実行して、パケットコンテンツを実行してもよい。
【００２７】
ハードウェアスケジューラ１５０は、ダウンストリームプロセッサ上の異なるセッションをスケジューリングすることができ、ハードウェアスケジューラ１５０及びダウンストリームプロセッサは、協働して、コンテキスト切換の間のオーバーヘッドを減少させる。ハードウェアスケジューラ１５０は、ラインレート速度で送信キュー間又はセッションフロー間の調停を行うだけではなく、終端されたセッション間の調停を非常に高速で行う。ハードウェアスケジューラ１５０は、オフロードプロセッサ上のセッションのキューを管理できる。スケジューリング回路１５８／１５８’は、ＯＳへの各セッションフローを、異なるＯＳ処理エンティティとして、キューに入れる役割を有することができる。スケジューリング回路１５８／１５８’は、ＯＳにおいて新しいアプリケーションセッションを実行ささせる役割を有することができる。スケジューリング回路１５８／１５８’は、ＯＳに対し、スケジューリング回路１５８／１５８’が行うトラフィック管理に基づいて、新たなセッションのためのパケットが使用可能であることを通知することができる。
【００２８】
ハードウェアスケジューラ１５０には、オフロードプロセッサ上のリソースの実行状態、実行リソース上で動作している現在のセッション、割り当てられたメモリスペース、及びプロセッサキャッシュ内のセッションコンテキストの位置を知らせることができる。ハードウェアスケジューラ１５０は、実行リソースの状態に基づいて、トラフィック管理及び調停判定を行うことができる。ハードウェアスケジューラ１５０は、オペレーティングシステム上のスレッド管理を受信パケットのトラフィック管理に統合することができる。ハードウェアスケジューラ１５０は、トラフィック管理キュー及びオフロードプロセッサ上の処理エンティティを含むコンポーネントの範囲に亘ってセッションフローの持続性を維持することができる。ダウンストリーム（例えば、オフロード）プロセッサ上で動作するＯＳは、プロセッササイクル及びメモリ等の実行リソースを現在処理中の特定のキューに割り当てることができる。ＯＳは、更に、特定のキューにスレッド又はスレッドのグループを割り当てることができ、これにより、汎用の処理要素によってこれらを独立したエンティティとして取り扱うことができる。汎用（general purpose：ＧＰ）処理リソース上で複数のセッションを動作させ、それぞれがハードウェアスケジューラ上のキュー内にある特定のセッションフローからのデータを処理することによって、スケジューラ１１６及びＧＰ処理リソースを緊密に統合できる。これによって、トラフィック管理、スケジューリング回路及び汎用処理リソースに亘って、セッション情報内に持続的な要素を導入できる。更に、オフロードＯＳは、リソース間のコンテキスト切換に関連するペナルティ及びオーバーヘッドを低減するように変更できる。ハードウェアスケジューラは、これを利用して、キュー間のシームレスな切換を行い、この結果、実行リソースがこれらを異なるセッションとして実行する。
【００２９】
実際に、幾つかの実施形態では、ハードウェアスケジューラを用いて、受信パケットのトラフィック管理を行うことができる。あるソースからのパケット、あるトラフィッククラスに関連するパケット、特定のアプリケーションに関するパケット又はあるソケットに供給されるパケットは、セッションフローの一部と呼ばれ、セッションメタデータを用いて分類できる。セッションメタデータは、多くの場合、パケットの優先順位を定める基準として機能し、受信パケットは、セッションメタデータに基づいて並べ替えられる。このパケットの並べ替えは、１つ以上のバッファで行うことができ、これらのフローのトラフィックシェイプを変更できる。セッションメタデータに基づいて並べ替えられるセッションのパケットは、特定のトラフィック管理キューに送られ、トラフィック管理キューは、調停回路を用いて調停されて、出力ポートに供給される。調停回路（例えば、１６２）は、これらのパケットフローをダウンストリームのパケット処理／終端リソースに直接的に供給してもよい。一実施形態では、スレッド及びキュー管理を統合し、このスレッドによって、ネットワークデータのダウンストリームリソース処理終端のスループットを向上させる。
【００３０】
したがって、ハードウェアスケジューラは、以下の機能の何れかを実行できる。（ａ）ハードウェアスケジューラは、受信ネットワークパケット（及びフロー）のトラフィック管理、調停及びスケジューリングを行う役割を有する。（ｂ）ハードウェアスケジューラは、オフロードＯＳのネットワークスタックの一部をオフロードし、オフロードＯＳをスタックレベル処理から解放し、リソースがアプリケーションセッションを自由に実行できるようにする役割を有する。（ｃ）ハードウェアスケジューラは、パケットメタデータに基づいてパケットを分類する役割を有し、異なるセッションに分類されたパケットは、アウトプットトラフィックキューに入れられ、オフロードＯＳに送られる。（ｄ）ハードウェアスケジューラは、オフロードＯＳ上の終端されたセッション間で、オーバーヘッドが最小のコンテキスト切換に協力する役割を有し、ハードウェアスケジューラは、可能な限り最小限のオーバーヘッドでオフロードＯＳ上の複数のセッションが切換えられることを確実にする（オフロードセッション上の複数のセッション間を切換える能力によって、複数のセッションを非常に速い速度で終端し、終端されたセッションのためのパケット処理スピードが提供される）。（ｅ）ハードウェアスケジューラは、ＯＳへの各セッションフローを、異なるＯＳ処理エンティティとして、キューに入れる役割を有する。（ｆ）ハードウェアスケジューラは、ＯＳ上の新しいアプリケーションセッションを実行する役割を有し、自らが実行するトラフィック管理に基づいて、新たなセッションのためのパケットが入手可能であることをＯＳに対して示すことができる。（ｇ）ハードウェアスケジューラには、オフロードプロセッサ上の実行リソースの状態、実行リソース上で行われている現在のセッション及びそのセッションに割り当てられたメモリ領域、プロセッサキャッシュ内のセッションコンテキストの位置が通知される。ハードウェアスケジューラは、実行リソースの状態を用いて、トラフィック管理及び調停判定を行うことができる。ハードウェアスケジューラは、オペレーティングシステム上のスレッド管理を受信パケットのトラフィック管理に統合することができる。ハードウェアスケジューラは、トラフィック管理キュー及びオフロードプロセッサ上の処理エンティティを含むコンポーネントの範囲に亘ってセッションフローの持続性を維持することができる。
【００３１】
後述するように、以上の処理タスクの多くは、複数の処理コア上で動作する複数のスレッド上で実行される。このようにタスクを複数のスレッドコンテキストに並列化することによって、スループットを高めることができる。ＭＩＰＳ等のプロセッサアーキテクチャは、１サイクルあたりのインストラクションの数を多くするために、深いインストラクションパイプラインを含んでいてもよい。更に、マルチスレッドプログラミング環境を実現する能力によって、既存のプロセッサリソースをより効率的に利用することができる。ハードウェア上の並列実行を更に向上させるために、プロセッサアーキテクチャは、複数のプロセッサコアを含んでいてもよい。同じタイプのコアを含むマルチコアアーキテクチャは、均質コア（homogeneous core）アーキテクチャと呼ばれ、スレッド又はプロセスを複数のコアに亘って並列化することによって、より高いインストラクションスループットを提供する。しかしながら、このような均質コアアーキテクチャでは、メモリ等の共用リソースは、少数のプロセッサで消費される。更に他の実施形態では、ラック又は個々のサーバ上に設けられた個々のラックユニット又はブレードに接続された複数のモジュール上に複数のオフロードプロセッサ又はホストプロセッサを設けてもよい。これらは、更にクラスタ及びデータセンタにグループ化でき、これらは、空間的に、同じ建物又は同じ都市内に位置していてもよく、それぞれ異なる国にあってもよい。如何なるグループ化レベルを相互に接続してもよく、及び／又は公共又は個人用のクラウドインターネットに接続してもよい。
【００３２】
メモリ及び入出力アクセスは、大量のプロセッサオーバヘッドを引き起こすことがある。更に、従来の汎用処理ユニットのコンテキスト切換は、演算の負荷が大きい。したがって、プロセッサスループットを向上させるために、ネットワーク接続された複数のアプリケーションを扱うネットワーク接続された演算リソースにおいて、コンテキスト切換オーバーヘッドを低減することが望ましい。従来のサーバ負荷は、多くの場合、例えば、ＨＴＭＬ、ビデオ、パケットレベルサービス、セキュリティ及び分析等のライトタッチ処理であっても、複雑なトランスポート、広いメモリ帯域幅、（ランダムにアクセスされ、並列化され、高度に使用可能な）過剰な量のデータ帯域幅を必要とすることがある。更に、アイドルプロセッサが、そのピーク電力消費の５０％以上を消費している。
【００３３】
これに対し、本実施形態では、「ライト」タッチ処理負荷に関連する複雑なトランスポート、広いデータ帯域幅、頻繁なランダムアクセスは、複数のオフロードプロセッサコア上で作成されるソケットアブストラクションの背後で取り扱うことができる。同時に、「ヘビー」タッチ高負荷演算は、ホストプロセッサコア（例えば、ｘ８６プロセッサコア）上のソケットアブストラクションによって取り扱うことができる。このようなソフトウェアソケットによって、ＡＲＭプロセッサコアとｘ８６プロセッサコアとの間でこれらの負荷を自然に区分けすることができる。実施形態に基づく新しいアプリケーションレベルソケットの使用によって、オフロード処理コア及びホスト処理コアに亘ってサーバ負荷を分散させることができる。
【００３４】
図４〜図８は、処理モジュールを用いてスケジューリング及びトラフィック管理サービスを提供するハードウェア実施形態及び方法の側面を示している。特定の実施形態では、このような処理モジュールは、オフロード処理をサポートするためにＤＩＭＭ搭載可能モジュールを含むことができる。
【００３５】
図４は、一実施形態に基づく処理モジュール２００のブロック図である。処理モジュール２００は、物理コネクタ２０２、メモリインタフェース２０４、調停ロジック２０６、オフロードプロセッサ２０８、ローカルメモリ２１０及び制御ロジック２１２を含むことができる。コネクタ２０２は、システムメモリバスへの物理接続を提供できる。これに対し、ホストプロセッサは、メモリコントローラ等を介してシステムメモリバスにアクセスできる。特定の実施形態では、コネクタ２０２は、コンピュータシステムのデュアルインラインメモリモジュール（dual in-line memory module：ＤＩＭＭ）スロットに互換性を有することができる。したがって、複数のＤＩＭＭスロットを含むシステムは、１つ以上の処理モジュール２００を備えていてもよく、又は処理モジュール及びＤＩＭＭモジュールの組み合わせを備えていてもよい。
【００３６】
メモリインタフェース２０４は、システムメモリバス上のデータ転送を検出でき、適切な場合、処理モジュール２００に書込データを保存し及び／又は処理モジュール２００から読出データを読み出すことができる。このようなデータ転送は、特定のネットワーク識別子を有するパケットデータの受信を含むことができる。幾つかの実施形態では、メモリインタフェース２０４は、スレーブインタフェースであってもよく、この場合、データ転送は、処理モジュール２００とは別に設けられているマスタデバイスによって制御される。特定の実施形態では、メモリインタフェース２０４は、ダイレクトメモリアクセス（direct memory access：ＤＭＡ）スレーブであってもよく、ＤＭＡマスタによって開始されたシステムメモリバスを介するＤＭＡ転送を担ってもよい。幾つかの実施形態では、ＤＭＡマスタは、ホストプロセッサとは異なるデバイスであってもよい。このような構成では、処理モジュール２００は、ホストプロセッサリソースを消費することなく、処理すべきデータを受け取り（例えば、ＤＭＡ書込）、及び処理されたデータを送り出す（例えば、ＤＭＡ読出）ことができる。
【００３７】
メモリインタフェース２０４は、システムメモリバス上のデータ転送を検出でき、適切な場合、処理モジュール２００に書込データを保存し及び／又は処理モジュール２００から読出データを読み出すことができる。幾つかの実施形態では、メモリインタフェース２０４は、スレーブインタフェースであってもよく、この場合、データ転送は、処理モジュールとは別に設けられているマスタデバイスによって制御される。
【００３８】
特定の実施形態では、メモリインタフェース２０４は、ダイレクトメモリアクセス（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：ＶＦ）インタフェースを含む幾つかの機能的部分に区切ってもよい。専用使用のためのランタイムの間に各仮想機能インタフェースにリソースを提供できる。ＣＦ及びＶＦの具体例は、シングルルート入出力仮想化又はマルチルート入出力仮想化アーキテクチャ等のスキームに基づく物理機能及び仮想機能を含むことができる。ＣＦは、仮想リソースをセットアップ及び管理する物理リソースとして機能する。また、ＣＦは、完全な入出力デバイスとしても機能できる。ＶＦは、複数の論理エンティティ／複数のメモリ領域と通信するために仮想デバイスのアブストラクションを提供する役割を有している。
【００７４】
ホストプロセッサ３０６ｃ上で動作しているオペレーティングシステム／ハイパーバイザ／何れかの仮想マシン／ユーザコードをデバイスモデル、ＶＦドライバ及びＣＦのためのドライバにロードしてもよい。デバイスモデルを用いて、物理デバイスのエミュレーションを作成し、作成された複数のＶＦのそれぞれをホストプロセッサ３０６ｃが認識できるようにしてもよい。デバイスモデルを複数回複製し、ＶＦドライバ（仮想入出力デバイスとインタラクトするドライバ）が特定のタイプの物理デバイスとインタラクトしているように錯覚させてもよい。
【００７５】
例えば、任意のデバイスモジュールを用いてインテル（登録商標）イーサネット（登録商標）集中型ネットワークアダプタ（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：ＡＣＰ）であってもよい。）を示している。メモリインタフェース３０８ｍは、バッファメモリ３０８ａにアクセスできる。
【０１０５】
ハードウェアスケジューリング及びトラフィック管理動作に適切な様々な実施形態について説明したが、以下では、特定の側面を示す具体例について説明する。
【０１０６】
図１１は、特定の実施形態に基づき、処理リソースをオフロードするためのアクセスのためのスケジューリングプロセス４００の例示的な実施形態を示している。幾つかの実施形態では、スケジューラ（例えば、ハードウェアスケジューラ）がトラフィック管理スキームとしてスケジューリングプロセスを実現し、オフロードプロセッサに関する要求を満たし、先取りモード（preemption mode）で動作することができる。先取りモードでは、スケジューラは、ＯＳ上でのセッションの実行を制御する役割を担うことができる。スケジューラは、実行から現在のセッションを取り除き、他のセッションを実行するタイミングを決定することができる。セッションは、オフロードプロセッサ上でスレッド又はスレッドのグループを含むことができる。現在のセッションの特性、例えば、停止しているか、動作しているか、パケットを待機しているか、セッションに割り当てられている実行リソースの量等の因子、及び現在のセッションに割り当てられている時間等の因子を含む多くのパラメータに応じて、ハードウェアスケジューラは、コンテキスト切換を決定することができる。パケットがハードウェアスケジューラに到着し、上述した基準の何れかが満たされると、スケジューラは、パケットが異なるセッションのためのものである場合、コンテキスト切換を決定する。
【０１０７】
図１１に示すように、方法４００は、パケット又は他のデータを待機できる（ステップ４０２）。受信パケットは、モニタバッファ、キュー又はファイルによって受け取ることができる。一旦、パケット又はサービスレベル仕様（service level specification：ＳＬＳ）が受信されると、他の条件が満たされているかのチェックを行う（ステップ４０６）。パケット／データが到着すると（オプションとして、上述したような他の条件が満たされると）（ステップ４０６におけるＹｅｓ）、パケットセッション状態を判定する（ステップ４０８）。パケットが現在のセッションの一部である場合（ステップ４０８におけるＹｅｓ）、パケットを現在のセッションのためのキューに入れ（ステップ４１２）現在のセッションの一部として処理する（ステップ４１０）。幾つかの実施形態では、これは、ハードウェアスケジューラがパケットをキューに入れて処理のためにオフロードプロセッサに送信することを含む。
【０１０８】
パケットが現在のセッションの一部でない場合（ステップ４０８におけるＮｏ）、パケットが前のセッションのためのものであるかを判定する（ステップ４１４）。パケットが前のセッションからのものでない場合（ステップ４１４におけるＮｏ）、新たなセッションのための十分なメモリがあるかを判定する（ステップ４１６）。十分なメモリある場合（ステップ４１６におけるＹｅｓ）、オフロードプロセッサが準備できていれば（ステップ４２８）、プロセッサのキャッシュメモリにコンテキストデータを転送することができる（ステップ４３０）。このような転送が完了すると、セッションを実行することができる（ステップ４１０）。
【０１０９】
パケットが前のセッションからのものである場合（ステップ４１４におけるＹｅｓ）又は新たなセッションのための十分なメモリがない場合（ステップ４１６におけるＮｏ）、前のセッション又は新たなセッションが同じカラーのものであるかを判定する（ステップ４１８）。これに該当しない場合、前のセッション又は新たなセッションへの切換を行うことができる（ステップ４２０）。最後に使われてからの経過時間が最も長い（least recently uses：ＬＲＵ）キャッシュエンティティをフラッシュし、前のセッションコンテキスト又は作成された新たなセッションコンテキストを読み込むことができる。この検索された／新たなセッションのパケットには、保持できる新しいカラーを割り当てることができる。幾つかの実施形態では、これは、低遅延メモリに保存されているコンテキストデータをオフロードプロセッサのキャッシュに読み込むことを含んでいてもよい。前の／新たなセッションが同じカラーのものである場合（ステップ４１８におけるＹｅｓ）、カラープレッシャ（color pressure）を超えることができるかをチェックする（ステップ４２２）。これが可能でない場合、又は他のカラーが使用可能である場合（ステップ４２２における「Ｎｏ、他のカラーが使用可能」）、前のセッション又は新たなセッションへの切換を行うことができる（すなわち、ステップ４２０）。カラープレッシャを除外できる場合、又は除外できないが他のカラーが使用可能でない場合、（ステップ４２２における「Ｙｅｓ」／「Ｎｏ、他のカラーが利用不能」）同じカラーのＬＲＵキャッシュエンティティをフラッシュし、前のセッションコンテキスト又は作成された新たなセッションコンテキストを読み込むことができる（ステップ４２４）。これらのパケットは、割り当てられたカラーを保持する。ここでも、幾つかの実施形態では、これは、低遅延メモリに保存されているコンテキストデータを、オフロードプロセッサのキャッシュに読み込むことを含むことができる。
【０１１０】
コンテキスト切換の場合（ステップ４２０／４２４）、新たなセッションを初期化できる（ステップ４２６）。オフロードプロセッサの準備が完了している場合（ステップ４２８）、プロセッサのキャッシュメモリにコンテキストデータを転送することができる（ステップ４３０）。このような転送が完了すると、セッションを実行できる（ステップ４１０）。
【０１１１】
図１１に示すように、オフロードプロセッサがパケットを処理している間（ステップ４１０）、パケットが処理を完了しているかを定期的にチェックし（ステップ４３２）、処理が完了していない場合、戻る（ステップ４３２におけるＮｏ、パケットをキューから外す）。パケットの処理が完了した場合（ステップ４３２におけるＹｅｓ）、ハードウェアスケジューラは、出力キュー内の更なるパケットを参照する（ステップ４３４）。更なるパケットがある場合（ステップ４３４におけるＹｅｓ）、及びオフロードプロセッサがパケットを受信する準備が整っている場合（ステップ４３６におけるＹｅｓ）、パケットをオフロードプロセッサに転送することができる。幾つかの実施形態では、オフロードプロセッサによって「処理準備完了」メッセージがトリガされると、直ちに、オフロードプロセッサへのキューにパケットを入れる。オフロードプロセッサがパケットの処理を完了した後、パケットがどのセッションに属するかをハードウェアスケジューラがチェックすることから開始されるサイクルの全体を繰り返す。
【０１１２】
パケット処理についてのオフロードプロセッサの準備が整っていない場合（ステップ４３６におけるＮｏ）、及びレートリミットまで待機している場合（ステップ４３８）、ハードウェアスケジューラは、使用可能な他のパケットがあるかをチェックできる。更なるパケットがキューに入っていない場合、ハードウェアスケジューラは、待機モードに入り、更なるパケットが到着するまで、レートリミットの間待機する。このように、ハードウェアスケジューラは、高速且つ効率的に動作して、ダウンストリームリソースに宛てられたパケットを管理及び供給する。
【０１１３】
このように、異なるセッションからのパケットの到着によってセッションを先取り（preempted）でき、上述したように、新たなパケットが処理される（ステップ４０６）。
【０１１４】
なお、上述した本発明の例示的な実施形態の説明では、説明を明瞭にするため及び本発明の様々な側面の１つ以上の理解を補助するために、本発明の様々な特徴は、単一の実施形態、図又はその説明において共にグループ化されている。但し、このような開示の手法は、請求の範囲に記載されている発明が各請求項で明示している特徴以外の特徴を要求するという意図を反映しているとは解釈されない。すなわち、特許請求の範囲は、本発明の側面が上述した実施形態の全ての特徴より少ない特徴で成立することを表している。したがって、詳細な説明に続く特許請求の範囲は、この詳細な説明にも組み込まれ、各請求項は、それ自体が本発明の個別の実施形態を表していると解釈される。
【０１１５】
また、本発明の実施形態は、特に開示していない要素及び／又はステップを欠いた状態で実施してもよい。すなわち、要素の省略も本発明の特徴に含まれる。
【０１１６】
したがって、ここでは、特定の実施形態の様々な側面を詳細に説明したが、本発明の精神及び範囲から逸脱することなく、実施形態の様々な変更、置換及び変形が可能である。
【符号の説明】
【０１１７】
２２０−０〜５  ＩＣ、２２０−６  メモリＩＣ、２３０  システム、２２６  インラインモジュールスロット、２２８  システムメモリバス、３０１  システム、３００  演算ユニット、３０２  入出力デバイス、３０２ａ  入力バッファ、３０２ｂ  入出力仮想化機構、３０４ａ  変換ルックアサイドバッファ（ＴＬＢ）、３０４ｂ  ＩＯＭＭＵ機能、３０６ａ  ＣＰＵＩＯ、３０６ｂ  メモリコントローラ、３０６ｃ  コア、３０６ｄ  プロビジョニングエージェント、３０８，３１０  演算ＦＰＧＡ、３０８ｂ、ｃ、ｄ、ｅ、ｈハードウェアスケジューラ、３１０ａ  ＤＭＡスレーブインタフェース、３０８ａ、３０８ｍ、３１０ｂ  オンボードメモリ、３０８ｉ  オフロードプロセッサ、３１２  ホストバス、３１４  接続、３１６  システムメモリバス
【図１】
2016503933.tif 000003
【図２】
2016503933.tif 000004
【図３】
2016503933.tif 000005
【図４】
2016503933.tif 000006
【図５】
2016503933.tif 000007
【図６】
2016503933.tif 000008
【図７】
2016503933.tif 000009
【図８】
2016503933.tif 000010
【図９】
2016503933.tif 000011
【図１０】
2016503933.tif 000012
【図１１】
2016503933.tif 000013
【国際調査報告】
2016503933.tif 000014