(57)【特許請求の範囲】
【請求項１】
ネットワーク構成の変更に先立って更新されるテーブルの更新されるエントリに更新情報を付加し、ネットワーク構成の変更に伴う前記テーブルの更新が完了すると前記更新情報を削除する管理部と、
入力キューに入力されたパケットに対して、実行する処理がそれぞれに予め決められた複数の処理段階が連続して並び且つ各処理段階のバイパス経路を有するパイプラインで実行されるパイプライン処理を、前記テーブルを用いて順番に行い、前記パイプライン処理で前記テーブルの中の前記更新情報が付加された特定エントリが用いられる場合、パイプライン処理を中断するパケット処理部と、
前記パケット処理部による前記パイプライン処理が中断した場合、入力された前記パケットを再処理用キューへ格納し、前記パケットの処理で用いられる前記テーブルにおける前記更新情報が付加されたエントリの更新が完了した場合、前記再処理用キューに格納された前記パケットを前記入力キューへ転送して前記パイプラインに入力させ且つ前記特定エントリを用いる処理段階まで前記バイパス経路によりバイパスさせて前記パイプライン処理を再開させる再処理制御部と
を備えたことを特徴とするネットワークプロセッサ。
【請求項２】
前記管理部は、前記テーブルの更新が行われる場合、前記再処理用キューのデキュー停止を前記再処理制御部へ通知し、前記更新情報が付加された前記テーブルの更新が全て完了した場合、前記再処理用キューのデキュー開始を前記再処理制御部へ通知し、
前記再処理制御部は、前記管理部から前記デキュー停止の通知を受けた場合、前記再処理用キューに前記パケットを保持し、前記管理部から前記デキュー開始の通知を受けた場合、前記再処理用キューに格納された前記パケットを前記入力キューへ転送する
ことを特徴とする請求項１に記載のネットワークプロセッサ。
【請求項３】
前記パケット処理部は、前記更新情報が付加された前記テーブルが複数ある場合、前記テーブルの中の前記処理の順番が最も早いテーブルにおいてパイプライン処理を中断することを特徴とする請求項１又は２に記載のネットワークプロセッサ。
【請求項４】
ネットワーク構成の変更に先立って更新されるテーブルの更新されるエントリに更新情報を付加し、ネットワーク構成の変更に伴う前記テーブルの更新が完了すると前記更新情報を削除する管理部と、
入力キューに入力されたパケットに対して、実行する処理がそれぞれに予め決められた複数の処理段階が連続して並び且つ各処理段階のバイパス経路を有するパイプラインで実行されるパイプライン処理を、前記テーブルを用いて順番に行い、前記パイプライン処理で前記テーブルの中の前記更新情報が付加された特定エントリが用いられる場合、パイプライン処理を中断し、前記パケットに通し番号を振り、前記入力キューへ転送し、前記パケットの処理で用いられる前記テーブルにおける前記更新情報が付加されたエントリの更新が完了した場合、前記通し番号順にパケットを前記パイプラインに入力し且つ前記特定エントリを用いる処理段階まで前記バイパス経路によりバイパスさせて前記パイプライン処理するパケット処理部と
を備えたことを特徴とするネットワークプロセッサ。
【請求項５】
ネットワーク構成の変更に先立って更新されるテーブルの更新されるエントリに更新情報を付加し、ネットワーク構成の変更に伴う前記テーブルの更新が完了すると前記更新情報を削除する管理部と、
入力キューに入力されたパケットに対して、実行する処理がそれぞれに予め決められた複数の処理段階が連続して並び且つ各処理段階のバイパス経路を有するパイプラインで実行されるパイプライン処理を、前記テーブルを用いて順番に行い、前記パイプライン処理で前記テーブルの中の前記更新情報が付加された特定エントリが用いられる場合、パイプライン処理を中断するパケット処理部と、
前記パケット処理部による前記パイプライン処理が中断した場合、入力された前記パケットを再処理用キューへ格納し、前記パケットの処理で用いられる前記テーブルにおける前記更新情報が付加されたエントリの更新が完了した場合、前記再処理用キューに格納された前記パケットを前記入力キューへ転送して前記パイプラインに入力させ且つ前記特定エントリを用いる処理段階まで前記バイパス経路によりバイパスさせて前記パイプライン処理を再開させる再処理制御部と
を備えたことを特徴とする通信装置。
【請求項６】
入力キューに入力されたパケットに対して、実行する処理がそれぞれに予め決められた複数の処理段階が連続して並び且つ各処理段階のバイパス経路を有するパイプラインで実行されるパイプライン処理を、ネットワーク構成の変更に先立って更新されるテーブルを用いて順番に行い、
前記テーブルの更新されるエントリに更新情報を付加し、
前記パイプライン処理で前記テーブルの中の前記更新情報が付加された特定エントリが用いられる場合、パイプライン処理を中断し、
前記パイプライン処理が中断された場合、入力された前記パケットを再処理用キューへ格納し、
前記パケットの処理で用いられる前記テーブルにおける前記更新情報が付加されたエントリの更新が完了した場合、前記再処理用キューに格納されたパケットを前記入力キューへ転送し、
前記再処理用キューから前記入力キューへ転送して前記パイプラインに入力させ且つ前記特定エントリを用いる処理段階まで前記バイパス経路によりバイパスさせて前記パイプライン処理を再開する
ことを特徴とするパケット転送方法。
【請求項７】
入力キューに入力されたパケットに対して、実行する処理がそれぞれに予め決められた複数の処理段階が連続して並び且つ各処理段階のバイパス経路を有するパイプラインで実行されるパイプライン処理を、ネットワーク構成の変更に先立って更新されるテーブルを用いて順番に行い、
前記テーブルの更新されるエントリに更新情報を付加し、
前記パイプライン処理で前記テーブルの中の前記更新情報が付加された特定エントリが用いられる場合、パイプライン処理を中断し、
前記パイプライン処理が中断された場合、入力された前記パケットを再処理用キューへ格納し、
前記パケットの処理で用いられる前記テーブルにおける前記更新情報が付加されたエントリの更新が完了した場合、前記再処理用キューに格納されたパケットを前記入力キューへ転送し、
前記再処理用キューから前記入力キューへ転送して前記パイプラインに入力させ且つ前記特定エントリを用いる処理段階まで前記バイパス経路によりバイパスさせて前記パイプライン処理を再開する
処理をコンピュータに実行させることを特徴とするパケット転送プログラム。
【請求項８】
前記パケット処理部は、前記パイプラインに入力された前記パケットに入力制御を行うＩｎｇｒｅｓｓ処理を施し、前記パイプラインから出力する前記パケットに対して出力制御を行うＥｇｒｅｓｓ処理を施すことを特徴とする請求項１〜３のいずれか一つに記載のネットワークプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークプロセッサ、通信装置、パケット転送方法及びパケット転送プログラムに関する。
【背景技術】
【０００２】
近年、ネットワークのトラフィックの増大に伴い、高速パケット処理に特化したネットワークプロセッサと呼ばれる専用プロセッサが大きな発展を遂げている。ネットワークプロセッサとは、ネットワークトラフィックを処理するための専用のプロセッサである。ネットワークプロセッサは、情報処理装置におけるネットワークインタフェースとなり、パケット処理などを行う。
【０００３】
ネットワークプロセッサは、プログラマブルなプロセッサであり、パイプラインのコードやキュー、メモリ及びテーブルを含む周辺リソースの構成を変更することができる。情報処理装置は、一般的にネットワークプロセッサ以外に、ＣＰＵ（Central  Processing  Unit）、ＦＰＧＡ（Field  Programmable  Gate  Array）などの周辺ハードウェア及びテーブルなどを有する。そして、フラッシュメモリなどに書き込まれたパイプラインコードやレジスタ設定といった設定用データをＣＰＵ経由でネットワークプロセッサへダウンロードすることで、コンフィグレーションが行われる。また、コマンドベースでＣＰＵからＡＰＩ（Application  Programming  Interface）を通してネットワークプロセッサの設定が行われる場合もある。
【０００４】
ネットワークプロセッサは、経路制御などを行うコントロールプレーンとパケット転送処理を行うデータプレーンに分離されたアーキテクチャ構成を有する。データプレーンは、パイプライン構成を有し、テーブルの情報を参照しながら転送先決定などのパケット処理を高速に行う。コントロールプレーンは、ＡＰＩを通して、データプレーンの動作や構成を制御する。コントロールプレーンが実行する処理の１つにテーブル更新処理がある。
【０００５】
データプレーンにおいて行われるパイプライン処理は、フェーズ毎に行う処理が固定されており、フェーズでどのテーブルへのアクセスを行うかも固定されている。ネットワークプロセッサは、パケットメモリを有しており、パイプライン処理におけるフェーズの移動とともに処理対象のパケットもパケットメモリ内を移動する。
【０００６】
また、パイプライン処理で用いられるテーブルは、ＴＣＡＭ（Ternary  Content  Addressable  Memory）やＲＡＭ（Random  Access  Memory）に格納される。ネットワークプロセッサは、検索キーやアドレスを用いてテーブルの情報を読み出す。検索キーやアドレスは、入力ポート番号、入力パケット内情報、及び前段のテーブルの読出結果などによって決定される。
【０００７】
ここで、ネットワーク管理者は、ネットワーク構成を変更する場合、各種テーブルの更新を行う。場合によっては、ネットワーク管理者は複数のテーブルの更新を行う。
【０００８】
なお、ネットワークプロセッサに関する従来技術として、受信したパケットに対して検索キーを含むヘッダを割り当て、パケット処理部と検索エンジンとの間でパケットの送受信を繰り返しながら処理を段階的に行う技術がある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００７−２０８９６３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、複数のテーブルを変更する場合、既に更新されたテーブルの情報と未更新のテーブルの情報との間で整合性が保てない状態の発生が考えられる。その場合、既に更新されたテーブルと未更新のテーブルとの間で整合性が保てていない状態で、それらのテーブルを用いてパイプライン処理が行われると誤った処理結果が出てしまうおそれがある。
【００１１】
そこで、従来、複数テーブル変更時の不整合を防止するため、以下の方法で処理が行わる。その方法とは、まず全てのテーブルの更新が完了するまで、ネットワークプロセッサにおける全ての処理を一時的に停止し、デキューを禁止して入力キューに溜めておく。そして、全てのテーブルの更新完了後、デキューを有効にしてパイプライン処理を再開する。このような手順で処理を行うことで、全てのテーブルが更新されて不整合が無い状態で、パケットの処理が行われる。
【００１２】
ただし、蓄積されたキューの数がキューメモリの上限に達した場合、それ以上のパケットは破棄される。破棄されたパケットは再送されることになり、トラフィックの増大やパケットの送信遅延が発生し、情報処理装置のスループットが低下してしまう。そして、全ての処理を停止して全ての入力パケットをキューに溜める方法では、多くのパケットが破棄されることが考えられ、情報処理装置のスループットが低下するおそれがある。
【００１３】
開示の技術は、上記に鑑みてなされたものであって、スループットの低下を軽減するネットワークプロセッサ、通信装置、パケット転送方法及びパケット転送プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
本願の開示するネットワークプロセッサ、通信装置、パケット転送方法及びパケット転送プログラムは、一つの態様において、管理部は、ネットワーク構成の変更に先立って更新されるテーブルの更新されるエントリに更新情報を付加し、ネットワーク構成の変更に伴う前記テーブルの更新が完了すると前記更新情報を削除する。パケット処理部は、入力キューに入力されたパケットに対して、実行する処理がそれぞれに予め決められた複数の処理段階が連続して並び且つ各処理段階のバイパス経路を有するパイプラインで実行されるパイプライン処理を、前記テーブルを用いて順番に行い、前記パイプライン処理で前記テーブルの中の前記更新情報が付加された特定エントリが用いられる場合、パイプライン処理を中断する。再処理制御部は、前記パケット処理部による前記パイプライン処理が中断した場合、入力された前記パケットを再処理用キューへ格納し、前記パケットの処理で用いられる前記テーブルにおける前記更新情報が付加されたエントリの更新が完了した場合、前記再処理用キューに格納された前記パケットを前記入力キューへ転送して前記パイプラインに入力させ且つ前記特定エントリを用いる処理段階まで前記バイパス経路によりバイパスさせて前記パイプライン処理を再開させる。
【発明の効果】
【００１５】
本願の開示するネットワークプロセッサ、通信装置、パケット転送方法及びパケット転送プログラムの一つの態様によれば、スループットの低下を軽減することができるという効果を奏する。
【図面の簡単な説明】
【００１６】
【図１】図１は、実施例１に係るスイッチのブロック図である。
【図２】図２は、実施例１に係るネットワークプロセッサによるテーブルの更新最中のパイプライン処理の一例を表す図である。
【図３】図３は、実施例１においてテーブル更新後の再処理用キューに格納されていたパケットの処理の流れを説明するための図である。
【図４】図４は、パイプライン処理の流れをテーブルを用いて表した図である。
【図５】図５は、実施例１に係るネットワークプロセッサによるテーブル更新時の処理のフローチャートである。
【図６】図６は、実施例１に係るスイッチのハードウェア構成図である。
【図７】図７は、変形例１に係るネットワークプロセッサによるテーブル更新時の処理のフローチャートである。
【図８】図８は、実施例２に係るスイッチのブロック図である。
【図９】図９は、実施例２に係るネットワークプロセッサによるテーブルの更新最中のパイプライン処理の一例を表す図である。
【図１０】図１０は、デキュー停止フラグがオンの場合の通し番号が付加されたパケットに対する処理を示す図である。
【図１１】図１１は、実施例２においてテーブル更新後の処理が中断されたパケットに対する処理の流れを説明するための図である。
【図１２】図１２は、実施例２に係るネットワークプロセッサによるテーブル更新時の処理のフローチャートである。
【図１３】図１３は、パイプラインに入力されたパケットに対する処理を表すフローチャートである。
【図１４】図１４は、変形例２に係るネットワークプロセッサによるテーブル更新時の処理のフローチャートである。
【発明を実施するための形態】
【００１７】
以下に、本願の開示するネットワークプロセッサ、通信装置、パケット転送方法及びパケット転送プログラムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示するネットワークプロセッサ、通信装置、パケット転送方法及びパケット転送プログラムが限定されるものではない。
【実施例１】
【００１８】
図１は、実施例１に係るスイッチのブロック図である。スイッチ１は、情報処理装置２１と２２との間の通信を中継する。また、スイッチ１は、制御コマンド入力用の端末装置３が接続されている。さらに、スイッチ１は、ネットワークプロセッサのデータプレーン１０、管理部１１及びＲＡＭ（Random  Access  Memory）１２を有する。ここで、管理部１１は、ネットワークプロセッサのコントロールプレーンにあたる。すなわち、データプレーン１０及び管理部１１を併せたものが、ネットワークプロセッサの一例である。
【００１９】
管理部１１は、テーブルの更新指示を含む制御コマンドの入力を端末装置３から受ける。テーブルの更新は、例えば、ネットワーク構成が変更された場合に発生する。テーブルの更新指示を受けた場合、管理部１１は、後述するデキュー情報格納部１０５に格納されるデキュー停止フラグをオン、すなわちデキューの停止を示す値に設定する。さらに、管理部１１は、テーブルの更新を行う。ここでは、管理部１１が、ＲＡＭ１２に格納されるコンテンツテーブル１２１及び後述するＲＡＭ１０７に格納されるコンテンツテーブル１７１を更新する場合で説明する。また、今回は管理部１１がコンテンツテーブル１２１及び１７１を更新する場合で説明するが、管理部１１は、後述するＴＣＡＭ１０６のＴＣＡＭテーブル１６１を更新してもよい。このＴＣＡＭテーブル１６１、並びに、コンテンツテーブル１２１及び１７１が、「ネットワーク構成の変更に先立って更新されるテーブル」の一例にあたる。
【００２０】
以下に管理部１１によるテーブルの更新について詳細に説明する。管理部１１は、後述するパイプライン処理部１０１で行われるパイプライン処理において、フェーズ毎の処理の内容を予め記憶する。そして、管理部１１は、コンテンツテーブル１２１及び１７１の何れが処理の中で先のフェーズで用いられるか判定する。ここでは、コンテンツテーブル１２１が、先のフェーズの処理で用いられる場合で説明する。
【００２１】
管理部１１は、コンテンツテーブル１２１における更新するエントリの更新フラグをオンにする。ここで、エントリの更新フラグがオンであるとは、そのエントリが更新されるエントリであることを示す。この更新フラグが、「更新情報」の一例にあたる。以下では、更新対象のエントリを、「更新エントリ」という。
【００２２】
その後、管理部１１は、既に更新前のコンテンツテーブル１２１の更新エントリを用いて処理されたパケット全てがその後のフェーズでコンテンツテーブル１７１を用いて処理されるのに十分な時間待機する。以下では、この管理部１１の待機時間を、「不整合回避時間」という。ここで、コンテンツテーブル１２１を用いた処理のフェーズと、コンテンツテーブル１７１を用いた処理のフェーズの間に、既にコンテンツテーブル１２１を用いて処理されたパケットが存在する可能性がある。そのため、コンテンツテーブル１２１の更新エントリを更新した直後にコンテンツテーブル１７１の更新エントリを更新した場合次のような不整合が起こる。すなわち、更新前のコンテンツテーブル１２１の更新エントリを用いて処理されたパケットが、更新後のコンテンツテーブル１７１の更新エントリを用いて処理されるおそれがある。この場合、コンテンツテーブル１２１及び１７１の各更新エントリの間には不整合が発生するので、パケットに対して正確な処理が行えない。そこで、管理部１１は、不整合回避時間の間、コンテンツテーブル１７１の更新を保留する。これにより、更新前のコンテンツテーブル１２１の更新エントリを用いて処理されたパケットが、更新後のコンテンツテーブル１７１の更新エントリを用いて処理されることが回避できる。
【００２３】
不整合回避時間経過後、管理部１１は、コンテンツテーブル１７１における更新エントリの更新フラグをオンにする。その後、管理部１１は、コンテンツテーブル１７１における更新エントリの内容を更新する。そして、管理部１１は、コンテンツテーブル１７１における更新エントリの更新フラグをオフにする。ここで、後述するように入力キュー１０２から入力されるパケットはコンテンツテーブル１２１の更新エントリを用いた処理を行うフェーズで処理が中断され、再処理用キュー１０４に送られる。そのため、更新不整合回避時間経過後は、コンテンツテーブル１７１の更新エントリを用いた処理のフェーズにパケットが送られることは少ない。そのため、不整合回避時間を十分に取れば、管理部１１によるコンテンツテーブル１７１の更新エントリの更新フラグのオン及びオフを行わなくてもよい。
【００２４】
さらに、管理部１１は、コンテンツテーブル１７１の更新エントリの更新フラグをオフにした後、コンテンツテーブル１２１の更新エントリの更新フラグをオフにする。すなわち、管理部１１は、ネットワーク構成の変更に伴うコンテンツテーブル１２１及び１７１の更新が完了した場合、各テーブルの更新エントリの更新フラグをオフにする。ここで、更新エントリの更新フラグをオフにすることが、「更新情報の削除」にあたる。
【００２５】
その後、管理部１１は、デキュー情報格納部１０５のデキュー停止フラグをオフにする。これにより、再処理用キュー１０４からのデキューが開始できる状態となる。
【００２６】
ＲＡＭ１２は、データプレーン１０以外のスイッチ１上に配置された記憶装置である。本実施例では、データプレーン１０が使用するコンテンツテーブル１２１が大きいため、データプレーン１０以外の場所にある大きな記憶領域を有するＲＡＭ１２に、コンテンツテーブル１２１が格納される。ただし、データプレーン１０は、データプレーン１０以外の場所に配置されたＲＡＭ１２のような記憶装置を使用しなくてもよい。
【００２７】
データプレーン１０は、パイプライン処理部１０１、入力キュー１０２、出力キュー１０３、再処理用キュー１０４、デキュー情報格納部１０５、ＴＣＡＭ１０６及びＲＡＭ１０７を有する。
【００２８】
ＴＣＡＭ１０６は、ＴＣＡＭテーブル１６１を有する。また、ＲＡＭ１０７は、コンテンツテーブル１７１を有する。
【００２９】
デキュー情報格納部１０５は、再処理用キュー１０４のデキューを停止するか否かを示すデキュー停止フラグを有する。デキュー情報格納部１０５は、コンテンツテーブル１２１及び１７１の更新が発生した場合、管理部１１からの指示を受けて、デキュー停止フラグをオンにする。また、デキュー情報格納部１０５は、コンテンツテーブル１２１及び１７１の更新が終了した場合、管理部１１からの指示を受けて、デキュー停止フラグをオフにする。
【００３０】
再処理用キュー１０４は、パケットの入力を再処理制御部１１２から受ける。その後、再処理用キュー１０４は、パケットの出力指示を再処理制御部１１２から受けて、古い順にパケットを再処理制御部１１２へ出力する。
【００３１】
入力キュー１０２は、パケットの入力を情報処理装置２１から受ける。さらに、入力キュー１０２は、処理が途中で中断したパケットの入力を再処理制御部１１２から受ける。そして、入力キュー１０２は、入力が古い順にパケット処理部１１１へパケットを出力する。
【００３２】
出力キュー１０３は、パケットの入力をパケット処理部１１１から受ける。そして、取得したパケットを入力が古い順に情報処理装置２２へ出力する。
【００３３】
パイプライン処理部１０１は、入力キュー１０２から取得したパケットに対してパイプライン処理を施す。パイプライン処理部１０１は、パケット処理部１１１及び再処理制御部１１２を有する。
【００３４】
パケット処理部１１１は、パケットを入力キュー１０２から取得する。そして、パケット処理部１１１は、フェーズ毎に予め決められた処理をパケットに対して行う。その後、パケット処理部１１１は、全てのフェーズの処理が完了したパケットを出力キュー１０３へ出力する。
【００３５】
ここで、パケット処理部１１１が実行する処理について具体的に説明する。パケット処理部１１１は、取得したパケットに対してＩｎｇｒｅｓｓ処理を施す。その後、パケット処理部１１１は、出力するパケットに対してＥｇｒｅｓｓ処理を施す。
【００３６】
Ｉｎｇｒｅｓｓ処理には、例えば、ＶＩＤ（Virtual  Identifier）変換、フィルタリング処理、簡易Ｌ（Layer）３機能、Ｃｌａｓｓｉｆｙ、ＭＡＣ検索、Ｌｏｏｐ検出、ＬＡＧ（Link  Aggregation）  Ｈａｓｈ及びＰｏｌｉｃｅｒ処理が含まれる。Ｃｌａｓｓｉｆｙは、パケットの優先度に応じたクラス分類を行う処理である。ＬＡＧ  Ｈａｓｈは、複数の物理回線を１本の論理回線にするリンクアグリゲーション処理である。Ｐｏｌｉｃｅｒは、入力ポートのレートを契約レートやピークレートに調整するレート制御の処理である。
【００３７】
Ｅｇｒｅｓｓ処理には、例えば、Ｍｕｌｔｉｃａｓｔ処理、フィルタリング処理、ＶＩＤ変換、ＭＡＣ学習及びＳｈａｐｅｒ処理が含まれる。Ｍｕｌｔｉｃａｓｔ処理は、マルチキャストパケットの転送先制御の処理である。ＶＩＤ変換は、ＶＬＡＮ（Virtual  Local  Area  Network）のＩＤ（Identifier）を変換する処理である。ＭＡＣ学習は、ＭＡＣアドレスと転送先の関連付けの処理である。Ｓｈａｐｅｒ処理は、出力ポートのレートを契約レートやピークレートに調整するレート制御の処理である。
【００３８】
パケット処理部１１１は、以上の処理をパケットに対してパイプライン処理で行う。パイプライン処理とは、処理の段階を表すフェーズ毎に行う処理が固定されている処理である。パケット処理部１１１は、フェーズに合わせてパケットを移動させる。そして、パケット処理部１１１は、あるフェーズであるパケットに対する処理が無い場合、そのフェーズ期間はパケットには処理を行わずに、そのままの状態を保持する。
【００３９】
図２は、実施例１に係るネットワークプロセッサによるテーブルの更新最中のパイプライン処理の一例を表す図である。図２では、テーブルを用いる処理を抽出して記載されている。パケットは、矢印に沿って処理されていく。ここで、図２における上段にテーブルと記載され下段に符号が記載された四角で囲われた要素は、その符号を識別情報とするテーブルを用いて処理が行われることを表す。そして、識別情報は、テーブルが用いられるフェーズの番号とそのフェーズ内でのテーブルの識別子との組み合わせで表されている。例えば、処理２０１は、３番目のフェーズにおいてテーブル３−ｂを用いて行われる処理である。このように、実際には同じテーブルでも、使用される処理の位置が異なれば、パイプライン処理では、異なるテーブルとして扱われる。また、図２において、あるフェーズにおいて、いずれの処理にも入らずにそのフェーズを通過する線は、そのフェーズでの処理を迂回する、すなわちそのフェーズでの処理をバイパスするパケットを表す。さらに、処理２０１で使用されるテーブル３−ｂは、ＲＡＭ１２に格納されたコンテンツテーブル１２１であり、処理２０２で使用されるテーブルＮ−１−ａは、ＲＡＭ１０７に格納されたコンテンツテーブル１７１である。
【００４０】
パケット処理部１１１は、コンテンツテーブル１２１のエントリを用いて処理２０１を行う際に、更新フラグが付加されているか否かを判定する。コンテンツテーブル１２１の更新エントリが更新されていない場合、更新フラグは付加されていないので、パケット処理部１１１は、パケットに対して処理２０１を実施し次のフェーズに進む。
【００４１】
これに対して、処理２０１でパケットがヒットしたエントリが更新エントリであり更新フラグが付加されている場合、パケット処理部１１１は、更新エントリにヒットしたパケットをフェーズ３の間待機させる。その後、パケット処理部１１１は、更新エントリにヒットしたパケットにテーブル３−ｂの識別情報を付加する。そして、パケット処理部１１１は、更新エントリにヒットしたパケットを再処理制御部１１２へ出力する。図２における破線矢印２０３が、更新エントリにヒットしたパケットの再処理制御部１１２への出力を表す。そして、パケット処理部１１１は、コンテンツテーブル１２１の更新エントリの更新フラグがオフになるまで、更新エントリにヒットしたパケットを再処理制御部１１２へ出力する。
【００４２】
さらに、パケット処理部１１１は、処理２０１で更新エントリにヒットしたパケットを再処理制御部１１２へ送信しつつ、不整合回避時間の間、処理２０２においてパケットに対してテーブルＮ−１−ａを用いた処理を継続する。その後、不整合回避時間が経過すると、コンテンツテーブル１７１の更新エントリの更新フラグがオンになる。そこで、パケット処理部１１１は、処理２０２の更新エントリにヒットしたパケットを再処理制御部１１２へ出力する。ただし、不整合回避時間が十分であり、処理２０１と処理２０２との間にパケットが残っていなければ、パケット処理部１１１は、実際には処理２０２の更新エントリにパケットがヒットすることはない。すなわち、パケット処理部１１１は、処理２０２において更新エントリにヒットしたパケットを再処理制御部１１２へ出力することはない。
【００４３】
その後、コンテンツテーブル１７１の更新エントリが更新されると、コンテンツテーブル１７１の更新エントリの更新フラグがオフになる。そこで、パケット処理部１１１は、処理２０２に入力されたパケットに対してテーブルＮ−１−ａを用いた処理を行う状態に戻る。
【００４４】
その後、コンテンツテーブル１２１の更新エントリが更新されると、コンテンツテーブル１２１の更新エントリの更新フラグがオフになる。そこで、パケット処理部１１１は、処理２０１に入力されたパケットに対してテーブル３−ｂを用いた処理を行う状態に戻る。
【００４５】
その後、パケット処理部１１１は、入力キュー１０２から取得したパケットにテーブル３−ｂ又はＮ−１−ａの識別情報が付加されているか否かを判定する。テーブル３−ｂ又はＮ−１−ａの識別情報が付加されていない場合、パケット処理部１１１は、取得したパケットに対してフェーズ１から順に通常のパイプライン処理を行う。
【００４６】
これに対して、パケットにテーブル３−ｂの識別情報が付加されている場合、パケット処理部１１１は、図３の一点鎖線の矢印２０４が示すように、そのパケットをフェーズ３までバイパスさせる。図３は、実施例１においてテーブル更新後の再処理用キューに格納されていたパケットの処理の流れを説明するための図である。その後、パケット処理部１１１は、バイパスさせたパケットに対して更新されたテーブル３−ｂを用いて処理２０１を行った後、順に後のフェーズの処理を行う。この場合、既にコンテンツテーブル１２１及び１７１ともに更新されているため、パケット処理部１１１が、それらを用いる処理２０１及び２０２を行っても不整合は発生しない。
【００４７】
また、パケットにテーブルＮ−１−ａの識別情報が付加されている場合、パケット処理部１１１は、そのパケットをフェーズＮ−１までバイパスさせ、処理２０２からパイプライン処理を再開する。
【００４８】
さらに、図４を参照して、本実施例で実施されるパイプライン処理の流れの概要を説明する。図４は、パイプライン処理の流れをテーブルを用いて表した図である。ここでは、コンテンツテーブル１２１を用いる前に、ＴＣＡＭテーブル１６１を用いた検索が行われる場合で説明する。また、各処理の間には他のフェーズの処理が挟まっているが、説明の都合上、間のフェーズは省いて表示している。
【００４９】
パケット処理部１１１は、取得したパケット３００の決められたアドレスから検索キー３０１を取得する（ステップＳ１）。
【００５０】
次に、パケット処理部１１１は、検索キー３０１を用いてＴＣＡＭテーブル１６１を検索し、ヒットしたエントリを抽出する（ステップＳ２）。
【００５１】
その後、パケット処理部１１１は、ＴＣＡＭテーブル１６１でヒットしたエントリでコンテンツテーブル１２１を検索する（ステップＳ３）。ここで、コンテンツテーブル１２１のエントリには、更新フラグ３０２が付加されている。
【００５２】
そして、パケット処理部１１１は、コンテンツテーブル１２１においてヒットしたエントリの内容を取得する（ステップＳ４）。このコンテンツテーブル１２１の検索処理が、図２の処理２０１の一例にあたる。ここで、パケット処理部１１１は、更新フラグ３０２がオンになっていれば、検索前に用いた情報を有するパケットにテーブルの識別情報を付加して、再処理用キュー１０４へ出力する。
【００５３】
これに対して、更新フラグ３０２がオフの場合、パケット処理部１１１は、コンテンツテーブル１２１から取得した内容を用いてコンテンツテーブル１７１を検索する（ステップＳ５）。ここで、コンテンツテーブル１７１のエントリには、更新フラグ３０３が付加されている。
【００５４】
そして、パケット処理部１１１は、コンテンツテーブル１７１においてヒットしたエントリの内容を取得する（ステップＳ６）。このコンテンツテーブル１７１の検索処理が、図２の処理２０２の一例にあたる。ここで、パケット処理部１１１は、更新フラグ３０３がオンになっていれば、検索前に用いた情報を有するパケットにテーブルの識別情報を付加して、再処理用キュー１０４へ出力する。
【００５５】
これに対して、更新フラグ３０３がオフの場合、パケット処理部１１１は、コンテンツテーブル１７１から取得した内容を用いてパイプライン処理を終わらせる。
【００５６】
ここで、パケット処理部１１１は、コンテンツテーブル１２１から取得したフローＩＤでコンテンツテーブル１７１を検索するものとする。そして、コンテンツテーブル１２１が更新されて、コンテンツテーブル１２１から取得されるフローＩＤが＃Ａから＃Ｄに変わった場合で説明する。この場合、コンテンツテーブル１２１が既に更新されているので、パケット処理部１１１は、コンテンツテーブル１２１からフローＩＤとして＃Ｄを取得する。しかし、この状態で、コンテンツテーブル１７１が更新されていなければ、パケット処理部１１１は、コンテンツテーブル１７１から更新前のフローＩＤ＃Ｄに対応する情報を取得してしまう。本来であれば、パケット処理部１１１は、更新前の情報であればフローＩＤ＃Ａに対応する情報をコンテンツテーブル１７１から取得することが好ましいため、この場合処理に不整合が発生してしまう。
【００５７】
これに対して、本実施例に係るパケット処理部１１１は、更新前のコンテンツテーブル１２１で処理されたパケットは、不整合回避時間の間に更新前のコンテンツテーブル１７１で処理する。また、コンテンツテーブル１２１の更新後は、コンテンツテーブル１７１が更新されるまで、パケット処理部１１１は、コンテンツテーブル１２１の更新エントリを用いた処理を行わない。すなわち、本実施例に係るパケット処理部１１１は、更新後のコンテンツテーブル１２１で処理されたパケットは、更新後のコンテンツテーブル１７１で処理する。これにより、パケット処理部１１１は、処理の不整合を回避することができる。
【００５８】
図１に戻って説明を続ける。再処理制御部１１２は、処理が中断されたパケットの入力をパケット処理部１１１から受ける。そして、再処理制御部１１２は、処理が中断されたパケットを再処理用キュー１０４に順次格納する。
【００５９】
再処理制御部１１２は、デキュー情報格納部１０５のデキュー停止フラグを確認する。デキュー停止フラグがオンであれば、再処理制御部１１２は、再処理用キュー１０４に格納したパケットをそのまま保持する。これに対して、デキュー停止フラグがオフであればｂ、再処理制御部１１２は、再処理用キュー１０４に格納されたパケットを格納タイミングの古い順に入力キュー１０２へ転送する。
【００６０】
次に、図５を参照して、本実施例に係るネットワークプロセッサによるテーブル更新時の処理の流れについて説明する。図５は、実施例１に係るネットワークプロセッサによるテーブル更新時の処理のフローチャートである。図５の左側のフローはコントロールプレーン、すなわち管理部１１が実行する処理を表す。また、図５の右側のフローは、データプレーン１０が実行する処理を表す。さらに、左側のフローから右側のフローへ延びる点線は、点線の延びる処理が実行されてから次の点線が延びる処理が実行されるまでの間、コントロールプレーンにおいてその点線の間の処理が行われることを表す。
【００６１】
管理部１１は、テーブルの更新が発生すると、デキュー情報格納部１０５のデキュー停止フラグをオンにする（ステップＳ１０１）。
【００６２】
次に、管理部１１は、使用されるフェーズが早い方のテーブルの更新エントリ（以下では、「フェーズが早い更新エントリ」という。）の更新フラグをオンにする（ステップＳ１０２）。
【００６３】
次に、管理部１１は、不整合回避時間経過したか否かを判定する（ステップＳ１０３）。不整合回避時間を経過していない場合（ステップＳ１０３：否定）、管理部１１は、ステップＳ１０３に戻り待機する。
【００６４】
これに対して、不整合回避時間を経過した場合（ステップＳ１０３：肯定）、管理部１１は、フェーズが遅いテーブルの更新エントリ（以下では、「フェーズが遅い更新エントリ」という。）の更新フラグをオンにする（ステップＳ１０４）。
【００６５】
次に、管理部１１は、フェーズが遅い更新エントリの内容を更新し、更新フラグをオフにする（ステップＳ１０５）。
【００６６】
次に、管理部１１は、フェーズが早い更新エントリの内容を更新し、更新フラグをオフにする（ステップＳ１０６）。
【００６７】
その後、管理部１１は、デキュー情報格納部１０５のデキュー停止フラグをオフにする（ステップＳ１０７）。
【００６８】
一方データプレーン１０では以下の処理が行われる。デキュー情報格納部１０５のデキュー停止フラグがオンであることを確認して、再処理制御部１１２は、再処理用キュー１０４のデキューを停止する（ステップＳ１１１）。
【００６９】
パケット処理部１１１は、フェーズが早い更新エントリの更新フラグがオンであることを確認して、フェーズが早い更新エントリにヒットしたパケットに対する処理を中断し、テーブルの識別情報を付加する（ステップＳ１１２）。
【００７０】
そして、パケット処理部１１１は、テーブルの識別情報を付加したパケットを再処理制御部１１２へ出力する。再処理制御部１１２は、入力されたパケットを再処理用キュー１０４に格納する（ステップＳ１１３）。
【００７１】
さらに、パケット処理部１１１は、不整合回避時間の間、フェーズが遅い更新エントリにヒットしたパケットに対してパイプライン処理を続行する（ステップＳ１１４）。
【００７２】
その後、パケット処理部１１１は、フェーズが遅い更新エントリの更新フラグがオンになったことを確認して、フェーズが遅い更新エントリにヒットしたパケットを再処理制御部１１２へ出力する。再処理制御部１１２は、入力されたパケットを再処理用キュー１０４に格納する（ステップＳ１１５）。
【００７３】
次に、パケット処理部１１１は、フェーズが遅いエントリの更新フラグがオフになったことを確認して、フェーズが遅い更新エントリにヒットしたパケットに対する処理をパイプライン処理に戻す（ステップＳ１１６）。
【００７４】
さらに、パケット処理部１１１は、フェーズが早い更新エントリの更新フラグがオフになったことを確認して、フェーズが早い更新エントリにヒットしたパケットに対する処理をパイプライン処理に戻す（ステップＳ１１７）。
【００７５】
再処理制御部１１２は、デキュー情報格納部１０５のデキュー停止フラグがオフであることを確認して、再処理用キュー１０４のデキューを開始する（ステップＳ１１８）。
【００７６】
その後、パケット処理部１１１は、再処理用キュー１０４からデキューされたパケットを取得すると、そのパケットに付加された識別情報を有するテーブルを用いる処理までそのパケットをバイパスさせパイプライン処理を行う（ステップＳ１１９）。
【００７７】
図６は、実施例１に係るスイッチのハードウェア構成図である。図６に示すように、スイッチ１は、図１と同様に、ＲＡＭ１２、ＴＣＡＭ１０６及びＲＡＭ１０７を有する。さらに、スイッチ１は、ＣＰＵ９０１、ＰＣＩ（Peripheral  Component  Interconnect）ｅｘｐｒｅｓｓ９０２、外部メモリインタフェース９０３、レジスタ９０４、ＦＩＦＯ（First  In  First  Out）キャッシュ９０５及びプロセッサ９０６を有する。さらに、スイッチ１は、ＦＩＦＯキャッシュ９０７、パケットメモリ９０８、ＦＩＦＯキャッシュ９０９及びネットワークインタフェース９１０を有する。
【００７８】
ＣＰＵ９０１は、図１に例示した管理部１１の機能を含むネットワークプロセッサのコントロールプレーンの機能を実現する。ＣＰＵ９０１は、ＲＡＭ１２とバスで接続される。また、ＣＰＵ９０１は、ＰＣＩｅｘｐｒｅｓｓ９０２を介してレジスタ９０４、ＴＣＡＭ１０６及びＲＡＭ１０７と接続する。レジスタ９０４は、図１に例示したデキュー情報格納部１０５の機能を実現する。
【００７９】
プロセッサ９０６は、レジスタ９０４、ＴＣＡＭ１０６及びＲＡＭ１０７とバスで接続される。また、プロセッサ９０６は、外部メモリインタフェース９０３を介して、ＲＡＭ１２と接続する。さらに、プロセッサ９０６は、ＦＩＦＯキャッシュ９０５、９０７及び９０９及びパケットメモリ９０８とバスを介して接続する。また、プロセッサ９０６は、ネットワークインタフェース９１０を介して、外部の情報処理装置に接続する。
【００８０】
ＦＩＦＯキャッシュ９０５は、図１に例示した再処理用キュー１０４の機能を実現する。また、ＦＩＦＯキャッシュ９０７は、図１に例示した入力キュー１０２の機能を実転する。また、ＦＩＦＯキャッシュ９０９は、図１に例示した出力キュー１０３の機能を実現する。
【００８１】
また、プロセッサ９０６及びパケットメモリ９０８は、図１に例示したパケット処理部１１１及び再処理制御部１１２を含むパイプライン処理部１０１の機能を実現する。特に、プロセッサ９０６は、パケットメモリ９０８に格納したパケットをフェーズ毎に管理し、パケット処理部１１１の処理を行う。
【００８２】
以上に説明したように、本実施例に係るネットワークプロセッサは、テーブル更新時に更新エントリに更新フラグを立て、さらに、デキュー停止フラグを立て、フラグが立っているエントリにヒットしたパケットを再処理用キューに格納する。そして、本実施例に係るネットワークプロセッサは、デキュー停止フラグがオフになると、再処理用キューからパケットを入力キューに転送しパケット処理を行う。このように、更新エントリにヒットしたパケットのみを待機させることで、テーブル更新の影響を受けないパケットは遅延を抑えてパケット処理を実行することができる。したがって、スループットの低下を軽減しつつテーブルの更新による不整合の発生を軽減することができる。
【００８３】
特に、エントリサイズで再処理を行うパケットを絞るため、再処理を行うキューを最小限に抑えることができ、再処理用キューが小さくてもキューの廃棄を抑えることができる。
【００８４】
さらに、処理を中断したパケットを再度処理するにあたり、既に処理済のフェーズはバイパスすることができ、パイプラインリソースを有効に使用することができる。
【００８５】
ここで、本実施例では、２つのテーブルを更新する場合で説明したが、３つ以上のテーブルの更新においても本実施例の機能を用いることができる。３つ以上のテーブルの更新の場合、既に最も早いフェーズの更新エントリを用いた処理が行われたパケットに対して、一番後のフェーズの更新エントリで処理が終わるまでを不整合回避時間としてもよい。
【００８６】
（変形例１）
次に、実施例１の変形例１について説明する。本変形例は、更新エントリの更新フラグがオンにされるタイミングで、更新エントリの内容が更新されることが実施例１と異なる。本変形例に係るスイッチ１も図１のブロック図で表される。
【００８７】
ここで、図７を参照して、本変形例に係るネットワークプロセッサによるテーブル更新時の処理の流れについて説明する。図７は、変形例１に係るネットワークプロセッサによるテーブル更新時の処理のフローチャートである。
【００８８】
スイッチ１における管理部１１は、テーブルの更新が発生すると、デキュー情報格納部１０５のデキュー停止フラグをオンにする（ステップＳ２０１）。
【００８９】
次に、管理部１１は、フェーズが早い更新エントリの内容を更新し、更新フラグをオンにする（ステップＳ２０２）。
【００９０】
次に、管理部１１は、不整合回避時間経過したか否かを判定する（ステップＳ２０３）。不整合回避時間を経過していない場合（ステップＳ２０３：否定）、管理部１１は、ステップＳ２０３に戻り待機する。
【００９１】
これに対して、不整合回避時間を経過した場合（ステップＳ２０３：肯定）、管理部１１は、フェーズが遅い更新エントリの内容を更新し、更新フラグをオンにする（ステップＳ２０４）。
【００９２】
次に、管理部１１は、フェーズが遅い更新エントリの更新フラグをオフにする（ステップＳ２０５）。
【００９３】
次に、管理部１１は、フェーズが早い更新エントリの更新フラグをオフにする（ステップＳ２０６）。
【００９４】
その後、管理部１１は、デキュー情報格納部１０５のデキュー停止フラグをオフにする（ステップＳ２０７）。
【００９５】
一方データプレーン１０では以下の処理が行われる。デキュー情報格納部１０５のデキュー停止フラグがオンであることを確認して、再処理制御部１１２は、再処理用キュー１０４のデキューを停止する（ステップＳ２１１）。
【００９６】
パケット処理部１１１は、フェーズが早い更新エントリの更新フラグがオンであることを確認して、フェーズが早い更新エントリにヒットしたパケットに対する処理を中断し、テーブルの識別情報を付加する（ステップＳ２１２）。
【００９７】
そして、パケット処理部１１１は、テーブルの識別情報を付加したパケットを再処理制御部１１２へ出力する。再処理制御部１１２は、入力されたパケットを再処理用キュー１０４に格納する（ステップＳ２１３）。
【００９８】
さらに、パケット処理部１１１は、不整合回避時間の間、フェーズが遅い更新エントリにヒットしたパケットに対してパイプライン処理を続行する（ステップＳ２１４）。
【００９９】
その後、パケット処理部１１１は、フェーズが遅い更新エントリの更新フラグがオンになったことを確認して、フェーズが遅い更新エントリにヒットしたパケットを再処理制御部１１２へ出力する。再処理制御部１１２は、入力されたパケットを再処理用キュー１０４に格納する（ステップＳ２１５）。
【０１００】
次に、パケット処理部１１１は、フェーズが遅い更新エントリの更新フラグがオフになったことを確認して、フェーズが遅い更新エントリにヒットしたパケットに対する処理をパイプライン処理に戻す（ステップＳ２１６）。
【０１０１】
さらに、パケット処理部１１１は、フェーズが早い更新エントリの更新フラグがオフになったことを確認して、フェーズが早い更新エントリにヒットしたパケットに対する処理をパイプライン処理に戻す（ステップＳ２１７）。
【０１０２】
再処理制御部１１２は、デキュー情報格納部１０５のデキュー停止フラグがオフであることを確認して、再処理用キュー１０４のデキューを開始する（ステップＳ２１８）。
【０１０３】
その後、パケット処理部１１１は、再処理用キュー１０４からデキューされたパケットを取得すると、そのパケットに付加された識別情報を有するテーブルを用いる処理までそのパケットをバイパスさせパイプライン処理を行う（ステップＳ２１９）。
【０１０４】
以上に説明したように、本変形例に係るネットワークプロセッサは、更新フラグをオンにするタイミングでテーブルの内容を更新する。このように、内容の更新タイミングは更新フラグのオンのタイミング又はオフのタイミングの何れであっても、スループットの低下を軽減しつつテーブルの更新による不整合の発生を軽減することができる。
【実施例２】
【０１０５】
図８は、実施例２に係るスイッチのブロック図である。本実施例に係るネットワークプロセッサは、更新エントリにヒットしたパケットに通し番号を付与して入力キュー１０２に直接転送することが実施例１と異なる。以下の説明では、各部の実施例１と同じ機能については説明を省略する。以下では、コンテンツテーブル１２１を用いた処理が先に行われ、後でコンテンツテーブル１７１を用いた処理が行われる場合で説明する。
【０１０６】
パケット処理部１１１は、パケットのパイプライン処理においてコンテンツテーブル１２１の更新エントリにヒットしたか否かを、コンテンツテーブル１２１のエントリの更新フラグから確認する。
【０１０７】
パケットが更新エントリにヒットした場合、パケット処理部１１１は、更新エントリにヒットしたパケットに通し番号を順次付加する。そして、パケット処理部１１１は、通し番号を付加したパケットを全てのフェーズが完了するまでバイパスさせ、入力キュー１０２へ転送する。パケット処理部１１１は、デキュー情報格納部１０５のデキュー停止フラグがオフになるまで、更新エントリにヒットしたパケットに対する通し番号の付加及び入力キュー１０２への転送を行う。
【０１０８】
デキュー情報格納部１０５のデキュー停止フラグがオフになった場合、パケット処理部１１１は、パケットに付加されたテーブルの識別情報を確認する。そして、パケット処理部１１１は、通し番号の若い順に、コンテンツテーブル１２１を用いる処理までパケットをバイパスさせ、コンテンツテーブル１２１を用いる処理からパイプライン処理を再開する。
【０１０９】
次に、図９を参照して、本実施例に係るテーブル更新時の処理について具体的に説明する。図９は、実施例２に係るネットワークプロセッサによるテーブルの更新最中のパイプライン処理の一例を表す図である。ここで、処理２１１で使用されるテーブル３−ｂは、ＲＡＭ１２に格納されたコンテンツテーブル１２１であり、処理２１２で使用されるテーブルＮ−１−ａは、ＲＡＭ１０７に格納されたコンテンツテーブル１７１である。
【０１１０】
パケット処理部１１１は、コンテンツテーブル１２１のエントリを用いて処理２１１を行う際に、更新フラグが付加されているか否かを判定する。コンテンツテーブル１２１の更新エントリが更新されていない場合、更新フラグは付加されていないので、パケット処理部１１１は、パケットに対して処理２１１を実施し次のフェーズに進む。
【０１１１】
これに対して、処理２１１でパケットに用いるエントリが更新エントリであり更新フラグが付加されている場合、パケット処理部１１１は、そのパケットの処理を中断し、更新エントリにヒットしたパケットをフェーズ３の間待機させる。その後、パケット処理部１１１は、更新エントリにヒットしたパケット、すなわち処理を中断したパケットにテーブル３−ｂの識別情報及び通し番号を付加する。そして、パケット処理部１１１は、処理を中断したパケットを入力キュー１０２へ転送する。図９における破線矢印２１３が、処理を中断したパケットの入力キュー１０２への転送を表す。そして、パケット処理部１１１は、コンテンツテーブル１２１の更新エントリの更新フラグがオフになるまで、更新エントリにヒットしたパケットを入力キュー１０２へ転送する。
【０１１２】
パケット処理部１１１は、処理２１１の更新エントリにヒットしたパケットを再処理制御部１１２へ送信しつつ、不整合回避時間の間、テーブルＮ−１−ａを用いたパケットの処理２１２を継続する。この間、入力キュー１０２へ回された処理が中断されたパケットは、パイプラインの中に送られてくる。そこで、パケット処理部１１１は、入力キュー１０２から取得したパケットに通し番号が付いているか否かを判定する。通し番号が付いていなければ、パケット処理部１１１は、そのパケットに対して通常のパイプライン処理を行う。これに対して、通し番号が付いている場合、パケット処理部１１１は、デキュー停止フラグがオンであることを確認する。そして、パケット処理部１１１は、図１０の破線矢印２１４で示すように、通し番号が付いているパケットを全てのフェーズの処理をバイパスさせて、最終フェーズの後まで待機させる。その後、パケット処理部１１１は、そのパケットを再度入力キュー１０２へ転送する。図１０は、デキュー停止フラグがオンの場合の通し番号が付加されたパケットに対する処理を示す図である。このように、本実施例では、デキュー停止フラグがオンの間、パケット処理部１１１は、処理が中断されたパケットをパイプラインの中を処理を行わずに周回させる。
【０１１３】
その後、不整合回避時間が経過すると、コンテンツテーブル１７１の更新エントリの更新フラグがオンになる。そこで、パケット処理部１１１は、処理２１２における更新エントリにヒットしたパケットにテーブルの識別情報及び通し番号を付加して入力キュー１０２へ転送する。ここで、処理２１１において更新エントリにヒットしたパケットに付加する通し番号と、処理２１２において更新エントリにヒットしたパケットに付加する通し番号とは、それぞれ独立した通し番号である。この場合も、処理２１２における更新エントリにヒットしたパケットは、図１０で示すように、パイプラインの中を処理が行われずに周回する。ただし、不整合回避時間が十分であり、処理２１１と処理２１２との間にパケットが残っていなければ、パケット処理部１１１は、実際には処理２１２において更新エントリにパケットがヒットすることはない。そのため、不整合回避時間が十分であれば、パケット処理部１１１は、処理２１２において更新エントリにヒットしたパケットを入力キュー１０２へ転送しなくて済む。
【０１１４】
その後、コンテンツテーブル１７１の更新エントリが更新されると、コンテンツテーブル１７１の更新エントリの更新フラグがオフになる。そこで、パケット処理部１１１は、処理２１２に入力されたパケットに対してテーブルＮ−１−ａを用いた処理を行う状態に戻る。
【０１１５】
その後、コンテンツテーブル１２１の更新エントリが更新されると、コンテンツテーブル１２１の更新エントリの更新フラグがオフになる。そこで、パケット処理部１１１は、処理２１１に入力されたパケットに対してテーブル３−ｂを用いた処理を行う状態に戻る。
【０１１６】
その後、デキュー停止フラグがオフになると、パケット処理部１１１は、入力キュー１０２から取得したパケットの中の通し番号が付加されたパケットを特定する。そして、パケット処理部１１１は、処理２１１で処理を中断したパケットに付加した通し番号の若い順に、パケットを図１１の一点鎖線２１５で示すように処理２１１までのフェーズをバイパスさせ、処理２１１からパイプライン処理を再開する。また、パケット処理部１１１は、処理２１２で処理を中断したパケットに付加した通し番号の若い順に、パケットを処理２１２までのフェーズをバイパスさせ、処理２１２からパイプライン処理を再開する。図１１は、実施例２においてテーブル更新後の処理が中断されたパケットに対する処理の流れを説明するための図である。
【０１１７】
次に、図１２を参照して、本実施例に係るネットワークプロセッサによるテーブル更新時の処理の流れについて説明する。図１２は、実施例２に係るネットワークプロセッサによるテーブル更新時の処理のフローチャートである。
【０１１８】
スイッチ１における管理部１１は、テーブルの更新が発生すると、デキュー情報格納部１０５のデキュー停止フラグをオンにする（ステップＳ３０１）。
【０１１９】
次に、管理部１１は、フェーズが早い更新エントリの更新フラグをオンにする（ステップＳ３０２）。
【０１２０】
次に、管理部１１は、不整合回避時間経過したか否かを判定する（ステップＳ３０３）。不整合回避時間を経過していない場合（ステップＳ３０３：否定）、管理部１１は、ステップＳ３０３に戻り待機する。
【０１２１】
これに対して、不整合回避時間を経過した場合（ステップＳ３０３：肯定）、管理部１１は、フェーズが遅い更新エントリの更新フラグをオンにする（ステップＳ３０４）。
【０１２２】
次に、管理部１１は、フェーズが遅い更新エントリの内容を更新し、更新フラグをオフにする（ステップＳ３０５）。
【０１２３】
次に、管理部１１は、フェーズが早い更新エントリの内容を更新し、更新フラグをオフにする（ステップＳ３０６）。
【０１２４】
その後、管理部１１は、デキュー情報格納部１０５のデキュー停止フラグをオフにする（ステップＳ３０７）。
【０１２５】
パケット処理部１１１は、フェーズが早い更新エントリの更新フラグがオンであることを確認して、フェーズが早い更新エントリにヒットしたパケットに対する処理を中断し、テーブルの識別情報及び通し番号を付加する（ステップＳ３１１）。
【０１２６】
そして、パケット処理部１１１は、テーブルの識別情報及び通し番号を付加したパケットを入力キュー１０２へ転送する（ステップＳ３１２）。
【０１２７】
さらに、パケット処理部１１１は、不整合回避時間の間、フェーズが遅い更新エントリにヒットしたパケットに対して通常のパイプライン処理を続行する（ステップＳ３１３）。
【０１２８】
その後、パケット処理部１１１は、フェーズが遅い更新エントリの更新フラグがオンになったことを確認して、フェーズが遅い更新エントリにヒットしたパケットにテーブルの識別情報及び通し番号を付加する（ステップＳ３１４）。
【０１２９】
次に、パケット処理部１１１は、テーブルの識別情報及び通し番号を付加したパケットを入力キュー１０２へ転送する（ステップＳ３１５）。
【０１３０】
その後、パケット処理部１１１は、フェーズが遅い更新エントリの更新フラグがオフになったことを確認して、フェーズが遅い更新エントリにヒットしたパケットに対する処理を通常のパイプライン処理に戻す（ステップＳ３１６）。
【０１３１】
さらに、パケット処理部１１１は、フェーズが早い更新エントリの更新フラグがオフになったことを確認して、フェーズが早い更新エントリにヒットしたパケットに対する処理を通常のパイプライン処理に戻す（ステップＳ３１７）。
【０１３２】
その後、パケット処理部１１１は、自己が発行する通し番号を初期化する（ステップＳ３１８）。
【０１３３】
その後、パケット処理部１１１は、パケットの通し番号順に、付加された識別情報を有するテーブルまでパケットをバイパスさせ、その後通常のパイプライン処理を実行する（ステップＳ３１９）。
【０１３４】
次に、図１３を参照して、パイプラインに入力されたパケットに対する処理についてさらに説明する。図１３は、パイプラインに入力されたパケットに対する処理を表すフローチャートである。
【０１３５】
パケット処理部１１１は、デキュー情報格納部１０５を参照し、デキュー停止フラグがオンからオフに遷移したか否かを判定する（ステップＳ４０１）。
【０１３６】
デキュー停止フラグがオンである又はオフのままの場合（ステップＳ４０１：否定）、パケット処理部１１１は、ステップＳ４０３へ進む。これに対して、デキュー停止フラグがオンからオフへ遷移した場合（ステップＳ４０１：肯定）、パケット処理部１１１は、内部カウンタを動作させ、内部カウンタの値を０に設定する（ステップＳ４０２）。
【０１３７】
パケット処理部１１１は、入力キュー１０２から取得したパケットに通し番号が付加されているか否かを判定する（ステップＳ４０３）。通し番号が付加されていない場合（ステップＳ４０３：否定）、パケット処理部１１１は、そのパケットに対して通常のパイプライン処理を施す（ステップＳ４０４）。
【０１３８】
これに対して、通し番号が付加されている場合（ステップＳ４０３：肯定）、パケット処理部１１１は、通し番号が内部カウンタと一致するか否かを判定する（ステップＳ４０５）。ここで、パケット処理部１１１は、通し番号を０からふる場合で説明する。また、ステップＳ４０２で内部カウンタが動作されていなければ内部カウンタは値を持たず、その場合、パケット処理部１１１は、通し番号と内部カウンタとが一致しないと判定する。
【０１３９】
通し番号と内部カウンタの値が一致しない場合（ステップＳ４０５：否定）、パケット処理部１１１は、最終フェーズの終わりまでそのパケットをバイパスさせ入力キュー１０２へ転送する（ステップＳ４０６）。
【０１４０】
これに対して、通し番号と内部カウンタが一致する場合（ステップＳ４０５：肯定）、パケット処理部１１１は、内部カウンタを１つインクリメントする（ステップＳ４０７）。そして、パケット処理部１１１は、そのパケットに付加された識別情報を有するテーブルの処理までパケットをバイパスさせパイプライン処理を再開する（ステップＳ４０８）。
【０１４１】
以上に説明したように、本実施例に係るネットワークプロセッサは、パケットに通し番号をつけ、テーブルの更新が終わるまでパイプライン処理を行わずに巡回させ、テーブルの更新完了後、通し番号順に中断した処理からパイプライン処理を再開する。
【０１４２】
これにより、再処理用キューを新たに設けなくてもよく、コスト及びサイズを削減できる。また、入力キューサイズを回線がフルな状態に耐えうるように設計することで、通常時は入力キューに余裕ができ、テーブル更新時のパケットの廃棄を抑えることができる。
【０１４３】
また、パイプライン内のパケットメモリを最大限に活用することができ、キューの節約及びリソースの有効活用が実現できる。さらに、処理が中断されたパケットに通し番号を振ることで、再処理時に処理されるパケットの順序性を保つことができる。
【０１４４】
（変形例２）
次に、実施例２の変形例２について説明する。本変形例は、更新エントリの更新フラグがオンにされるタイミングで、更新エントリの内容が更新されることが実施例２異なる。本変形例に係るスイッチ１も図８のブロック図で表される。
【０１４５】
ここで、図１４を参照して、本変形例に係るネットワークプロセッサによるテーブル更新時の処理の流れについて説明する。図１４は、変形例２に係るネットワークプロセッサによるテーブル更新時の処理のフローチャートである。
【０１４６】
スイッチ１における管理部１１は、テーブルの更新が発生すると、デキュー情報格納部１０５のデキュー停止フラグをオンにする（ステップＳ５０１）。
【０１４７】
次に、管理部１１は、フェーズが早い更新エントリの内容を更新し、更新フラグをオンにする（ステップＳ５０２）。
【０１４８】
次に、管理部１１は、不整合回避時間経過したか否かを判定する（ステップＳ５０３）。不整合回避時間を経過していない場合（ステップＳ５０３：否定）、管理部１１は、ステップＳ５０３に戻り待機する。
【０１４９】
これに対して、不整合回避時間を経過した場合（ステップＳ５０３：肯定）、管理部１１は、フェーズが遅い更新エントリの内容を更新し、更新フラグをオンにする（ステップＳ５０４）。
【０１５０】
次に、管理部１１は、フェーズが遅い更新エントリの更新フラグをオフにする（ステップＳ５０５）。
【０１５１】
次に、管理部１１は、フェーズが早い更新エントリの更新フラグをオフにする（ステップＳ５０６）。
【０１５２】
その後、管理部１１は、デキュー情報格納部１０５のデキュー停止フラグをオフにする（ステップＳ５０７）。
【０１５３】
パケット処理部１１１は、フェーズが早い更新エントリの更新フラグがオンであることを確認して、フェーズが早い更新エントリにヒットしたパケットに対する処理を中断し、テーブルの識別情報及び通し番号を付加する（ステップＳ５１１）。
【０１５４】
そして、パケット処理部１１１は、テーブルの識別情報及び通し番号を付加したパケットを入力キュー１０２へ転送する（ステップＳ５１２）。
【０１５５】
さらに、パケット処理部１１１は、不整合回避時間の間、フェーズが遅い更新エントリにヒットしたパケットに対して通常のパイプライン処理を続行する（ステップＳ５１３）。
【０１５６】
その後、パケット処理部１１１は、フェーズが遅い更新エントリの更新フラグがオンになったことを確認して、フェーズが遅い更新エントリにヒットしたパケットにテーブルの識別情報及び通し番号を付加する（ステップＳ５１４）。
【０１５７】
次に、パケット処理部１１１は、テーブルの識別情報及び通し番号を付加したパケットを入力キュー１０２へ転送する（ステップＳ５１５）。
【０１５８】
その後、パケット処理部１１１は、フェーズが遅い更新エントリの更新フラグがオフになったことを確認して、フェーズが遅い更新エントリにヒットしたパケットに対する処理を通常のパイプライン処理に戻す（ステップＳ５１６）。
【０１５９】
さらに、パケット処理部１１１は、フェーズが早い更新エントリの更新フラグがオフになったことを確認して、フェーズが早い更新エントリにヒットしたパケットに対する処理を通常のパイプライン処理に戻す（ステップＳ５１７）。
【０１６０】
その後、パケット処理部１１１は、自己が発行する通し番号を初期化する（ステップＳ５１８）。
【０１６１】
その後、パケット処理部１１１は、パケットの通し番号順に、付加された識別情報を有するテーブルまでパケットをバイパスさせ、その後通常のパイプライン処理を実行する（ステップＳ５１９）。
【０１６２】
以上に説明したように、本変形例に係るネットワークプロセッサは、更新フラグをオンにするタイミングでテーブルの内容を更新する。このように、内容の更新タイミングは更新フラグのオンのタイミング又はオフのタイミングの何れであっても、スループットの低下を軽減しつつテーブルの更新による不整合の発生を軽減することができる。
【０１６３】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１６４】
（付記１）ネットワーク構成の変更に先立って更新されるテーブルの更新されるエントリに更新情報を付加し、ネットワーク構成の変更に伴う前記テーブルの更新が完了すると前記更新情報を削除する管理部と、
入力キューに入力されたパケットに対して、前記テーブルを用いてパイプライン処理を順番に行い、前記テーブルのエントリのいずれかに前記更新情報が付加されている場合、パイプライン処理を中断するパケット処理部と、
前記パケット処理部によるパイプライン処理が中断した場合、入力されたパケットを再処理用キューへ格納し、前記更新情報が付加された前記テーブルの更新が全て完了した場合、前記再処理用キューに格納された前記パケットを前記入力キューへ転送する再処理制御部と
を備えたことを特徴とするネットワークプロセッサ。
【０１６５】
（付記２）前記管理部は、前記テーブルの更新が行われる場合、前記再処理用キューのデキュー停止を前記再処理制御部へ通知し、前記更新情報が付加された前記テーブルの更新が全て完了した場合、前記再処理用キューのデキュー開始を前記再処理制御部へ通知し、
前記再処理制御部は、前記管理部から前記デキュー停止の通知を受けた場合、前記再処理用キューに前記パケットを保持し、前記管理部から前記デキュー開始の通知を受けた場合、前記再処理用キューに格納された前記パケットを前記入力キューへ転送する
ことを特徴とする付記１に記載のネットワークプロセッサ。
【０１６６】
（付記３）前記パケット処理部は、前記更新情報が付加された前記テーブルが複数ある場合、前記テーブルの中の前記処理の順番が最も早いテーブルにおいてパイプライン処理を中断することを特徴とする付記１又は２に記載のネットワークプロセッサ。
【０１６７】
（付記４）前記パケット処理部は、パイプライン処理の順番が最も早いテーブルの識別情報を前記パケットに付加し、前記再処理用キューから前記入力キューへ転送された前記パケットは、前記識別情報を有するテーブルまでパイプライン処理をバイパスすることを特徴とする付記３に記載のネットワークプロセッサ。
【０１６８】
（付記５）前記管理部は、前記テーブルにおいて更新されるエントリ毎に前記更新情報を付加し、
前記パケット処理部は、パイプライン処理で前記テーブル中の前記更新情報が付加されているエントリが用いられる場合に、パイプライン処理を中断し、
前記再処理制御部は、前記テーブル中の前記更新情報が付加されているエントリの更新が全て完了した場合、前記再処理用キューに格納された前記パケットを前記入力キューへ転送する
ことを特徴とする付記１〜４のいずれか一つに記載のネットワークプロセッサ。
【０１６９】
（付記６）ネットワーク構成の変更に先立って更新されるテーブルの更新されるエントリに更新情報を付加し、ネットワーク構成の変更に伴う前記テーブルの更新が完了すると前記更新情報を削除する管理部と、
入力キューに入力されたパケットに対して、前記テーブルを用いてパイプライン処理を順番に行い、前記テーブルのエントリのいずれかに前記更新情報が付加されている場合、パイプライン処理を中断し、前記パケットに通し番号を振り、前記入力キューへ転送し、前記更新情報が付加された前記テーブルの更新が全て完了した場合、前記通し番号順にパケットを処理するパケット処理部と
を備えたことを特徴とするネットワークプロセッサ。
【０１７０】
（付記７）ネットワーク構成の変更に先立って更新されるテーブルの更新されるエントリに更新情報を付加し、ネットワーク構成の変更に伴う前記テーブルの更新が完了すると前記更新情報を削除する管理部と、
入力キューに入力されたパケットに対して、前記テーブルを用いてパイプライン処理を順番に行い、前記テーブルのエントリのいずれかに前記更新情報が付加されている場合、パイプライン処理を中断するパケット処理部と、
前記パケット処理部によるパイプライン処理が中断した場合、入力されたパケットを再処理用キューへ格納し、前記更新情報が付加された前記テーブルの更新が全て完了した場合、前記再処理用キューに格納された前記パケットを前記入力キューへ転送する再処理制御部と
を備えたことを特徴とする通信装置。
【０１７１】
（付記８）入力キューに入力されたパケットに対して、テーブルを用いてパイプライン処理を順番に行い、
ネットワーク構成の変更に先立って更新されるテーブルの更新されるエントリに更新情報を付加し、
入力されたパケットに対するパイプライン処理で用いる前記テーブルのエントリに前記更新情報が付加されている場合、パイプライン処理を中断し、
パイプライン処理が中断された場合、入力されたパケットを再処理用キューへ格納し、
前記更新情報が付加された前記テーブルの更新が全て完了した場合、前記再処理用キューに格納されたパケットを前記入力キューへ転送し、
前記再処理用キューから前記入力キューへ転送されたパケットに対してパイプライン処理を再開する
ことを特徴とするパケット転送方法。
【０１７２】
（付記９）入力キューに入力されたパケットに対して、テーブルを用いてパイプライン処理を順番に行い、
ネットワーク構成の変更に先立って更新されるテーブルの更新されるエントリに更新情報を付加し、
入力されたパケットに対するパイプライン処理で用いる前記テーブルのエントリに前記更新情報が付加されている場合、パイプライン処理を中断し、
パイプライン処理が中断された場合、入力されたパケットを再処理用キューへ格納し、
前記更新情報が付加された前記テーブルの更新が全て完了した場合、前記再処理用キューに格納されたパケットを前記入力キューへ転送し、
前記再処理用キューから前記入力キューへ転送されたパケットに対してパイプライン処理を再開する
処理をコンピュータに実行させることを特徴とするパケット転送プログラム。
【符号の説明】
【０１７３】
１  スイッチ
３  端末装置
１０  データプレーン
１１  管理部
１２  ＲＡＭ
２１，２２  情報処理装置
１０１  パイプライン処理部
１０２  入力キュー
１０３  出力キュー
１０４  再処理用キュー
１０５  デキュー情報格納部
１０６  ＴＣＡＭ
１０７  ＲＡＭ
１１１  パケット処理部
１１２  再処理制御部
１２１，１７１  コンテンツテーブル
１６１  ＴＣＡＭテーブル
【図１】
0006540296.tif 000002
【図２】
0006540296.tif 000003
【図３】
0006540296.tif 000004
【図４】
0006540296.tif 000005
【図５】
0006540296.tif 000006
【図６】
0006540296.tif 000007
【図７】
0006540296.tif 000008
【図８】
0006540296.tif 000009
【図９】
0006540296.tif 000010
【図１０】
0006540296.tif 000011
【図１１】
0006540296.tif 000012
【図１２】
0006540296.tif 000013
【図１３】
0006540296.tif 000014
【図１４】
0006540296.tif 000015