(57)【要約】【課題】帯域制御を含むパケット処理の処理速度を向上させる。【解決手段】パケット処理装置は、パケットの出力処理を行うパケット処理部と、パケット処理部に入力される前の各パケットに関する情報を抽出する抽出部と、パケットがパケット処理部に入力される前に、パケットに関する情報に基づき予測される所定の処理の競合の発生を回避するための処理を実行する競合処理部と、を備える。競合処理部は、例えば、パケット処理部による格納部からの送信権の量の読出し、減算、格納部への送信権の量の書き戻しの一連の処理の競合を回避するための処理として、連続する所定数のパケットに関する情報から、同じフローに属するパケットを検出し、フローごとにパケットに関する情報をパケット処理部に通知する。【選択図】図７
2014017683.tif 000002
【特許請求の範囲】
【請求項１】
パケットの出力処理を行うパケット処理部と、
前記パケット処理部に入力される前の各パケットに関する情報を抽出する抽出部と、
パケットが前記パケット処理部に入力される前に、前記パケットに関する情報に基づき予測される所定の処理の競合の発生を回避するための処理を実行する競合処理部と、
を備えるパケット処理装置。
【請求項２】
パケットの送信権の量を格納する格納部と、
所定の周期で、前記格納部から前記送信権の量を読み出し、所定量を追加して更新し、前記格納部に書き戻す追加処理部と、
をさらに備え、
前記パケット処理部は、入力される各パケットについて、前記格納部から前記送信権の量を読み出し、出力対象のパケットのパケット長に相当する量を差し引いて更新し、前記格納部に書き戻し、
前記競合処理部は、前記所定の処理の競合としての、前記追加処理部と前記パケット処理部との少なくとも一方による前記格納部への前記送信権の量の読出し及び書込みの一連の処理の複数発生を回避するための処理を実行する、
請求項１に記載のパケット処理装置。
【請求項３】
前記格納部は、フローごとの送信権の量を格納し、
前記競合処理部は、前記抽出部によって抽出された連続する所定数のパケットに関する情報に基づき、前記所定数のパケットの一部又は全部が前記パケット処理部に入力される前に、前記所定の処理の競合としての前記パケット処理部による前記一連の処理の複数発生を回避するための処理として、前記所定数のパケットに関する情報から、同じフローに属するパケットを検出し、フローごとに前記パケットに関する情報を前記パケット処理部に通知し、
前記パケット処理部は、前記所定数のパケットにおける各フローについて、送信権を前記格納部から読出し、前記所定数のパケットにおける該当フローの合計パケット長を読み出した該当フローの送信権の量から差し引き、前記該当フローの送信権を書き戻す処理を実行し、前記所定数の各パケットが入力された場合には、前記競合処理部の処理結果に従って、前記所定数の各パケットを出力する、
請求項２に記載のパケット処理装置。
【請求項４】
前記パケット処理部は、前記所定数のパケットに関する情報に基づき、前記所定数のパケットの一部又は全部が前記パケット処理部に入力される前に、前記所定数の各パケットについて、廃棄優先度の判定を行い、前記所定数の各パケットが入力された場合には、前記競合処理部による各パケットの廃棄優先度の判定結果を、前記所定数の各パケットに付与する、
請求項３に記載のパケット処理装置。
【請求項５】
前記格納部は、フローごとの送信権の量を格納し、
前記競合処理部は、前記抽出部によって抽出されたパケットに関する情報に基づき、前記パケットが前記パケット処理部に入力される前に、前記追加処理部と前記パケット処理部とによる同一のフローの送信権に対する前記一連の処理の競合の発生が予測される場合に、前記競合を回避する処理として、前記追加処理部による処理の実行順を、前記一連の処理の競合が予測されるフローと、前記一連の処理の競合が予測されない他のフローと、で入れ替える、
請求項２から４のいずれか一項に記載のパケット処理装置。
【請求項６】
前記パケット処理部は、優先度をもつ複数のキューを備え、優先度の高いキューに格納されるパケットを優先して出力し、
前記競合処理部は、前記抽出部によって抽出されるパケットに関する情報に基づき予測される、前記所定の処理の競合としての優先度の低いパケットの読出し中における優先度の高いパケットの到着を回避する処理として、前記優先度の低いパケットの読出し中に前記優先度の高いパケットの到着が予測される場合に、前記優先度の低いパケットの読出しを行わずに、前記優先度の高いパケットの到着を待ち、前記優先度の高いパケットを優先して出力する、
請求項１に記載のパケット処理装置。
【請求項７】
前記抽出部は、抽出したパケットに関する情報を、連続する所定数のパケット分まとめて、該連続する所定数の先頭パケットより前に位置するパケットに付与して通知する、
請求項１から６のいずれか一項に記載のパケット処理装置。
【請求項８】
前記抽出部は、抽出したパケットに関する情報を、連続する所定数のパケット分まとめ、制御パケットとして、前記所定数のパケットの先頭パケットより前の所定位置に挿入することで通知する、
請求項１から６のいずれか一項に記載のパケット処理装置。
【請求項９】
前記抽出部は、前記競合処理部に接続する信号線を用いて、抽出したパケットに関する情報を通知する、
請求項１から６のいずれか一項に記載のパケット処理装置。
【請求項１０】
パケットの出力処理を行うパケット処理部を備えるパケット処理装置が、
前記パケット処理部に入力される前の各パケットに関する情報を抽出し、
パケットが前記パケット処理部に入力される前に、前記パケットに関する情報に基づき予測される所定の処理の競合の発生を回避するための処理を実行する、
をパケット処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＱｏＳ（Quality of Service）を実装するパケット処理装置に関する。
【背景技術】
【０００２】
図１は、パケット処理装置の論理構成の一例を示す図である。ルータやレイヤ２スイッチ等のパケット処理装置では、ユーザとの契約帯域に応じて、ＱｏＳを実行する。ＱｏＳには、例えば、音声等の優先度の高いパケットを優先して出力する優先制御や、出力レートを契約帯域に絞ったりする帯域制御等が含まれる。
【０００３】
帯域制御には、例えば、入力パケットに対して行われる入力制御と、出力パケットに対して行われる出力制御とがある。入力制御の一つに、例えば、ポリシングがある。ポリシングは、保証される帯域であるＣＩＲ（Committed Information Rate）を超えるレートで入力されるパケットを、例えば、廃棄する等して、パケット処理装置の出力レートを制御する方法である。ポリシングは、例えば、図１に示される、パケット処理装置の入力側インタフェースカードＰ１１に備えられるポリサによって行われる。出力制御には、例えば、スケジューリング、シェーピングがある。スケジューリングは、パケットの出力タイミングを制御する技術であって、例えば、優先度ごとのキューにキューイングされたパケットを優先度の高いキューから優先的に出力する方法がある（優先キューイング）。シェーピングは、ＣＩＲを超えるパケットをキューイングすることによって、出力レートを制御する方法である。シェーピング／スケジューリングは、例えば、図１に示される、パケット処理装置の出力側インタフェースカードＰ１２に備えられるシェーパ／スケジューラによって行われる。近年、通信量の増大に伴って、帯域制御の処理が複雑化しており、これに伴って、インタフェースカードにおいて実行される処理も複雑化している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−３３８８３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、インタフェースカードに求められる処理が複雑になる一方で、処理速度の高速化という相反することがインタフェースカードに求められており、ＱｏＳ処理に関してパケット処理装置の性能限界が課題となっている。
【０００６】
本発明の一態様は、帯域制御を含むパケット処理の処理速度を向上させるパケット処理装置及び伝送方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の態様の一つは、
パケットの出力処理を行うパケット処理部と、
前記パケット処理部に入力される前の各パケットに関する情報を抽出する抽出部と、
パケットが前記パケット処理部に入力される前に、前記パケットに関する情報に基づき予測される所定の処理の競合の発生を回避するための処理を実行する競合処理部と、
を備えるパケット処理装置である。
【０００８】
本発明の他の態様の一つは、上述したパケット処理装置が実行するパケット処理方法である。また、本発明の他の態様は、コンピュータを上述したパケット処理装置として機能
させるパケット処理プログラム、及び当該プログラムを記録したコンピュータ読み取り可能な記録媒体を含むことができる。コンピュータ等が読み取り可能な記録媒体には、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。
【発明の効果】
【０００９】
開示のパケット処理装置及びパケット処理方法によれば、帯域制御を含むパケット処理の処理速度を向上させることができる。
【図面の簡単な説明】
【００１０】
【図１】パケット処理装置の論理構成の一例を示す図である。
【図２】トークンバケツの仕組みを説明するための図である。
【図３】ポリサにおける処理の流れを説明するための図である。
【図４】第１実施形態のパケット処理装置の処理の一例を示す図である。
【図５】パケット処理装置の構成の一例を示す図である。
【図６】ＩＦカードのハードウェア構成の一例を示す図である。
【図７】ＱｏＳ回路の機能ブロック図の一例である。
【図８】パケット到着処理部によるカラー判定の実行結果を保持する実行結果テーブルの一例である。
【図９】パケットグループ情報の入力により行われる競合調停部とフロー処理部の処理のフローチャートの一例である。
【図１０】パケット到着時のパケット到着処理部の処理を示すフローチャートの一例である。
【図１１】第１実施形態のパケット到着処理の動作例を示す図である。
【図１２】第１実施形態の作用効果を説明するための図である。
【図１３】パケットグループ情報通知の変形例の一つを示す図である。
【図１４】パケットグループ情報通知の変形例の一つを示す図である。
【図１５】トークン加算処理とパケット到着処理に伴うトークン減算処理との競合を説明するための図である。
【図１６】第２実施形態におけるパケット処理装置の処理の一例を示す図である。
【図１７】トークン追加テーブルの例を示す図である。
【図１８】トークン追加処理部の、トークン追加処理とトークン減算処理との競合の発生の予測処理のフローチャートの一例である。
【図１９Ａ】トークン追加処理部が実行するトークン追加処理のフローチャートの一例である。
【図１９Ｂ】トークン追加処理実行中のトークン追加テーブルの例を示す図である。
【図２０】スケジューラの動作の一例を示す図である。
【図２１】第３実施形態のパケット処理装置の動作の一例を説明するための図である。
【図２２】ＱｏＳ回路の機能ブロック図の一例である。
【図２３】パケットスケジューラ部のスケジューリング処理のフローチャートの一例である。
【発明を実施するための形態】
【００１１】
以下、図面に基づいて、本発明の実施の形態を説明する。以下の実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
【００１２】
＜第１実施形態＞
ポリサ及びシェーパのいずれも、トークンバケツという機能を用いてパケットの転送制御を行う。
【００１３】
図２は、トークンバケツの仕組みを説明するための図である。トークンバケツＰ６０は、例えば、ポリサやシェーパに備えられている。トークンバケツＰ６０には、パケットの送信権であるトークンが溜められている。ポリサ／シェーパでは、トークンバケツＰ６０から出力パケットに相当する量のトークンを消費することによって、パケットを後段のブロックへ出力することができる。具体的には、後段のブロックへのパケットの出力処理を行うパケット処理部Ｐ５０は、パケット出力の際に、トークンバケツＰ６０に溜められるトークンの量から出力するパケット長を減算する。したがって、トークンバケツＰ６０にパケット長以上のトークンが溜められている場合には、パケットは入力可能又は出力可能となる。以降、トークンバケツに溜められるトークンの量を、トークン量、と称する。
【００１４】
トークンバケツＰ６０には、溜められる最大のトークン量が決められており、この最大トークン量の分だけパケット処理装置はバーストを許容することができる。バーストとは、例えば、端末からの大量のデータの送信等によりネットワーク内に流れる大量のデータの固まりである。また、トークンバケツＰ６０には、所定の周期で所定量のトークンが追加される。トークンが追加される周期や量は、フローに割り当てられる帯域に対応している。例えば、各フローについて帯域が設定される場合には、トークンバケツは各フローに対応して備えられる。フローとは、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号、宛先ポート番号、プロトコル等が同一であるパケット群を指す。
【００１５】
ポリシングの一例として、パケットのカラーリングがある。カラーリングとは、例えば、キューイング等の後段のブロックにおけるパケットの廃棄優先度を決定することで、マーキングとも呼ばれる。カラーリングの標準化仕様には、例えば、ＭＥＦ１０（Metro Ether Forum 10）やＲＦＣ２６９８（Request For Comment 2698）等で規定されている２レート３カラー等がある。２レート３カラーは、１つのフローにつきＣＩＲとＥＩＲ（Excess Information Rate）との２つのポリサ（トークンバケツ）を用いて、パケットをＲｅ
ｄ、Ｙｅｌｌｏｗ、Ｇｒｅｅｎの３つの色のいずれかに分けるカラーリングである。ＥＩＲは、通信に利用可能な最大の帯域を示し、ＣＩＲ＜ＥＩＲである。ＣＩＲ,ＥＩＲに対
応するトークンバケツは、それぞれ、ＣＢＳ（Committed Burst Size），ＥＢＳ(Excess Burst Size)である。廃棄優先度は、廃棄されやすさを示し、廃棄優先度の高さは、Ｒｅ
ｄ＞Ｙｅｌｌｏｗ＞Ｇｒｅｅｎである。
【００１６】
ＣＩＲ、ＥＩＲ等のネットワーク帯域の設定値に対して、入力パケットの帯域が、ＣＩＲ値未満の場合にはＧｒｅｅｎ、ＣＩＲ値以上ＥＩＲ値以下の場合にはＹｅｌｌｏｗ、ＥＩＲ値以上の場合にはＲｅｄと判定される。
【００１７】
図３は、ポリサにおける処理の流れを説明するための図である。図３では、ポリサの処理を実行するパケット到着処理部Ｐ７０における、パケットＡ１，パケットＡ２，パケットＡ３についての処理が示される。パケットＡ１，パケットＡ２，パケットＡ３は、同じフローＡに属している。また、パケットＡ１，パケットＡ２，パケットＡ３のいずれもパケット長は１００バイトとし、それぞれ２クロックの間隔でパケット処理装置に到着するものとする。
【００１８】
例えば、上述の２レート３カラーを実行するポリサでは、（１）パケット到着、（２）メモリからのトークン量読出し、（３）カラー判定及びトークン量減算の演算、（４）メモリへのトークン量の書き戻し、の順で処理が実行される。このような一連の処理にかかる演算時間は、ポリサへのパケット到着間隔に比べると長く、１パケットに対する一連の処理が終了する前に次々と新たにパケットが到着する。そのため、一つのパケットに対する一連の処理が終了してから、次のパケットの処理を行うのでは、演算による遅延が大きくなってしまう。そこで、ポリサでは、パイプラインと呼ばれる演算処理が行われる。パ
イプラインは、例えば、上記の（１）−（４）の一連の処理を行うように組み込まれた回路である。パイプラインは複数段備えられ、各パイプラインは、所定時間、例えば、パケットの到着間隔ずつずらしたタイミングで、処理を開始する。到着したパケットは、次に処理を開始するパイプラインに割り当てられる。また、ポリサでは、フローに関係なく、１つのパケットにつき１つのパイプラインが用いられる。
【００１９】
パイプラインの段数は、例えば、１つのパイプラインにかかる演算時間と、パケットの到着間隔に応じて決定される。例えば、１つのパイプラインにかかる演算時間が１２クロックであり、パケットの到着間隔が２クロックである場合には、パイプラインの処理開始タイミングは２クロックずつずれるので、パイプラインの段数は６段になる。例えば、６段のパイプライン＃１−＃６とすると、＃１→＃２→＃３→＃４→＃５→＃６→＃１．．．の順番で各パイプラインの処理が開始される。
【００２０】
図３では、パケット到着処理Ｐ７０に到着するパケットは、次に処理を開始するパイプラインに割り当てられている。図３では、パケットＡ１はパイプライン１，パケットＡ２はパイプライン２，パケットＡ３はパイプライン３に割り当てられる例が示される。
【００２１】
パイプライン１では、パケットＡ１が到着した後（処理（１））、メモリからフローＡのトークン量が読み出される（処理（２））。このとき、パイプライン１において、メモリから読み出されたフローＡのトークン量は１０００バイトであったとする。次に、パイプライン１では、パケットＡ１のカラー判定とトークン減算が行われ（処理（３））、パケットＡ１がパケット到着処理部Ｐ７０から出力される。このとき、処理（２）において読み出されたトークン量（１０００バイト）からパケットＡ１のパケット長分（１００バイト）が減算され、フローＡのトークン量は９００バイトになる。このフローＡのトークン量９００バイトがメモリに書き戻される（処理（４））。
【００２２】
パイプライン２では、パイプライン１より２クロック遅れで、処理が開始され、パケットＡ２が到着し（処理（１））、メモリからフローＡのトークン量の読出し（処理（２））が行われる。ここで、パイプライン１で処理されるパケットＡ１とパイプライン２で処理されるパケットＡ２とは同じフローＡに属するパケットであるので、同じトークンバケツが用いられる。また、パイプライン２は、パイプライン１から２クロック遅れ（ずれ）で並行して実行されており、１つのパイプラインの完了までにかかる時間はパイプライン１とパイプライン２とのずれ（２クロック）よりも大きい。そのため、パイプライン２のトークン量の読み出し（処理（２））は、パイプライン１によるトークン量の書き戻し（処理（４））の完了前に行われる。したがって、パイプライン２の処理（２）で読み出されるフローＡのトークン量は、パイプライン１によるトークン量の書き戻し（処理（４））前の、１０００バイトとなる。しかしながら、パイプライン２がフローＡのトークン量を取得した時点では、パイプライン１によるトークン減算が行われており、実際のフローＡのトークン量は９００バイトになっている。すなわち、パイプライン２が処理（２）によって取得したフローＡのトークン量（１０００バイト）は、最新のものではなく、実際のフローＡのトークン量（９００バイト）とは異なり、陳腐化したものとなってしまう。
【００２３】
そのため、各パイプラインでは、トークン量を含む演算データをキャッシュに保持し、他のパイプラインへと受け渡す。演算データを受け取ったパイプラインでは、他のパイプラインから受け取った演算データの中から同じフローの最新のデータを判別し、該演算データを用いて演算する。例えば、各パイプラインによってキャッシュに保持される情報には、パイプラインが処理するパケットが属するフローの識別情報（フローＩＤ）、演算データとしての該当するフローのトークン量等が含まれている。キャッシュデータを受け渡されたパイプラインでは、例えば、自パイプラインとキャッシュデータの生成元となるパイプラインとの相対的な位置関係から、同じフローの最新のキャッシュデータが判別され
る。具体的には、自パイプラインの処理の開始前の最も近い時間に処理が開始される、同じフローのパケットを処理するパイプラインによって保持されたキャッシュデータが同じフローの最新のキャッシュデータとして判別される。
【００２４】
例えば、パイプラインが６段であり、パイプライン＃１−＃６がこの順番で処理を開始する場合について説明する。パイプライン＃４がパイプライン＃１−＃３から受け取ったキャッシュデータが同じフローのものであれば、パイプライン＃４の処理の開始より前において、最も近い時間に処理が開始されているパイプライン＃３のキャッシュデータが最新と判別される。また、パイプライン＃４がメモリから読み出したトークン量については、他のパイプラインから受け取ったキャッシュデータがある場合には、他のパイプラインから受け取ったキャッシュデータが優先される。
【００２５】
図３に示される例においては、情報の整合性のために、パイプライン１は、フローＡのトークン量９００バイトを含む演算データをキャッシュに保持することによって、他のパイプラインに渡す。パイプライン２では、メモリから読み出したフローＡのトークン量（１０００バイト）とパイプライン１によってキャッシュに保持されたフローＡのトークン量（９００バイト）とのいずれが最新であるかを判定し、演算データ（トークン量）の取捨選択を行う。この場合には、パイプライン１の演算データに含まれるフローＡのトークン量（９００バイト）が優先されるため、パイプライン２では、パイプライン１によってキャッシュに保持されたフローＡのトークン量を用いてカラー判定とトークン減算とが行われる（処理（３））。パイプライン２では、パイプライン１によってキャッシュに保持されたフローＡのトークン量（９００バイト）からパケットＡ２のパケット長分（１００バイト）が減算される。結果、フローＡのトークン量は８００バイトになる。パイプライン２では、フローＡのトークン量は８００バイトでメモリに書き戻される（処理（４））。
【００２６】
パイプライン３においても同様の処理が実行される。パイプライン３には、パイプライン１によってキャッシュに保持された演算データと、パイプライン２によってキャッシュに保持された演算データとが渡される。パイプライン３で取り扱われるパケットＡ３もパケットＡ１及びパケットＡ２と同じフローＡのパケットである。そのため、パイプライン３では、キャッシュに保持されたパイプライン１の演算データとパイプライン２の演算データと、メモリから読み出したトークン量の中から、パイプライン２の演算データ（トークン量８００バイト）が最新であると判別される。パイプライン２は、パイプライン３の処理の開始より前において、最も近い時間に処理を開始しているパイプラインだからである。パイプライン３では、パイプライン２の演算データ（トークン量８００バイト）からパケットＡ３のパケット長分（１００バイト）減算されたトークン量（７００バイト）がメモリに書き戻される。
【００２７】
以上のように、ポリサでは、フローに関係なく、１つのパケットにつき１つのパイプラインを用いて演算が行われる。そのため、同じフローに属するパケットを処理するパイプラインが複数存在する場合には、該パイプライン間で、同じメモリの値（トークンバケツ）の読み出し、変更、書き戻しの一連の処理が競合する。これによって、各パイプラインがメモリから取得するトークン量と、その時点での実際のトークン量とに齟齬が生じる。この齟齬を解消するため、各パイプラインは演算データ（トークン量）をキャッシュに保持し、パイプライン間で演算データの受け渡しを行い、使用する演算データ（トークン量）の取捨選択が行われる。これにより、演算回路の規模の拡大や、パケット処理装置の動作速度が低下してしまうおそれがある。
【００２８】
第１実施形態のパケット処理装置では、１つのパケットにつき１パイプラインが割り当てられるのではなく、所定数の連続するパケットにおける１フローにつき１つのパイプラ
インが割り当てられる。以下、第１実施形態のパケット処理装置について詳しく説明する。
【００２９】
図４は、第１実施形態のパケット処理装置の処理の一例を示す図である。図４では、インタフェースカードのポリサに係る処理について示されている。パケット到着処理部１０６は、ポリシングを行う処理部である。第１実施形態では、まず、（１）パケット到着処理部１０６への入力前に、各パケットから情報が抽出される。抽出される情報は、例えば、該パケットが属するフローのＩＤ，パケット長等である。次に、（２）所定数の連続するパケットから抽出された情報が一つにまとめられ、例えば、一つにまとめられた情報は、該所定数の連続するパケットよりも前に位置するパケットの内部ヘッダに付与される。内部ヘッダは、パケット処理装置内でのみ有効なヘッダである。また、（３）パケットには所定の遅延が挿入される。これによって、該所定数の連続するパケットがパケット到着処理部１０６に入力される前に、該所定数の連続するパケットの情報が取得される。
【００３０】
該所定数のパケットの情報に基づき、同じメモリの値（トークンバケツ）に対する、読み出し、変更、書き戻しの一連の処理の競合を回避するための処理が実行される。同じメモリの値（トークンバケツ）に対する、読み出し、変更、書き戻しの一連の処理を、以降、“メモリに対する一連の処理”と称する。また、メモリに対する一連の処理の競合とは、第１実施形態では、同じフローのトークンバケツに対する上記一連の処理が並行して複数存在すること、である。例えば、図３に示される例において、複数のパイプラインが並行して同じフローのパケットを処理すること、である。メモリに対する一連の処理の競合を回避するための処理は、例えば、該所定数のパケットのパケット到着処理部１０６への入力よりも前に取得される該所定数のパケットの情報に基づいて、該所定数のパケットにおける同じフローに属するパケットの演算をまとめて実行することである。演算は、例えば、パケットのカラー判定や、トークン減算等である。
【００３１】
所定数の連続するパケットについて、パケット到着処理部１０６への入力前に、同じフローに属するパケットの演算をまとめて実行することによって、同じフローに属するパケット間でのメモリに対する一連の処理の競合を回避することができる。
【００３２】
＜パケット処理装置の構成＞
図５は、パケット処理装置１００の構成の一例を示す図である。パケット処理装置１００は、例えば、ルータ，スイッチ等の装置である。ただし、これに限られず、パケット処理装置１００は、ルータ、スイッチ等に含まれるインタフェースカードであってもよい。第１実施形態では、パケット処理装置１００は、ルータ、スイッチ等の装置であるとして説明する。パケット処理装置１００は、複数のＩＦカード１と、各ＩＦカード１間でパケットを中継するＳＷカード２と、パケット処理装置１００の各カードの制御を行う制御カード３とを含む。ポリサ，シェーパ，スケジューラ等のＱｏＳの機能は、ＩＦカード１に備えられる。
【００３３】
図６は、ＩＦカード１のハードウェア構成の一例を示す図である。ＩＦカード１は、ＰＨＹ／ＭＡＣ（PHYsical layer/MAC layer）回路１１，メモリ１２，データ処理用プロセッサ１３，制御用プロセッサ１４，複数のポート１５，ＱｏＳ回路１６を備える。複数のポート１５は、ＰＨＹ／ＭＡＣ回路１１に接続されている。ＰＨＹ／ＭＡＣ回路１１と、メモリ１２と、データ処理用プロセッサ１３と、制御用プロセッサ１４と、ＱｏＳ回路１６とは、データ用バス１７と制御用バス１８とにそれぞれ接続されている。図６中では、データ用バスは実線で、制御用バスは点線で示されている。なお、図６において、アドレス用バスは省略されている。
【００３４】
ＰＨＹ／ＭＡＣ回路１１は、各ポート１５から入力される受信フレームの物理レイヤの
終端処理とＭＡＣレイヤの終端処理とを行う。メモリ１２は、例えば、ＳＲＡＭ(Static Random Access Memory)やＤＲＡＭ(Dynamic Random Access Memory)等の揮発性のメモリ
と、ＰＲＯＭ(Programmable Read Only Memory)等の不揮発性のメモリと、が含まれる。
メモリ１２には、各種プログラムやデータが記憶されている。
【００３５】
データ処理用プロセッサ１３は、例えば、ＮＰＵ（Network Processing Unit）やデー
タ通信プロセッサ等の、通信にかかるデータの処理を行うプロセッサである。データ処理用プロセッサ１３は、ＰＨＹ／ＭＡＣ回路１１によって符号化されたフレーム，ＳＷカード２から転送されてきたフレームを処理する。制御用プロセッサ１４は、例えば、ＣＰＵ（Central Processing Unit）である。制御用プロセッサ１４は、ＰＨＹ／ＭＡＣ回路１
１，メモリ１２，データ処理用プロセッサ１３，ＱｏＳ回路１６の管理を行う。
【００３６】
ＱｏＳ回路１６は、例えば、入力側の機能としてポリサ回路，出力側の機能としてシェーパ回路，スケジューラ回路等を備える。ポリサ回路，シェーパ回路，スケジューラ回路は、例えば、ＦＰＧＡ（Field Programmable Gate Array）やＡＳＩＣ（Application Specific Integrated Circuit）である。
【００３７】
ＩＦカード１に含まれる、ＰＨＹ／ＭＡＣ回路１１，メモリ１２，データ処理用プロセッサ１３，制御用プロセッサ１４，ＱｏＳ回路１６のそれぞれは、個別のデバイスまたはチップであってもよい。また、ＩＦカード１は、これら回路及びデバイスを有する１つ又は複数のＬＳＩ（Large Scale Integration）であってもよい。
【００３８】
また、ＩＦカード１のハードウェア構成は、図６に示されるものに限られず、適宜、追加，削除，置換が行われてもよい。制御用プロセッサ１４とデータ処理用プロセッサ１３とは、双方として機能する１つのプロセッサであってもよい。
【００３９】
図７は、ＱｏＳ回路１６の機能ブロック図の一例である。図７では、ＱｏＳ回路１６のうち、入力側のポリサの機能を果たすブロックについて示されている。ＱｏＳ回路１６は、パケット情報抽出部１０１，パケット情報付与部１０２，遅延挿入部１０３，トークン追加処理部１０４，競合調停部１０５，パケット到着処理部１０６を含む。これらは、それぞれ電気又は電子回路，ＦＰＧＡ，ＡＳＩＣ等によって実現される。これらの機能ブロックは一例であり、適宜、組み合わせて複数の機能ブロックを１つの機能ブロックとしてもよい。また、これらの機能ブロックは、全ての機能ブロックを含む１つの回路として構成されてもよい。また、２つ以上の機能ブロックを組み合わせて複数のブロックを作り、各ブロックを１つのＦＰＧＡやＡＳＩＣにより構成してもよい。例えば、パケット情報抽出部１０１，パケット情報付与部１０２，遅延挿入部１０３を１つのＦＰＧＡやＡＳＩＣにより構成し、トークン追加処理部１０４，競合調停部１０５，パケット到着処理部１０６を別の１つのＦＰＧＡやＡＳＩＣにより構成してもよい。
【００４０】
パケット情報抽出部１０１は、ＩＦカード１に到着する各パケットから情報を抽出する。この抽出された情報を以降、“パケット情報”と称する。パケット情報は、例えば、フローＩＤ，パケット長を含む。フローＩＤは、フローの識別情報であって、例えば、パケットの内部ヘッダに格納されている。パケット長は、パケットのサイズであって、例えば、パケットヘッダのパケット長フィールド，内部ヘッダ等に格納されている。抽出されたパケット情報は、パケット情報付与部１０２に出力される。また、パケットは、遅延挿入部１０３に入力される。パケット情報抽出部１０１は、「抽出部」の一例である。
【００４１】
パケット情報付与部１０２は、パケット情報抽出部１０１から入力されるパケット情報を、連続する所定数のパケット分まとめ、該連続する所定数のパケットよりも所定数前のパケットの、例えば、内部ヘッダに付与する。連続する所定数のパケットを、以降“パケ
ットグループ”と称する。また、パケットグループに含まれる各パケットのパケット情報をまとめた情報を、以降、“パケットグループ情報”と称する。パケットの内部ヘッダは、入力側のＩＦカードでＱｏＳ回路の入力前に付与され、入力側のＩＦカード又は出力側のＩＦカードで取り除かれる、パケット処理装置内で有効なヘッダである。内部ヘッダには、例えば、パケット処理装置１００内のパケットの転送先となるＩＦカード番号及びポート番号，パケット長，フローＩＤ，キューＩＤ等の情報が含まれている。
【００４２】
パケットグループ情報が内部ヘッダに付与されるパケットには、パケットグループ情報に加えて、パケットグループの先頭パケット位置も付与される。先頭パケット位置は、パケットグループ情報が付与されるパケットからのパケットグループの先頭パケットの位置を示す情報である。例えば、先頭パケット位置は、パケットグループ情報が付与されるパケットからパケットグループの先頭パケットまでに含まれるパケット数で示される。例えば、図７で示される例では、パケットグループ情報はパケットグループの先頭パケットよりも５つ前のパケットに付与されるので、先頭パケット位置は、５となる。
【００４３】
パケットグループに含まれるパケットの数は、例えば、パイプラインの段数に依存して決定される。また、パケットグループ情報は、例えば、パケットグループの先頭パケットからパケットグループに含まれるパケット数分前のパケットに付与される。
【００４４】
例えば、パイプラインが６段の場合には、最大６つのフローまで並行して処理できるので、パケットグループに含まれるパケットの数は６つになる。パケットグループに含まれるパケット数が６つの場合には、該パケットグループの情報は、例えば、該パケットグループの先頭パケットから６つ前のパケットに付与される。この場合には、パケットグループの先頭パケット位置は「６」となる。ただし、これに限られず、パケットグループ情報は、パケットグループの先頭パケットが到着するまでに少なくとも該先頭パケットのカラー判定等を完了できる時間が確保できるくらいに前のパケットに付与されればよい。
【００４５】
パケットグループ情報には、例えば、パケットグループに含まれる各パケットのパケット情報（フローＩＤ、パケット長）に加えて、オフセットが含まれる。オフセットは、パケットグループにおける先頭パケットからの位置を示し、先頭パケットを０とする。例えば、オフセットが３のパケットは、パケットグループの先頭から４個目のパケットであることが示される。
【００４６】
遅延挿入部１０３は、パケットグループに含まれるパケット数にパケットグループ情報が付与されるパケットとパケットグループの先頭パケットとの間に含まれるパケット数を加算した分の固定遅延を入力パケットに挿入する。遅延挿入部１０３は、例えば、ＦＩＦＯ（First In First Out）キューである。遅延挿入部１０３による固定遅延は、１つのパケットグループに含まれる全パケットのパケット情報の抽出と、該パケットグループのパケット到着処理部１０６への到着に先行するパケットグループ情報の通知のための遅延である。例えば、パケットグループに含まれるパケット数が５個で、パケットグループの先頭パケットから５つ前のパケットにパケットグループ情報が付与される場合には、遅延挿入部１０３は９個分の固定遅延を入力パケットに挿入する。遅延挿入部１０３から出力されたパケットはパケット到着処理部１０６に入力される。
【００４７】
トークン追加処理部１０４は、各フローに対して設けられるトークンバケツに所定周期で所定量のトークンを追加する。また、例えば、２レート３カラーのポリシングが実行される場合には、各フローに対して、ＣＩＲ用とＥＩＲ用の２つのトークンバケツが設けられる。なお、トークンバケツは仮想的なものであって、実際には、後述のトークン格納部１０７に相当するメモリに各トークンバケツのトークン量が格納されている。トークン追加処理部１０４は、「追加処理部」の一例である。
【００４８】
トークン格納部１０７は、各トークンバケツのトークン量を格納する。トークン格納部１０７は、例えば、ＱｏＳ回路１０６に備えられる揮発性のメモリであって、各トークンバケツのトークン量は、それぞれに割り当てられたメモリの記憶領域に格納されている。第１実施形態では、トークン追加処理部１０４及びパケット到着処理部１０６は、トークン格納部１０７に格納されるトークン量を読出し、トークン量を加算又は減算し、トークン格納部１０７に書き戻す処理を行う。トークン格納部１０７は、「格納部」の一例である。
【００４９】
パケット到着処理部１０６は、フロー処理部１０６Ａとパケット処理部１０６Ｂとを含む。フロー処理部１０６Ａは、フロー毎にトークン減算処理とカラー判定処理とを行うパイプラインを複数含む。具体的には、フロー処理部１０６Ａのパイプラインは、カラー判定処理として、例えば、２レート３カラーポリシングを実行することによってパケットのカラーを判定する。また、フロー処理部１０６Ａのパイプラインは、トークン減算処理として、例えば、トークン格納部１０７から該当するフローのトークンバケツのトークン量を読み出し、読み出したトークン量からパケット長分のトークンを減算し、再びトークン格納部１０７に書き戻す。パケットグループに含まれる各パケットについてのカラー判定の実行結果は、例えば、実行結果テーブル（後述）に保持される。
【００５０】
パケット処理部１０６Ｂは、フロー処理部１０６Ａの処理結果、すなわち、実行結果テーブルに基づいて、到着したパケットにカラー判定結果を付与し、後段のブロックに出力する。パケット到着処理部１０６は、「パケット処理部」の一例である。
【００５１】
競合調停部１０５は、パケット到着処理部１０６に入力する前のパケットグループ情報が付与されたパケットを検出し、該パケットからパケットグループ情報を取得する。例えば、競合調停部１０５は、パケット到着処理部１０６に接続するデータ信号線にバス接続しており、パケット到着処理部１０６に入力されるパケットのコピーを取得する。これによって、競合調停部１０５は、パケット到着処理部１０６に入力されるパケットの中から、パケットグループ情報が付加されたパケットを検出し、パケットグループ情報を取得する。
【００５２】
競合調停部１０５は、パケットグループ情報を取得すると、パケットグループ内の各フローを、フロー処理部１０６Ａのパイプラインへ割り当て、割り当てたフローに含まれるパケットのパケット情報をフロー処理部１０６Ａの各パイプラインに渡す。競合調停部１０５は、「競合処理部」の一例である。
【００５３】
図８は、フロー処理部１０６Ａによるカラー判定の実行結果を保持する実行結果テーブルの一例である。実行結果テーブルは、例えば、パケット到着処理部１０６に対応するハードウェアに備えられるメモリに格納される。実行結果テーブルには、例えば、１つのパケットグループに含まれる各パケットの、オフセット，フローＩＤ，パケット長，演算実行済み，カラー判定結果のフィールドが含まれる。このうち、オフセット，フローＩＤ，パケット長は、パケットグループ情報により取得される情報である。演算実行済みは、カラー判定及びトークン減算が終了したか否かが示される。演算実行済みのフィールドが「済」である場合には、該パケットについてのカラー判定及びトークン減算の処理は実行済みであることが示される。カラー判定結果には、該パケットのカラー判定結果が格納される。図８では、２レート３カラーポリシングが実行される場合のテーブルの例が示されており、実行済みのフィールドが「済」である場合には、カラー判定結果には、「Ｇｒｅｅｎ」、「Ｙｅｌｌｏｗ」、「Ｒｅｄ」のいずれかが格納されている。
【００５４】
実行結果テーブルは、例えば、競合調停部１０５が、新たにパケットグループ情報を取
得し、フロー処理部１０６Ａが該パケットグループ情報に基づいてカラー判定及びトークン減算処理を実行すると、該当するオフセットのエントリが上書きされて更新される。
【００５５】
図９は、パケットグループ情報の入力により行われる競合調停部１０５とフロー処理部１０６Ａの処理のフローチャートの一例である。図９に示されるフローチャートは、競合調停部１０５がパケットグループ情報を取得するたびに実行される。また、図９に示されるフローチャートは、２レート３カラーポリシングが実行される場合について示される。ただし、実行されるポリシングは、２レート３カラーポリシングに限られない。
【００５６】
ＯＰ１では、競合調停部１０５は、パケットグループ情報から、パケットグループに含まれるフローと、各フローに属するパケットとを、検出する。競合調停部１０５は、パケットグループに含まれるフローを、フロー処理部１０６Ａの各パイプラインに割り当て、各パイプラインに、担当フローに属するパケットのパケット情報を渡す。なお、パケットグループに含まれるパケットが属するフローの数と、フロー処理部１０６Ａのパイプラインの段数とは、同じとは限らず、フローの数の方が少ない場合がある。フローの数の方が少ない場合には、フローの数に相当するパイプラインが用いられ、用いられないパイプラインも存在する。
【００５７】
以降説明されるＯＰ２−ＯＰ８の処理は、フローが割り当てられたフロー処理部１０６Ａのパイプラインにおいて実行される処理を示し、パケットグループに含まれるフロー数Ｆｌｗと同じ回数実行される。ただし、パイプライン処理のため、ＯＰ２−ＯＰ８の処理は、並行して実行される。図９中の変数Ｆｌｗは、パケットグループに含まれるフローに対して、例えば、パケットグループにおいて出現した順番に、０から割り当てられた番号を示す変数であって、初期値は０である。また、変数Ｆｌｗは、０≦Ｆｌｗ≦パイプラインの段数Ｓの整数である。
【００５８】
ＯＰ２では、フロー処理部１０６Ａのパイプラインは、担当フローに属するパケットの数Ｎを取得する。Ｎは、０＜Ｎ≦パケットグループに含まれるパケット数である。該当パイプラインの担当フローに属するパケットの数は、例えば、ＯＰ１において渡されるパケット情報の数により取得される。また、該当パイプラインの担当フローに属するパケットの数は、ＯＰ１において、パケット情報とともに渡されてもよい。
【００５９】
次に、ＯＰ３では、フロー処理部１０６Ａのパイプラインは、担当フローのトークン量をトークン格納部１０７から読み出し、例えば、キャッシュに保持する。
【００６０】
以降、トークン減算，カラー判定の処理であるＯＰ４−ＯＰ６の処理が、担当フローに属するパケットのパケット情報に基づいて、担当フローに属するパケットの数Ｎと同じ回数繰り返される。ＯＰ４−ＯＰ６において、処理の対象となるパケットを処理対象パケットｉと称する。変数ｉは、該当パイプラインに割り当てられたフローに属するパケットのオフセットが小さいパケットから順番に割り当てられた番号を示し、０≦ｉ＜Ｎの変数である。
【００６１】
ＯＰ４では、フロー処理部１０６Ａのパイプラインは、例えばキャッシュに保持される該当フローのトークン量と処理対象パケットｉのパケット長とを比較する。次に、処理がＯＰ５に進む。
【００６２】
ＯＰ５では、フロー処理部１０６Ａのパイプラインは、ＯＰ４におけるトークン量と処理対象パケットｉのパケット長との比較結果に基づき、カラー判定及びトークン減算を行う。カラー判定は、例えば、具体的には、以下の通りである。処理対象パケットｉのパケット長＜ＣＢＳのトークン量である場合には、フロー処理部１０６Ａのパイプラインは、
処理対象パケットｉのカラーをＧｒｅｅｎと判定する。ＣＢＳのトークン量＜処理対象パケットｉのパケット長＜ＥＢＳのトークン量である場合には、フロー処理部１０６Ａのパイプラインは、処理対象パケットｉのカラーをＹｅｌｌｏｗと判定する。ＥＢＳのトークン量＜処理対象パケットｉのパケット長である場合には、競合調停部１０５は、処理対象パケットｉのカラーをＲｅｄと判定する。トークン減算の処理では、フロー処理部１０６Ａのパイプラインは、例えばキャッシュに保持されるトークン量から処理対象パケットｉのパケット長を減算する。
【００６３】
ＯＰ６では、フロー処理部１０６Ａのパイプラインは、処理対象パケットｉのカラー判定結果を、例えば、実行結果テーブルの対応するオフセットのフィールドに記録する。この後、該当パイプラインに割り当てられたフローに属するパケットで、カラー判定及びトークン減算の処理が未実行のパケットが残っている場合には、ＯＰ４からＯＰ６の処理が繰り返し実行される。該当パイプラインに割り当てられたフローに属するパケット全てについて、カラー判定及びトークン減算の処理が実行された場合には、処理がＯＰ７に進む。
【００６４】
ＯＰ７では、フロー処理部１０６Ａのパイプラインは、例えば、キャッシュに保持されるトークン量をトークン格納部１０７に書き戻す。このとき書き戻されるトークン量は、ＯＰ３においてトークン格納部１０７から読み出されたトークン量から、該当パイプラインに割り当てられたフローに属するパケットのパケット長の合計を減算した値となる。次に処理がＯＰ８に進む。
【００６５】
ＯＰ８では、フロー処理部１０６Ａのパイプラインは解放される。具体的には、例えば、フロー処理部１０６Ａのパイプラインは、ＯＰ２−ＯＰ７のパイプライン処理で用いられたキャッシュを解放する。その後、図９に示される処理が終了する。
【００６６】
図１０は、パケット到着時のパケット処理部１０６Ｂの処理を示すフローチャートの一例である。図１０に示されるフローチャートは、パケット到着処理部１０６にパケットが到着する度に実行される。
【００６７】
ＯＰ１１では、パケット処理部１０６Ｂは、到着パケットに該当するオフセットのカラー判定結果を実行結果テーブルから読み出し、該カラー判定結果を到着パケットの内部ヘッダに付与する。その後、処理がＯＰ１２に進み、ＯＰ１２では、パケット処理部１０６Ｂは、到着パケットを次のブロックに出力する。その後、図１０に示される処理が終了する。
【００６８】
図１１は、第１実施形態のパケット到着処理の動作例を示す図である。図１１に示される例では、１つのパケットグループは５つのパケットを含む。また、図１１では、パケットＡ１，パケットＡ２，パケットＢ１，パケットＣ１，パケットＡ３をこの順番で含むパケットグループが処理される例について示される。したがって、パケットＡ１をオフセット０として、パケットＡ２，パケットＢ１，パケットＣ１，パケットＡ３は、それぞれ、オフセット１−４である。
【００６９】
また、パケットＡ１，パケットＡ２，パケットＡ３は同じフローＡに属する。パケットＢ１は、フローＢに属する。パケットＣ１はフローＣに属する。パケットＡ１は、１００バイト、パケットＡ２は５０バイト、パケットＡ３は５０バイトであるとする。また、図１１に示される例において、パケットグループ情報は、パケットグループの先頭パケットＡ１より５つ前のパケットに付与されるものとする。
【００７０】
競合調停部１０５は、パケットグループ情報を取得すると、パケットグループに含まれ
るフローをそれぞれフロー処理部１０６Ａのパイプラインに割り当てる。例えば、競合調停部１０５は、パケットグループに含まれるフローＡをパイプライン１に、フローＢをパイプライン２に、フローＣをパイプライン３に割り当てる（図９のＯＰ１）。パイプライン１には、パケットＡ１、パケットＡ２、パケットＡ３のパケット情報が渡される。パイプライン２には、パケットＢ１のパケット情報が渡される。パイプライン３には、パケットＣ１のパケット情報が渡される。
【００７１】
パイプライン１では、担当フローであるフローＡのトークン量がトークン格納部１０７から読み出される（処理（１）、処理（２）、図９のＯＰ２、ＯＰ３）。このとき読み出されたトークン量は１０００バイトであるとする。
【００７２】
パケットＡ１は、フローＡに属する。このフローＡには、パケットＡ２、パケットＡ３も属する。したがって、パイプライン１では、フローＡのトークン量（１０００バイト）から、パケットＡ１（１００バイト），パケットＡ２（５０バイト），パケットＡ３（５０バイト）の合計パケット長（２００バイト）が減算される（処理（３）、図９のＯＰ４−ＯＰ６）。また、パイプライン１では、パケットＡ１、パケットＡ２、パケットＡ３のカラー判定が行われる。次に、パイプライン１では、トークン格納部１０７にトークン量（８００バイト）が書き戻される（処理（４）、図９のＯＰ７）。
【００７３】
その後、パケット到着処理部１０６にパケットＡ１が到着したときには、パケットＡ１についてのトークン減算及びカラー判定は、既に実行されているので、パケット到着処理部１０６は、カラー判定の結果をパケットＡ１の内部ヘッダに付与して出力する（図１０のＯＰ１１−ＯＰ１２）。パケットＡ２及びパケットＡ３が到着した時にも、同様に、パケット到着処理部１０６は、実行結果テーブルを参照し、カラー判定の結果をパケットＡ２及びパケットＡ３の内部ヘッダに付与して出力する。
【００７４】
上述のように、フローＡに属するパケットＡ１，パケットＡ２，パケットＡ３のトークン減算及びカラー判定は、一つのパイプラインで処理される。同様に、パケットＢ１、パケットＣ１についても、それぞれ、一つのパイプラインで処理される。
【００７５】
＜第１実施形態の作用効果＞
図１２は、第１実施形態の作用効果を説明するための図である。第１実施形態のパケット処理装置１００では、入力パケットの情報が抽出され、パケット到着処理部１０６に入力される前に、所定数の入力パケットの情報（パケットグループ情報）が競合調停部１０５に通知される。競合調停部１０５は、該所定数のパケット（パケットグループ）に含まれるフローをフロー処理部１０６Ａのパイプラインに割り当て、各フローに含まれるパケットのパケット情報を該当のパイプラインに渡す。フロー処理部１０６Ａの各パイプラインは、パケット到着処理部１０６への到着前に、該所定数のパケットの情報（パケットグループ情報）を用いて、該所定数のパケットについてのトークン減算及びカラー判定を行う。これによって、トークン量の読出し、変更、書き戻しの一連の処理の競合を回避することができる。
【００７６】
また、フロー毎にトークン減算及びカラー判定が行われるため、使用されるパイプラインは、パケットグループに含まれるフローの数となる。図１２に示される例では、オフセット０，１，３のパケットは同じフローＡに属し、オフセット２のパケットはフローＢ，オフセット４のパケットはフローＣ，オフセット５のパケットはフローＤに属する。したがって、図１２に示される例では、フロー処理部１０６Ａのパイプラインはパケットグループに含まれるフローの数と同じ４つが用いられる。
【００７７】
したがって、第１実施形態では、１フローに対して１つのパイプラインが用いられるの
で、１パケットに対して１パイプラインが用いられる場合のパイプライン間でのキャッシュデータの受け渡し及び各パイプラインにおけるキャッシュデータの保持がなくなる。また、１パケットに対して１パイプラインが用いられる場合のキャッシュデータを受け取る側のキャッシュデータの取捨選択も行われない。これらの、キャッシュデータの保持、受け渡し、取捨選択の処理に要する論理回路が使用されなくなるため、第１実施形態のパケット処理装置１００では、回路規模を低減することができる。また、メモリ読出遅延によるパイプライン間のキャッシュデータの受け渡し及び取捨選択がないため、デバイスをより高クロックで、すなわち、高速に動作させることができる。
【００７８】
また、一つのパイプラインの演算処理（トークン読出しからトークン減算、カラー判定、トークンの書き戻しまでの処理）にかかる処理時間をＸクロックとし、パケット到着間隔を２クロックとすると、パイプラインの数はＸ／２となる。したがって、パケットグループに含まれる最大のパケット数はＸ／２となる。第１実施形態において、遅延挿入部１０３として用いられるＦＩＦＯキューは、パケットグループに含まれるパケット数＋先頭パケットからパケットグループ情報が付与されるパケットまでのパケット数分が溜められれば良い。そのため、遅延挿入部１０３として用いられるＦＩＦＯキューのメモリ規模は小さく、パケット処理装置１００の回路規模は、低減される。なお、第１実施形態において説明された技術は、ポリサに限らず、例えば、スケジューラやシェーパなどのパイプライン処理を行うものに適用可能である。
【００７９】
＜パケットグループ情報通知の変形例＞
第１実施形態では、パケットグループ情報は、パケットグループの先頭パケットより前に存在するパケットの内部ヘッダに付与されて、競合調停部１０５に通知される。パケットグループ情報の通知方法は、これに限られず、例えば、以下に示される方法であってもよい。
【００８０】
図１３は、パケットグループ情報通知の変形例の一つを示す図である。パケットグループ情報通知の変形例の一つは、制御パケットを用いる例である。この変形例では、パケット処理装置１００は、パケット情報付与部１０２に代えて、制御パケット生成部１０８を備える。
【００８１】
制御パケット生成部１０８は、パケット情報抽出部１０１から入力される各パケットのパケット情報を、連続する所定数のパケット分まとめて、パケットグループ情報として、制御パケットに含める。制御パケット生成部１０８は、この制御パケットをパケットグループの先頭パケットからパケットグループに含まれるパケットの数と同じ数だけ前のパケットの前に挿入する。制御パケットには、パケットグループ情報に加えて、パケットグループの先頭パケットの位置情報が格納される。例えば、パケットグループの先頭パケットの位置情報は、制御パケットからパケットグループの先頭パケットまでに含まれるパケットの個数である。
【００８２】
制御パケットは、例えば、ヘッダに、パケットグループ情報を通知するためのパケットであることを示す識別情報が含まれており、この識別情報によって、競合調停部１０５は、制御パケットを識別することができる。
【００８３】
競合調停部１０５は、制御パケットを受信すると、パケットグループ情報を抽出し、第１実施形態で説明された処理を実行する。その後、制御パケットは、廃棄される。
【００８４】
図１４は、パケットグループ情報通知の変形例の一つを示す図である。パケットグループ情報通知の変形例の一つは、信号線を用いて、パケットグループ情報を競合調停部１０５に通知する方法である。この変形例では、パケット処理装置１００は、パケット情報付
与部１０２に代えて、パケット情報通知部１０９を備える。
【００８５】
パケット情報通知部１０９は、競合調停部１０５と複数の信号線で接続している。パケット情報通知部１０９は、パケット情報抽出部１０１から入力される各パケットのパケット情報を、連続する所定数のパケット分まとめてパケットグループ情報として、信号線に出力する。パケットグループ情報は、パケットグループの先頭パケットがパケット到着処理部１０６に到着するまでに該先頭パケットのカラー判定及びトークン減算が完了するために十分な時間をとって、該先頭パケットの出力よりも前に出力される。パケット情報通知部１０９と競合調停部１０５とを接続する信号線は、例えば、４本である。１本は、パケットを読み込むタイミングを制御するイネーブル信号（図中ＥｎＱ  Ｅｎ）に用いられる。１本は、オフセットを通知するために用いられる。１本は、フローＩＤを通知するために用いられる。１本は、パケット長を通知するために用いられる。パケット情報通知部１０９は、この４つの信号が同期するように出力タイミングを制御する。
【００８６】
競合調停部１０５は、信号線からパケットグループ情報を受信すると、第１実施形態で説明された処理を実行する。
【００８７】
＜第２実施形態＞
第２実施形態では、パケット処理装置１００は、パケットグループ情報を事前にトークン追加処理部１０４に通知することによって、トークン追加処理部１０４によるトークン追加処理と、パケット到着処理部１０６によるトークン減算処理との競合を回避する。第２実施形態では、第１実施形態と共通する説明は省略される。
【００８８】
図１５は、トークン追加処理とパケット到着処理に伴うトークン減算処理との競合を説明するための図である。図１５では、図中上側にトークン追加処理の流れが、図中下側にパケット到着処理の流れが示されている。
【００８９】
フロー毎のトークンバケツへのトークン追加処理は、所定の順番、所定の周期で行われる。例えば、トークン追加処理は、トークン追加対象のフローＩＤを１ずつインクリメントしながら行われる。トークン追加処理は、（１）該当トークン量の読出し、（２）トークン加算、（３）トークン量の書き戻しの流れで行われる。
【００９０】
一方、パケット到着処理は、これまでに説明されたように、（１）パケット到着、（２）該当トークン量の読出し、（３）トークン減算、（４）トークン量書き戻しの流れで行われる。
【００９１】
第２実施形態では、同じトークンバケツに対するトークン追加処理とトークン減算処理とが並行して発生することを、競合と称する。
【００９２】
図１５では、フローＡに対するトークン追加処理と、フローＡに属するパケット到着処理に伴うトークン減算処理とが競合する場合が示される。図１５に示される例では、フローＡに対するトークン追加処理が先に開始されているので、トークン追加処理を実行するブロックの演算データ（キャッシュデータ）がパケット到着処理を実行するブロックに渡される。パケット到着処理を実行するブロックでは、使用するキャッシュデータの取捨選択が実行される。なお、パケット到着処理中に、同じフローのトークンバケツへのトークン追加処理が発生した場合には、パケット到着処理を実行するブロックの演算データ（キャッシュデータ）がトークン追加処理を実行するブロックに渡される。トークン追加処理を実行するブロックがキャッシュデータの取捨選択を行う。
【００９３】
このように、同じトークンバケツ（フロー）に対してトークン追加処理とパケット到着
処理とが競合すると、処理ブロック間でキャッシュデータの受け渡し、キャッシュデータの取捨選択が行われる。この処理ブロック間でのキャッシュデータの受け渡し、キャッシュデータの取捨選択により、演算時間が長くなったりして、デバイスの動作速度の向上を困難にさせる要因の一つとなっている。
【００９４】
第２実施形態のパケット処理装置のポリサでは、事前に入力されるパケットの情報を取得し、同じフローにおけるトークン追加処理とトークン減算処理との競合を予測し、この競合を回避する処理が実行される。以下、第２実施形態のパケット処理装置について詳しく説明する。
【００９５】
図１６は、第２実施形態におけるパケット処理装置の処理の一例を示す図である。図１６は、インタフェースカードのポリサにおけるトークン追加処理について示されている。競合調停部１０５ｂ（図７）は、パケットグループ情報を取得すると、パケットグループに含まれる各パケットのフローＩＤと、トークン追加処理の周期とを比較し、競合しそうなフローを検出する。
【００９６】
図１６に示される例では、トークン追加処理の周期が示されている。図１６に示される例では、フローが＃１→＃２→＃３→＃４→＃５の順番で実行される予定である。一方、入力されたパケットグループ情報から、到着予定のパケットのフローＩＤが、＃１００→＃２→＃１００→＃４９→＃１００であることが検出される。この場合には、フロー＃２のフローについて、トークン追加処理とパケット到着処理に伴うトークン減算処理とが競合することが予想される。そこで、第２実施形態では、競合調停部１０５ｂは、フロー＃２のフローのトークン追加処理の実行順を他のフローと入れ替えることによって、トークン追加処理とトークン減算処理との競合を回避する。図１６に示される例では、フロー＃２と、フロー＃７と、のトークン追加処理の実行順が入れ替えられる。
【００９７】
第２実施形態において、パケット処理装置１００は、ハードウェア構成は第１実施形態と同様である（図5、図６参照）。機能ブロックは、図７において、競合調停部１０５が
競合調停部１０５ｂとなり、それ以外のブロックは第１実施形態と同様である。そのため、第１実施形態と異なる動作をする機能ブロックについて説明する。
【００９８】
第２実施形態では、競合調停部１０５ｂは、パケットグループ情報に基づいて、トークン追加処理部１０４によるトークン追加処理と、パケット到着処理部１０６によるトークン減算処理との競合の発生を予測する。トークン追加処理とトークン減算処理との競合の発生を予測した場合には、競合調停部１０５ｂは、競合の発生が予測されるフローと予測されないフローとのトークン追加処理の実行順を入れ替える。トークン追加処理の実行順は、後述のトークン追加テーブルに格納される。
【００９９】
トークン追加処理とトークン減算処理との競合の予測は、例えば、以下のように行われる。例として、図１６に示される例の順番で、トークン追加処理、および、パケット到着が行われるとする。また、例として以下の条件を想定する。
・パケット間隔処理：２クロック
・パイプライン段数：６段（パケットグループに含まれるパケット数６個）
・１パイプライン当たりの演算時間：１２クロック
・１フロー当たりのトークン追加処理の演算時間：４クロック
【０１００】
上記のような想定のもとでは、１つのパケットグループに含まれるパケットの最大演算時間は、１２クロック＋２クロック×（６−１）段＝２２クロックである。一方、１つのパケットグループの演算終了までにトークン追加処理が実行されるフローは、４クロック×６フロー＝２４クロックより、６フローである。すなわち、この６フローについて競合
の可能性がある。
【０１０１】
例えば、図１６に示される例のように、
・到着予定パケットのフローＩＤ：＃１００，＃２，＃１００，＃４９，＃１００，＃１０
・到着予定のパケットグループの到着処理中にトークン追加処理が実行されるフローＩＤ：＃１，＃２，＃３，＃４，＃５，＃６
である場合には、双方に存在するフロー＃２のフローが競合発生の可能性がある。この場合、フロー＃７のフローは、競合の可能性がないので、フロー＃２のフローとトークン追加処理の順番を入れ替えることができる。
【０１０２】
図１７は、トークン追加テーブルの例を示す図である。トークン追加テーブルは、トークン追加処理部１０４がトークン追加処理を実行するフローの順番を格納するテーブルである。トークン追加テーブルは、例えば、トークン追加処理部１０４に対応するハードウェアに備えられるメモリに格納される。トークン追加テーブルは、例えば、フローＩＤ，入替フラグ，入替フローＩＤのフィールドを備える。フローＩＤには、フローＩＤが小さい順で並べられている。入替フラグには、該当のフローに、トークン追加処理の順番の入れ替えが発生していることを示すフラグが格納される。入替フラグにフラグがセットされている場合には、トークン追加処理の順番の入れ替えが発生していることが示される。入替フローＩＤには、トークン追加処理の順番の入れ替え後のフローＩＤが格納される。
【０１０３】
競合調停部１０５ｂは、パケットグループ情報に基づいて、トークン追加処理とトークン減算処理との競合の発生が予測される場合には、トークン追加処理の実行順を入れ替え、トークン追加テーブルに記録する。具体的には、競合調停部１０５ｂは、トークン追加処理の実行順を入れ替えるフローの入替フラグをセットし、入替フローＩＤを入れ替えるフローのＩＤにする。
【０１０４】
トークン追加処理部１０４は、トークン追加テーブルを上から順番に参照し、参照下フローＩＤに入替フラグがセットされている場合には、入替フローＩＤが示すフローのトークン追加処理を実行する。
【０１０５】
図１８は、競合調停部１０５ｂの、トークン追加処理とトークン減算処理との競合の発生の予測処理のフローチャートの一例である。図１８に示されるフローチャートは、競合調停部１０５ｂがパケットグループ情報を取得すると開始される。
【０１０６】
ＯＰ１１では、競合調停部１０５ｂは、パケットグループ情報からパケットグループに含まれる各パケットのフローＩＤを抽出する。次に処理がＯＰ１２に進む。
【０１０７】
ＯＰ１２では、競合調停部１０５ｂは、パケットグループに含まれるパケットの最大演算時間中に、パケットグループ情報から抽出されたフローＩＤと同じフローＩＤのトークン追加処理の実行の予定があるか否かを判定する。これは、トークン追加処理とトークン減算処理との競合の発生を予測するための処理である。パケットグループに含まれるパケットの最大演算時間中に、パケットグループ情報から抽出されたフローＩＤと同じフローＩＤのトークン追加処理の実行の予定がある場合には（ＯＰ１２：Ｙｅｓ）、競合の発生が予測される。この場合には、処理がＯＰ１３に進む。競合の発生が予測されるのは、パケットグループに含まれるパケットの最大演算時間中にトークン追加処理の実行の予定がある、パケットグループ情報から抽出されたフローＩＤと同じフローＩＤのフローである。
【０１０８】
パケットグループに含まれるパケットの最大演算時間中に、パケットグループ情報から
抽出されたフローＩＤと同じフローＩＤのトークン追加処理の実行の予定がない場合には（ＯＰ１２：Ｎｏ）、トークン追加処理とトークン減算処理の競合の発生は予測されない。この場合には、トークン追加処理の実行順の入れ替えは行われず、図１８に示される処理が終了する。
【０１０９】
ＯＰ１３では、競合調停部１０５ｂは、競合発生の可能性が検出されたフローＩＤと、競合発生の可能性が検出されないフローＩＤと、のトークン追加処理の実行順を入れ替える。具体的には、競合調停部１０５ｂは、トークン追加テーブルにおいて、競合発生の可能性が検出されたフローＩＤの入替フラグをセットし、入替フローＩＤを競合発生の可能性が検出されないフローＩＤに書き換える。また、競合調停部１０５ｂは、トークン追加テーブルにおいて、前述の競合発生の可能性が検出されないフローＩＤの入替フラグをセットし、入替フローＩＤを前述の競合発生の可能性が検出されたフローＩＤに書き換える。その後、図１８に示される処理が終了する。
【０１１０】
図１９Ａは、トークン追加処理部１０４が実行するトークン追加処理のフローチャートの一例である。図１９Ａに示されるフローチャートは、所定の周期で実行される。
【０１１１】
ＯＰ２１では、トークン追加処理部１０４は、参照フローＩＤをインクリメントする。参照フローＩＤは、トークン追加テーブルの参照するエントリを示すフローＩＤである。また、トークン追加処理部１０４は、トークン追加対象のフローＩＤ＝参照フローＩＤに設定する。次に処理がＯＰ２２に進む。例えば、参照フローＩＤの初期値は０である。
【０１１２】
ＯＰ２２では、トークン追加処理部１０４は、トークン追加テーブルにおいて、参照フローＩＤのエントリに入替フラグがセットされているか否かを判定する。参照フローＩＤのエントリに入替フラグがセットされていない場合には（ＯＰ２２：Ｎｏ）、処理がＯＰ２５に進む。ＯＰ２５では、トークン追加処理部１０４は、トークン追加対象のフローＩＤである参照フローＩＤのトークンバケツにトークンを追加する。その度、図１９Ａに示される処理が終了する。
【０１１３】
参照フローＩＤのエントリに入替フラグがセットされている場合には（ＯＰ２２：Ｙｅｓ）、処理がＯＰ２３に進む。ＯＰ２３では、トークン追加処理部１０４は、参照フローＩＤのエントリの入替フラグをリセットする。これによって、現参照フローＩＤのフローに、次回、トークン追加処理が実行されるときには、順番の入替なく、現参照フローＩＤのフローがそのままトークン追加対象のフローとなる。次に処理がＯＰ２４に進む。
【０１１４】
ＯＰ２４では、トークン追加処理部１０４は、トークン追加対象のフローＩＤを参照フローＩＤから入替フローＩＤに変更する。その後、ＯＰ２５において、トークン追加処理部１０４は、トークン追加対象のフローＩＤである入替フローＩＤのトークンバケツにトークンを追加する。これによって、トークン追加処理の実行順が変更されることになる。その度、図１９Ａに示される処理が終了する。なお、参照フローＩＤは、フローＩＤの最大値になると、ＯＰ２１におけるインクリメントで、０にリセットされる。
【０１１５】
図１９Ｂは、トークン追加処理実行中のトークン追加テーブルの例を示す図である。図１９Ｂに示されるトークン追加テーブルでは、フロー＃２とフロー＃７との、トークン追加処理の実行順が入れ替えられている。すなわち、フロー＃２のエントリの入替フラグがセットされており、該エントリの入替フローＩＤは＃７である。また、フロー＃７のエントリの入替フラグがセットされており、該エントリの入替フローＩＤは＃２である。以下、図１９Ｂに示されるトークン追加テーブルのフロー＃２のエントリについて、トークン追加処理が実行される場合について説明する。
【０１１６】
トークン追加処理部１０４は、トークン追加の周期になると、参照フローＩＤ＝＃１をインクリメントして、参照フローＩＤ＝＃２に変更する（ＯＰ２１）。この時点では、トークン追加対象のフローＩＤは、参照フローＩＤ＝＃２である。トークン追加テーブルのフローＩＤ＝＃２のエントリの入替フラグがセットされているので（ＯＰ２２：Ｙｅｓ）、トークン追加処理部１０４は、トークン追加テーブルのフローＩＤ＝＃２のエントリの入替フラグをリセットする（ＯＰ２３）。これによって、次回、フロー＃２が参照フローとなったときには、フローＩＤ＝＃２のエントリにおいて、入替フローＩＤのフィールドが示すフローではなく、フローＩＤのフィールドが示すフロー＃２がトークン追加対象となる。
【０１１７】
トークン追加テーブルのフローＩＤ＝＃２のエントリの入替フローＩＤ＝＃７であるので、トークン追加処理部１０４は、トークン追加対象のフローＩＤを参照フローＩＤである＃２から入替フローＩＤである＃７に変更する（ＯＰ２４）。続いて、トークン追加処理部１０４は、フロー＃７のトークンバケツにトークンを追加する（ＯＰ２５）。
【０１１８】
以降、トークン追加処理の周期になると、参照フローＩＤがインクメントされて＃３となり（ＯＰ２１）、ＯＰ２１からＯＰ２５の処理が実行される。
【０１１９】
＜第２実施形態の作用効果＞
第２実施形態では、パケットグループがパケット到着処理部１０６に入力される前に、該パケットグループのパケットグループ情報が競合調停部１０５ｂに通知される。競合調停部１０５ｂは、通知されたパケットグループ情報に基づいて、トークン追加処理部１０４によるトークン追加処理とパケット到着処理部１０６によるトークン減算処理との競合の発生を予測する。該競合の発生が予測される場合には、競合調停部１０５ｂは、該競合の発生が予測されるフローのトークン追加処理の実行順を、他の該競合の発生が予測されないフローと入れ替える。これによって、第２実施形態では、パケット処理装置１００は、トークン追加処理部１０４によるトークン追加処理とパケット到着処理部１０６によるトークン減算処理との競合の発生を回避することができる。
【０１２０】
該競合の発生を回避可能であることにより、トークン追加処理部１０４とパケット到着処理部１０６との間のキャッシュデータの受け渡し及び取捨選択がなくなる。これによって、回路規模を小さく抑えることができる。また、デバイスをより高クロックで動作させることができる。なお、第２実施形態で説明された技術は、ポリサだけでなく、例えば、スケジューラ、シェーパ等のトークンバケツを利用する技術に適用可能である。また、第２実施形態においても、第１実施形態のパケットグループ情報通知の変形例を適用可能である。
【０１２１】
＜第３実施形態＞
第３実施形態では、第１実施形態及び第２実施形態と共通する説明は省略される。
【０１２２】
図２０は、スケジューラの動作の一例を示す図である。スケジューラでは、複数のキューが備えられており、各キューには優先度が割り当てられている。スケジューラに到着するパケットには、それぞれ、例えば、同パケット処理装置の入力側のＩＦカードや、他の装置によって、優先度のクラスが設定されおり、各パケットはクラスに応じたキューに格納される。スケジューラは、例えば、優先度の高いキューに格納されるパケットから出力を行う。例えば、優先度が高く設定されるパケットには、音声パケットがある。
【０１２３】
例えば、（１）サイズが大きく、優先度が低いパケットの出力中に、（２）優先度の高いパケットがキューに到着した場合には、優先度に関わらず、優先度の低いパケットの出力が終了するまで、優先度の高いパケットは出力されない。これによって、優先度の高い
パケットの遅延が大きくなることがある。しかしながら、優先度の高いパケットは、音声パケット等の遅延に敏感なデータを運んでいる場合があり、優先度の低いラージパケットの出力待ちによる遅延は影響が大きい。
【０１２４】
第３実施形態では、パケット処理装置のスケジューラ又はシェーパが、パケットグループ情報を事前に取得し、パケットグループ情報に基づいて、優先度の高いパケットの、優先度の低いパケットの出力待ちを回避するための処理を実行する。すなわち、第３実施形態では、パケット処理装置は、パケットグループ情報を事前に取得し、パケットグループ情報に基づいて、優先度の高いパケットの読出しと優先度の低いパケットの読出しとの競合を回避するための処理を実行する。
【０１２５】
図２１は、第３実施形態のパケット処理装置の動作の一例を説明するための図である。第３実施形態では、パケット処理装置は、パケットグループ情報に基づいて、優先度の高いパケットの前の優先度が低いラージパケットの存在を検出する。パケット処理装置は、パケット読出しのときに、（１）検出された該優先度の低いラージパケットの読出しを一時停止し、（２）後から優先度の高いキューに到着する優先度の高いパケットを先に読み出す。これによって、優先度の高いパケットの、優先度の低いパケットの出力待ちによる遅延を抑えることができる。
【０１２６】
第３実施形態のパケット伝送装置のハードウェア構成は、第１実施形態と同様であるため、説明を省略する。
【０１２７】
図２２は、ＱｏＳ回路１６の機能ブロック図の一例である。図２２では、ＱｏＳ回路１６のうち、出力側のスケジューラの機能を果たすブロックについて示されている。ＱｏＳ回路１６は、パケット情報抽出部１０１，パケット情報付与部１０２，遅延挿入部１０３，トークン追加処理部１０４，競合調停部１０５ｃ，パケットスケジューリング部１１０を含む。これらは、それぞれ電気又は電子回路，ＦＰＧＡ，ＡＳＩＣ等によって実現される。これらの機能ブロックは一例であり、適宜、組み合わせて複数の機能ブロックを１つの機能ブロックとしてもよい。また、これらの機能ブロックは、全てを含む１つの回路として構成されてもよい。また、２つ以上の機能ブロックを組み合わせて複数のブロックを作り、各ブロックを１つのＦＰＧＡやＡＳＩＣにより構成してもよい。例えば、パケット情報抽出部１０１，パケット情報付与部１０２，遅延挿入部１０３を１つのＦＰＧＡやＡＳＩＣにより構成し、トークン追加処理部１０４，競合調停部１０５ｃ，パケットスケジューリング部１１０を１つのＦＰＧＡやＡＳＩＣにより構成してもよい。パケット情報付与部１０２，遅延挿入部１０３，トークン追加処理部１０４については、第１実施形態と同様であるため、説明を省略する。
【０１２８】
パケット情報抽出部１０１は、入力される各パケットのパケット情報を抽出する。第３実施形態では、パケット情報抽出部１０１は、パケット情報として、例えば、キューＩＤ，パケット長，クラス情報を抽出する。キューＩＤは、パケットが格納されるキューの識別情報である。キューＩＤは、例えば、内部ヘッダに格納されている。クラス情報は、例えば、同パケット処理装置の入力側ＩＦにおいて付与され、優先度のクラスを示す情報である。クラス情報は、例えば、パケットヘッダ内のＴｙｐｅ  ｏｆ  Ｓｅｒｖｉｃｅフィールド，内部ヘッダ等に格納されている。
【０１２９】
パケット情報抽出部１０１によって抽出された各パケットのパケット情報は、パケット情報付与部１０２に出力される。パケット情報付与部１０２では、所定数の連続するパケットのパケット情報をまとめてパケットグループ情報とし、該所定数の連続するパケットよりも前に位置する所定のパケットの内部ヘッダに付与して、競合調停部１０５ｃにパケットグループ情報を通知する。
【０１３０】
パケットスケジューリング部１１０は、スケジューラとして機能する機能ブロックである。パケットスケジューラ部１１０は、複数のキューを有し、各キューにはそれぞれ優先度のクラスが割り当てられている。パケットスケジューラ部１１０は、到着パケットに付与されているクラス情報に基づいて、到着パケットを対応するキューに格納し、優先度の高いクラスのキューから優先してパケットを出力する。
【０１３１】
競合調停部１０５ｃは、パケットグループ情報を取得すると、優先度の低いラージパケットの読み出し中における優先度の高いパケットの到着を検出する。すなわち、競合調停部１０５ｃは、優先度の高いパケットの読み出し処理と優先度の低いパケットの読出し処理との競合の発生を予測する。該競合の発生が予測された場合には、競合調停部１０５ｃは、優先度の低いパケットの読出しを一時停止し、優先度の高いパケットを優先して読み出すように、パケットスケジューラ部１１０に指示する。詳細には、以下の図２３で説明する。
【０１３２】
図２３は、競合調停部１０５ｃのスケジューリング処理のフローチャートの一例である。図２３に示されるフローチャートは、例えば、繰り返し、又は、所定の周期で実行される。また、図２３に示されるフローチャートは、パケットスケジューラ部１１０が、クラスＡ、クラスＢ、クラスＣの３つのクラスのキューを備える場合のパケットスケジューリング処理を示す。優先度は、クラスＡ＞クラスＢ＞クラスＣであるとする。
【０１３３】
ＯＰ３１では、競合調停部１０５ｃは、最も優先度の高いクラスＡのキューに読出し可能なパケットが格納されているか否かを判定する。クラスＡのキューに読出し可能なパケットが格納されている場合には（ＯＰ３１：Ｙｅｓ）、処理がＯＰ３２に進む。ＯＰ３２では、競合調停部１０５ｃは、クラスＡのキューに格納されている先頭パケットの読出しを行うようにパケットスケジューリング部１１０に指示する。これにより、図２３に示される処理が終了し、ＯＰ３１から繰り返し実行される。
【０１３４】
クラスＡのキューに読出し可能なパケットが格納されていない場合には（ＯＰ３１：Ｎｏ）、処理がＯＰ３３に進む。ＯＰ３３では、競合調停部１０５ｃは、クラスＡの次に優先度が高いクラスＢに読出し可能なパケットが格納されているか否かを判定する。
【０１３５】
クラスＢのキューに読出し可能なパケットが格納されている場合には（ＯＰ３３：Ｙｅｓ）、処理がＯＰ３４に進む。ＯＰ３４では、競合調停部１０５ｃは、クラスＢのキューに格納されている先頭パケットの読出しにかかる時間（以降、読出時間）を算出する。次に、処理がＯＰ３５に進む。
【０１３６】
ＯＰ３５では、競合調停部１０５ｃは、クラスＢのキューの先頭パケットの読出時間中に、クラスＡのパケットの到着予定があるか否かを判定する。クラスＡのパケットの到着予定は、パケットグループ情報より取得される。クラスＢのキューの先頭パケットの読出時間中にクラスＡのパケットの到着予定がある場合には（ＯＰ３５：Ｙｅｓ）、クラスＢのキューの先頭パケットの読出しにより、到着予定のクラスＡのパケットの読出しの遅延の増大が予想される。そのため、処理がＯＰ４０に進み、競合調停部１０５ｃは、クラスＢのキューにパケットが格納されているものの、読出対象のパケット無しと判定し、クラスＢのキューに格納されるパケットの読出しを一時中止するようパケットスケジューリング部１１０に指示する。この状態は、すなわち、クラスＡのパケットの到着待ちの状態である。これにより、図２３に示される処理が終了し、ＯＰ３１から繰り返し実行される。このあと、クラスＡのパケットが到着し、クラスＡのキューに格納されると、該クラスＡのパケットが読み出される（ＯＰ３１、ＯＰ３２）。これによって、クラスＡのパケットは、優先度の低いパケットの読出しによる遅延の増大なく、読み出されることができる。
【０１３７】
クラスＢのキューの先頭パケットの読出時間中にクラスＡのパケットの到着予定がない場合には（ＯＰ３５：Ｎｏ）、処理がＯＰ３６に進む。ＯＰ３６では、競合調停部１０５ｃは、クラスＢのキューの先頭パケットを読み出すようにパケットスケジューリング部１１０に指示する。これにより、図２３に示される処理が終了し、ＯＰ３１から繰り返し実行される。
【０１３８】
ＯＰ３３において、クラスＢのキューに読出し可能なパケットが格納されていない場合には（ＯＰ３３：Ｎｏ）、クラスＡのキューにもクラスＢのキューにもパケットが格納されていないことが示される。次に、処理がＯＰ３７に進み、ＯＰ３７では、競合調停部１０５ｃは、クラスＢの次に優先度が高いクラスＣに読出し可能パケットが格納されているか否かを判定する。
【０１３９】
クラスＣに読出し可能パケットが格納されている場合には（ＯＰ３７：Ｙｅｓ）、処理がＯＰ３８に進む。ＯＰ３８では、競合調停部１０５ｃは、クラスＣのキューに格納されている先頭パケットの読出しにかかる時間（以降、読出時間）を算出する。次に、処理がＯＰ３９に進む。
【０１４０】
ＯＰ３９では、競合調停部１０５ｃは、クラスＣのキューの先頭パケットの読出時間中に、クラスＡのパケットの到着予定があるか否かを判定する。クラスＣのキューの先頭パケットの読出時間中にクラスＡのパケットの到着予定がある場合には（ＯＰ３９：Ｙｅｓ）、クラスＣのキューの先頭パケットの読出しにより、到着予定のクラスＡのパケットの読出しの遅延の増大が予想される。そのため、処理がＯＰ４０に進み、競合調停部１０５ｃは、クラスＣのキューにパケットが格納されているものの、読出対象のパケット無しと判定し、クラスＣのキューに格納されるパケットの読出しを一時中止するようパケットスケジューリング部１１０に指示する。この状態は、クラスＡのパケットの到着待ちの状態である。これにより、図２３に示される処理が終了し、ＯＰ３１から繰り返し実行される。
【０１４１】
クラスＣのキューの先頭パケットの読出時間中にクラスＡのパケットの到着予定がない場合には（ＯＰ３９：Ｎｏ）、処理がＯＰ４１に進む。ＯＰ４１では、競合調停部１０５ｃは、クラスＡのキューにも、クラスＢのキューにもパケットがなく、さらに、クラスＡのキューにパケット到着の予定もないので、クラスＣのキューの先頭パケットを読み出すようパケットスケジューリング部１１０に指示する。これにより、図２３に示される処理が終了し、ＯＰ３１から繰り返し実行される。
【０１４２】
ＯＰ３７において、クラスＣのキューに読出し可能なパケットが格納されていない場合には（ＯＰ３７：Ｎｏ）、クラスＡ、クラスＢ、クラスＣのいずれのキューにもパケットが格納されていないことが示される。次に、処理がＯＰ４２に進み、ＯＰ４２では、競合調停部１０５ｃは、読出対象のパケットなしと判定する。これにより、図２３に示される処理が終了し、ＯＰ３１から繰り返し実行される。
【０１４３】
なお、ＯＰ３９において、クラスＢのパケットの到着予定の有無を判定し、クラスＢの到着予定がある場合には、処理がＯＰ４０の進むようにすることで、クラスＣのパケットの読出しによる、クラスＢのパケットの読出し遅延の増大を抑えることもできる。
【０１４４】
＜第３実施形態の作用効果＞
第３実施形態では、パケット伝送装置は、パケットスケジューラ部１１０に入力されるパケットの情報を、パケットスケジューラ部１１０に入力される前に、取得することによって、優先度の低いパケットによる優先度の高いパケットの遅延の増大を抑えることがで
きる。また、第３実施形態においても、第１実施形態のパケットグループ情報通知の変形例を適用可能である。
【０１４５】
＜その他＞
上述の第１実施形態、第２実施形態、及び第３実施形態は、適宜、全実施形態又は一部の実施形態を組み合わせて実施することも可能である。
【符号の説明】
【０１４６】
１          インタフェースカード
１００      パケット処理装置
１０１      パケット情報抽出部
１０２      パケット情報付与部
１０３      遅延挿入部
１０４      トークン追加処理部
１０５，１０５ｂ，１０５ｃ      競合調停部
１０６      パケット到着処理部
１０６Ａ    フロー処理部
１０６Ｂ    パケット処理部
１０７      トークン格納部
１０８      制御パケット生成部
１０９      パケット情報通知部
１１０      パケットスケジューリング部
【図１】
2014017683.tif 000003
【図２】
2014017683.tif 000004
【図３】
2014017683.tif 000005
【図４】
2014017683.tif 000006
【図５】
2014017683.tif 000007
【図６】
2014017683.tif 000008
【図７】
2014017683.tif 000009
【図８】
2014017683.tif 000010
【図９】
2014017683.tif 000011
【図１０】
2014017683.tif 000012
【図１１】
2014017683.tif 000013
【図１２】
2014017683.tif 000014
【図１３】
2014017683.tif 000015
【図１４】
2014017683.tif 000016
【図１５】
2014017683.tif 000017
【図１６】
2014017683.tif 000018
【図１７】
2014017683.tif 000019
【図１８】
2014017683.tif 000020
【図１９Ａ】
2014017683.tif 000021
【図１９Ｂ】
2014017683.tif 000022
【図２０】
2014017683.tif 000023
【図２１】
2014017683.tif 000024
【図２２】
2014017683.tif 000025
【図２３】
2014017683.tif 000026