(57)【要約】   一般に、１つの観点において、明細書には、ネットワーク・パケットのフローを、単一のダイ上に集積された、複数のマルチスレッド・プロセッサ・コアのセット内のマルチスレッド・プロセッサ・コアのスレッドに割り当てることが記述される。割当てに基づいて、フロー内のパケットは、割り当てられたプロセッサ・コア・スレッドによって処理される。
2008523729.tif 000002
【特許請求の範囲】
【請求項１】
ネットワーク・パケットのフローを、単一のダイ上に集積された複数のマルチスレッド・プロセッサ・コアのセット内のマルチスレッド・プロセッサ・コアに割り当てる段階と、
前記割り当てに基づいて、前記割り当てられたプロセッサ・コア・スレッドによって前記フロー内のパケットを処理する段階と、
から構成されることを特徴とする方法。
【請求項２】
前記パケットは、伝送制御プロトコル・セグメントを含むインターネット・プロトコル・パケットを含むことを特徴とする請求項１記載の方法。
【請求項３】
前記フローは、少なくとも、前記パケットのインターネット・プロトコルのソース・アドレス、インターネット・プロトコルの行先アドレス、伝送制御プロトコルのセグメント・ソース・ポート、および伝送制御プロトコルのセグメント行先アドレスによって識別されるフローを含むことを特徴とする請求項２記載の方法。
【請求項４】
前記コア・スレッドによって処理されることがスケジュールされた前記フロー内の各パケットが処理されたかどうかを判定する段階をさらに含むことを特徴とする請求項１記載の方法。
【請求項５】
プロセッサ・コアに関連するローカル・メモリ内への前記フローに関連するデータを読み取る段階をさらに含むことを特徴とする請求項１記載の方法。
【請求項６】
前記データは、伝送制御プロトコル（ＴＣＰ）接続の伝送制御ブロック（ＴＣＢ）を含むことを特徴とする請求項５記載の方法。
【請求項７】
第１プロセッサ・コアで、前記フローに割り当てられる前記プロセッサ・コアを決定する段階と、
前記割り当てられたプロセッサ・コアで、前記フローに割り当てられるスレッドのセットの１つを決定する段階と、
をさらに含むことを特徴とする請求項１記載の方法。
【請求項８】
マルチコア・プロセッサによって、
ネットワーク・パケットのフローを、単一のダイ上に集積された複数のマルチ・スレッド・プロセッサ・コアのセット内のマルチ・スレッド・プロセッサ・コアに割り当て、かつ、
前記割り当てに基づいて、前記フロー中のパケットを前記割り当てられたプロセッサ・コア・スレッドによって処理する、
ための命令を含むことを特徴とする物品。
【請求項９】
前記パケットは、伝送制御プロトコル・セグメントを含むインターネット・プロトコル・パケットを含むことを特徴とする請求項８記載の物品。
【請求項１０】
前記コア・スレッドによって処理されることがスケジュールされた前記フロー内の各パケットが処理されたかどうかを判定する命令をさらに含むことを特徴とする請求項８記載の物品。
【請求項１１】
プロセッサ・コアに関連するローカル・メモリ内への前記フローに関連するデータをさらに読み取ることを特徴とする請求項８記載の物品。
【請求項１２】
前記データは、伝送制御プロトコル（ＴＣＰ）接続の伝送制御ブロック（ＴＣＢ）を含むことを特徴とする請求項１１記載の物品。
【請求項１３】
第１プロセッサ・コアで、前記フローに割り当てられる前記プロセッサ・コアを決定する命令と、
前記割り当てられたプロセッサ・コアで、前記フローに割り当てられるスレッドのセットの１つを決定する命令と、
をさらに含むことを特徴とする請求項８記載の物品。
【請求項１４】
単一のダイ上に集積された複数のマルチスレッド・プロセッサ・コアと、
命令であって、それによって、少なくとも前記複数のマルチスレッド・プロセッサ・コアのいくつかに、
伝送コントロール・プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）フローを前記プロセッサ・コアの前記スレッドの１つに割り当てさせ、
前記割り当てに基づいて、前記割り当てられたプロセッサ・コア・スレッドによって前記フロー内のＴＣＰセグメントを処理させる、命令と、
から構成されることを特徴とする装置。
【請求項１５】
前記プロセッサは、少なくとも１つの内容参照可能メモリを含み、かつ、
前記ＴＣＰ／ＩＰフローを前記スレッドの１つに割り当てる前記命令は、少なくとも１つの内容参照可能メモリ内にフロー識別子を書き込むための命令を含むことを特徴とする請求項１４記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フローの割当てに関する。
【背景技術】
【０００２】
ネットワークは、コンピュータおよび他の装置による通信を可能にする。例えば、ネットワークは、ビデオ、オーディオ、電子メール等に表われるデータを伝送することができる。典型的には、ネットワークを介して送信されるデータは、パケットとして知られる、より小さなメッセージによって運ばれる。類推すれば、パケットは、郵便箱に投函される封筒によく似ている。パケットは、典型的には、ペイロードとヘッダを含む。パケットのペイロードは、封筒内の手紙に類似する。パケットのヘッダは、封筒自体に書かれた情報によく似ている。ヘッダは、ネットワーク装置がパケットを適切に処理することを支援するための情報を含む。
【０００３】
複数のネットワーク・プロトコル（例えば、「プロトコル・スタック」）は、複雑なネットワーク通信を処理するために協働する。例えば、伝送制御プロトコル（ＴＣＰ）として知られるトランスポート・プロトコルは、接続を設定し、かつネットワークを介してデータを転送するために、単純なメカニズムを有するアプリケーションを提供する。アプリケーションについてわかりやすく言えば、ＴＣＰは、例えばデータの再送信、ネットワーク・トラフィックの輻輳に適応できるような多種多様の通信上の課題を処理する。
【０００４】
かかるサービスを提供するために、ＴＣＰは、セグメントとして知られるパケット上で動作する。一般に、ＴＣＰセグメントは、インターネット・プロトコル（ＩＰ）のデータグラムのようなより大きいパケット内で（これらによって「隠蔽(encapsulate)」されて）、ネットワークを介して移動する。しばしば、ＩＰデータグラムは、イーサネット（登録商標）・フレームのようなさらに大きなパケットによって、さらに隠蔽される。ＴＣＰセグメントのペイロードは、アプリケーションによってネットワークを介して送信されたデータのストリームの一部を伝送する。受信機は、受信セグメントを再構成することによりデータのオリジナル・ストリームを復元することができる。受信データの再構成および肯定応答（ＡＣＫ）を送信側に返すことを許可するために、ＴＣＰは各ペイロード・バイトとシーケンス番号とを対応付ける。
【０００５】
各ＴＣＰ接続の現在の状態は、伝送制御ブロック（ＴＣＢ）として知られるデータのブロックに格納される。ＴＣＢは、次に予期されるシーケンス番号、送信された最後のシーケンス番号のようなデータを含む。接続のＴＣＢは、典型的には読取られ、潜在的には受信および送信された各ＴＣＰセグメントで更新される。
【発明の開示】
【０００６】
上述のように、ＴＣＰ（伝送制御プロトコル）の実施例は、一般に、個々の進行中の接続（「フロー」）の状態データを維持する。この状態データは、一般に、処理されたすべてのＴＣＰセグメントのためにアクセスされる。メモリに状態データを読み書きするには時間がかかるために、データへのアクセスに使用されるメモリ動作によって、システム性能が低下することがある。さらに、ＴＣＰセグメントを処理するために複数の処理コアを使用するシステムでは、異なる要素がアクセスを競い合うために、状態データによって性能の遅延が引き起こされる場合がある。例えば、同一のフローに属するパケットは異なるコアによって処理されてもよく、その場合あるコアは、他のコアがその処理を完了するまで、そのフローの状態データへのアクセスを待機し続ける。
【０００７】
図１は、コア１０２ａ〜１０２ｎ上で実行する、異なるスレッドにパケット・フローを割り当てるスキームの動作を示す。例えば、図示されるように、フロー「ａ」は、コア１０２ａのスレッド「１」に割り当てられ、一方、フロー「ｂ」は、コア１０２ｎのスレッド「２」に割り当てられる。これらのフローに属するパケットは、割り当てられたコア１０２ａ〜１０２ｎによって処理される。例えば、フロー「ａ」に属するパケット１０４ａ，１０４ｃは、コア１０２ａのスレッド「１」によって処理され、一方、パケット１０４ｂは、コア１０２ｎの割り当てられたスレッド「２」によって処理される。同一のフローに属するパケットを同一のコア／スレッド上で処理することによって、多種多様のコンテンション（競合）およびアクセスの遅延を回避することができる。例えば、付与されたフローのためのＴＣＢは、コアの外部メモリから繰り返し読取られ、または書き込まれる代わりに、ローカルなコア・メモリに格納することができる。さらに、付与されたフローのＴＣＢに対するコアをまたぐコンテンションが除去されるので、ロッキングに関連するレイテンシを回避することができる。
【０００８】
実施例を単純化するために、図１では任意にフローを「ａ」および「ｂ」と称する。実際には、ＩＰデータグラムのＩＰヘッダおよび隠蔽されたＴＣＰヘッダに含まれるデータの組(tuple)によって、付与されたパケットのフローを識別することができる。例えば、フローは、ＩＰソース、宛先アドレス、ソースおよび宛先ポートの組合せによって識別される。組は、フローを識別するビットの連続（「フロー・シグネチャ」）を生成するために、（例えば、ＣＲＣ（巡回冗長検査）アルゴリズムによって）ハッシュ化される。
【０００９】
図２Ａ〜図２Ｄは、フロー割当てを生成するマルチコア・システムの実施例を図示する。この実施例において、コア１０２ｂ〜１０２ｎは、ＴＣＰセグメントを処理するためのＴＣＰスレッドのプールを提供する。各ＴＣＰスレッドは、ＴＣＰセグメントを独立して処理することが可能である。この処理は、セグメントの再構成、フローのためのＴＣＰステート・マシンのナビゲーション、ＡＣＫメッセージの生成、送信ウィンドウの管理等を含む。
【００１０】
この実施例において、フロー割当てを実行するロジックは、グローバル分類１１０命令を含み、それによってフローがコア１０２ｂ〜１０２ｎに割り当てられ、その後、これらのフローに属するパケットが、割り当てられたコア１０２ｂ〜１０２ｎに分配される。かかる動作を実行するために、グローバル分類１１０命令は、フローと付与されたコア１０２ｂ〜１０２ｎとを対応付けるデータ１１４にアクセスする。例えば、図２Ａにおいて、フロー「ａ」はコア１０２ｂに割り当てられる。この割当てに加えて、データ１１４は、参照カウント（「参照カウント」）と付与されたフローとを対応付け、フロー内のいくつのパケットが、割り当てられたコアによって処理するためにスケジュールされたかどうかを識別する。データ１１４は、さらに、フローと、スケジュールされたパケットのいくつが完全に処理されたかを示す「完了」カウントとを対応付ける。スケジュールされたパケットがすべて処理された場合、フローのエントリは犠牲にされ (victimized) てもよい。例えば、周期的に、スレッドは、その「参照カウント」からフローの「完了」カウントを減算する。その結果がゼロ（０）である場合は、スケジュールされたパケットが全て処理されたことを示し、フロー・データは、データ１１４から除去される。別の方法では、「完了」カウントがゼロにされ、フローのための既存の割当てがそのまま残る。
【００１１】
グローバル分類１１０ロジックに加えて、実施例は、さらに、ＴＣＰスレッドを提供する各コア１０２ｂ〜１０２ｎ上で実行するローカル分類１１２ｂ〜１１２ｎ命令を特徴とする。１１２ｂ〜１１２ｎは、各コア１０２ｂ〜１０２ｎに対する同一のローカル分類ロジックの具体例であることに注意すべきである。一旦、グローバル分類１１０ロジックが、割り当てられたコア１０２ｂによって処理するためのパケットをスケジュールすると、コア１０２ｂ上で動作するローカル分類１１２ｂ〜１１２ｎロジックは、フローに割り当てられる特定のスレッドを決定する。このタスクを実行するために、ローカル分類器１１２ｂは、フローと付与されたスレッドとを対応付けるローカル・データ１１６ｂにアクセスすることができる。したがって、グローバル分類１１０およびローカル分類１１２ｂロジックは、細分性を増加して処理するためにデータグラムを送る。すなわち、グローバル分類１１０ロジックは、データグラムを割り当てられたコア１０２ｂのキューに入れることができ、一方で、ローカル分類器１１２ｂは、データグラムをコア１０２ｂ内の特定のスレッドのキューに入れる。
【００１２】
これらの要素の動作例を説明するために、図２Ｂ〜図２Ｃは、ＴＣＰセグメントに隠蔽されたＩＰデータグラム１０４ｅの処理を示す。図２Ｂに示されるように、データグラム１０４ｅを受信した後、グローバル分類１１０ロジックは、データグラム１０４ｅのフロー・シグネチャ（「ａ」）の探索を試みる。この例では、フロー「ａ」の探索に成功すると、割り当てられたコア（「１０２ｂ」）がリトリーブされ、グローバル分類１１０ロジックは、データグラム１０４ｅを、割り当てられたコア１０２ｂによって処理するためにキューに入れ、そして、フローの参照カウントが増分されて、コア１０２ｂによって処理するためのパケット１０４ｅのスケジューリングが反映される。図２Ｂは、コアのキューに入れられている実際のパケットを図示するが、グローバル分類１１０およびローカル分類１１２ｂロジックは、パケット・データのコピーを回避するために、パケット参照／処理上で動作してもよい。
【００１３】
図２Ｃに示されるように、割り当てられたコア１０２ｂ上のローカル分類器１１２ｂは、結局、データグラム１０４ｅをキューから外し、フローのデータグラムを処理するために割り当てられるスレッドを決定する。その後、割り当てられたスレッドは、セグメント上でＴＣＰ処理を行なう。その動作において、スレッドは、メモリ（図示せず）からフローのＴＣＢのコピーをキャッシュするために、ローカルのコア・メモリを使用してもよい。このコピーは、ＴＣＰスレッドおよび現在のパケットのためのコアの他のスレッドによって修正され、その後フロー内のパケットを受信することができる。図示されるように、付与されたデータグラムのための処理を完了した後、スレッドは、フローに対する「完了」カウントを増分する。
【００１４】
スレッドは、フローのためにキューに入れられたデータグラムをキューから外し、かつ処理すること続ける。結局、例えばスレッドがそのキューを空にした後、フローのためのＴＣＢがメモリにライト・バックされる。したがって、この実施例は、フロー状態データが、「背中合わせの(back-to-back)」パケット（つまり、パケットは、スレッドがフロー内の先行パケットの処理を完了する前に、スレッドにより処理するためにスケジュールされる）のためにローカル・コア・メモリ内に残存することを保証し、これによって、費用のかかる外部メモリへの、または外部メモリからのフローの状態データの書込みおよび読取りが回避される。
【００１５】
図２Ｂ〜図２Ｃに示されたシナリオは、フロー「ａ」の先行割当てを仮定したものである。しかしながら、しばしば、フローは現在割当てを有しないことがある。その場合、パケットのためのグローバル分類１１０ロジックのフローの検索は失敗するであろう。この時点で、グローバル分類１１０ロジックは、データ１１４を書き込むことによって最初のフロー割当てを作成し、フローと割り当てられたコアとを対応付ける。フローの割当ては、（例えば、コア間のラウンドロビンを使用することによって）コアを介してバランス・フローをロードするため、または異なる品質のサービスを提供するために、多種多様の方法で実行される。フローを付与されたコアに割り当てた後、選択されたコアは、フローを処理するために利用可能なスレッドを割り当てることができる。
【００１６】
潜在的に、図２Ｄに示されるように、グローバル分類１１０ロジックを実行するコア１０２ａは、さらに、ＴＣＰスレッドを提供し、ローカル分類器１１２ａを実行してもよい。かかる実施例では、受信されたパケットは、コア１０２ａのローカル分類器１１２ａによって最初に処理されてもよい。ローカル分類器１１２ａが、受信されたパケットのために割り当てられたスレッドｎの識別に成功した場合は、それがパケットをそのスレッドｎのキューに入れる。ローカル分類器１１２ａが、割り当てられたスレッドの識別に成功しなかった場合は、次にグローバル分類器１１４が実行する。例えば、図示されるように、フロー「ａ」がコア１０２ｂのスレッド「ｎ」にいまだ割り当てられていると仮定すると、パケット１０４ｆは、コア１０２ａのローカル分類器１１２ａによって最初に処理されるであろう。ローカル分類器１０２ａは、パケット１０４ｆフローのためのローカル・スレッド割当てを格納しないので、ローカル分類器１０２ａは、パケットをグローバル分類器１１０に送るであろう。この時点では、処理の順序は、図２Ｃに示すものと同じである。すなわち、グローバル分類器１１０は、コア１０２ｂのローカル分類器１１２ｂによって処理するためにパケット１０４ｆをキューに入れ、次に、スレッド「ｎ」によって処理のためにパケット１０４ｆをキューに入れるであろう。
【００１７】
かかる実施例では、グローバル分類器１１０は、グローバル分類器１１０を実行するために、スレッドをコア１０２ａに割り当ててもよい。この場合、グローバル分類器１１０は、コア１０２ａのローカル分類器１１２ａによってアクセスされたフロー／スレッド割当てデータを更新することにより、フローをコア１０２ａ上のスレッドに割り当てることができる。その後、グローバル分類器１１０は、ローカル分類器１１２ａによって再処理するためにパケットをキューに入れることができる。
【００１８】
図３はグローバル分類処理の例を示す。図示されるように、グローバル分類器は、データグラムのフロー・シグネチャの探索を実行し（１５２）、フローが以前に付与されたコアおよび／またはスレッドに割り当てられていたかどうかを判定する（１５４）。割り当てられていない場合は、グローバル分類器は、フローをコアおよび／またはスレッドに割り当てる（１５８）。その後、データグラムは、割り当てられたコアおよび／またはスレッドによって処理するためにキューに入れられる（１６０）。
【００１９】
図４は、ローカル分類処理の例を示す。図示されるように、ローカル分類器は、キューに入れられたデータグラムのフローが、ローカル分類器を実行するコア上のスレッドに割り当てられていたかどうかの判定を試みる（１６６）。割り当てられていた場合は、データグラムは、そのスレッドによって処理するためにキューに入れられる（１７０）。そうでない場合は、フローは、コアの利用可能なスレッド（例えば現在実行中のスレッド）に割り当てられる（１６８）。
【００２０】
図２〜図４に示されたスキームにおいて、付与されたフロー内のセグメントを処理するＴＣＰスレッドは、割り当てられたコアのローカル・メモリ内でフローのＴＣＢを保持することができる。これによって、さらに、コアと、アクセスしている外部メモリとの間のアクセス・コンテンションに関連する待ち時間を短縮することができる。
【００２１】
図２〜図４に示された実施例もまた単なる例示であり、他の実施例では、設計または動作を変更してもよい。例えば、実施例で使用されるデータ１１４は、単一のテーブルとして示されるが、このデータは、動作を促進するために個別のテーブルに格納されてもよい。例えば、付与されたフローが現在割当てを有するかどうかの判定を促進するために、フロー・シグネチャが個別に格納されてもよい。例えば、シグネチャの少なくとも一部を内容参照可能メモリ（ＣＡＭ：Content Addressable Memory）内に格納することができ、ＣＡＭの「ヒット」によって現在割当てを有するフローが素早く識別される。同様に、ＴＣＰスレッドによって増分された「完了」カウントは、ＴＣＰスレッドとグローバル分類ロジック１１０との間のアクセス・コンテンションを低減するために、個別に格納されてもよい。個別に格納されたとき、異なるフロー・データは、テーブル・インデックスによって対応付けされてもよい（例えば、フローに対応付けられたデータは、異なるテーブル内の同一の相対的位置に格納される）。
【００２２】
以上に示された技術の実施例は、それらの細分性において異なってもよい。すなわち、付与されたフローを特定のスレッドに割り当てる代わりに、システムは、単に、付与されたコアにフローを割り当て、利用可能性に基づいてセグメント上でスレッドを動作させてもよい。さらに、他の実施例では、スレッドは、グローバル・スレッドＩＤを特色としてもよく、それは、上記の２つのスキームの代わりに、パケットを正確なスレッドのキューに直接に入れるために、グローバル分類ロジックによって使用することができる。
【００２３】
上述の技術は、マルチコア中央処理装置（ＣＰＵ）またはネットワーク・プロセッサのような多種多様のマルチコア装置内で実施することができる。例えば、図５は、ネットワーク・プロセッサ２００の例を示す。示されたネットワーク・プロセッサ２００は、Ｉｎｔｅｌ（登録商標）インターネット・エクスチェンジ・ネットワーク・プロセッサ（ＩＸＰ: Internet eXchange network Processor)である。他のネットワーク・プロセッサは、異なる設計を特色とする。
【００２４】
図示されたネットワーク・プロセッサ２００は、単一の半導体集積回路ダイ上にプロセッシング・コア２０２が集合していることを特色とする。コア２０２のそれぞれは、パケット処理に適した縮小命令セット・コンピュータ（ＲＩＳＣ）プロセッサであってもよい。例えば、コア２０２は、汎用プロセッサの命令セットによって一般に提供される浮動小数点または整数除算命令を提供しなくてもよい。個々のコア２０２は、複数の実行スレッドを提供してもよい。例えば、コア２０２は、異なるスレッドのために複数のプログラム・カウンタおよび他の索引データを格納してもよい。個々のコア２０２は、コア内部のローカル・メモリを特色とするものでもよい。個々のコア２０２は、さらに、ＣＡＭを特色としていてもよい。ＣＡＭは、さらに、異なるコア２０２によって共有される資源であってもよい。
【００２５】
図示されるように、ネットワーク・プロセッサ２００は、さらにプロセッサ２００と他のネットワーク・コンポーネントとの間でパケットを伝送することができる少なくとも１つのインターフェイス２０２を特色とする。例えば、プロセッサ２００は、スイッチ・ファブリック・インターフェイス２０２（例えば、共通スイッチ・インターフェイス（ＣＳＩＸ））を特色とすることができ、それによってプロセッサ２００は、ファブリックに接続された他のプロセッサまたは回路にパケットを送信することを可能とする。プロセッサ２００は、さらに、プロセッサ２００が物理層（ＰＨＹ）および／またはリンク層装置（例えば、ＭＡＣまたはフレーマ装置）と通信することを可能にするインターフェイス２０２（例えばシステム・パケット・インターフェイス（ＳＰＩ）インターフェイス）を特色とすることができる。プロセッサ２００は、さらに、例えばホストまたは他のネットワーク・プロセッサと通信するためのインターフェイス２０８（例えば周辺要素相互接続（ＰＣＩ）バス・インターフェイス）を含む。
【００２６】
図示されるように、プロセッサ２００は、さらに、ハッシュ・コアのようなコア２０２によって共有される他のコンポーネント、コアによって共有される内部スクラッチ・メモリ、および、コアによって共有される外部メモリへのアクセスを提供するメモリ・コントローラ２０６，２１２を含む。ネットワーク・プロセッサ２００は、さらに、ネットワーク動作に関連する「コントロール・プレーン」タスクを実行するためにしばしばプログラムされる、付加的なプロセッサ２１０（例えばＳｔｒｏｎｇＡＲＭ（登録商標）ＸＳｃａｌｅ（登録商標）、またはＩｎｔｅｌ（登録商標）アーキテクチャ（ＩＡ）コア）を含む。しかしながら、コア・プロセッサ２１０は、さらに、「データ・プレーン」タスクを処理してもよい。
【００２７】
コア２０２は、コア２１０または他の共用資源（例えば、外部メモリまたはスクラッチパッド・メモリ）を介して他のコア２０２と通信してもよい。コア２０２は、さらに、隣接するコア２０４と直接ワイヤードされた隣接レジスタを介して通信してもよい。
【００２８】
ネットワーク・プロセッサ２００の機構は、多種多様の方法においてフロー割当てを実施するために使用することができる。例えば、各コア２０２に関連するＣＡＭは、ローカル分類器によって使用される割当てデータを格納するために使用されてもよい。例えば、ＣＡＭの第１のＮ番目のエントリは、異なるコア・スレッドに割り当てられたＮ番目のフロー・シグネチャを格納してもよい。かかる実施例では、ＣＡＭエントリの順序数は、割り当てられたスレッドを識別する（例えば、第２のＣＡＭエントリに格納されたフロー・シグネチャは、フローに割り当てられた第２のコア・スレッドを識別する）。
【００２９】
ＣＡＭは、さらに、グローバル分類器によって使用されてもよい。例えば、グローバル分類器を実行するコアのＣＡＭの最後のＭ番目のエントリは、最初のシグネチャの探索を促進するために、現在割り当てられたフローのフロー・シグネチャのサブセット（例えば、図２Ａ〜図２Ｃのデータ１１４のシグネチャの列）を格納するために使用されてもよい。ＣＡＭは、割り当てられたフローのすべてのシグネチャのための十分なスペースを特色としないことがあるので、残りのフロー・シグネチャおよび対応する割当てデータは、オフチップ（例えばＳＲＡＭ内）に格納されてもよい。したがって、シグネチャのためのＣＡＭミスによって、グローバル分類器はマッチのために残りのシグネチャのメモリの後続のサーチを実行する。
【００３０】
図示されたネットワーク・プロセッサ２００は、異なるコア２０２間でパケットを送るために使用することができる多種多様のメカニズムを特色とする。例えば、パケットは、隣接するコアを接続する次の隣接レジスタを介して、またはメモリ内（例えば、スクラッチパッドまたはＳＲＡＭ内）で実行されたキューを介して割り当てられたコアによって処理するためにキューに入れられてもよい。同様に、特定のスレッドのためのキューは、ローカル・コア・メモリ、スクラッチパッド、ＳＲＡＭ等において実行されてもよい。
【００３１】
潜在的に、コア２０２は、パケット処理パイプラインを実行するためにプログラムされてもよく、そこでは、１またはそれ以上のコア・スレッド上で動作するスレッドが、イーサネット（登録商標）動作（例えば、イーサネット（登録商標）の受信、イーサネット（登録商標）の非隠蔽）、ＩＰｖ４および／またはＩＰｖ６動作（例えば検証）を実行し、また、１またはそれ以上のスレッドがＴＣＰ動作等を処理する。他のスレッドは、発生したデータ・ストリーム上でアプリケーション動作を実行してもよい。
【００３２】
図６は、上述された技術を使用してパケットを処理することができるネットワーク装置を示す。図示されるように、装置は、スイッチ・ファブリック３１０（例えば、クロスバまたは共用メモリのスイッチ・ファブリック）によって相互接続されたライン・カード３００（「ブレード」）の集合を特色とする。スイッチ・ファブリックは、例えば、ＣＳＩＸ、またはハイパートランスポート(HyperTransport)、インフィニバンド(Infiniband)、ＰＣＩ、パケットオーバーソネット(Packet-Over-SONET)、ラピッドアイオー(RapidIO)、および／またはユートピア(UTOPIA: Universal Test Operations PHY Interface for ATM)のような他のファブリック技術に適合してもよい。
【００３３】
個々のライン・カード（例えば３００ａ）は、ネットワーク接続上の通信を処理する１またはそれ以上の物理層（ＰＨＹ）装置３０２（例えば、光学的、ワイヤ、およびワイヤレスＰＨＹ）を含んでもよい。ＰＨＹは、異なるネットワーク媒体によって伝送される物理的信号と、デジタル・システムによって使用されるビット（例えば、「０」および「１」）との間の翻訳をする。ライン・カード３００は、さらに、エラー検出および／または訂正のようなフレーム上での動作を実行することができるフレーマ装置（例えば、イーサネット（登録商標）、同期式光ネットワーク（ＳＯＮＥＴ）、ハイ・レベル・データ・リンク（ＨＤＬＣ）フレーマまたは他の「レイヤ２」装置）３０４を含んでもよい。図示されたライン・カード３００は、さらに、１または１以上のネットワーク・プロセッサ３０６を含んでもよく、それが、ＰＨＹ３０２を介して受信されたパケットに対するパケット処理動作を実行し、また、スイッチ・ファブリック３１０を介して、パケットを転送する退出インターフェイスの提供するライン・カードへパケットを導く。潜在的に、ネットワーク・プロセッサ３０６は、フレーマ装置３０４の代わりに「レイヤ２」の役割を実行する。
【００３４】
図５および図６は、ネットワーク・プロセッサおよびネットワーク・プロセッサに組み込まれた装置の特定の例を示すが、これらの技術は、示された以外の設計によるプロセッサおよび装置を含む多種多様のアーキテクチャにおいて実行することができる。例えば、これらの技術は、マルチコアＴＣＰオフロード・エンジン（ＴＯＥ）内で使用されてもよい。かかるＴＯＥは、ＩＰ格納ノード、アプリケーション（「レイヤ７」）ロード・バランサ、または他の装置に統合されてもよい。
【００３５】
さらに、これらの技術は、他のトランスポート層プロトコル、ネットワーク・プロトコル・スタック内の他の層におけるプロトコル、ＴＣＰおよびＩＰ以外のプロトコルを処理するため、および、他のプロトコル・データ・ユニットを処理するために使用されてもよい。例えば、これらの技術は、非同期転送モード（ＡＴＭ）パケット（「セル」）またはユーザ・データグラム・プロトコル（ＵＤＰ）パケットのような他の接続指向プロトコルを処理するために使用されてもよい。さらに、用語「ＩＰ」は、ＩＰｖ４およびＩＰｖ６の両方のＩＰの実施例を包含する。
【００３６】
ここで使用される用語「回路」は、ハードワイヤード回路、ディジタル回路、アナログ回路、プログラマブル回路等を含む。プログラマブル回路は、製造物（例えばリード・オンリ・メモリのような不揮発性メモリ）上に配置された実行可能な命令上で動作してもよい。
【００３７】
他の実施例は、請求項の範囲内である。
【図面の簡単な説明】
【００３８】
【図１】フロー割り当てを示す図である。
【図２Ａ】フローを割り当てるためのスキームの一例における動作を示す図である。
【図２Ｂ】フローを割り当てるためのスキームの一例における動作を示す図である。
【図２Ｃ】フローを割り当てるためのスキームの一例における動作を示す図である。
【図２Ｄ】フローを割り当てるためのスキームの一例における動作を示す図である。
【図３】それらのフロー割当てに基づいてパケットを送るための処理の一例のフローチャートである。
【図４】それらのフロー割当てに基づいてパケットを送るための処理の一例のフローチャートである。
【図５】マルチコア・プロセッサの一例の図である。
【図６】ネットワーク装置の図である。
【図１】
2008523729.tif 000003
【図２Ａ】
2008523729.tif 000004
【図２Ｂ】
2008523729.tif 000005
【図２Ｃ】
2008523729.tif 000006
【図２Ｄ】
2008523729.tif 000007
【図３】
2008523729.tif 000008
【図４】
2008523729.tif 000009
【図５】
2008523729.tif 000010
【図６】
2008523729.tif 000011
【国際調査報告】
2008523729.tif 000012
2008523729.tif 000013