(58)【調査した分野】(Int.Cl.,DB名)
前記処理モード機構が、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように、前記複数のインターフェース、前記ディスパッチャ、前記リオーダモジュール、および前記複数の処理コアを相互接続するように構成可能な複数のスイッチ要素を備える、請求項1に記載のネットワークプロセッサ。
前記処理コアは、複数の処理コアグループへと構成可能であり、各グループが、グループ内の前記処理コアを、パイプライン処理モードと並列処理モードとの間で構成するように構成可能な関連する処理モード機構を有する、請求項1に記載のネットワークプロセッサ。
構成するための前記手段が、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように、前記複数のインターフェース、前記ディスパッチャ、前記リオーダモジュール、および前記複数の処理コアを相互接続するように構成可能な複数のスイッチ要素を備える、請求項5に記載のネットワークプロセッサ。
前記複数の処理コアは、複数の処理コアグループへと構成可能であり、各グループが、グループ内の前記処理コアを、パイプライン処理モードと並列処理モードとの間で構成するための関連する手段を有する、請求項5に記載のネットワークプロセッサ。
前記コードが、前記ネットワークプロセッサで実行されたとき、前記処理モード機構に、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように前記複数のインターフェース、前記ディスパッチャ、前記リオーダモジュール、および前記複数の処理コアを相互接続するように、複数のスイッチ要素を構成することにより、複数の処理コアを選択された処理モードで構成させる、請求項9に記載の非一時的なコンピュータ可読記憶媒体。
【発明を実施するための形態】
【0013】
[0019]本開示の様々な態様が、添付図面を参照して、以下でより完全に説明される。しかし、本開示は、当業者によって多くの異なる形態で実施することができ、本明細書で提示されたいずれかの特定の構造または機能に限定されるものと解釈されるべきではない。そうではなくて、これらの態様は、本開示が十分なものであり、完全であるように、また本開示の範囲を当業者に十分伝えるように提供される。本明細書の教示に基づき、本開示の任意の他の態様とは独立して実施されようと、または組み合わせて実施されようと、本開示の範囲は、本開示のいずれの態様も包含するように意図されていることを当業者であれば理解されたい。たとえば、装置は、本明細書に記載の任意の数の態様を用いて実施され、または方法が実行され得る。さらに本開示の範囲は、本開示の他の態様に加えて、またはそれに代えて、他の構造および/または機能を用いて実施されるような装置または方法を包含することが意図されている。本明細書で開示される開示のいずれの態様も、特許請求の範囲の1つまたは複数の構成要件により実施され得ることを理解されたい。
【0014】
[0020]特定の態様が本明細書で述べられるが、これらの諸態様の多くの変形および置換は、本開示の範囲に含まれる。好ましい態様のいくつかの利益および利点が述べられるが、本開示の範囲は、特定の利益、用途、または目的に限定されることを意図していない。そうではなくて、本開示の態様は、様々な回路、技術、システム、ネットワーク、および方法に広く適用可能であるように意図されており、そのいくつかが、例として図面に、また以下の記述で示されている。詳細な説明および図面は、限定的なものではなく、本開示を単に例示するためのものであり、本開示の範囲は、添付の特許請求の範囲、およびその等価な形態により定義される。
【0015】
[0021]様々な概念が、添付図面を参照して、以下でより十分に述べられる。しかし、これらの概念は、当業者により多くの異なる形態で実施することができ、本明細書で提示される任意の特定の構造または機能に限定されるものと解釈されるべきではない。そうではなくて、これらの概念は、本開示が十分なものであり、完全であるように、またこれらの概念の範囲を当業者に十分伝えるように提供される。詳細な説明は、特定の細部を含むことができる。しかし、これらの概念は、これらの特定の細部を含まずに実施され得ることは当業者には明らかであろう。いくつかの例では、よく知られた構造および構成要素は、本開示を通して提示された様々な概念を曖昧にしないために、ブロック図の形で示されている。
【0016】
[0022]本開示を通して提示される様々な概念は、ネットワーク要素で実施するのによく適している。ネットワーク要素(たとえば、ルータ、スイッチ、ブリッジ、または同様のネットワーキングデバイス。)は、ネットワーク上の他の機器を通信可能に相互接続する任意のネットワーキング機器(たとえば、他のネットワーク要素、終端局、または同様のネットワーキングデバイス)を含む。
【0017】
[0023]これらの概念は、ハードウェアで、またはハードウェアプラットフォーム上で実行されるソフトウェアで実施され得る。ハードウェアまたはハードウェアプラットフォームは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向けIC(ASIC)、書換え可能ゲートアレイ(FPGA)もしくは他のプログラム可能な論理構成要素、ディスクリートゲートもしくはトランジスタ論理、ディスクリートハードウェア構成要素、またはそれらの任意の組合せ、あるいは本明細書で述べる機能を実施するように設計された任意の他の適切な構成要素とすることができる。汎用プロセッサはマイクロプロセッサとすることができるが、代替的には、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態マシンとすることができる。プロセッサはまた、たとえば、DSPとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPと併せた1つまたは複数のマイクロプロセッサ、または任意の他のそのような構成など、コンピューティング構成要素の組合せとして実施され得る。
【0018】
[0024]ソフトウェアは、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはその他として呼ばれようと、命令、命令セット、コード、コードセグメント、プログラムコード、プログラム、サブプログラム、ソフトウェアモジュール、アプリケーション、ソフトウェアアプリケーション、ソフトウェアパッケージ、ルーチン、サブルーチン、オブジェクト、実行可能ファイル、実行のスレッド、プロシージャ、関数などを意味するものと広く解釈されるべきである。ソフトウェアは、コンピュータ可読媒体上に常駐することができる。コンピュータ可読媒体は、例として、磁気記憶デバイス(たとえば、ハードディスク、フロッピー(登録商標)ディスク、磁気ストリップ)、光ディスク(たとえば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD))、スマートカード、フラッシュメモリデバイス(たとえば、カード、スティック、キードライブ)、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、プログラマブルROM(PROM)、消去可能PROM(EPROM)、電気的消去可能なPROM(EEPROM(登録商標))、汎用レジスタ、またはソフトウェアを記憶するための任意の他の適切な非一時的な媒体を含むことができる。
【0019】
[0025]本開示は、パイプライン処理モードと並列処理モードとの間で構成可能な複数の処理コアを有するネットワークプロセッサを対象とする。パイプライン処理モードでは、データパケットに対するソフトウェアオペレーションは、複数のソフトウェアオペレーションまたはサブタスクへと分割され、各サブタスクは、別個の処理コア上で実行される。任意の1つの処理コアにより取得されるデータパケットの中間処理は、パイプライン処理の次段に渡すことができる。並列処理モードでは、各データパケットは、処理コアに割り当てられる。各処理コアは、同じソフトウェアを実行して、完了するまでデータパケットを処理する。
【0020】
[0026]
図1は、パケットベースのネットワーク100の例を示す概念的なブロック図である。ネットワーク100は、1つまたは複数のネットワークプロセッサ104を用いて、たとえば、コンピュータなどの複数のネットワークデバイス102を相互接続する。ネットワーク100は、インターネットなどの広域ネットワーク(WAN)、イーサネット(登録商標)網などのローカルエリアネットワーク(LAN)、または任意の他の適切なネットワークとすることができる。パケットベースのネットワーク100は、世界的、全国的、地域的、地方自治体的、もしくは施設内、または任意の他の適切な領域を含む任意の適切な領域を包含するように構成することができる。
【0021】
[0027]ネットワークプロセッサ104は、スイッチ、ルータ、ブリッジ、またはネットワーク100上の他の機器を相互接続する任意の適切なデバイスとすることができる。ネットワークプロセッサ104は、データパケットを、ネットワークを介して導くために使用される1つまたは複数のルックアップテーブルを含むプログラム可能なデバイスとして実施することができる。各ルックアップテーブルは、1つまたは複数のフローテーブルエントリを含む。各フローエントリは、データパケットを処理するために使用される。
【0022】
[0028]
図2は、構成可能なマルチコアネットワークプロセッサ200の概略的なブロック図である。ネットワークプロセッサ200は、第1のコアグループ202と、第2のコアグループ204とを有する。各コアグループ202、204は、データパケットを処理するように構成されたいくつかの処理コアを含む。処理コアは、1つまたは複数のファームウェアと、コアに対してローカルなコードを記憶するための専用メモリとを含むことができる。各コアグループ202、204はまた、処理コアに関連付けられたいくつかのFIFOインターフェース(図示せず)を含むこともできる。
【0023】
[0029]処理モード機構218、220は、各コアグループ202、204と関連付けられる。処理モード機構218、220は、スイッチおよびマルチプレクサ、またはファブリックロジックおよびバスの1つまたは複数のものを含むことができる。処理モード機構218、220は、パイプライン処理モードと並列処理モードとの間で処理コアを構成するように構成可能である。パイプライン構成もしくはモードでは、ソフトウェアタスクは、複数のサブタスクへと分割され、各タスクは、別個の処理コア上で動作する。任意のコアにより取得された中間的な処理情報は、パイプライン処理における次段へと渡され得る。並列モードでは、いずれのタスクも、オペレーティングシステム(OS)スケジューラの制御により任意のコアで動作され得る。OSスケジューラは、複数の処理コア間の負荷バランスを提供する。代替的に、並列モードでは、タスクは、CPU親和性機構を用いて、特定のコアに固定され得る。別々の処理モード機構218、220が、各コアグループ202、204に対して示されているが、両方のコアグループに対する処理コアを構成するために、単一の機構が使用され得る。
【0024】
[0030]メモリアービタ206、208が、各コアグループと関連付けられている。アービタ206、208は、メモリ210、212へのインターフェースとして機能し、またメモリへのアクセスを管理する。たとえば、アービタ206、208は、処理コアによるメモリへのアクセスを管理するように構成され得る。アービタ206、208は、メモリに記憶されたコマンド、ならびに関連するプログラム命令およびデータが処理コアに提供されるシーケンスを決定することができる。アービタ206、208は、バスを介して、メモリ210、212へのアクセスを許可することができる。
【0025】
[0031]メモリ210、212は、マルチコアネットワークプロセッサ200に対して外部のものとすることができ、また1つまたは複数の共用されたスタティックRAM(SRAM)バンク、およびターナリ内容検索メモリ(TCAM:ternary content addressable memory)バンクを含むことができる。メモリ210、212は、プログラムコード、ルックアップテーブル、パケットデータ、および待ち行列情報のうちの1つまたは複数のものを記憶することができる。
【0026】
[0032]マルチコアネットワークプロセッサ200は、ディスパッチャ214とリアセンブル216とをさらに含む。ディスパッチャ214は、マルチコアネットワークプロセッサ200のオペレーションモードに従って、スイッチコアから受け取ったデータパケットを、処理コアに分配するように構成される。リアセンブラ216は、データパケットを処理コアから受け取り、マルチコアネットワークプロセッサ200のオペレーションモードに従って、データパケットをアセンブラに、または再順序付けするように構成される。リアセンブラ216は、リオーダモジュールと呼ばれ得る。
【0027】
[0033]パイプライン処理モード:
[0034]
図3は、パイプライン処理モードで動作するように構成された例示的なマルチコアネットワークプロセッサ300のブロック図である。例示的なマルチコアネットワークプロセッサ300は、4つの処理コアを有する第1のパイプライン302と、4つの処理コアを有する第2のパイプライン304とを含む(より多くの、またはより少ない処理コアがパイプライン302、304に含まれ得る)。各処理コアは、パケットを処理コアの中に移動させるための入力FIFOインターフェース306と、パケットを処理コアの外に移動させるための出力FIFOインターフェース308とを有する。
【0028】
[0035]第1の処理コア310を動作させるファームウェアは、その処理コアに関連付けられた入力FIFOインターフェース306から読み取ることにより、到来するパケットを処理する。処理コア310が到来するパケットの処理を完了したとき、コアのファームウェアは、コアに関連付けられた出力FIFOインターフェース308に対して中間パケットを出力する。「中間パケット」は、処理コアに入力されたパケットの、その処理コアによる処理から得られた、コアプロセッサにより出力されたパケットを指す。中間パケットは、次の処理コアの入力FIFOインターフェース306に入力されて、その処理コアのファームウェアに従って処理される。中間パケットの処理および転送は、最後のパケットが、パイプラインにおける最後の処理コアにより出力されるまで継続する。
【0029】
[0036]ディスパッチャ314は、2つのパイプライン302、304にパケットを分配することができる。ディスパッチャ314は、異なる分配アルゴリズムを適用することができる。ラウンドロビン分配では、パケットディスパッチャ314は、パケットを二者択一的に分配する。第1のパイプライン302における第1の入力FIFOインターフェース306が、パケットを保持するのに十分ではない場合、ディスパッチャ314は、そのパケットを第2のパイプライン304の第1の入力FIFOインターフェース306に分配することができる。両方のパイプライン302、304の第1の入力FIFOインターフェース306が、パケットを保持するのに十分ではない場合、ディスパッチャ314は、パケットのさらなる分配を停止することができる。ハッシュベースの分配では、パケットディスパッチャ314は、パケットヘッダフィールドまたは他のフィールドに基づく一定のアルゴリズムを適用し、2つのパイプライン302、304のいずれか一方にインデックスを得るためにモジュロ演算を適用する。
【0030】
[0037]ディスパッチャ314はまた、シーケンス番号をパケットに割り当てることができ、またリオーダモジュール316は、パケットがパイプラインに分配されたのと同じ順序でパケットを回収することができる。再順序付けタスクを容易にするために、シーケンス番号は、FIFOに入る最初の16ビットフィールドとすることができる。
【0031】
[0038]並列処理モード:
[0039]
図4は、並列処理モードで動作するように構成された例示的なマルチコアネットワークプロセッサ400のブロック図である。例示的なマルチコアネットワークプロセッサ400は、4つの処理コアを有する第1のプロセッサグループ402と、4つの処理コアを有する第2のプロセッサグループ404とを含む(より多くの、またはより少ない処理コアが、グループ402、404に含まれ得る)。各処理コアは、入力FIFOインターフェース406と、出力FIFOインターフェース408とを有する。処理コアを動作させるファームウェアは、その処理コアに関連付けられた入力FIFOインターフェース406から読み取ることにより、到来するパケットを処理する。処理コアが、到来するパケットの処理を完了したとき、コアのファームウェアが、処理されたパケットを、コアに関連付けられた出力FIFOインターフェース408に出力する。並列処理モードでは、各処理コアは、同じソフトウェアを実行して、完了するまでパケットを処理することができる。
【0032】
[0040]ディスパッチャ414は、2つのプロセッサグループ402、404にパケットを分配することができる。ディスパッチャ414は、異なる分配アルゴリズムを適用することができる。ラウンドロビン分配では、パケットディスパッチャ414は、パケットを二者択一的に分配する。第1のプロセッサグループ402における入力FIFOインターフェース406のうちの1つが、パケットを保持するのに十分ではない場合、ディスパッチャ414は、そのパケットを第2のプロセッサグループ404の入力FIFOインターフェース406の1つに分配することができる。両方のグループ402、404の入力FIFOインターフェース406が、パケットを保持するのに十分ではない場合、ディスパッチャ414は、パケットのさらなる分配を停止することができる。ハッシュベースの分配では、パケットディスパッチャ414は、パケットヘッダフィールドまたは他のフィールドに基づく一定のアルゴリズムを適用し、2つのグループ402、404のいずれか一方にインデックスを得るためにモジュロ演算を適用する。
【0033】
[0041]ディスパッチャ414はまた、シーケンス番号をパケットに割り当てることができ、またリオーダモジュール416は、パケットがパイプラインに分配されたのと同じ順序でパケットを回収することができる。再順序付けタスクを容易にするために、シーケンス番号は、FIFOに入る最初の16ビットフィールドとすることができる。
【0034】
[0042]処理モード選択:
[0043]
図5は、いくつかの処理コアに対する処理モードの選択を提供する処理モード機構500のブロック図である。処理モード機構500は、いくつかの処理コアを、パイプライン処理モードまたは並列処理モードのいずれかで構成するための手段を提供する。処理モード機構500、または複数の処理コアを構成するための手段は、たとえば、スイッチS0〜S5および/またはマルチプレクサ502a〜502cなどのいくつかのスイッチ要素を含むことができる。スイッチS0〜S5およびマルチプレクサ502の各々は、モード制御信号504により制御され得る。
【0035】
[0044]処理モード機構500は、モード制御信号504が、スイッチS0〜S5をオープン状態に設定し、またマルチプレクサ502a〜502cを、上側のFIFOインターフェースF1、F3、F5、F7にコア出力パケットを導くように設定するとき、処理コアをパイプライン処理モードに構成する。このモードでは、ディスパッチャ514、またはデータパケットを分配するための手段は、パケットをFIFOインターフェースF0に分配する。
【0036】
[0045]処理コア、またはデータパケットを処理するための手段は、処理モード機構500のスイッチ要素と併せて、分配されたパケットを次のように処理することができる:分配されたパケットは、第1の処理コア506aにより処理される。第1のマルチプレクサ502aは、第1の処理コア506aにより出力された、得られた中間パケットを受け取り、それをFIFOインターフェースF1へと導く。中間パケットは、第2の処理コア506bにより処理される。第2のマルチプレクサ502bは、第2の処理コア506bにより出力された、得られた中間パケットを受け取り、それをFIFOインターフェースF3へと導く。この処理シーケンスは、第4のプロセッサコア506dが、最後のパケットを最後のFIFOインターフェースF7に出力するまで続けられる。リオーダモジュール516は、最後のパケットを最後のFIFOインターフェースF7から受け取る。パイプラインモードでは、下側のFIFOインターフェースF2、F4、F6は使用されない。
【0037】
[0046]処理モード機構500は、モード制御信号504が、スイッチS0〜S5をクローズ状態に設定し、マルチプレクサ502a〜502cを、ディスパッチャ514入力パケットを上側FIFOインターフェースF1、F3、F5に導くように、また処理コア出力パケットを下側FIFOインターフェースF2、F4、F6、F7に導くように設定したとき、処理コアを並列処理モードに構成する。並列処理モードでは、上側と下側FIFOインターフェースF0〜F7の両方が使用される。
【0038】
[0047]並列処理モードでは、ディスパッチャ514、またはデータパケットを分配するための手段は、処理モード機構のスイッチ要素と併せて、パケットを次のように処理コアに分配する:第1の処理コア506aに対するパケットは、FIFOインターフェースF0に入力され、第2の処理コア506bに対するパケットは、第1のマルチプレクサ502aを通してFIFOインターフェースF1に入力され、第3の処理コア506cに対するパケットは、第2のマルチプレクサ502bを通してFIFOインターフェースF3に入力され、第4の処理コア506dに対するパケットは、第3のマルチプレクサ502cを通してFIFOインターフェースF5に入力される。
【0039】
[0048]処理コアの各々は、そのそれぞれのパケットを処理し、またマルチプレクサ502a〜502cを含む処理モード機構500は、次のように処理コア出力トラフィックを導く:第1の処理コア506aの出力はFIFOインターフェースF2に入力され、第2の処理コア506bの出力はFIFOインターフェースF4に入力され、また第3の処理コア506cの出力はFIFOインターフェースF6に入力される。リオーダモジュール516は、FIFOインターフェースF2、F4、F6、およびF7からパケットを収集する。
【0040】
[0049]
図6は、いくつかの処理コアに対して処理モードの選択を提供する他の例示的な処理モード機構600のブロック図である。処理モード機構600は、パイプライン処理モードまたは並列処理モードのいずれかで、いくつかの処理コアを構成するための手段を提供する。処理モード機構600、または複数の処理コアを構成するための手段は、メモリ602、バス604、およびファブリックロジック606を含むことができる。
【0041】
[0050]いくつかの実施形態では、処理モード機構600は、次のように働くことができる。各処理コア612a〜612d、およびリオーダモジュール616は、IDと関連付けられる。ディスパッチャ614により、処理モード機構600の中に送出された各パケットは、コアの1つ、またはリオーダモジュールに対応するパケットヘッダフィールドにIDを有する。このIDは、パケットをどこに送るべきかを、処理モード機構600のファブリックロジック606に指示する。モード選択信号610は、処理コア612a〜612d、ディスパッチャ614、およびリオーダモジュール616の間でFIFOインターフェースの割り振りを制御する。
【0042】
[0051]処理モード機構600は、モード選択信号610を介して、処理コアをパイプライン処理モードに構成する。パイプライン処理モードでは、ディスパッチャ614は、第1の処理コア612aに対応するIDを有するパケットを、第1のファブリック入力FIFO618に入力する。パケットは、バス604を通過し、ファブリックロジック606により受け取られる。パケットIDに基づき、ファブリックロジック606は、パケットを、バス604を介して第1の処理コア612a(Core0)のFIFOインターフェースF0_outに送る。
【0043】
[0052]第1の処理コア612aは、パケットを処理し、第2の処理コア612b(Core1)のIDに対応するようにパケットIDを変更し、パケットを、FIFOインターフェースF0_inに入力する。パケットは、バス604を通過し、ファブリックロジック606により受け取られる。パケットIDに基づき、ファブリックロジック606は、パケットを第2の処理コア612bのFIFOインターフェースF1_outに送る。
【0044】
[0053]第2の処理コア612bは、パケットを処理し、第3の処理コア612c(Core2)のIDに対応するようにパケットIDを変更し、パケットを、FIFOインターフェースF1_inに入力する。パケットは、次いで、ファブリックロジック606により受け取られる。パケットIDに基づき、ファブリックロジック606は、パケットを第3の処理コア612cのFIFOインターフェースF2_outに送る。
【0045】
[0054]第3の処理コア612cは、パケットを処理し、第4の処理コア612d(Core3)のIDに対応するようにパケットIDを変更し、パケットを、FIFOインターフェースF2_inに入力する。パケットは、次いで、ファブリックロジック606により受け取られる。パケットIDに基づき、ファブリックロジック606は、パケットを第4の処理コア612dのFIFOインターフェースF3_outに送る。
【0046】
[0055]第4の処理コア612dは、パケットを処理し、リオーダモジュール616のIDに対応するようにパケットIDを変更し、パケットを、FIFOインターフェースF3_inに入力する。パケットは、次いで、ファブリックロジック606により受け取られる。パケットIDに基づき、ファブリックロジック606は、パケットを、第1のファブリック出力FIFO620を介してリオーダモジュール616に送る。
【0047】
[0056]パイプラインモードの場合、ディスパッチャモジュールに関連付けられたファブリック入力FIFOインターフェース618の数、およびリオーダモジュール616に関連付けられたファブリック出力FIFOインターフェース620の数は、パイプラインの数と同等にすることができる。たとえば、ここで述べたパイプラインでは、4つの処理コアが単一のパイプラインを形成し、したがって、単一のファブリック入力FIFOインターフェース618だけがディスパッチャ614に関連付けられ、また単一のファブリック出力FIFOインターフェース620が、リオーダモジュール616に関連付けられている。他の構成では、4つの処理コア612a〜612dは、それぞれが2つのコアを有する、2つの別々のパイプラインを規定することができる。この場合、ディスパッチャ614に関連付けられた2つのファブリック入力FIFOインターフェース618、622、およびリオーダモジュール616に関連付けられた2つのファブリック出力FIFOインターフェース620、624が存在することになる。
【0048】
[0057]処理モード機構600は、モード選択信号610を介して、処理コアを並列処理モードに構成する。並列処理モードでは、ディスパッチャ614、またはデータパケットを分配するための手段は、第1のパケットを、第1の処理コア612a(Core0)に対応するIDを有する第1のファブリック入力FIFOインターフェース618に入力し、第2のパケットを、第2の処理コア612b(Core1)に対応するIDを有する第2のファブリック入力FIFO622に入力し、第3のパケットを、第3の処理コア612c(Core3)に対応するIDを有する第3のファブリック入力FIFOインターフェース(図示せず)に入力し、また第4のパケットを、第4の処理コア612d(Core4)に対応するIDを有する第4のファブリック入力FIFOインターフェース(図示せず)に入力する。
【0049】
[0058]ファブリックロジック606は、バス604を介してパケットの各々を受け取る。それぞれのパケットIDに基づき、ファブリックロジック606は、各パケットを、対応するFIFOインターフェースF0_out、F1_out、F2_out、およびF3_outに送る。処理コア612a〜612dの各々は、そのそれぞれのパケットを処理し、リオーダモジュール616のIDに対応するようにそのパケットのパケットIDを変更し、そのパケットを、その対応するFIFOインターフェースF0_in、F1_in、F2_in、およびF3_inに出力する。ファブリックロジック606は、パケットを受け取り、パケットを、対応するファブリックアウトFIFOインターフェース620、624を介してリオーダモジュール616に送る。
【0050】
[0059]並列処理モードの場合、ディスパッチャに関連付けられたファブリック入力FIFOインターフェース618、622の数、およびリオーダモジュールに関連付けられたファブリック出力FIFOインターフェース620、624の数は、処理コア612a〜612dの数と同等にすることができる。たとえば、ここで述べたマルチコアネットワークプロセッサでは、FIFOインターフェースの各タイプのうち2つだけが
図6で示されているが、4つのファブリック入力FIFOインターフェース、および4つのファブリック出力FIFOインターフェースがある。
【0051】
[0060]
図7は、パイプライン処理モードと並列処理モードとの間で構成可能なネットワークプロセッサを用いてデータパケットを処理するための例示的な方法700の流れ図である。702では、ネットワークプロセッサは、選択された処理モードで複数の処理コアを構成する。選択された処理モードは、パイプライン処理モードおよび並列処理モードの一方とすることができる。
【0052】
[0061]たとえば、ネットワークプロセッサは、FIFOインターフェースと、処理モード機構または処理コアを構成するための手段とを用いて、パイプライン処理モードまたは並列処理モードのいずれかで処理コアを構成することができる。そのような処理モード機構または処理コアを構成するための手段は、
図5および
図6、またはその等価なものを参照して本明細書で開示された、任意の対応する構造、要素、および/または機能とすることができる。その目的のために、ネットワークプロセッサは、パイプライン処理モードまたは並列処理モードのいずれかで動作するように処理コアを相互接続するように、たとえば、スイッチもしくはマルチプレクサなどの複数のスイッチ要素を構成することができる。ネットワークプロセッサはさらに、または代替的に、パイプライン処理モードまたは並列処理モードのいずれかで動作するように、処理コアを相互接続するようにファブリックロジックおよびバスを構成することができる。
【0053】
[0062]704で、ネットワークプロセッサは、ディスパッチャ、またはパケットを分配するための手段を用いて、データパケットを、選択された処理モードに従って複数の処理コアに分配する。そのようなディスパッチャ、またはパケットを分配するための手段は、
図5、および
図6、またはその等価なものを参照して本明細書で開示された任意の対応する構造、要素、および/または機能によることができる。
【0054】
[0063]706で、ネットワークプロセッサは、処理コアまたは処理するための手段を用いてデータパケットを処理する。パケットは、知られたパケットフロー技法に従って処理される。そのような処理は、コアプロセッサに関連付けられたフローテーブルのフローエントリに対して、データパケットをマッチングさせることと、フローエントリのマッチが見出された場合、パケットに対して命令セットを実行することと、パケットを他の処理コアに送ることとを含むことができる。命令を実行することは、パケットを変更し、マッチフィールドを更新することと、アクションセットを更新することと、メタデータを更新することとを含むことができる。パイプライン処理の場合、これらの命令は、パイプライン内の他の処理コアにパケットを導くことができる。並列処理の場合、これらの命令は、パケットをリオーダモジュールへと導くことができる。
【0055】
[0064]708で、ネットワークプロセッサは、リオーダモジュール、またはパケットを出力するための手段を用いて、データパケットを出力する。そのようなリオーダモジュール、またはパケットを出力するための手段は、
図5および
図6、またはその等価なものを参照して本明細書で開示された任意の対応する構造、要素、および/または機能によることができる。パイプライン処理の場合、リオーダモジュールは、パイプラインにおける最後の処理コアから最後のデータパケットを受け取る。並列処理の場合、リオーダモジュールは、並列構成における処理コアの各々からパケットを受け取り、そのパケットを望ましい順序で送る。
【0056】
[0065]本開示の様々な態様が、当業者に本発明を実施できるように提供されている。本開示を通して提示された例示的な実施形態に対する様々な変更は、当業者であれば容易に明らかになるはずであり、また本明細書で開示された概念は、他の磁気記憶デバイスに拡張され得る。したがって、特許請求の範囲は、本開示の様々な態様に限定されるようには意図されておらず、特許請求の範囲の文言に一致する完全な範囲が与えられるべきである。当業者に知られている、または後に知られるようになる、本開示を通して述べられた例示的な実施形態の様々な構成要素に対するすべての構造的、機能的に均等な形態は、参照により本明細書に明示的に組み込まれており、特許請求の範囲により包含されるように意図されている。さらに、そのような開示が特許請求の範囲に明示的に記載されているかどうかにかかわらず、本明細書で開示されたものはいずれも、公知のものとして供されるようには意図されていない。いずれの特許請求の範囲の構成要件も、その構成要件が、フレーズ「ための手段(means for)」を用いて明示的に記載されていない限り、または方法請求項の場合、構成要件が、フレーズ「ためのステップ(step for)」を用いて記載されていない限り、米国特許法第112条第6段落の規定の下に解釈されるべきではない。
以下に、出願当初の特許請求の範囲に記載された発明を付記する。
[C1]
データパケットを処理するための複数の処理コアと、
パイプライン処理モードと並列処理モードとの間で前記処理コアを構成するように構成可能な処理モード機構とを備えるネットワークプロセッサ。
[C2]
前記処理コアとともに配置される複数の先入れ先出し(FIFO)インターフェースをさらに備え、ここにおいて、前記処理モード機構は、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように、前記FIFOインターフェースと前記処理コアとを相互接続するように構成される、C1に記載のネットワークプロセッサ。
[C3]
前記処理モード機構が、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように、前記処理コアを相互接続するように構成可能な複数のスイッチ要素を備える、C1に記載のネットワークプロセッサ。
[C4]
前記スイッチ要素が、スイッチとマルチプレクサの一方、または両方を備える、C3に記載のネットワークプロセッサ。
[C5]
前記処理モード機構が、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように、前記処理コアを相互接続するように構成可能なファブリックロジックおよびバスを備える、C1に記載のネットワークプロセッサ。
[C6]
前記処理コアは、複数の処理コアグループへと構成可能であり、各グループが、グループ内の前記処理コアを、パイプライン処理モードと並列処理モードとの間で構成するように構成可能な関連する処理モード機構を有する、C1に記載のネットワークプロセッサ。
[C7]
データパケットを処理するための手段と、
パイプライン処理モードと並列処理モードとの間で処理するための前記手段を構成するための手段とを備えるネットワークプロセッサ。
[C8]
処理するための前記手段とともに配置される複数の先入れ先出し(FIFO)インターフェースをさらに備え、構成するための前記手段が、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように、前記FIFOインターフェースと処理するための前記手段とを相互接続するように構成される、C7に記載のネットワークプロセッサ。
[C9]
処理するための前記手段が、複数の処理コアを備え、また
構成するための前記手段が、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように、前記処理コアを相互接続するように構成可能な複数のスイッチ要素を備える、C7に記載のネットワークプロセッサ。
[C10]
前記スイッチ要素が、スイッチとマルチプレクサの一方、または両方を備える、C9に記載のネットワークプロセッサ。
[C11]
処理するための前記手段が複数の処理コアを備え、また
構成するための前記手段が、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように、前記処理コアを相互接続するように構成可能なファブリックロジックおよびバスを備える、C7に記載のネットワークプロセッサ。
[C12]
処理するための前記手段は、複数の処理コアグループへと構成可能な複数の処理コアを備え、各グループが、グループ内の前記処理コアを、パイプライン処理モードと並列処理モードとの間で構成するための関連する手段を有する、C7に記載のネットワークプロセッサ。
[C13]
データパケットを処理する方法であって、
複数の処理コアを選択された処理モードで構成することを備え、前記選択された処理モードが、パイプライン処理モードおよび並列処理モードの一方を備える、方法。
[C14]
構成することが、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように、前記処理コアを、複数の先入れ先出し(FIFO)インターフェースと相互接続することを備える、C13に記載の方法。
[C15]
構成することが、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように、前記処理コアを相互接続するように複数のスイッチ要素を構成することを備える、C13に記載の方法。
[C16]
前記スイッチ要素が、スイッチとマルチプレクサの一方、または両方を備える、C15に記載の方法。
[C17]
構成することが、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように、前記処理コアを相互接続するようにファブリックロジックおよびバスを構成することを備える、C13に記載の方法。
[C18]
コンピュータプログラム製品であって、
ネットワークプロセッサにより実行可能なコードを備えるコンピュータ可読媒体を備え、前記ネットワークプロセッサが、複数の処理コアと処理モード機構とを備え、前記コードが前記ネットワークプロセッサで実行されたとき、前記ネットワークプロセッサに、
複数の処理コアを選択された処理モードで構成させる、前記選択された処理モードがパイプライン処理モードおよび並列処理モードの一方を備える、コンピュータプログラム製品。
[C19]
前記コードが、前記ネットワークプロセッサで実行されたとき、前記ネットワークプロセッサに、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように、前記処理コアを複数の先入れ先出し(FIFO)インターフェースと相互接続することにより、複数の処理コアを選択されたモードで構成させる、C18に記載のコンピュータプログラム製品。
[C20]
前記コードが、前記ネットワークプロセッサで実行されたとき、前記ネットワークプロセッサに、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように前記処理コアを相互接続するように、複数のスイッチ要素を構成することにより、複数の処理コアを選択された処理モードで構成させる、C18に記載のコンピュータプログラム製品。
[C21]
前記スイッチ要素は、スイッチとマルチプレクサの一方、または両方を備える、C20に記載のコンピュータプログラム製品。
[C22]
前記コードが、前記ネットワークプロセッサで実行されたとき、前記ネットワークプロセッサに、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように前記処理コアを相互接続するようにファブリックロジックおよびバスを構成することにより、複数の処理コアを選択された処理モードで構成させる、C18に記載のコンピュータプログラム製品。
[C23]
データパケットを処理するための複数の処理コアを備え、ここにおいて、前記処理コアが、パイプライン処理モードと並列処理モードとの間で構成可能である、ネットワークプロセッサ。
[C24]
前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように、前記処理コアを相互接続するように構成された複数のスイッチをさらに備える、C23に記載のネットワークプロセッサ。
[C25]
前記処理コアとともに配置された複数の先入れ先出し(FIFO)インターフェースをさらに備え、ここにおいて、前記スイッチ要素が、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように、前記FIFOインターフェースと前記処理コアとを相互接続するようにさらに構成される、C24に記載のネットワークプロセッサ。
[C26]
メモリと、前記メモリへのアクセスを前記処理コアに提供するためのメモリバスとをさらに備え、ここにおいて、前記メモリバスが、前記パイプライン処理モードまたは前記並列処理モードのいずれかで動作するように前記処理コアを相互接続する、C23に記載のネットワークプロセッサ。
[C27]
前記処理コアが、前記パイプライン処理モードにおける複数のパイプラインへと構成可能である、C23に記載のネットワークプロセッサ。