(57)【要約】【課題】ネットワークプロセッサにおけるパケット処理性能を改善し、ルータの大容量化、低遅延化、低コスト化、低消費電力化を図ることである。【解決手段】プロセスキャッシュ参照部１０２、プロセスキャッシュメモリ１０４、スケジューラ１０６、ＣＰＵ１０８などから構成されるネットワークプロセッサであって、ルータにおけるパケット処理において、パケットが持つローカリティを有効に生かして、全てのパケットをＣＰＵ１０８に送るのではなく、ＣＰＵ１０８で処理した結果をプロセスキャッシュメモリ１０４に蓄える機構を備えることにより、同じヘッダを持つパケットは最初に一度だけ処理するだけとなるため、将来のユビキタスによる細粒度通信やストリーム、Ｐ２Ｐ等による大容量通信に対応するとともに、消費電力を軽減することが可能となる。【選択図】        図１
2004260532.tif 000002
【特許請求の範囲】
【請求項１】
パケットを受信するインタフェースと、
前記インタフェースで受信したパケットから情報の部分集合を切り出す切り出し手段と、
前記切り出し手段で切り出された部分集合情報を記憶するキャッシュメモリと、
前記キャッシュメモリへのアクセスを制御するキャッシュメモリコントローラと、
前記部分集合情報の切り出されたパケットが伝送される第１のパスと、
前記部分集合情報の切り出された部分以外のパケットもしくは、前記受信したパケットの全体が伝送される第２のパスと、
前記第１のパスと前記第２のパスとを分岐する分岐手段とを有し、
前記キャッシュメモリコントローラは、ハッシュを用いた比較情報の縮小化法を用いる場合と用いない場合とを選択して、前記インタフェースで受信したパケットの情報の部分集合と前記キャッシュメモリに格納された部分集合情報とを比較し、キャッシュヒットした場合には、前記分岐手段は前記受信したパケットを前記第２のパスへ分岐させることを特徴とするネットワークプロセッサ。
【請求項２】
パケットを受信するインタフェースと、
前記インタフェースで受信したパケットから情報の部分集合を切り出す切り出し手段と、
前記切り出し手段で切り出された部分集合情報を格納する格納手段と、
前記格納手段に格納された部分集合情報と前記インタフェースで受信したパケットに含まれる部分集合情報とを比較する比較手段とを有し、
前記比較手段は、ハッシュを用いた比較情報の縮小化法を用いる場合と用いない場合とを選択して、前記受信したパケットに含まれる部分集合情報と前記格納手段に格納された部分集合情報とを比較し、一致しない場合には前記切り出し手段に対してパケットの部分集合の切り出しを実行させることを特徴とするネットワークプロセッサ。
【請求項３】
パケットを受信するインタフェースと、
前記インタフェースで受信したパケットから情報の部分集合を切り出す切り出し手段と、
前記切り出し手段で切り出された部分集合情報を格納する格納手段と、
前記格納手段に格納された部分集合情報と前記インタフェースで受信したパケットに含まれる部分集合情報とを比較する比較手段と、
前記部分集合情報を処理するプロセッサと、
パケットに対して送信処理を施す処理手段と、
パケットの部分集合情報に従ってパケットの処理パスを分岐する分岐手段と、
前記処理手段と前記格納手段とを結ぶ第１のパスと、
前記分岐手段と前記プロセッサとを結ぶ第２のパスとを有し、
前記比較手段は、ハッシュを用いた比較情報の縮小化法を用いる場合と用いない場合とを選択して、前記インタフェースで受信したパケットの部分集合情報と前記格納手段に格納された部分集合情報とを比較し、
前記分岐手段は、両者が一致しない場合には、前記格納手段から伝送されたパケットを前記第２のパスへ分岐させることを特徴とするネットワークプロセッサ。
【請求項４】
複数のインストラクションセットを切り替えることが可能であり、前記複数のインストラクションセットの一部が、プロセッサ内部の処理パスの経路切り替えスイッチの選択手段を直接制御できる機能を持つインストラクションデコーダを有することを特徴とするネットワークプロセッサ。
【請求項５】
請求項１、２または３記載のネットワークプロセッサにおいて、
前記パケットの処理部は、複数のインストラクションセットを切り替えることが可能であり、前記複数のインストラクションセットの一部が、プロセッサ内部パイプラインの処理パスの経路切り替えスイッチの選択手段を直接制御できる機能を持つインストラクションデコーダを有することを特徴とするネットワークプロセッサ。
【請求項６】
パケットを直接扱うことができるプロセッサ内部パイプラインを有し、
前記プロセッサ内部パイプラインは、前記パケットの処理においてパケット内部の特徴を利用し、前記パケットの処理手段を切り替える機能を持つ複数のフッキング手段を備えることを特徴とするネットワークプロセッサ。
【請求項７】
請求項１、２または３記載のネットワークプロセッサにおいて、
前記パケットの処理部は、パケットを直接扱うことができるプロセッサ内部パイプラインを有し、
前記プロセッサ内部パイプラインは、前記パケットの処理においてパケット内部の特徴を利用し、前記パケットの処理手段を切り替える機能を持つ複数のフッキング手段を備えることを特徴とするネットワークプロセッサ。
【請求項８】
パケット処理を行うネットワークプロセッサであって、
同じ部分構成要素を１つまたは複数持つパケットの組を処理する際、
各組の最初に届く第１のパケットの処理に掛かる時間と、２番目以降に届く前記第１のパケットと同じ構成要素をもつ第２のパケットの処理に掛かる時間とを比較すると、前記第２のパケットの方の処理時間の方が短く、前記第２のパケットの２番目以降に届く全パケットの処理時間が等しくなるように制御する機能を有することを特徴とするネットワークプロセッサ。
【請求項９】
請求項８記載のネットワークプロセッサにおいて、
互いに同じ部分構成要素を持たないパケットも併せて処理することを特徴とするネットワークプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パケット通信に於ける大容量パケットの低遅延交換システムに関わり、特に大容量パケットの低遅延交換システムにおけるパケットの要求処理に必要なネットワークプロセッサのパケット処理方式に関わる。パケットとしては、特にＩＰパケット、イーサネット（Ｒ）・フレームを受入れる技術に適用して有効な技術に関する。
【０００２】
【従来の技術】
通信分野においては、広帯域化、高品質化、低遅延化の要求を満たす様々なルータやスイッチの構成技術が提案されている。特に、ネットワークプロセッサは今後のネットワークの高機能化、広帯域化、高品質化、低遅延化に係わる部位であり、ネットワークプロセッサの処理性能がルータやネットワークの性能を左右する。
【０００３】
ここで、本発明者が本発明の前提として検討した、従来の基本的なネットワークプロセッサの構成図を図１４に示す（例えば、特許文献１，２参照）。この図１４を用いて基本的なパケット処理の手順を説明する。
【０００４】
ネットワークプロセッサの入力インタフェース１４０１に投入されたパケットは、まずフォーマットをネットワークプロセッサ内部で扱う形式に変換する。次に、パケット処理部１４０２において宛先情報を調べる。次に、内蔵するプロセッサ１４０３においてパケットがプログラマブルに処理し、出力インタフェース１４０４で例えばスイッチングファブリクス１４０５に伝える。これらの処理は、順序が入れ替わったり、まとめられたり、それぞれの処理を担うモジュールの数が複数あるといった場合があるが、基本的には各処理を順番に行う。また、内蔵するプロセッサは、まず、パケットのボディがメモリに蓄えられ、パケットのヘッダ情報だけがプロセッサで処理される。
【０００５】
ネットワークのバンド幅が増大すると共にネットワークプロセッサに求められる処理容量も向上する。従って、この様な動作を行うネットワークプロセッサの処理容量を高めることを目的とした手法が数多く提案されてきた。最も一般的な手法は、通常のパーソナルコンピュータに搭載するプロセッサと同様のキャッシュやパイプライン化により処理容量を向上する方法である。また、パイプラインも処理容量向上には有効な手段であり、数多くの提案がなされている。
【０００６】
まず、キャッシュについて、ネットワークプロセッサ内部にあるプロセッサ（ＣＰＵ）のインストラクションやデータのキャッシュを備えてメモリアクセス遅延を短縮するのが一般的である（例えば、特許文献３参照）。それ以外については、ルーティングテーブルをキャッシュする手法が特許文献４の従来例に示されている。
【０００７】
パイプラインについて、基本的にパケット処理を行うネットワークプロセッサは次々と入力に投入されるパケットを流れ作業で処理していくため、パイプライン化は容易である（例えば、特許文献５参照）。しかし、全てのパケットが流れ作業で行うことができるわけではないため、処理によってはバッファにパケットを一度蓄える必要がある。そこで、ＦＩＦＯや弾性バッファなどの様々な表現があるが、前記特許文献１や、特許文献６〜１１など、数多くのバッファを持つ構成が提案されている。また、パイプラインが詰まったときに停止させる仕組みについても提案されている（例えば、特許文献１２参照）。
【０００８】
中断することなく内部のプログラム更新する方法（無中断プログラム更新）は信頼性の高いシステムを構築する上で重要な技術である。従来では無中断プログラム更新を実現するために複数のプロセッサを準備し、一方のプロセッサを利用し、利用していないもう一方のプロセッサのプログラムを更新して切り替える方法がある。
【０００９】
【特許文献１】
特許第３１２８０５８号公報
【００１０】
【特許文献２】
特開平９−１２８３１３号公報
【００１１】
【特許文献３】
特開２００１−９４５９６号公報
【００１２】
【特許文献４】
特表２００１−５１７０２４号公報
【００１３】
【特許文献５】
特開２００１−７７８３２号公報
【００１４】
【特許文献６】
特表２００２−５０８８６８号公報
【００１５】
【特許文献７】
特表２００２−５１０４５０号公報
【００１６】
【特許文献８】
特開２００２−５２０９０７号公報
【００１７】
【特許文献９】
特開２００２−５７６９８号公報
【００１８】
【特許文献１０】
特開２００２−５２０９０７号公報
【００１９】
【特許文献１１】
特開平９−１２８３１３号公報
【００２０】
【特許文献１２】
特開２００２−２４７０９５号公報
【００２１】
【発明が解決しようとする課題】
ところで、前記のようなネットワークプロセッサの技術において、次世代ルータでは、ユビキタスによる細粒度通信やストリーム、Ｐ２Ｐ等による大容量通信への対応が不可欠である。現在のネットワークプロセッサは、この様な将来の通信パターンへの対応が困難であるばかりではなく、単にＣＰＵの処理容量を向上するだけで対応しようとすると、消費電力が増大し、実装が困難となる。
【００２２】
そこで、本発明の目的は、ネットワークプロセッサにおけるパケット処理性能を改善し、ルータの大容量化、低遅延化、低コスト化、低消費電力化を図ることである。これらを達成するには、ネットワークプロセッサの処理負担軽減が必要である。一方でネットワークプロセッサに求められる機能は、ネットワークに対するニーズの多様化と共に増加する傾向にある。従って、従来のネットワークプロセッサが持つ柔軟性を維持しつつ、処理負担の軽減を図る必要がある。
【００２３】
また、本発明では、ネットワークプロセッサにおけるキャッシュ利用についても考慮している。以下において、ネットワークプロセッサにインストラクションキャッシュやデータキャッシュを搭載する方法について述べる。
【００２４】
ネットワークプロセッサのインストラクションやデータメモリが外付けされている場合はキャッシュが有効に働くが、ネットワークプロセッサの処理部（ＣＰＵ）がチップにスタックチップなどの技術で混載されている場合や、同じダイに載っている場合など、メモリ階層が１で十分に低遅延である場合にはキャッシュを構成するメリットがない。そればかりか、キャッシュを挟むことにより無駄な遅延が発生する可能性がある。従って、ネットワークプロセッサにおけるキャッシュ利用の方法と周辺の構成については改善の余地がある。
【００２５】
そこで、本発明では、従来手法における次のような課題に着目した。
【００２６】
（１）ネットワークプロセッサをプロセッサ部とメモリを１チップで実装する場合、インストラクションやデータのキャッシュは有効に動作しない。キャッシュは高速化に有効な手段ではあるが、この場合はキャッシュの効果が期待できない。
【００２７】
（２）最新の研究ではパケットのアクセスには高いローカリティが有り、例えばルーティングテーブル参照にキャッシュを利用すると９０％程度のヒット率が得られることが分かっている。このローカリティを現状ではルーティングテーブルの参照にしか用いず、さらにキャッシュにヒットしてもルーティングテーブル参照以外の処理はプロセッサで何度も同じ処理が繰り返し行われる。ローカリティを活かして冗長な処理を省く必要がある。
【００２８】
（３）ネットワークプロセッサのキャッシュは処理容量を損ねない程度に柔軟である必要がある。現状では決められたデータ列について決められたハッシュを作成し、決められた結果しか返すことができない。
【００２９】
（４）現在のネットワークプロセッサは全てのパケットを同じパケット手順で処理するが、ローカリティの存在を考慮に入れると全てのパケットを同じ手順で処理するのは効率が悪い。
【００３０】
（５）無中断プログラム更新を実現するために複数のプロセッサを用いる場合、処理に携わらないプロセッサを確保してプログラムを更新する必要がある。したがって、同時に全てのプロセッサのプログラムを書き換えることができず、パケット処理の負荷が高くできるだけ多くのプロセッサを利用したい場合にはプログラムを更新できず負荷が下がるのを待つか、処理を間引いて（パケットを廃棄して）プログラムの更新を行わなければならないといった問題がある。また、別の方法としてメモリを準備し、プログラムを書き換えている間はそのメモリにパケットを蓄えておくという方法もあるが、この場合はメモリを搭載するためハードウエア数が増大する。
【００３１】
（６）今後増大するトラフィックへの対応を単にＣＰＵの高速化に頼ると、消費電力が増大し実装が困難となる。
【００３２】
そこで、本発明の他の目的は、キャッシュ利用について、これらの課題を解決したネットワークプロセッサを実現することである。
【００３３】
本発明の前記ならびにその他の目的と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【００３４】
【課題を解決するための手段】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次のとおりである。
【００３５】
すなわち、本発明によるネットワークプロセッサは、パケットを受信するインタフェース、受信パケットから情報の部分集合を切り出す手段、切り出された部分集合情報を記憶するキャッシュメモリ、キャッシュメモリコントローラ、部分集合情報の切り出されたパケットが伝送される第１のパス、切り出された部分以外のパケットもしくは、受信パケットの全体が伝送される第２のパス、第１のパスと第２のパスとを分岐する分岐手段などを有し、キャッシュメモリコントローラが、ハッシュを用いた比較情報の縮小化法を用いる場合と用いない場合とを選択して、受信パケットの情報の部分集合とキャッシュメモリに格納された部分集合情報とを比較し、キャッシュヒットした場合には、分岐手段は受信パケットを第２のパスへ分岐させるものである。
【００３６】
また、本発明による他のネットワークプロセッサは、切り出された部分集合情報を格納手段に記憶し、この格納手段に格納された部分集合情報と受信パケットに含まれる部分集合情報とを比較する比較手段において、一致しない場合には切り出す手段に対してパケットの部分集合の切り出しを実行させるものである。あるいは、分岐手段が、両者が一致しない場合に、格納手段から伝送されたパケットを第２のパスへ分岐させるようにしたものである。
【００３７】
【発明の実施の形態】
以下、本発明の実施の形態を、図面を参照しながら説明する。尚、以下の実施の形態ではネットワークプロセッサを例に用いるが、本発明は特にネットワークプロセッサに限らず、同等のローカリティが存在する場合に適用することで大容量化、低遅延化、低コスト化、低消費電力化の効果が期待できる。
【００３８】
本発明の代表的なものの概要は、上述の課題を解決するために、次の手段を用いる。
【００３９】
（１）パケットヘッダの部分集合をキャッシュタグの生成元情報とし、ＣＲＣ除余項等を利用したハッシュ関数を用いてキャッシュタグを作成する。パケットヘッダの部分集合とは、ルーティングテーブル参照に必要な情報だけではなく、ＱｏＳに必要な情報やレイヤ７を含む全てのレイヤにおける処理情報において、必要な要素だけを抽出し集めたものである。このキャッシュを以降プロセスキャッシュと呼ぶ。
【００４０】
（２）プロセスキャッシュにミスヒットした場合は、通常のネットワークプロセッサと同等の処理手順を行う。この処理により得られた結果は、プロセスキャッシュのエントリとして登録する。プロセスキャッシュにヒットした場合は、過去の処理結果を再利用できるため、通常のネットワークプロセッサと同じ処理手順を取らず、キャッシュエントリを元にパケットヘッダをモディファイした後にパケットを出力する。この様にパケットが通るパスは２つあり、プロセスキャッシュにヒットしたか、ミスヒットしたかにより２つのパスを選択する。
【００４１】
（３）プロセスキャッシュは任意サイズのデータからタグを生成するため、タグの生成効率、キャッシュ利用効率ともに優れたタグの生成手段を備える必要がある。ソフトウエアによるキャッシュタグ生成は柔軟性に優れるものの算出速度に問題がある。ハードウエアによるキャッシュタグ生成は算出速度に優れるが柔軟性に問題がある。そこで、細分化したＣＲＣ除余項算出手段をつなぎ合わせるか、固定のＣＲＣ除余項演算手段を用いて不足データ分を固定値で埋めることで、ハードウエアコストを増大させることなしに柔軟性を獲得する。
【００４２】
（４）プロセスキャッシュにミスヒットした場合、通常のネットワークプロセッサと同等の処理を施すがその処理には時間がかかる。処理中に別のパケットが届いた場合、ローカリティが高いことからこのパケットについても同等の処理が行われる可能性があるため、プロセスキャッシュにミスヒットしたすべてのパケットに対してＣＰＵによる処理を行うのは冗長である。したがって、過去のミスヒットを管理し、同じミスヒットが繰り返された場合にはエントリが未記載のため処理せず、先行したパケットの処理を待って結果が出次第、同じ結果を利用する機構を備える。もしくは、先行したパケットの処理を待たずにＣＰＵでパッチ処理を施す機構を備える。
【００４３】
（５）無中断プログラム更新に対応するため、プロセスキャッシュが働いて処理を行う必要がないＣＰＵや時間にプログラムを書き換える手段を設ける。パケットのアクセスパタンが持つ高いローカリティによりプログラム更新の機会は多く存在し、さらに全てのプロセッサのプログラムを同時に書き換えることも可能となり、無中断プログラム更新用の別途メモリを必要としない。
【００４４】
（６）プロセスキャッシュにヒットした場合はＣＰＵ処理が不要であるため、ＣＰＵへのクロック供給や電源供給を遮断できる。従って、高いプロセスキャッシュ率（９０％程度）によりＣＰＵ部の消費電力は１０分の１程度になる。
【００４５】
（７）プロセスキャッシュは１つのみ搭載しても構わないが、２つもしくはそれ以上備えると次のような利点がある。
【００４６】
（７−１）プロセスキャッシュが１つのみ備わる場合では、複数の場所に散らばるプロセスキャッシュタグ作成に必要な要素をプログラマブルな方法を用いる必要があるが、複数のプロセスキャッシュが備わると、それぞれのプロセスキャッシュが担当する部位のみ抽出すればよい。また、各部位にきめ細かく対応することが出来るためプロセスキャッシュメモリを有効利用できる。
【００４７】
（７−２）複数あるプロセスキャッシュのうちのいくつかを、アンキャッシュ領域の指定に利用することができる。このアンキャッシュテーブルに登録するとパケットがＣＰＵをスルーすることを防ぎ、特定のパケットを確実にＣＰＵで処理することができるようになる。
【００４８】
これらの効果により、例えばキャッシュヒット率が９０％とすると、ＣＰＵ稼働率も同様に９０％となるため、論理処理部では最も消費電力が大きいＣＰＵの稼働率を低減できる。従って、従来の構成と同じ処理容量を備える場合でも、世代が古く安価なテクノロジの利用や、消費電力・動作周波数の低減が可能となる。
【００４９】
また、本発明によれば、通信処理を行うネットワークプロセッサは、パケットのフォワーディングに関する経路、ＱｏＳ、各種サービス等の処理を実際に行うＣＰＵ、および前記プロセスキャッシュを備えるものである。
【００５０】
以下において、具体的に実施の形態を詳細に説明する。
【００５１】
（実施の形態１）
実施の形態１によるネットワークプロセッサの構造および動作の例を述べる。ネットワークプロセッサの構成例を図１に示す。
【００５２】
ネットワークプロセッサは、入力インタフェース１０１、プロセスキャッシュ参照部（キャッシュメモリコントローラ）１０２、プロセスキャッシュタグおよびそれを伝えるバス１０３、プロセスキャッシュメモリ（格納手段）１０４、プロセス情報およびそれを伝えるバス１０５、スケジューラ（分岐手段）１０６、パケットバッファ１０７、複数のＣＰＵ（プロセッサ）１０８、最終処理部（処理手段）１０９、出力インタフェース１１０、スイッチングファブリクス１１１などで構成される。このネットワークプロセッサのチップは、図１の構造を例えばＩｎｇｒｅｓｓ側とＥｇｒｅｓｓ側等に複数含む場合もある。
【００５３】
このネットワークプロセッサの動作は、まず、入力インタフェース１０１にパケットが投入される。この入力インタフェースにはパケットのフレーミング等を行うフレーマ等があり、ネットワークプロセッサの内部で扱うパケットとしての体裁を整える。
【００５４】
次に、プロセスキャッシュ参照部１０２において、パケットの部分情報を利用してプロセスキャッシュタグ１０３を生成し、プロセスキャッシュメモリ１０４から宛先やＱｏＳに必要な情報、さらにパケットの変更情報などのプロセス情報１０５を得る。
【００５５】
プロセスキャッシュにミスヒットした場合は、パケット宛先インタフェース情報の算出やＱｏＳの処理、パケットの変更処理等の処理を行うためにＣＰＵ１０８にパケットを渡す。パケットすべてを渡すと効率が悪いため処理に必要な部分とそれ以外の部分に分け、処理の必要な部分をＣＰＵに渡し、それ以外の部分をパケットバッファ１０７に蓄えて先頭のポインタをＣＰＵに通知する機構のスケジューラ１０６を備える。また、ＣＰＵ１つでは処理容量が不足することが考えられるため、複数のＣＰＵを備える。
【００５６】
スケジューラ１０６は、どのＣＰＵにどのポインタを渡したか等のＣＰＵ資源管理も行う。同時に、ミスヒットしたプロセスキャッシュのタグも通知する。ＣＰＵ１０８は、算出した宛先インタフェース情報、ＱｏＳ情報等の処理が終わったパケットの一部と元のパケットの同じ部位の差分情報をプロセスキャッシュのエントリにまとめ、プロセスキャッシュタグを元にプロセスキャッシュメモリ１０４に適応する。
【００５７】
キャッシュにヒットした場合は、エントリを元に宛先インタフェースの情報、ＱｏＳの情報、パケット変更情報の入手や、パケットの変更を行う。この場合、ＣＰＵ１０８に処理を移す必要がないため、処理時間の短縮が行える。
【００５８】
最後に、最終処理部１０９において、ＣＰＵを利用する場合、利用しない場合で分岐した２つのパスをまとめて１つにして、パケットのヘッダのチェックサムやＣＲＣ付与等を行う。その後、出力インタフェース１１０においてスイッチングファブリクス１１１が理解できるフォーマットへ変更する。
【００５９】
以上の処理のフローチャートを図２に示す。始めに、Ｓ２０１においてプロセスキャッシュタグを求め、Ｓ２０２においてプロセスキャッシュの検索を行う。プロセスキャッシュにミスヒットした場合は、Ｓ２０３においてＣＰＵの処理が行われ、ヒットした場合はＣＰＵの処理はパスする。その後、Ｓ２０４において最終処理を行う。
【００６０】
次に、図３〜図９により、個々のモジュールについて説明する。
【００６１】
図３に示すように、プロセスキャッシュ参照部１０２は、プロセスキャッシュタグ生成部（切り出し手段）３０１、プロセスキャッシュアクセス部３０２、遅延ＦＩＦＯ３０３、エントリ比較部（比較手段）３０４、パケットパッチ部３０５などで構成される。
【００６２】
プロセスキャッシュタグ生成部３０１は、プログラマブルにパケットの部分要素を抽出し、ＣＲＣ除余項等を用いた攪拌手段によりプロセスキャッシュタグを算出する。
【００６３】
続いて、プロセスキャッシュタグ生成部３０１を詳細に説明する。図４にプロセスキャッシュタグ生成部の構成を示す。
【００６４】
プロセスキャッシュタグ生成部３０１は、パケットの部分要素を抽出するプログラマブル部分要素抽出プロセッサ４０１、部分要素抽出プロセッサで抽出した値を保存しておく抽出列メモリ４０２、抽出列メモリの値を元にＣＲＣの除余項を算出するＣＲＣ除余項算出回路４０３、算出したＣＲＣ除余項を含めて内部パケットを構成する内部パケット構成部４０４から構成される。
【００６５】
プログラマブル部分要素抽出プロセッサ４０１は、パケットの部分要素抽出を専用に行うプログラム可能なシーケンス部を有し、パケットの部分要素を次々に抽出列メモリ４０２のレジスタアレイに登録する。処理速度が要求されるため、通常のプロセッサ（ＣＰＵ）とは異なる抽出処理に特化した処理体系を持つ。抽出をビット単位で行うことも可能であるが、ハードウエアや処理コストを考えると、バイト単位などの粗い抽出手段とマスクによる範囲指定要素が適している。ここでは、バイト単位の荒い抽出手段とマスクによる範囲指定要素を持つ場合について述べる。
【００６６】
プログラマブル部分要素抽出プロセッサ４０１のアセンブラのニモニックは、複数のフッキング手段と抽出処理、タグ生成処理、プロセスキャッシュ参照処理、定数指定処理等からなり、各フッキング手段にマッチした場合にどこを抽出するかを順次記述する。また、フッキング手段には無条件フッキングと条件フッキングがある。条件フッキングは備えない場合もある。
【００６７】
プロセスキャッシュタグ生成部３０１のニモニック一覧の例を図５に示す。プログラムはアセンブラの形で記す。プログラムは条件指定部と抽出部の２つに分かれる。条件指定部のプログラムは処理クロック毎時系列に記述し、時間変化の位置はブレークポイントＢＰで指定する。ブレークポイント間をタームと呼び、ターム内に並列でフックキングを指定する。タームは例えば処理クロックの１クロックに該当する。抽出部のプログラムは抽出命令のみで構成する。パケットの開始およびパケットの終了時、その他パケットが破壊され途中で途切れている場合やネットワークのリンク切断やエラー多発時等にはプログラムをはじめから再実行する。
【００６８】
図５におけるＨＫＡは無条件フッキングである。ＨＫＡは該当するタームにおいて指定した抽出処理を無条件に行う。
【００６９】
ＨＫは条件フッキングである。条件フッキングは指定したフィルタを通したビット列について指定した比較列と一致検査を行い、一致した場合は指定した抽出処理を有効化する。条件フッキングを備える場合は、無条件フッキングを条件フッキングの一部として実装可能である。この場合、必ず一致するようなフィルタと比較列を指定する。ＨＫには後方時間制約があり、ＨＫのあるタームと同じタームかそれ以降のタームにあるＳＭＰＬのみ有効化できる。一方、ＨＫＣは無効化する。
【００７０】
ＳＭＰＬは抽出である。指定した抽出マスク値で抽出を行う。ＲＥＦは抽出結果により、攪拌ハッシュを生成しプロセスキャッシュを引く。すなわち、ハッシュを用いた比較情報の縮小化法を適用する。
【００７１】
図６に、プロセスキャッシュタグ生成部３０１の処理プログラムの例を示す。ＶＡＬはアセンブラに対する指示命令で各種定数を宣言し、アセンブラによりアドレス参照に変換される。図６に示すプログラムは単純に、ＭＡＣアドレスとＩＰアドレスのセットを作り、プロセスキャッシュを引く例である。参照位置をプログラムにより自由に変更できるため、レイヤ７等の領域を用いることも可能である。
【００７２】
図７に、その処理手順の例を示す。前記図６のプログラムと図７のマッピングとは必ずしも一致しない。図７では例として、前記図６のプログラムよりも複雑なマッピングを行ったものを示している。
【００７３】
まず、ＢＰが２つあるため、先頭から２クロック分の情報が素通りする（なにも抽出しない）。次のＨＫＡがコンパレータアレイ７０１にあるコンパレータＡ７０２にマッピングされているとすると、コンパレータＡが定数メモリ７０６の内容に従ってパケットのＡの場所７０３と比較を行う。ここでは無条件にＭＡＣＡＤＤＲのＳＭＰＬ（実態はサンプラ）をアクティベートする。
【００７４】
ＭＡＣＡＤＤＲのＳＭＰＬがサンプラアレイ７０４のサンプラＡ７０５にマップされているとすると、同じクロック、もしくはタイミング的に厳しい場合は異なるクロックで同じ位置を、定数メモリ７０６の内容に従ってサンプリングし、抽出列メモリ４０２に蓄える。ＲＥＦにより抽出列メモリの内容を元にＣＲＣ除余項を算出する。抽出列メモリはバイト程度の粒度で管理して全てのバイト数の組み合わせについてＣＲＣ除余項生成手段をもつか、更新があったビット以外は０もしくは１で埋めてキーを作成することで、どのような抽出列でも算出可能な構造とする。
【００７５】
キーは、ミスヒット等によりプロセスキャッシュの内容を更新する際など、プロセスキャッシュにエントリを付けるときに必要となる。ＨＫなど、条件によりフッキングするかしないかが分かれる場合には、ＳＭＰＬで抽出する際にＳＭＰＬのＩＤ（複数あるサンプルを区別するＩＤ、ここではサンプラＡ，サンプラＢ等）をエントリに付与する方が、図３におけるパケットパッチ部がちょうど逆の手順でパケットのパッチ処理を行うため管理が容易となる。
【００７６】
このプロセスキャッシュタグ生成部３０１は、バス幅の増大に伴ってハードウエアコストも増大するため、プロセスキャッシュタグ生成部はビット幅を細くし、転送レートを高くすることでハードウエアコストを下げることが考えられる。プロセスキャッシュタグ生成部は、パケットが通過するバス、プロセスキャッシュタグのバスをプロセスキャッシュ参照部１０２に渡す。
【００７７】
図３に戻り、プロセスキャッシュアクセス部３０２は、プロセスキャッシュメモリ１０４とのインタフェースであり、プロセスキャッシュタグ生成部で生成したタグを元にプロセスキャッシュメモリを参照する。プロセスキャッシュメモリは例えば通常のプロセッサで用いるキャッシュと同様にｎ−ｗａｙ  セットアソシアティブキャッシュで構成する。
【００７８】
エントリ比較部３０４は、プロセスキャッシュにヒットしたかどうかを調べる部位である。プロセスキャッシュがｎ−ｗａｙ  セットアソシアティブキャッシュの場合は複数の参照結果が得られるため、同数のエントリ比較手段を持つ必要がある。また、どのようなプロセスキャッシュ構造であってもエントリに一緒に保存されているキー（プロセスキャッシュタグを算出する元のデータ）を比較することでキャッシュにヒットしたかどうかを判断する必要がある。エントリ比較部は比較の結果（ヒットフラグ３０６）とエントリの内容（エントリ列３０７）をパケットパッチ部３０５に伝える。
【００７９】
プロセスキャッシュアクセス部３０２とエントリ比較部３０４は、メモリ参照等の遅延を伴うため、パケット本体をＦＩＦＯ３０３で遅延させ、処理の同期を図る。
【００８０】
パケットパッチ部３０５は、キャッシュにミスヒットした場合とヒットした場合を区別するためのビットをパケットに付与する。また、ヒットした場合はエントリに従ってパケットを修正する。プログラマブル部分要素抽出プロセッサ４０１のプログラムと同じ処理を逆にたどるような、パケットパッチ部内のパケットパッチプロセッサのプログラムを記述する。これらのプログラムはプログラムのデコーダを工夫すれば同じプログラムを用いて動作可能である。
【００８１】
また、その様な特別なデコーダを準備しなくとも、プログラムからパケットのどの部分がエントリのどの部分に対応するかがわかればよいため、プログラマブル部分要素抽出プロセッサ４０１のプログラムをアセンブラで処理する際に、同時にパケットパッチプロセッサのプログラムも作成可能である。条件フッキング手段がある場合はＳＭＰＬのＩＤを入手可能としていれば（前述）、抽出条件にマッチしていたかマッチしていなかったかに関わらずパッチが可能である。
【００８２】
次に、図８にスケジューラの構造を示す。スケジューラ１０６は、分配器８０１、スルーパス８０２、ＣＰＵパス８０３、リソース割り当て器８０４、ＣＰＵアレイ８０５、ＣＰＵリソース状態リスト８０７、コンバイン部８１０から構成される。
【００８３】
このスケジューラ１０６は、まず分配器８０１においてヒットフラグに従い、ＣＰＵリソースを獲得するパス（ＣＰＵパス８０３）と獲得しないパス（スルーパス８０２）にパケットを分岐する。
【００８４】
リソース割り当て器８０４は、ＣＰＵパスに流れたパケットに対して、複数のＣＰＵの集合であるＣＰＵアレイ８０５からパケット処理を行っていないアイドル状態であるＣＰＵ（例えば８０６）を選び、そのＣＰＵリソースが割り当てる。ＣＰＵリソースの獲得は、ＣＰＵリソースの割り当て状態を示すＣＰＵリソース状態リスト８０７により行う。
【００８５】
図９に、ＣＰＵリソース状態リストの例を示す。ここでは４つのＣＰＵが存在している例を示している。ＣＰＵリソースが獲得されている場合は、ＣＰＵが処理状態であることを示すＢＵＳＹビットがチェックされている。ここでは、ＣＰＵ０とＣＰＵ１が処理状態である。パケットのＦＩＦＯ性を考えると、パケット処理はＦＩＦＯで行うのが望ましい。新しくＣＰＵリソースを獲得する場合はＢＵＳＹビットを調べて処理状態ではないＣＰＵを選ぶ。
【００８６】
リソース割り当て器８０４は、選んだＣＰＵにパケットの部分集合（プロセスキャッシュで比較のために抽出したものと同じもの）もしくは、必要と思われるところすべてをプロセスリクエストバス８１１によりＣＰＵに渡す。また、実装の容易さを考えると、パケットの先頭からレイヤ７のヘッダを渡してもよい。
【００８７】
このスケジューラ１０６には、複数のインストラクションセットを切り替えることが可能なプロセッサのような機能（インストラクションデコーダ）を持たせ、パケットに応じて処理パスの経路を切り替える命令を持たせたり、プロセッサを直接切り替えることが可能である。
【００８８】
リソース割り当て器８０４は、メモリの管理も行う。すなわち、ＣＰＵに渡した以外の部分、もしくはパケット全体を大容量メモリ８０９に転送し、その先頭アドレスをＣＰＵリソース状態リスト８０７に保存する。また同時に、大容量メモリ８０９にパケットを転送した際の最終アドレスを記憶し、次のパケットの転送アドレスとする。
【００８９】
大容量メモリ８０９は、ＦＩＦＯ的に用い、アドレスを使い切るとラップラウンドする。その他、通常のメモリ管理構造と同じようなセグメントに分けたリスト構造による管理も可能であるが、複雑な構造となるため処理速度の向上が難しい。パケットのＦＩＦＯ性を壊しても処理を早めたい場合にはリスト構造による管理はＦＩＦＯとして扱うよりもメモリ利用効率が良い。
【００９０】
ＣＰＵ（８０６）は、通常のプロセッサと同等の高度な処理を行う。ＣＰＵは受け取ったパケットヘッダ以外の部分を参照する可能性があるため、大容量メモリ８０９へのアクセス手段を持つ。この場合、複数のＣＰＵが１つの大容量メモリ参照を可能とするため、大容量メモリアクセス調停部８０８が調停を行う。スケジューラ部からのパケットの格納アクセスを最優先順位とする。大容量メモリがデュアルポートメモリである場合は２つ（スケジューラ部と１つのＣＰＵ等）のアクセスを行うことができる。
【００９１】
ＣＰＵは、パケットヘッダからＱｏＳや宛先インタフェースアドレスの情報を調べ、またパケットの一部を改変する。そこで、ＣＰＵはＱｏＳや宛先インタフェースアドレス情報はそのすべての情報を、またパケットの改変はその改変前との差分もしくは全ての情報をプロセスキャッシュのエントリとして登録する。エントリ登録作業はパケット処理とは関係がないため、ＣＰＵはまずパケットの処理終了をスケジューラに伝えてその後エントリの登録作業を行うことで処理時間の無駄を省く。
【００９２】
プロセスキャッシュのエントリに登録する際にも、複数のＣＰＵが１つのプロセスキャッシュ資源を奪う必要があるため、大容量メモリアクセス調停部８０８は大容量メモリ８０９だけではなく、プロセスキャッシュメモリ１０４についても調停を行う。パケットの改変後の情報全てをプロセスキャッシュのエントリとして登録するとメモリコストが問題となるため、（１）差分情報を用いるか、（２）プロセスキャッシュタグ生成部と同じ手法（プログラマブル部分抽出）により抽出するか、（３）ＣＰＵのプログラムに従いエントリを作成するなどの処置を行う。
【００９３】
差分情報を用いると、どのような変更でももれなくエントリに記載できるが、エントリサイズがダイナミックに変化するため管理が困難となる。プロセスキャッシュタグ生成部の同じ手法ではエントリサイズは固定で管理しやすいが、プログラムを間違えると無駄なところをエントリに記載したり、変更箇所のエントリ記載漏れが発生したりする。ＣＰＵがエントリを作成する場合は、エントリ生成に掛かる時間やプログラムの複雑化において問題があるが、最も柔軟な方法である。
【００９４】
コンバイン部８１０は、ＣＰＵにより編集されたパケットの内容と、大容量メモリ８０９に蓄えられた元のパケットの内容とを併せて１つの完全なパケットを作成する部位である。この部位にもプログラマブルな手段が必要であり、フレキシブル部分要素抽出プロセッサと同等の命令列、もしくはアセンブラが同時に生成したコードで復元を行う。
【００９５】
従って、本実施の形態によれば、ルータにおけるパケット処理の中核となるネットワークプロセッサにおいて、パケットのアクセスパタンが持つローカリティを有効に用いることにより、処理容量の向上、消費電力の軽減、メンテナンス容易さを提供することができる。
【００９６】
すなわち、ヘッダ内の宛先が同一であるなど、パケットのある注目部位が同じであるパケットは同じパケット処理を施す必要があることから、一度施した処理の結果をプロセスキャッシュとして保存し、同じパケット処理を何度もＣＰＵで処理せずに単純な比較手段と置き換え手段のみでパケット処理を行うことにより、ルータの処理容量の向上、消費電力の軽減が期待できる。
【００９７】
さらに、このネットワークプロセッサにおいては、同じ部分構成要素を１つまたは複数持つパケットの組を処理する際、各組の最初に届くパケット（Ｘ）の処理に掛かる時間と、２番目以降に届く（Ｘ）パケットと同じ構成要素をもつパケット（Ｙ）の処理に掛かる時間とを比較すると、パケット（Ｙ）の方の処理時間の方が短く、２番目以降に届く全パケットの処理時間が等しくなるように制御されている。
【００９８】
（実施の形態２）
実施の形態２によるネットワークプロセッサとして、プロセスキャッシュを２つもしくはそれ以上備える場合について述べる。この場合、１つのプロセスキャッシュタグ生成部で複数のキャッシュタグを生成する方法と、それぞれに異なるタグを生成する方法がある。
【００９９】
前者は、単にプロセスキャッシュメモリの容量不足を補うために複数備えるものである。後者は、プロセスキャッシュメモリの容量不足を補うと共に、抽出範囲を分配することによるプロセスキャッシュの効率利用、さらにはヒット率向上が期待できる。また、接続の仕方においてもプロセスキャッシュを直列に配置するか、並列に配置するかの選択がある。直列に配置すると遅延は増大するが、異なる２つの処理をパケットに施すことができる。並列に配列する遅延は減少するが、とどちらか一方の処理しかパケットに施すことができない。
【０１００】
複数のプロセスキャッシュメモリを備えるため、ＣＰＵからのプロセスキャッシュメモリアップデート情報をやり取りするパスは全てのプロセスキャッシュメモリに接続している必要があるため、各プロセスキャッシュメモリにアップデート要求のための調停器が必要となる。
【０１０１】
図１０に、後者の場合で、プロセスキャッシュを２つ備える場合の構造を示す。第１段のプロセスキャッシュ構造１００１と、第２段のプロセスキャッシュ構造１００２を直列に接続した図である。この場合、例えばそれぞれが異なるレイヤの処理を受け持つなどの応用が可能である。各プロセスキャッシュ構造は、前記図１で示した構造と同様であり、また他の構成要素も同様の機能を有する。
【０１０２】
（実施の形態３）
実施の形態３によるネットワークプロセッサとして、ストリームプロセッサを備える場合について述べる。ネットワークプロセッサでは、たとえプロセスキャッシュにヒットしたとしても何らかの処理をパケットに通過して施したいという要求に答える必要がある。この要求とは、たとえばパケットのロギング、フィルタリング、属性情報の付与等である。この処理に対して通常のＣＰＵと同じ処理媒体を利用すると、その部位がボトルネックとなりプロセスキャッシュにヒットしたとしても結局スループットを向上できなくなる。
【０１０３】
そこで、プログラマブルではあるが単純な処理が可能で、パケットの流れをせき止めることなく、かつパケットを直接扱うことができるストリームプロセッサを備える。
【０１０４】
前記図１を応用し、ストリームプロセッサを追加で配置した例を図１１に示す。図１１において、ストリームプロセッサ１１０１は最終処理部１０９の中に存在する。最終処理部ではヘッダのチェックサムやＣＲＣ付与等を行うと述べたが、このストリームプロセッサは更に複雑な処理をプログラマブルに行うことができる。
【０１０５】
最終処理部１０９には、スケジューラ１０６からの入力とＣＰＵ１０８からの入力の２つが同時に入るため、これを調停するセレクタが備わっているが、その後にストリームプロセッサ１１０１を配置する。このストリームプロセッサが通常のプロセッサと異なるのは以下の点である。
【０１０６】
（１）命令セットが単純である一方、チェックサムやＣＲＣ算出等専用の命令セットを備える。
【０１０７】
（２）レジスタの１つがパケットのバスを直接扱い、パケットの一部をレジスタ参照の様に読み書きできる。このレジスタをストリームレジスタと呼ぶ。
【０１０８】
（３）ストリームレジスタを読み込み、自由に指定可能な、ある決まったクロック後に書き込めば、パケットの同じ場所に対する読み込みと書き込みとなる。
【０１０９】
（４）ストリームにあるパケットの一部ビット列やパケット開始からの位置を直接コマンドと理解する。
【０１１０】
図１２に、ストリームプロセッサの構造を示す。付随するＣＰＵは独自の命令セットの他に、パケットストリームにあるパケットの一部ビット列を直接理解するために、前記図７のコンパレータアレイ７０１と同じフッキング手段、およびパケット開始からのクロックカウンタによる注目位置を調べる手段を内包するパケット命令デコーダ１２０１備える。
【０１１１】
パケット命令デコーダ１２０１がどの場所、どのビットで命令を発行するかはコンパレータアレイの各コンパレータがプログラマブルであるのと同様に自由に定義できる。このパケット命令デコーダはそのほかの通常の命令と同様にプログラムの開始や停止、ジャンプ、各種演算、分岐、データの作成、データやレジスタの変更等の処理を行う。
【０１１２】
パケットストリーム中のデータは特定のレジスタ（ストリームレジスタ）で参照できる。これを可能にするのがストリームレジスタ読出し部１２０２である。一般のレジスタと等価に見えるため、各種算術命令やレジスタを扱うその他の命令は一般のレジスタ同様に扱うことができる。
【０１１３】
ＣＰＵは処理に時間がかかり、その処理が終了する時間もまちまちであるが、ここではある決められた時間だけパケットを待たせることができる伸縮自在なディレイＦＩＦＯ１２０３を備え、このＦＩＦＯがパケットを待たせている間に処理を行い、タイミングを計ってストリームレジスタ書込み部１２０４でパケットを編集する。この様にストリームレジスタを読み込む処理、書き込む処理の間の遅延でタイミングを取ってプログラムを記載することでパケットを滞ることなく続けて処理することができる。
【０１１４】
伸縮自在ディレイＦＩＦＯ１２０３は、シフトレジスタアレイで構成し、読み出し位置をセレクタにより選択することで伸縮自在性を持たせる。
【０１１５】
（実施の形態４）
実施の形態４によるネットワークプロセッサとして、ミスヒットキャッシュ機構を備える場合について述べる。プロセスキャッシュにミスヒットした場合は、通常のネットワークプロセッサと同等の処理を施すが、その処理には時間がかかる。処理中に別のパケットが届いた場合、ローカリティが高いことからこのパケットについても同等の処理が行われる可能性があるため、プロセスキャッシュにミスヒットしたすべてのパケットに対してＣＰＵによる処理を行うのは冗長である。したがって、過去のミスヒットを管理し、同じミスヒットが繰り返された場合にはエントリが未記載のため処理せず、先行したパケットの処理を待って結果が出次第、同じ結果を利用する機構を備える。もしくは、先行したパケットの処理を待たずにＣＰＵでパッチ処理を施す機構を備える。
【０１１６】
図１３に、ミスヒットキャッシュ機構を備える構造を示す。エントリ比較部３０４は、バス１３０１を通じてミスヒットプロセスキャッシュメモリ１３０３を参照し、バス１３０２を通じてエントリを入手する。プロセスキャッシュにミスヒットし、かつミスヒットプロセスキャッシュにヒットした場合（既にミスヒット済みのパケット）は、そのパケットをＣＰＵに送らず待たせるか、ＣＰＵに対して既に処理済であることを通知してパッチ処理を依頼する。プロセスキャッシュにミスヒットし、かつミスヒットプロセスキャッシュにミスヒットした場合（初めてミスヒットしたパケット）は、ＣＰＵに処理を依頼し、ミスヒットプロセスキャッシュメモリにエントリを登録する。
【０１１７】
ＣＰＵにパッチ処理を依頼する場合は、該当したＣＰＵがそのパケットの処理が割り当てられているＣＰＵ（自分である可能性がある）に対して結果の通知依頼を発行するか、スケジューラが同じＣＰＵにパケットを割り当てて対処する等の方法がある。
【０１１８】
（実施の形態５）
実施の形態５によるネットワークプロセッサとして、内部ソフトウエアの無中断プログラム更新手順について述べる。通常、内部プロセッサ（ＣＰＵ）のプログラムを更新する必要があるとき、システムを一度止める必要がある。これを回避するために、複数のプロセッサを準備することなく、内部ソフトウエアの無中断プログラム更新手順について述べる。
【０１１９】
プロセスキャッシュがヒットすると、そのパケットについてはＣＰＵで処理する必要がない。よって、ＣＰＵ負荷を低く保つことができるため、普段はＣＰＵへのクロック供給を断つことで低電力状態とする。プログラムを書き換える必要がある場合は、ＣＰＵへのクロック供給を行いプログラムの更新を行う。もし、全てのＣＰＵが同時にプログラムを書き換えたい場合は、プロセスキャッシュが有効に働き全てのＣＰＵがアイドル状態であるときにプログラムすればよい。
【０１２０】
以上、本発明者によってなされた発明をその実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【０１２１】
【発明の効果】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば、以下のとおりである。
【０１２２】
（１）ルータにおけるパケット処理において、パケットが持つローカリティを有効に生かして、全てのパケットをＣＰＵに送るのではなく、ＣＰＵで処理した結果をプロセスキャッシュに蓄える機構を備え、この機構により同じヘッダを持つパケットは最初に一度だけ処理するだけとなるため、将来のユビキタスによる細粒度通信やストリーム、Ｐ２Ｐ等による大容量通信に対応するととともに、消費電力を軽減することが可能となる。
【０１２３】
（２）前記（１）により、ネットワークプロセッサにおけるパケット処理性能を改善し、ルータの大容量化、低遅延化、低コスト化、低消費電力化を図ることができる。特に、将来のネットワークプロセッサが抱える処理容量、消費電力の問題に対するブレイクスルーであり、次世代ルータに必要不可欠なものである。
【図面の簡単な説明】
【図１】本発明の実施の形態１におけるプロセスキャッシュおよびプロセスキャッシュヒット時にＣＰＵへの処理をバイパスするスケジューラを備えたネットワークプロセッサの構造を表したブロック図である。
【図２】本発明の実施の形態１において、パケット処理の手順を示したフローチャートである。
【図３】本発明の実施の形態１において、プロセスキャッシュ参照部の構造を表したブロック図である。
【図４】本発明の実施の形態１において、プロセスキャッシュ参照部の中にあるプロセスキャッシュタグ生成部の詳細な構造を表したブロック図である。
【図５】本発明の実施の形態１において、プロセスキャッシュタグ生成部の中にあるプログラマブル部分要素抽出プロセッサのプログラムに必要なアセンブラの例（命令セット）を表した図である。
【図６】本発明の実施の形態１において、プロセスキャッシュタグ生成部の中にあるプログラマブル部分要素抽出プロセッサのプログラムの例（リスト）を表した図である。
【図７】本発明の実施の形態１において、プログラマブル部分要素抽出プロセッサが制御する部位において、プログラムに従って実際にパケットから部分要素を抽出する構造とその動作を表した説明図である。
【図８】本発明の実施の形態１において、スケジューラの内部構造の詳細を示したブロック図である。
【図９】本発明の実施の形態１において、スケジューラが管理するＣＰＵリソース状態リストの内部を表したメモリ構造図である。
【図１０】本発明の実施の形態２において、プロセスキャッシュ機構を複数備えるネットワークプロセッサの構造を表したブロック図である。
【図１１】本発明の実施の形態３において、プロセスキャッシュ機構を備えるネットワークプロセッサについて、ストリームプロセッサを備える場合の構造を示したブロック図である。
【図１２】本発明の実施の形態３において、ストリームプロセッサの構造および処理を示したブロック図である。
【図１３】本発明の実施の形態４において、ミスヒットキャッシュを備えるプロセスキャッシュの構造を示したブロック図である。
【図１４】本発明の前提として検討した、従来のネットワークプロセッサの構造および処理の流れの例を示したブロック図である。
【符号の説明】
１０１  入力インタフェース
１０２  プロセスキャッシュ参照部
１０３  プロセスキャッシュタグおよびそれを伝えるバス
１０４  プロセスキャッシュメモリ
１０５  プロセス情報およびそれを伝えるバス
１０６  スケジューラ
１０７  パケットバッファ
１０８  ＣＰＵ
１０９  最終処理部
１１０  出力インタフェース
１１１  スイッチングファブリクス
３０１  プロセスキャッシュタグ生成部
３０２  プロセスキャッシュアクセス部
３０３  遅延ＦＩＦＯ
３０４  エントリ比較部
３０５  パケットパッチ部
３０６  ヒットフラグ
３０７  エントリ列
４０１  プログラマブル部分要素抽出プロセッサ
４０２  抽出列メモリ
４０３  ＣＲＣ除余項算出回路
４０４  内部パケット構成部
７０１  コンパレータアレイ
７０２  コンパレータ
７０３  パケットＡにおける処理対象の場所
７０４  サンプラアレイ
７０５  サンプラの１つであるサンプラＡ
７０６  定数メモリ
８０１  分配器
８０２  スルーパス
８０３  ＣＰＵパス
８０４  リソース割り当て器
８０５  ＣＰＵアレイ
８０６  アイドル状態のＣＰＵ
８０７  ＣＰＵリソース状態リスト
８０８  大容量メモリアクセス調停部
８０９  大容量メモリ
８１０  コンバイン部
８１１  プロセスリクエストバス
１００１  プロセスキャッシュ構造（１段目）
１００２  プロセスキャッシュ構造（２段目）
１１０１  ストリームプロセッサ
１２０１  パケット命令デコーダ
１２０２  ストリームレジスタ読出し部
１２０３  伸縮自在ディレイＦＩＦＯ
１２０４  ストリームレジスタ書込み部
１３０１  ヒスヒットプロセスキャッシュタグおよびそれを伝えるバス
１３０２  ミスヒット情報およびそれを伝えるバス
１３０３  ミスヒットプロセスキャッシュメモリ
【図１】
2004260532.tif 000003
【図２】
2004260532.tif 000004
【図３】
2004260532.tif 000005
【図４】
2004260532.tif 000006
【図５】
2004260532.tif 000007
【図６】
2004260532.tif 000008
【図７】
2004260532.tif 000009
【図８】
2004260532.tif 000010
【図９】
2004260532.tif 000011
【図１０】
2004260532.tif 000012
【図１１】
2004260532.tif 000013
【図１２】
2004260532.tif 000014
【図１３】
2004260532.tif 000015
【図１４】
2004260532.tif 000016