(57)【要約】【課題】パケット処理遅延を抑制することである。【解決手段】パケット処理装置１０は、ＤＲＡＭ１２とＳＲＡＭ１３とスケジューラ１１２とリード部１１３とを有する。ＤＲＡＭ１２は、パケットを格納する。ＳＲＡＭ１３は、上記パケットを格納する。スケジューラ１１２は、ＤＲＡＭ１２における上記パケットの格納位置を示すポインタの数に応じて、ＤＲＡＭ１２、ＳＲＡＭ１３の中から、上記パケットを読み出すメモリを決定する。リード部１１３は、スケジューラ１１２により決定されたメモリから、上記ポインタの示す格納位置に格納されたパケットを読み出す。【選択図】図１
2015186233.tif 000002
【特許請求の範囲】
【請求項１】
パケットを格納する第１のメモリと、
前記パケットを格納する第２のメモリと、
前記第１のメモリにおける前記パケットの格納位置を示すポインタの数に応じて、前記第１及び第２のメモリの中から、前記パケットを読み出すメモリを決定する決定部と、
前記決定部により決定されたメモリから、前記ポインタの示す格納位置に格納されたパケットを読み出す読出部と
を有することを特徴とするパケット処理装置。
【請求項２】
前記決定部は、前記第１のメモリのポインタ数が所定値以上である場合、または、前記第２のメモリのポインタが存在しない場合、前記第１のメモリを、前記パケットを読み出すメモリに決定すると共に、前記第１のメモリのポインタ数が所定値未満であり、かつ、前記第２のメモリのポインタが存在する場合、前記第２のメモリを、前記パケットを読み出すメモリに決定することを特徴とする請求項１に記載のパケット処理装置。
【請求項３】
前記第１のメモリは、シーケンシャルにアクセス可能な複数の格納領域を有し、該格納領域毎に前記パケットを格納することを特徴とする請求項１に記載のパケット処理装置。
【請求項４】
前記決定部は、前記ポインタをフロー毎に格納し、選択されたフローにおける前記ポインタの数に応じて、前記パケットを読み出すメモリを決定することを特徴とする請求項１に記載のパケット処理装置。
【請求項５】
前記読出部は、前記第２のメモリから読み出されたパケットに対し、前記第１のメモリからの読出し時に生じる第１待ち時間と前記第２のメモリからの読出し時に生じる第２待ち時間との差に相当する時間分の遅延を挿入することを特徴とする請求項１に記載のパケット処理装置。
【請求項６】
パケットを格納する第１のメモリと、
前記第１のメモリにおける前記パケットの格納位置を示す第１ポインタを格納する第２のメモリと、
前記第１ポインタを格納する第３のメモリと、
前記第２のメモリにおける前記第１ポインタの格納位置を示す第２ポインタの数に応じて、前記第２及び第３のメモリの中から、前記第１ポインタを読み出すメモリを決定する決定部と、
前記決定部により決定されたメモリから、前記第２ポインタの示す格納位置に格納された第１ポインタを読み出す読出部と
を有することを特徴とするパケット処理装置。
【請求項７】
パケットを格納する第１のメモリと、前記パケットを格納する第２のメモリとを有するパケット処理装置が、
前記第１のメモリにおける前記パケットの格納位置を示すポインタの数に応じて、前記第１及び第２のメモリの中から、前記パケットを読み出すメモリを決定し、
決定されたメモリから、前記ポインタの示す格納位置に格納されたパケットを読み出す
ことを特徴とするパケット処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット処理装置、及びパケット処理方法に関する。
【背景技術】
【０００２】
従来、スイッチやルータ等のパケット処理装置が利用されている。パケット処理装置は、一般的に、パケットの入出力を行う複数のインタフェースカードと、各インタフェースカード間におけるパケットの入出力制御を行うスイッチカードと、制御情報を用いて装置状態を管理するコントロールカードとを有する。インタフェースカードでは、外部装置から光ファイバ経由で受信された光信号は、光モジュールにより電気信号に変換された後、ＰＨＹ／ＭＡＣ（PHYsical／Media  Access  Control）処理機能を有するデバイスに入力される。該デバイスでは、上記電気信号からパケットが抽出され、後段のパケット処理回路に入力される。パケット処理回路は、例えば、ＦＰＧＡ（Field  Programmable  Gate  Array）、ＡＳＩＣ（Application  Specific  Integrated  Circuit）、ＮＰＵ（Network  Processing  Unit）等である。
【０００３】
パケット受信側のインタフェースカードに到達したパケットは、ポリサによる流量制御を受け、入力量が所定のレート以下に制限される。受信側インタフェースカードを通過したパケットは、スイッチカードを経由して、パケット送信側のインタフェースカードに到達する。送信側インタフェースカードでは、コピー処理を経た後、ＱｏＳ（Quality  of  Service）処理が実行される。ＱｏＳ処理では、パケットに対し、契約に基づく帯域制御処理（シェーピング）や優先制御処理が実行される。優先制御処理では、例えば、音声パケットがＷｅｂパケットよりも優先して出力される。
【０００４】
以下、図２０、図２１を参照し、ＱｏＳ処理におけるパケット制御（以下、「ＱｏＳ制御」と記す。）について詳細に説明する。図２０は、ＱｏＳ制御により、パケットの入出力順序が入れ替わる様子を示す図である。図２０に示す様に、アルファベットのＡ〜Ｇの順に入力されたパケットは、ＱｏＳ制御単位（以下、「フロー」と記す。）毎に、フローＦ０〜Ｆｎ（ｎは自然数）に分けて、パケット処理回路内にキューイングされる。キューイングされた各パケットには、スケジューラＳＣによる優先制御処理（例えば、ＳＰ：Strict  Priority）が実行され、スケジューリング結果に基づいて選択されたフローから順に、パケットが出力される。図２０に示す例では、フローＩＤの昇順に優先順位が設定されているため、まず、フローＦ０から、アルファベットＡ、Ｃ、Ｅ、Ｇのパケットが出力される。次に、フローＦ１から、アルファベットＦのパケットが出力される。続いて、フローＦ２から、アルファベットＤのパケットが出力される。そして、フローＦｎから、アルファベットＢのパケットが出力される。これにより、スケジューラＳＣは、フロー間で、入力順序（アルファベットＡ〜Ｇの順）を出力順序（アルファベットＡ、Ｃ、Ｅ、Ｇ、Ｆ、Ｄ、Ｂの順）に入れ替えて出力する。
【０００５】
ところが、パケット長にはばらつきがあり、１０キロバイト程度の情報量を有する大きなパケットも存在することから、パケット処理装置が、パケット処理回路内部にて、パケット自体をキューイングするのは非効率的である。そこで、一般的には、パケット処理装置は、ＱｏＳ制御に用いる最小限の情報（例えば、フローＩＤ、パケット長、バッファアドレス）のみを、パケットポインタ（以下、単に「ポインタ」と記す。）として、パケット処理回路内にキューイングする。この場合、パケットは、パケット処理回路とは別体に構成された大容量ＤＲＡＭ（Dynamic  Random  Access  Memory）に格納される。なお、バッファアドレスは、パケットバッファとして用いられるＤＲＡＭ内におけるパケットの格納位置を示す情報であり、例えば、ＤＲＡＭのセルアレイ（以下、「バンク」と記す。）のＩＤと各バンク内の番地とを含む。
【０００６】
図２１は、ポインタを用いたパケットのライト処理及びリード処理を説明するための図である。図２１に示す様に、パケット処理装置は、ＱｏＳ制御に際し、パケット自体ではなくポインタのみをキューイングした後、ＱｏＳスケジューリング結果に基づいてスケジューラＳＣにより選択されたフローＦ０から昇順に、ポインタを読み出す。更に、リード部は、スケジューラＳＣにより読み出されたポインタの示すバッファアドレスを基に、該アドレスに格納されたパケットを読み出す。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１０−８８１０２号公報
【特許文献２】特開２００９−１５７６８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ＤＲＡＭは、複数のバンクを有することにより、大容量化と高速化とを実現可能である。しかしながら、ＤＲＡＭの構成上、同一バンクへの連続アクセスには、ｔＲＣ（Random  Cycle  time）と呼ばれる所定間隔を空けることとなるため、ＤＲＡＭが最大のアクセス速度を発揮するためには、極力、バンク間でシーケンシャルアクセスが実行されることが望ましい。以下、この様なアクセスを、バンクシーケンシャルアクセスと記す。なお、上記ｔＲＣは、ＤＲＡＭの動作周波数やグレード、種類等によって異なるが、例えば、１０ｃｌｋ（クロック）程度である。
【０００９】
例えば、図２１に例示した様に、ＤＲＡＭのバンク数が８であり、ｔＲＣ＝１０ｃｌｋである場合を想定する。この場合、パケット処理回路が、１アクセスで１ｐｋｔ（パケット）の書込みまたは読出しが可能とすると、１０ｃｌｋの間に、ＤＲＡＭ内の全て異なるバンクにアクセスするのであれば、最大で、８ｐｋｔ／１０ｃｌｋの書込みまたは読出しが可能となる。しかしながら、パケット処理回路が、ＤＲＡＭ内の同一バンク（例えば、図２１のバンクＢ０）に格納された複数のパケットに連続してアクセスする場合、上述したｔＲＣ（＝１０ｃｌｋ）の待ち時間の制約があることから、１ｐｋｔ／１０ｃｌｋ程度の書込みまたは読出しを行うことしかできない。以下、この様に、上記ｔＲＣ内において同一バンクへ連続してアクセスされる状況を「バンク競合」と記す。
【００１０】
ここで、例えば１００Ｇイーサネット（登録商標）を想定すると、パケット長が最短の６４バイトの場合、理論上、約１５０Ｍｐｋｔ／ｓのパケット処理性能が、パケット処理回路に必要となる。このため、パケット処理装置が、例えば、３００ＭＨｚ（バンク数＝８、ｔＲＣ＝１０ｃｌｋ）の動作周波数を有するＤＲＡＭを用いた場合、１ｐｋｔ／２ｃｌｋすなわち５ｐｋｔ／１０ｃｌｋの処理性能が、パケット処理回路に必要となる。従って、パケット処理回路は、バンクシーケンシャルアクセスの様に、バンクに偏り無くアクセス可能であれば、５ｐｋｔ／１０ｃｌｋの性能要件を満足することができるが、アクセス先のバンクに偏りがあると、バンク調停を行う。
【００１１】
図２２は、パケットの書込み時及び読出し時にバンク調停が行われる様子を示す図である。図２２に示す様に、バンクＢ１においてバンク競合が発生すると、パケット処理回路は、バンクＢ１へのアクセス後、所定時間ｔＲＣの間、同一のバンクＢ１にアクセスすることができない。このため、パケット処理回路は、バンクＢ１のＦＩＦＯ（First  In  First  Out）にて一旦待機（バンク調停待ち）した後、改めてバンクＢ１にアクセスすることとなる。これにより、パケット間に、上記ｔＲＣ（＝１０ｃｌｋ）分の遅延が発生する。その結果、パケット処理装置の性能が、上記性能要件未満（例えば、１ｐｋｔ／１０ｃｌｋ程度）に低下してしまう。
【００１２】
仮に、パケット処理装置が、１バンク／１０ｃｌｋのアクセス速度で、上記性能要件である５ｐｋｔ／１０ｃｌｋを満たすためには、現在の５倍程度の周波数（例えば、１．５ＧＨｚ）で動作するＤＲＡＭを搭載することとなり、実現は困難である。あるいは、パケット処理装置が、ＤＲＡＭ以外のメモリとして、単一アレイのメモリであるＳＲＡＭ（Static  Random  Access  Memory）を搭載し、バンク競合を回避する手法もあるが、ＳＲＡＭは、ＤＲＡＭと比較して容量が小さい。このため、ＳＲＡＭがパケットバッファ全体を賄うのは、現実的に困難である。また、パケット処理装置がＳＲＡＭを複数搭載するとしても、コストや消費電力、ＩＯ（Input  Output）ピン数が増大するため、実現は困難である。
【００１３】
そこで、パケット処理回路は、パケットの入力順にバンクシーケンシャルに、ＤＲＡＭへパケットを書き込むことで、書込み時のバンク競合を回避することができる。図２３は、書込み側のバンク調停の不要なパケット処理を説明するための図である。なお、図２３において、ポインタ及びパケット内の数字は、バンクＩＤを示す。上述した様に、バンク競合は、パケットの書込み時及び読出し時の何れにおいても起こり得るが、図２３に示す様に、パケット処理回路が、フロー種別を考慮することなく、単純に入力順にバンクシーケンシャルアクセスを行えば、書込み時のバンク競合は回避される。このため、書込み側のバンク調停は不要となる。
【００１４】
これに対し、読出し側では、パケットの出力順序は、ＱｏＳスケジューリング結果に依存するため、必ずしもバンクシーケンシャルアクセスとはならず、バンク競合が発生する可能性が高い。このため、読出し側では、必要に応じて、バンク調停が実行される。例えば、図２３に示す様に、同一のバンクＢ０内に、フローＦ０の４つのパケットが集中して格納された場合、スケジューラＳＣでは、４パケット連続でフローＦ０からリードされるため、バンク競合が３回発生することとなる。これにより、読出しパケット間に、上記ｔＲＣ（＝１０ｃｌｋ）分の遅延が３回発生する。その結果、パケット処理装置の性能が、上記性能要件未満（例えば、１ｐｋｔ／１０ｃｌｋ程度）に低下してしまう。
【００１５】
開示の技術は、上記に鑑みてなされたものであって、パケット処理遅延を抑制することのできるパケット処理装置、及びパケット処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１６】
上述した課題を解決し、目的を達成するために、本願の開示するパケット処理装置は、一つの態様において、第１のメモリと第２のメモリと決定部と読出部とを有する。前記第１のメモリは、パケットを格納する。前記第２のメモリは、前記パケットを格納する。前記決定部は、前記第１のメモリにおける前記パケットの格納位置を示すポインタの数に応じて、前記第１及び第２のメモリの中から、前記パケットを読み出すメモリを決定する。前記読出部は、前記決定部により決定されたメモリから、前記ポインタの示す格納位置に格納されたパケットを読み出す。
【発明の効果】
【００１７】
本願の開示するパケット処理装置の一つの態様によれば、パケット処理遅延を抑制することができる。
【図面の簡単な説明】
【００１８】
【図１】図１は、パケット処理装置の機能構成を示す図である。
【図２】図２は、パケット処理装置のハードウェア構成を示す図である。
【図３】図３は、ライト部の実行するライト処理を説明するためのフローチャートである。
【図４】図４は、スケジューラの実行するスケジューリング処理を説明するためのフローチャートである。
【図５】図５は、リード部の実行するリード処理を説明するためのフローチャートである。
【図６】図６は、実施例において、選択フローの読出ポインタ数に応じて、読出バッファが切り替えられる様子を説明するための図である。
【図７】図７は、読出ポインタ数が５以上のフローが選択された場合に性能要件を満たすことを説明するための図である。
【図８】図８は、フロー単位でのバンクシーケンシャルのパターンを示す図である。
【図９】図９は、ＳＲＡＭを使用しないために、パケット読出し時に性能要件を満たせない場合を説明するための図である。
【図１０】図１０は、パケット処理装置のライト部がＤＲＡＭとＳＲＡＭとにパケットの並列書込み（コピー）を行う条件を説明するための図である。
【図１１Ａ】図１１Ａは、パケット処理装置のリード部がＤＲＡＭからパケットを読み出す場合のポインタを示す図である。
【図１１Ｂ】図１１Ｂは、パケット処理装置のリード部がＳＲＡＭからパケットを読み出す場合のポインタを示す図である。
【図１２】図１２は、スケジューラが、ＤＲＡＭ、ＳＲＡＭ間に生じたポインタのずれを読み飛ばしにより解消する様子を示す図である。
【図１３】図１３は、ＤＲＡＭとＳＲＡＭとへの並列書込み（コピー）時における制約を説明するための図である。
【図１４Ａ】図１４Ａは、ＤＲＡＭとＳＲＡＭとへの並列書込み（コピー）時における制約を更に詳細に説明するための図である。
【図１４Ｂ】図１４Ｂは、ポインタの位相を合わせずに並列書込み（コピー）を行った結果、同一パケットの重複読出しが発生した例を示す図である。
【図１５】図１５は、リード部が、ＳＲＡＭからの読出しパケットを遅延させて、ＤＲＡＭ、ＳＲＡＭ間におけるレイテンシの相違を調整する様子を示す図である。
【図１６】図１６は、パケットバッファとしてＤＲＡＭのみを用いるパケット処理装置によるリード処理を説明するための図である。
【図１７】図１７は、パケットバッファとしてＤＲＡＭとＳＲＡＭとを併用するパケット処理装置によるリード処理を説明するための図である。
【図１８Ａ】図１８Ａは、全てのフローに４つ未満のポインタが溜まっている場合にフローが選択される様子を示す図である。
【図１８Ｂ】図１８Ｂは、ＳＲＡＭのポインタが空の場合にフローが選択される様子を示す図である。
【図１８Ｃ】図１８Ｃは、５つ以上のポインタが溜まっているフローが存在する場合にフローが選択される様子を示す図である。
【図１９】図１９は、変形例において、選択フローの読出ポインタ数に応じて、読出バッファが切り替えられる様子を説明するための図である。
【図２０】図２０は、ＱｏＳ制御により、パケットの入出力順序が入れ替わる様子を示す図である。
【図２１】図２１は、ポインタを用いたパケットのライト処理及びリード処理を説明するための図である。
【図２２】図２２は、パケットの書込み時及び読出し時にバンク調停が行われる様子を示す図である。
【図２３】図２３は、書込み側のバンク調停の不要なパケット処理を説明するための図である。
【発明を実施するための形態】
【００１９】
以下に、本願の開示するパケット処理装置、及びパケット処理方法の実施例を、図面を参照しながら詳細に説明する。なお、以下の実施例により本願の開示するパケット処理装置、及びパケット処理方法が限定されるものではない。
【００２０】
まず、本願の開示する一実施例に係るパケット処理装置の構成を説明する。図１は、パケット処理装置１０の機能構成を示す図である。図１に示す様に、パケット処理装置１０は、ＱｏＳ処理部１１とＤＲＡＭ１２とＳＲＡＭ１３とを有する。ＱｏＳ処理部１１は、ＤＲＡＭ１２とＳＲＡＭ１３との内の何れかのバッファから、パケットを読み出して装置外部へ出力する。ＱｏＳ処理部１１は、ライト部１１１とスケジューラ１１２とリード部１１３とを有する。
【００２１】
ライト部１１１は、フロー抽出部１１１ａと書込バッファ決定部１１１ｂとポインタ生成部１１１ｃとポインタ加算部１１１ｄとパケット書込部１１１ｅとパケット書込部１１１ｆとを有する。これら各構成部分は、一方向または双方向に、信号やデータの入出力が可能な様に接続されている。フロー抽出部１１１ａは、入力パケットのフローを識別し、何れのキューにキューイングするかを決定する。書込バッファ決定部１１１ｂは、入力パケットを双方のバッファに書き込むか、ＤＲＡＭ１２のみに書き込むかを決定する。ポインタ生成部１１１ｃは、入力パケットをポインタ化する。ポインタ加算部１１１ｄは、書込みのあったバッファのポインタ長を加算する。パケット書込部１１１ｅは、入力パケットをＤＲＡＭ１２に書き込む。パケット書込部１１１ｆは、入力パケットをＳＲＡＭ１３に書き込む。
【００２２】
スケジューラ１１２は、読出フロー選択部１１２ａと読出ポインタ数抽出部１１２ｂと読出バッファ決定部１１２ｃとポインタ減算部１１２ｄとを有する。これら各構成部分は、一方向または双方向に、信号やデータの入出力が可能な様に接続されている。読出フロー選択部１１２ａは、帯域制御や優先制御に従い、パケットを読み出すフローを選択する。読出ポインタ数抽出部１１２ｂは、帯域制御や優先制御の結果に基づき、選択されたフローから何ポインタ分のパケットを読出し可能であるかを示す読出ポインタ数を抽出する。読出バッファ決定部１１２ｃは、ＤＲＡＭ１２とＳＲＡＭ１３との内の何れのバッファからパケットを読み出すかを決定する。例えば、読出バッファ決定部１１２ｃは、選択されたフローのＤＲＡＭ１２のポインタ長が５以上である場合またはＳＲＡＭ１３が空である場合には、読出バッファをＤＲＡＭ１２に決定し、その他の場合にはＳＲＡＭ１３に決定する。ポインタ減算部１１２ｄは、読み出したパケットに相当するポインタ数分だけ、双方のバッファのポインタ長を減算する。
【００２３】
リード部１１３は、パケット読出部１１３ａとパケット取得部１１３ｂとパケット取得部１１３ｃと遅延挿入部１１３ｄとパケット出力部１１３ｅとを有する。これら各構成部分は、一方向または双方向に、信号やデータの入出力が可能な様に接続されている。パケット読出部１１３ａは、ポインタの示すバッファアドレスを参照し、該アドレスに格納されたパケットを、ＤＲＡＭ１２またはＳＲＡＭ１３から読み出す。パケット取得部１１３ｂは、ＤＲＡＭ１２から読み出されたパケットを取得する。パケット取得部１１３ｃは、ＳＲＡＭ１３から読み出されたパケットを取得する。遅延挿入部１１３ｄは、ＳＲＡＭ１３から取得されたパケットに対し、固定遅延（レイテンシ）を挿入する。パケット出力部１１３ｅは、パケット取得部１１３ｂ及び遅延挿入部１１３ｄから入力されたパケットを合流させ、入力順に装置外部へ出力する。
【００２４】
ＤＲＡＭ１２は、メインのパケットバッファであり、複数のメモリセルアレイ（例えば、８つのバンク）を有する。ＳＲＡＭ１３は、サブのパケットバッファであり、単一のメモリセルアレイを有する。
【００２５】
続いて、パケット処理装置１０のハードウェア構成を説明する。図２は、パケット処理装置１０のハードウェア構成を示す図である。図２に示す様に、パケット処理装置１０は、プロセッサ１０ａと、記憶装置１０ｂと、ＤＲＡＭ１０ｃと、ＳＲＡＭ１０ｄと、入力装置１０ｅと、表示装置１０ｆと、通信装置１０ｇとが、バスＢを介して各種信号やデータの入出力が可能な様に接続されている。プロセッサ１０ａは、例えば、上述したＦＰＧＡ、ＡＳＩＣ、ＮＰＵの他、ＣＰＵ（Central  Processing  Unit）、ＤＳＰ（Digital  Signal  Processor）である。記憶装置１０ｂは、例えば、ＨＤ（Hard  Disk）、ＲＯＭ（Read  Only  Memory)、フラッシュメモリ等の不揮発性記憶装置である。また、入力装置１０ｅは、例えば、キーボード、マウス、タッチパネルであり、表示装置１０ｆは、例えば、ＬＣＤ（Liquid  Crystal  Display）、ＥＬＤ（Electro  Luminescence  Display）である。通信装置１０ｇは、例えば、ＮＷ（NetWork）ボードである。
【００２６】
機能構成とハードウェア構成との対応関係に関し、図１に示したパケット処理装置１０の機能的構成要素の内、ＱｏＳ処理部１１は、例えば、プロセッサ１０ａと記憶装置１０ｂとにより実現される。また、ＤＲＡＭ１２は、例えばＤＲＡＭ１０ｃにより実現され、ＳＲＡＭ１３は、例えばＳＲＡＭ１０ｄにより実現される。
【００２７】
次に、パケット処理装置１０の動作を説明する。
【００２８】
図３は、ライト部１１１の実行するライト処理を説明するためのフローチャートである。まずＳ１では、パケット処理装置１０にパケットが到達すると、フロー抽出部１１１ａは、該パケットのフローＩＤを基にフローを識別する。次に、書込バッファ決定部１１１ｂは、Ｓ１で識別されたフローにおけるＳＲＡＭ１３のポインタ長が４未満であるか否かを判定する（Ｓ２）。該判定の結果、上記ポインタ長が４未満である場合（Ｓ２；Ｙｅｓ）、書込バッファ決定部１１１ｂは、Ｓ１で識別されたフローにおけるＤＲＡＭ１２のポインタ長がＳＲＡＭ１３のポインタ長と同一であるか否かを判定する（Ｓ３）。該判定の結果、各ポインタ長が同一である場合（Ｓ３；Ｙｅｓ）、パケット書込部１１１ｅとパケット書込部１１１ｆとはそれぞれ、ＤＲＡＭ１２とＳＲＡＭ１３とに並列にパケットを格納させる（Ｓ４）。Ｓ５では、ポインタ加算部１１１ｄは、ＤＲＡＭ１２、ＳＲＡＭ１３双方のポインタ長を加算する。
【００２９】
なお、上記Ｓ２における判定の結果、上記ポインタ長が４である場合（Ｓ２；Ｎｏ）、あるいは、上記Ｓ３における判定の結果、各ポインタ長が異なる場合（Ｓ３；Ｎｏ）には、Ｓ６以降の処理に移行する。Ｓ６では、パケット書込部１１１ｅは、ＤＲＡＭ１２にパケットを格納させる。そして、ポインタ加算部１１１ｄは、ＤＲＡＭ１２のポインタ長を加算する（Ｓ７）。
【００３０】
図４は、スケジューラ１１２の実行するスケジューリング処理を説明するためのフローチャートである。まずＳ１１では、読出フロー選択部１１２ａは、選択候補のフローＩＤとして“Ｘ”を設定する。次に、読出フロー選択部１１２ａは、ポインタ格納の有無や、契約に基づく帯域制御処理（シェーピング）の可否に基づき、上記“Ｘ”が選択可能であるか否かの判定を行う（Ｓ１２）。該判定の結果、上記“Ｘ”が選択可能である場合（Ｓ１２；Ｙｅｓ）、読出ポインタ数抽出部１１２ｂは、帯域制御や優先制御の結果に基づき、上記読出ポインタ数を抽出する（Ｓ１３）。
【００３１】
Ｓ１４では、読出バッファ決定部１１２ｃは、ＤＲＡＭ１２が未リードであるか否かを判定する。該判定の結果、未リードである場合（Ｓ１４；Ｙｅｓ）、読出バッファ決定部１１２ｃは、フローＩＤ“Ｘ”に関し、ＤＲＡＭ１２のポインタ長が５以上であるか否か、及び、ＳＲＡＭ１３が空であるか否かを判定する（Ｓ１５）。該判定の結果、少なくとも一方の条件を満たす場合（Ｓ１５；Ｙｅｓ）、ポインタ減算部１１２ｄは、ＤＲＡＭ１２のポインタをキューから読み出す（Ｓ１６）。このとき、ポインタ減算部１１２ｄは、ＳＲＡＭ１３からもポインタの読み飛ばしを行う（Ｓ１７）。その結果、ＤＲＡＭ１２はパケットリード済となる（Ｓ１８）。
【００３２】
Ｓ１９では、読出フロー選択部１１２ａは、選択されたフローの合計数が“５”以上であるか否かを判定し、“５”以上でない場合（Ｓ１９；Ｎｏ）には、Ｓ１１で設定した“Ｘ”に１を加算する（Ｓ２０）。Ｓ２１では、読出フロー選択部１１２ａは、フローが一周したか否か、すなわち、スケジューリング対象となる全てのフローに対して、上述の一連の処理が実行されたか否かの判定を行う。該判定の結果、フローが一周した場合（Ｓ２１；Ｙｅｓ）には一連の処理を終了し、一周していない場合（Ｓ２１；Ｎｏ）には、上記Ｓ１１以降の処理が再び実行される。
【００３３】
上記Ｓ１４において、ＤＲＡＭ１２が未リードでない場合（Ｓ１４；Ｎｏ）、読出バッファ決定部１１２ｃは、フローＩＤ“Ｘ”に関し、ＳＲＡＭ１３のポインタ長が０であるか否かを判定する（Ｓ２２）。該判定の結果、ＳＲＡＭ１３のポインタ長が０でない場合（Ｓ２２；Ｎｏ）、ポインタ減算部１１２ｄは、上記Ｓ１６とは反対に、ＳＲＡＭ１３のポインタをキューから読み出す（Ｓ２３）。このとき、ポインタ減算部１１２ｄは、ＤＲＡＭ１２からもポインタの読み飛ばしを行う（Ｓ２４）。その後は、上述したＳ１９以降の処理に移行する。
【００３４】
なお、上記Ｓ１２において上記“Ｘ”が選択可能でない場合（Ｓ１２；Ｎｏ）、あるいは、上記Ｓ２２においてＳＲＡＭ１３のポインタ長が０である場合（Ｓ２２；Ｙｅｓ）には、パケット処理装置１０は、以降の処理を省略し、Ｓ２０の処理に移行する。また、上記Ｓ１５において何れの条件も満たさない場合（Ｓ１５；Ｎｏ）には、Ｓ２３以降の処理が実行される。また、上記Ｓ１９において、選択されたフローの合計数が“５”以上である場合（Ｓ１９；Ｙｅｓ）には、パケット処理装置１０は、上述したＳ２０、Ｓ２１の各処理を省略し、一連の処理を終了する。
【００３５】
図５は、リード部１１３の実行するリード処理を説明するためのフローチャートである。まずＳ３１では、パケット取得部１１３ｂは、ポインタの示すバッファアドレスを基にＤＲＡＭ１２から読み出されたパケットを取得する。同様に、Ｓ３２では、パケット取得部１１３ｃは、ポインタの示すバッファアドレスを基にＳＲＡＭ１３から読み出されたパケットを取得する。次に、遅延挿入部１１３ｄは、ＳＲＡＭ１３から取得されたパケットに対し、固定遅延（レイテンシ）を挿入する（Ｓ３３）。Ｓ３４では、パケット出力部１１３ｅは、パケット取得部１１３ｂ及び遅延挿入部１１３ｄから入力されたパケットを合流させ、入力順に装置外部へ出力する。
【００３６】
以下、図６〜図１９を参照しながら、パケット処理装置１０の動作について、より詳細に説明する。図６は、実施例において、選択フローの読出ポインタ数に応じて、読出バッファが切り替えられる様子を説明するための図である。なお、図６において、ポインタ内の数字はバンク番号に対応し、例えば、ポインタ内の数字が“０”である場合、該ポインタの示すパケットが、ＤＲＡＭ１２のバンクＢ０に格納されていることを示す。図６に示す様に、パケット処理装置１０では、ＤＲＡＭ１２とＳＲＡＭ１３とへの並列書込み（コピー）処理が実行される。具体的には、ライト部１１１は、ＤＲＡＭ１２に対しては、フロー単位にバンクシーケンシャルにパケットを書き込む。
【００３７】
例えば、ライト部１１１が、フローＦ０の９つのパケットをＤＲＡＭ１２に書き込む場合、１つ目のパケットをバンクＢ０、２つ目のパケットをバンクＢ１、３つ目のパケットをバンクＢ２という様に、ライト先のバンク番号を１ずつインクリメントしながら書込みを行う。これにより、フロー単位でのバンク競合は回避され、１フロー当たりの読出ポインタ数が５以上であれば、パケット処理装置１０は、性能要件である５ｐｋｔ／１０ｃｌｋを満たすことができる。ここで、性能とは、パケット処理装置１０が単位時間（例えば、１０ｃｌｋ）当たりに読み出し可能なパケットの数であり、例えば、１０ｃｌｋ当たりに５つのパケットの読み出しが可能である場合には、パケット処理装置１０の性能は“５ｐｋｔ／１０ｃｌｋ”となる。
【００３８】
一方、ＳＲＡＭ１３は、フロー単位に、４ポインタ分までのパケットを溜められるため、読出ポインタ数が４以下の場合には、パケット処理装置１０は、ＳＲＡＭ１３からパケットの読出しを行う。すなわち、パケット処理装置１０は、スケジューラ１１２による読出しフローの選択後、該フローの読出ポインタ数に応じて、ＤＲＡＭ１２、ＳＲＡＭ１３の何れかから、パケットの読出しを行う。
【００３９】
図７は、読出ポインタ数が５以上のフローが選択された場合に性能要件を満たすことを説明するための図である。なお、図７において、ポインタ内の数字はバンク番号に対応し、例えば、ポインタ内の数字が“３”である場合、該ポインタの示すパケットが、ＤＲＡＭ１２のバンクＢ３に格納されていることを示す。図７に示す様に、フロー単位にバンクシーケンシャルに書込みが行われた場合、各フローＦ０、Ｆｎに５ポインタ以上溜まっていれば、バンクＢ１において競合が発生し、次にバンクＢ１を読み出すまでに１０ｃｌｋ待ったとしても、性能要件は満たされる。すなわち、１７ｃｌｋの間に、フローＦ０のキューから全５パケットと、フローＦｎのキュー（７パケット）から６パケットとの読出しが可能であることから、パケット処理装置１０は、１１ｐｋｔ／１７ｃｌｋの性能となり、性能要件５ｐｋｔ／１０ｃｌｋを満たすことができる。
【００４０】
上述した様に、フロー単位では必ず、ライト順＝リード順となるため、パケット処理装置１０は、ＱｏＳスケジューリングに基づいて選択されたフロー（Ｆ０、Ｆｎ）を、図７に示す様に１フロー／１０ｃｌｋで読み出すことで、性能要件である５ｐｋｔ／１０ｃｌｋを超える。従って、パケット処理装置１０は、例えば、各フローＦ０、Ｆｎから８ポインタずつ読出し可能であれば、更に高い性能要件である８ｐｋｔ／１０ｃｌｋを満たすことも可能となる。
【００４１】
ここで、フロー単位でのバンクシーケンシャルによる書込みは、フロー毎に異なるパターンで行われるものとしてもよい。図８は、フロー単位でのバンクシーケンシャルのパターンを示す図である。図８に示す様に、バンクシーケンシャルのパターンは、必ずしもフローＦ０の様な昇順の並びでなくてもよく、例えば“１、３、５、７、０、２、４、６”の様に、フロー単位でみた場合に重複するバンクの無い並びであればよい。また、バンク番号の順列は、必ずしもフロー間で統一されていなくてもよい。すなわち、パケットは、図８に示す様に、各フローＦ０〜Ｆｎ毎に異なるバンク順列で格納されるものとしてもよい。
【００４２】
例えば、全てのフローＦ０〜Ｆｎが、フローＦ０の様に“０、１、２、３、４、５、６、７”のシーケンシャルパターンであったとすると、各フローＦ０〜Ｆｎの入力タイミングが同期してしまった場合に、書込み時のバンク競合が高い頻度で発生してしまう。例えば、パケット処理装置１０が、フロー番号を１パケット毎にインクリメントしながらパケットを入力すると、バンクＢ０に全フロー数分のパケットが書き込まれた後、バンクＢ１に全フロー数分のパケットが書き込まれる。その後更に、バンクＢ２に全フロー数分のパケットが書き込まれ、バンクＢ３に全フロー数分のパケットが書き込まれるという様に、各バンクＢ０〜Ｂ７へのパケット書込み時に、バンク競合が頻繁に発生してしまう。そこで、パケット処理装置１０は、図８に示す様に、シーケンシャルパターンを適宜変更することで、書込みに使用するバンクをフロー間で分散させて、バンク競合の頻度を抑制する。
【００４３】
なお、上記バンクシーケンシャルのパターンは、パケット処理装置１０が、記憶装置１０ｂ内にランダマイズテーブルを具備し、該テーブルに記録されたパターンを書込み時に参照するものとしてもよい。あるいは、パケット処理装置１０が、ＰＮ（Pseudorandom  Numbers）回路等の疑似ランダム発生回路を有し、各フローＦ０〜Ｆｎに対し、一意のシーケンシャルパターンを割り当てる演算を、パケット書込み時に行うものとしてもよい。
【００４４】
バンクシーケンシャルの書込みを行っても、図７に示した様に、書込み時のバンク競合は完全に回避される訳ではないが、パケット処理装置１０は、選択されたフローから５ｐｋｔ／１０ｃｌｋ以上の読出しを行うことで、性能要件は満たされる。しかしながら、パケット処理装置１０は、選択されたフローから４ｐｋｔ／１０ｃｌｋ以下のパケットしか読み出せない場合、性能要件を満たすためには、１０ｃｌｋの間に、複数フローを選択してパケットを読み出す必要がある。
【００４５】
図９は、ＳＲＡＭ１３を使用しないために、パケット読出し時に性能要件を満たせない場合を説明するための図である。なお、図９において、ポインタ内の数字はバンク番号に対応し、例えば、ポインタ内の数字が“０”である場合、該ポインタの示すパケットが、ＤＲＡＭ１２のバンクＢ０に格納されていることを示す。図９に示す様に、パケット処理装置１０のスケジューラ１１２が、１０ｃｌｋ内に複数のフロー（例えば、４フロー）を選択したとしても、各フローＦ０、Ｆ１、Ｆ２、Ｆｎに１ｐｋｔずつしか溜まっておらず、かつ、全てのパケットが同一のバンクＢ０に格納されることがある。この場合、これらのパケットの読出し時に、バンクＢ０においてバンク競合が発生してしまい、その結果、ＤＲＡＭ１２のバンクＢ０から４つのパケットの読出しが完了するまでに、３０ｃｌｋ（＝１０ｃｌｋ×３）を要してしまう。４ｐｋｔ／３０ｃｌｋ＜５ｐｋｔ／１０ｃｌｋであるので、この場合、パケット処理装置１０は、性能要件を満たすことができない。
【００４６】
そこで、パケット処理装置１０は、４以下のポインタしかキューに溜まっていないフローのパケットは、ＤＲＡＭ１２ではなく、バンク競合の発生しないＳＲＡＭ１３から読み出す。これにより、パケット処理装置１０は、バンク競合に伴うパケット処理遅延の抑制を図る。なお、性能要件が５ｐｋｔ／１０ｃｌｋである場合、ＳＲＡＭ１３は、１フロー当たり４（＝５−１）パケットを格納可能な程度の容量を有していればよい。
【００４７】
但し、パケット処理装置１０が、ＤＲＡＭ１２に加えてＳＲＡＭ１３を併用することにより、パケットの読出し時に、順序の逆転や重複読出しが起きることが懸念される。そこで、パケット処理装置１０は、ライト部１１１によりパケットを書き込む際、フロー毎にポインタ（位相）を合わせながら、ＤＲＡＭ１２とＳＲＡＭ１３とに対し、並列書込み（コピー）を行う。その後は、パケット処理装置１０は、選択されたフローの読出ポインタ数に応じて、リード部１１３により、ＤＲＡＭ１２、ＳＲＡＭ１３の何れかのバッファからパケットを読み出す。
【００４８】
図１０は、パケット処理装置１０のライト部１１１がＤＲＡＭ１２とＳＲＡＭ１３とにパケットの並列書込み（コピー）を行う条件を説明するための図である。なお、図１０において、ポインタ内の数字はバンク番号に対応し、例えば、ポインタ内の数字が“１”である場合、該ポインタの示すパケットが、ＤＲＡＭ１２のバンクＢ１に格納されていることを示す。パケット処理装置１０は、ＤＲＡＭ１０ｃに、ＤＲＡＭポインタ長及びＳＲＡＭポインタ長を、フロー単位でインクリメント可能に保持しておく。例えば、図１０に示す例では、スケジューラ１１２のフローＦ０のキューには、各バッファ（ＤＲＡＭ１２、ＳＲＡＭ１３）のポインタが１つずつ溜まっている。従って、ＤＲＡＭポインタ長及びＳＲＡＭポインタ長として、何れも“１”が保持される。
【００４９】
また、パケット処理装置１０のライト部１１１は、「ＳＲＡＭポインタ長＜４、かつ、ＤＲＡＭポインタ長＝ＳＲＡＭポインタ長」の条件を満たす場合には、ＤＲＡＭ１２とＳＲＡＭ１３とに対し、パケットを並列書込みする。なお、かかる条件は、ＳＲＡＭ１３が最大４ｐｋｔ／フローまで格納可能な場合の条件であり、例えば、ＳＲＡＭ１３の最大格納パケット数が１フロー当たりＮパケット（Ｎは自然数）の場合には、上記条件は、「ＳＲＡＭポインタ長＜Ｎ、かつ、ＤＲＡＭポインタ長＝ＳＲＡＭポインタ長」となる。
【００５０】
例えば、図１０に示す例では、スケジューラ１１２のフローＦ０のキューに溜まっているＳＲＡＭポインタは、バンクＢ０のポインタＰ１の１つのみであることから、ＳＲＡＭポインタ長＝１である。このため、ＳＲＡＭポインタ長＜４が成立する。また、フローＦ０のキューに溜まっているＤＲＡＭポインタについても、バンクＢ０のポインタＰ２の１つのみであることから、ＤＲＡＭポインタ長＝１である。このため、ＤＲＡＭポインタ長＝ＳＲＡＭポインタ長も成立する。従って、上記条件が満たされる。
【００５１】
従って、パケット処理装置１０のライト部１１１は、矢印Ｙ１、Ｙ２に示す様に、後続するパケットの並列書込みを実行する。以降、新たなパケットがライト部１１１に入力された場合にも、上記条件を満たす限り、ＤＲＡＭ１２、ＳＲＡＭ１３に対するパケットの並列書込みが実行される。これにより、ＤＲＡＭ１２とＳＲＡＭ１３とには、フロー毎にポインタ（位相）が合った状態で、同一のパケットが順番に書き込まれることとなる。従って、パケット処理装置１０は、ＳＮ（Sequence  Number）を用いた順序制御等の煩雑な処理を行うことなく、簡易な構成で、パケット読出し時における順序逆転や重複読出しを防止することができる。その結果、パケット処理装置１０の信頼性が向上する。
【００５２】
図１１Ａは、パケット処理装置１０のリード部１１３がＤＲＡＭ１２からパケットを読み出す場合のポインタを示す図である。なお、図１１Ａにおいて、ポインタ内の数字はバンク番号に対応し、例えば、ポインタ内の数字が“３”である場合、該ポインタの示すパケットが、ＤＲＡＭ１２のバンクＢ３に格納されていることを示す。ＤＲＡＭ１２とＳＲＡＭ１３との内、何れのバッファからパケットを読み出すかの判定条件は、上述した様に、選択されたフローに関し、「ＤＲＡＭポインタ長≧５またはＳＲＡＭ１３が空」を満たすか否かである。上記条件を満たす場合には、選択されたフローのパケットは、ＤＲＡＭ１２から読み出され、満たさない場合には、ＳＲＡＭ１３から読み出される。
【００５３】
図１１Ａに示す例では、ＤＲＡＭポインタＰ３に示す様に、フローＦ０のキューには５つのＤＲＡＭポインタが溜まっているので、ＤＲＡＭポインタ長≧５を満たす。従って、フローＦ０のパケットは、ＤＲＡＭ１２から読み出される。この場合、複数フローのパケットがＤＲＡＭ１２から読み出されるとバンク競合が発生するため、リード部１１３は、１０ｃｌｋ内に、他のフローのパケットをＤＲＡＭ１２から読み出すことはできない。しかしながら、パケットを読み出すフロー（図１１ＡではフローＦ０）には、既に５以上のポインタが溜まっているため、リード部１１３は、１つのフローだけで５つ以上のパケットの読出しが可能である。従って、パケット処理装置１０は、５ｐｋｔ／１０ｃｌｋの性能要件を満たすことができる。
【００５４】
一方、図１１Ｂは、パケット処理装置１０のリード部１１３がＳＲＡＭ１３からパケットを読み出す場合のポインタを示す図である。なお、図１１Ｂにおいて、ポインタ内の数字はバンク番号に対応し、例えば、ポインタ内の数字が“０”である場合、該ポインタの示すパケットが、ＤＲＡＭ１２のバンクＢ０に格納されていることを示す。図１１Ｂに示す例では、ＳＲＡＭポインタＰ４〜Ｐ８に示す様に、各フローＦ０〜Ｆ４のキューに１つずつのＳＲＡＭポインタが溜まっているので、ＤＲＡＭポインタ長≧５を満たさない。また、ＳＲＡＭポインタが存在するため、ＳＲＡＭ１３が空の場合にも該当しない。従って、各フローＦ０〜Ｆ４のパケットは、ＳＲＡＭ１３から読み出される。ＳＲＡＭ１３では、複数フローのパケットが読み出されてもバンク競合は発生しないため、リード部１１３は、１０ｃｌｋ内に、各フローＦ０〜Ｆ４から、計５つのパケットの読出しが可能である。従って、パケット処理装置１０は、５ｐｋｔ／１０ｃｌｋの性能要件を満たすことができる。すなわち、パケット処理装置１０は、上記判定条件を満たすか否かに拘らず、常に、性能要件を上回る性能を備えることができる。
【００５５】
ここで、一方のパケットバッファのみから読出しが行われた場合、ＤＲＡＭポインタ、ＳＲＡＭポインタ間のポインタ（位相）のずれが懸念される。しかしながら、パケット処理装置１０は、読出しのなかったバッファのポインタを実際に読み出すのではなく、該ポインタのリードアドレスを、実際に読み出された他方のバッファのポインタ数分だけインクリメント（以下、「読み飛ばし」と記す。）することで対応可能である。例えば、リード部１１３がＳＲＡＭ１３から３つのパケットを読み出した場合、キューからも３つのＳＲＡＭポインタが読み出されるが、これに合わせて、スケジューラ１１２は、ＤＲＡＭポインタに対し、同数である３ポインタ分の読み飛ばしをかける。これにより、パケット処理装置１０は、各バッファ間に生じたポインタのずれを解消する。
【００５６】
図１２は、スケジューラ１１２が、ＤＲＡＭ、ＳＲＡＭ間に生じたポインタのずれを読み飛ばしにより解消する様子を示す図である。図１２に示す様に、例えば、あるフローのＳＲＡＭポインタが１つ読み出された場合、ＤＲＡＭ側では、ポインタの読出しは行われないが、アドレスインクリメントにより、ＳＲＡＭ側と同数（１ポインタ分）の読み飛ばしが実行される。同様に、ＳＲＡＭポインタが２つ読み出された場合、ＤＲＡＭ側では、ポインタの実際の読出しは行われないが、アドレスインクリメントにより、ＳＲＡＭ側と同数（２ポインタ分）の読み飛ばしが実行される。これらの場合には、ＤＲＡＭ１２とＳＲＡＭ１３との何れについても、キューが空になる。
【００５７】
次に、キューには４つのポインタが溜まっているが、スケジューラ１１２からの指示に従って、４つの内３つのＳＲＡＭポインタのみが読み出された場合、スケジューラ１１２は、ＤＲＡＭ側においても３ポインタ分の読み飛ばしを行う。その結果、ＤＲＡＭ１２、ＳＲＡＭ１３共に、ポインタがキューに１つずつ残ることになるが、この場合でも、ポインタＰ９に示す様にポインタの位相は合っている（同期している）。このため、次回何れのバッファからパケットの読出しが行われたとしても、順序逆転や重複読出しが起こることはない。
【００５８】
なお、ＤＲＡＭポインタが５つ、ＳＲＡＭポインタが４つ、キューに溜まっている場合に、ＤＲＡＭ１２から５ポインタ分のパケットが読み出されると、ＳＲＡＭ側では、読み出すＳＲＡＭポインタが不足してしまう。すなわち、キューのＳＲＡＭポインタが空になった後に更に、ＳＲＡＭポインタの読出しが掛かってしまう。この場合には、スケジューラ１１２は、ＳＲＡＭ側において、ＤＲＡＭ側の読出しポインタ数（５つ）に拘らず、５ポインタではなく４ポインタまでの読み飛ばしを行う。これにより、ポインタの位相のずれが回避される。
【００５９】
図１３は、ＤＲＡＭ１２とＳＲＡＭ１３とへの並列書込み（コピー）時における制約を説明するための図である。上述した様に、ＤＲＡＭ１２とＳＲＡＭ１３とへの並列書込み（コピー）は、ポインタの位相の合致が条件となっている。ところが、ＳＲＡＭポインタは４つまでしかキューに溜められないため、図１３に示す様にＤＲＡＭポインタが５つ以上溜まると、スケジューラ１１２は、ＳＲＡＭ側の位相をＤＲＡＭ側の位相に合わせることができない。このため、上記条件が満たされず、ＤＲＡＭポインタのキューが一旦空になるまで、パケット処理装置１０は、ＤＲＡＭ１２とＳＲＡＭ１３との併用ができなくなる。
【００６０】
しかしながら、上述のケースにおいても、ポインタＰ１０に示す様に、パケットが潤沢に入力されＤＲＡＭ１２が空にならない間は、リード部１１３が、パケットをＤＲＡＭ１２から読み続けることで、性能要件を満たすことができる。これに対し、ポインタＰ１１に示す様に、ＤＲＡＭ１２が空になりかけたフロー（例えば、ＤＲＡＭポインタが１つのフロー）が同時に多発すると、スケジューラ１１２は、バンク競合を回避するために１０ｃｌｋに１つのフローしか選択しない。その結果、一時的ではあるが、パケットのリード間隔が最大でも１ｐｋｔ／１０ｃｌｋに低下し、性能要件を下回ることとなる。
【００６１】
しかしながら、上述の様な同時多発のケースは非常に稀である上に、該ケースが発生したとしても、リード部１１３は、ＤＲＡＭ１２から、最大でバンク数分（８ｐｋｔ／１０ｃｌｋ）の読出しが可能である。このため、上述した性能の低下は、時間の経過に伴って挽回可能である。従って、ある程度長いスパン（例えば、１０分〜１時間程度）でみると、上述した一時的な性能低下が、パケット処理装置１０自体の性能に与える影響は、十分に小さいものとなる。
【００６２】
以下、図１４Ａを参照し、並列書込み（コピー）時における制約について、より詳細に説明する。図１４Ａは、ＤＲＡＭ１２とＳＲＡＭ１３とへの並列書込み（コピー）時における制約を更に詳細に説明するための図である。リード部１１３が、あるフローのパケットを読み出した結果、ＤＲＡＭ１２、ＳＲＡＭ１３が何れも空になったり、位相が合った状態でポインタが残る様な場合には、次回のパケット書込み時は、双方のバッファに並列書込みが可能である。ところが、位相が合っていない状態、すなわち「ＤＲＡＭポインタ長≠ＳＲＡＭポインタ長」の場合には、図１３に示した様に、ＳＲＡＭ１３への書込み（コピー）は行われず、入力パケットは、ＤＲＡＭ１２にのみ書き込まれる。
【００６３】
図１４Ａに示す様に、あるフローに９つのパケットがバースト入力すると、該フローがスケジューラ１１２により選択される。その後、バンク競合回避のため、ＤＲＡＭ１２のバンク数である８つのパケットが、１０ｃｌｋ以内にＤＲＡＭ１２から読み出されるが、上記フローには９つのポインタが溜まっているため、ＤＲＡＭ１２には、依然、１パケットが残存することとなる。その後、更に１パケットが入力されると、その時点では、ＤＲＡＭポインタ長（＝１）≠ＳＲＡＭポインタ長（＝０）であるため、並列書込み（コピー）の条件は満たされない。このため、並列書込みは行われず、ＤＲＡＭ１２にのみ書込みが行われる。従って、後続するパケットは、ＤＲＡＭ１２が空になるまで、ＳＲＡＭ１３に書き込まれることはない。その結果、次回も同一のフローが選択された場合、ＳＲＡＭ１３は空であるため、リード部１１３は、パケットをＤＲＡＭ１２からしか読み出すことができなくなる。なお、リード部１１３は、ＤＲＡＭ１２から他のフローのパケットを追加的に読み出そうとすると、１０ｃｌｋ中に複数のフローを選択することとなり、バンク競合の発生を回避することができない。
【００６４】
すなわち、図１４Ａに示す様に、ＳＲＡＭ１３が空の時に、ＤＲＡＭ１２内に１つ〜４つのパケットしか溜まっていないフローが連続して選択されてしまうと、その間は、リード部１１３は、１０ｃｌｋ内に、最大でも４つのパケットしか読み出すことができない。その結果、パケット処理装置１０は、一時的に性能要件を満たせなくなる。しかしながら、上述した様に、性能低下にみえる程、上記フローが連続して選択されることは稀である。また、再び、該フローにポインタが溜まってくれば、ＤＲＡＭ１２から、８ｐｋｔ／１０ｃｌｋの割合でパケットの読出しが可能となる。従って、性能は回復する。
【００６５】
例えば、図１４Ａに示す例では、初回の読出し時には、８ｐｋｔ／１０ｃｌｋでパケットが読み出されるが、次回の読出し時には、２ｐｋｔ／１０ｃｌｋでしか読出しが行われない。しかしながら、この場合でも合算すると、１０ｐｋｔ／２０ｃｌｋすなわち性能要件の５ｐｋｔ／１０ｃｌｋでパケットが読み出されていることとなり、性能的な問題は生じない。
【００６６】
図１４Ｂは、ポインタの位相を合わせずに並列書込み（コピー）を行った結果、同一パケットの重複読出しが発生した例を示す図である。図１４Ｂに示す様に、仮にポインタの位相が合っていない状態で、ＤＲＡＭ１２とＳＲＡＭ１３とに対する並列書込みが行われると、ＤＲＡＭポインタＰ１２の残存によりＳＲＡＭポインタＰ１３の位相がずれる。このため、スケジューラ１１２は、ＳＲＡＭ１３からのパケットの読出し（リード）に合わせて、ＤＲＡＭ１２側のポインタＰ１２を読み飛ばす。これにより、次回の読出しでは、ＤＲＡＭ１２側のポインタＰ１３が読み出されることとなるが、この時点では既に、ＳＲＡＭ１３側からポインタＰ１３の読出しが終了している。従って、ＤＲＡＭポインタＰ１２に後続するＤＲＡＭポインタＰ１３の読出しは、重複読出しとなる。この重複読出しの問題は、上述した様に、パケット処理装置１０が、パケットを並列書込みする条件に「ＤＲＡＭポインタ長＝ＳＲＡＭポインタ長」を含めて、ポインタ位相を合わせることで、解消する。
【００６７】
スケジューラ１１２は、１０ｃｌｋ内に複数のフローを選択する際、バンク競合の無いＳＲＡＭ１３から複数フローを選択してもよいし、ＤＲＡＭ１２から１フロー選択した後に、ＳＲＡＭ１３から、１または複数のフローを選択してもよい。但し、ＤＲＡＭ１２、ＳＲＡＭ１３には、読出しリクエストを受けてから、実際にパケットが読み出されるまでの時間（以下、「レイテンシ」と記す。）が存在する。通常、ＤＲＡＭ１２のレイテンシは、ＳＲＡＭ１３のレイテンシよりも大きいため、ＤＲＡＭ１２、ＳＲＡＭ１３の順に読出しリクエストが掛かると、本来読み出したいフロー順序とは異なる順序で、パケットの読出しが行われてしまう可能性がある。
【００６８】
図１５は、リード部１１３が、ＳＲＡＭ１３からの読出しパケットを遅延させて、ＤＲＡＭ１２、ＳＲＡＭ１３間におけるレイテンシの相違を調整する様子を示す図である。なお、図１５において、ポインタ内の数字はバンク番号に対応し、例えば、ポインタ内の数字が“３”である場合、該ポインタの示すパケットが、ＤＲＡＭ１２のバンクＢ３に格納されていることを示す。図１５に示す様に、ＤＲＡＭ１２におけるレイテンシをＤＲＡＭリードレイテンシＬ１とすると、バンクシーケンシャルの場合、各パケット間で、ＤＲＡＭリードレイテンシＬ１は一定の値（例えば、５ナノ秒）となる。一方、ＳＲＡＭ１３におけるレイテンシをＳＲＡＭリードレイテンシＬ２とすると、ＳＲＡＭリードレイテンシＬ２は、各パケット間で常に一定の値（例えば、１ナノ秒）となる。
【００６９】
このため、遅延未挿入の場合、ＳＲＡＭ１３に格納されたフローＦ１のパケットが、ＤＲＡＭ１２に格納されたフローＦ０のパケットよりも先に読み出され、本来の読出し順序と逆転してしまう可能性がある。そこで、各パケットバッファ（ＤＲＡＭ１２、ＳＲＡＭ１３）のレイテンシの値は既知であるため、リード部１１３は、図１５のパケットＰ１４に示す様に、ＳＲＡＭ１３から読み出したパケットに対し固定遅延を挿入することで、各パケットバッファのレイテンシを一致させる。すなわち、リード部１１３は、ＳＲＡＭ１３から読み出されたパケットに対し、ＤＲＡＭ１２からの読出し時に生じる第１待ち時間とＳＲＡＭ１３からの読出し時に生じる第２待ち時間との差に相当する時間分の遅延を挿入して、ＤＲＡＭ１２とＳＲＡＭ１３との待ち時間（レイテンシ）を合わせる。これにより、フローＦ０、Ｆ１間におけるパケットの読出し順序の逆転は解消され、本来読み出したい順序通りのパケットの読出しが可能となる。その結果、パケット処理装置１０は、制御されたフロー順序（例えば、フローＦ０、Ｆ１の順）で、パケットを装置外部へ出力することができる。
【００７０】
次に、図１６、図１７を参照し、従来のリード処理と本実施例に係るリード処理との相違について、説明する。説明の前提として、スケジューラ１１２は、１０ｃｌｋ内に、優先度の高い順に５つのフローを選択し、選択されたフローには、それぞれ１つずつのポインタが溜まっていたものとする。
【００７１】
図１６は、パケットバッファとしてＤＲＡＭ１２のみを用いるパケット処理装置１０によるリード処理を説明するための図である。なお、図１６において、ポインタ内の数字はバンク番号に対応し、例えば、ポインタ内の数字が“０”である場合、該ポインタの示すパケットが、ＤＲＡＭ１２のバンクＢ０に格納されていることを示す。また、ＮＯＰ（No  OPeration）は、バスの切替え等に起因してアクセスの無い状態を示す。
【００７２】
図１６に示す様に、選択された５つのフローＦ０〜Ｆ４のバンクが、選択された順にバンクＢ０、Ｂ７、Ｂ０、Ｂ０、Ｂ０であったとする。この場合、最初のバンクＢ０（フローＦ０のポインタのバンク）と次のバンクＢ７（フローＦ１のポインタのバンク）とは、異なるバンクのため、リード処理に際してバンク競合は発生しない。このため、１０ｃｌｋ内に２パケットの読出しが可能である。しかしながら、後続のバンクＢ０（フローＦ２のポインタのバンク）、Ｂ０（フローＦ３のポインタのバンク）、Ｂ０（フローＦ４のポインタのバンク）では、それぞれ１つ前のフローのバンクとの間でバンク競合が発生する。このため、少なくともｔＲＣ（＝１０ｃｌｋ）分の時間間隔を空けないと、パケットの読出しはできない。その結果、パケット処理装置１０は、５つ全てのパケットの読出しが完了するまでに、４０ｃｌｋを要することとなる。
【００７３】
図１７は、パケットバッファとしてＤＲＡＭ１２とＳＲＡＭ１３とを併用するパケット処理装置１０によるリード処理を説明するための図である。なお、図１７において、ポインタ内の数字はバンク番号に対応し、例えば、ポインタ内の数字が“０”である場合、該ポインタの示すパケットが、ＤＲＡＭ１２のバンクＢ０に格納されていることを示す。図１７に示す例では、何れのフローＦ０〜Ｆ４に溜まっているポインタの数も４ポインタ以下である。従って、パケット処理装置１０のリード部１１３は、各ポインタにより特定されるパケットをＳＲＡＭ１３から読み出し、ＤＲＡＭ１２側では、読出しポインタ数分の読み飛ばしを行う。これにより、５ｐｋｔ／４０ｃｌｋよりも速い５ｐｋｔ／１０ｃｌｋのパケット読出しが可能となる。
【００７４】
続いて、図１８Ａ〜図１８Ｃを参照し、フローＦ０〜Ｆ４の中から何れのフローが選択されるかを、３つのケースに分けて説明する。説明の前提として、スケジューラ１１２は、１０ｃｌｋ内に５フローまで選択可能であるとする。また、図１８Ａ〜図１８Ｃにおいて、ポインタ内の数字はバンク番号に対応し、例えば、ポインタ内の数字が“０”である場合、該ポインタの示すパケットが、ＤＲＡＭ１２のバンクＢ０に格納されていることを示す。
【００７５】
図１８Ａは、全てのフローＦ０〜Ｆ４に４つ未満のポインタが溜まっている場合にフローが選択される様子を示す図である。図１８Ａに示すケース１では、フローＦ０、Ｆ１、Ｆ３に１ポインタずつ溜まり、フローＦ２に２ポインタが溜まっている。この場合、パケット処理装置１０のスケジューラ１１２は、○印に示す様に、フローＦ０から順にフローＦ３まで４つのフローを選択する。その後、リード部１１３は、選択されたフローの内、フローＦ０、Ｆ１、Ｆ３についてはＤＲＡＭ１２から１ポインタ分ずつのパケットを読み出し、フローＦ２についてはＤＲＡＭ１２から２ポインタ分のパケットを読み出す。その結果、性能要件を満たす５ｐｋｔ／１０ｃｌｋでの読出しが可能となる。
【００７６】
図１８Ｂは、ＳＲＡＭ１３のポインタが空の場合にフローが選択される様子を示す図である。図１８Ｂに示すケース２では、ＤＲＡＭ１２においてバンク競合の可能性があるため、スケジューラ１１２は、１０ｃｌｋ内に１フローしか選択することができない。ケース２では、フローＦ０のＤＲＡＭ１２側のポインタが５つ溜まっているため、スケジューラ１１２は、○印に示す様に、例えばフローＦ０を選択する。上記ポインタの示すパケットは、事前に、フロー単位でバンクシーケンシャルにＤＲＡＭ１２に書き込まれているため、リード部１１３は、バンク競合無く、５ｐｋｔ／１０ｃｌｋでパケットを読み出すことができる。すなわち、性能要件を満たす５ｐｋｔ／１０ｃｌｋでの読出しが可能となる。
【００７７】
図１８Ｃは、５つ以上のポインタが溜まっているフローが存在する場合にフローが選択される様子を示す図である。図１８Ｃに示すケース３では、フローＦ０に関し、ＤＲＡＭ１２に５ポインタ、ＳＲＡＭ１３に４ポインタが溜まり、フローＦ１に関し、何れのバッファにも２ポインタずつ溜まり、フローＦ２に関し、何れのバッファにも１ポインタずつ溜まっている。この場合、上記ケース２と同様に、フローＦ０ではバンク競合が無いため、リード部１１３は、フローＦ０のポインタの示すパケットを、５ｐｋｔ／１０ｃｌｋでＤＲＡＭ１２から読み出すことができる。
【００７８】
更にケース３では、次の選択候補のフローのパケットがＳＲＡＭ１３から読出し可能である場合、スケジューラ１１２は、ＤＲＡＭ１２からの１フロー選択に加えて、△印に示す様に、ＳＲＡＭ１３から複数のフローを選択するものとしてもよい。図１８Ｃに示す例では、フローＦ１のＳＲＡＭ１３側には２つのポインタが溜まっており、フローＦ２のＳＲＡＭ１３側にも１つのポインタが溜まっている。すなわち、ＤＲＡＭ１２から読み出されたパケットの次のパケットがＳＲＡＭ１３から読出し可能であるため、ケース２の場合と異なり、フロー間でバンク競合する可能性はない。従って、スケジューラ１１２は、図１８Ｃに示す様に、フローＦ０を選択した後（Ｔ１）、複数のフローＦ１、Ｆ２を選択する（Ｔ２、Ｔ３）ものとしてもよい。
【００７９】
スケジューラ１１２がフローＦ０に加えてフローＦ１、Ｆ２を選択した場合、リード部１１３は、各フローＦ０、Ｆ１、Ｆ２のポインタの示すパケットを、８（＝５＋２＋１）ｐｋｔ／１０ｃｌｋでＤＲＡＭ１２から読み出すことができる。但し、この場合には、リード部１１３は、ＳＲＡＭ１３からの読出しパケットに上記固定遅延（図１５参照）を挿入することで、該パケットがＤＲＡＭ１２からの読出しパケットを追い越してしまうことを抑止する。
【００８０】
上述した様に、何れのケースにおいても、パケット処理装置１０は、性能要件である５ｐｋｔ／１０ｃｌｋ以上の性能を実現することができる。
【００８１】
以上説明した様に、パケット処理装置１０は、ＤＲＡＭ１２とＳＲＡＭ１３とスケジューラ１１２とリード部１１３とを有する。ＤＲＡＭ１２は、パケットを格納する。ＳＲＡＭ１３は、上記パケットを格納する。スケジューラ１１２は、ＤＲＡＭ１２における上記パケットの格納位置を示すポインタの数に応じて、ＤＲＡＭ１２、ＳＲＡＭ１３の中から、上記パケットを読み出すメモリを決定する。リード部１１３は、スケジューラ１１２により決定されたメモリから、上記ポインタの示す格納位置に格納されたパケットを読み出す。例えば、スケジューラ１１２は、ＤＲＡＭ１２のポインタ数が所定値（例えば、５）以上である場合、または、ＳＲＡＭ１３のポインタが存在しない場合、ＤＲＡＭ１２を、上記パケットを読み出すメモリに決定する。一方、スケジューラ１１２は、ＤＲＡＭ１２のポインタ数が所定値未満であり、かつ、ＳＲＡＭ１３のポインタが存在する場合、ＳＲＡＭ１３を、上記パケットを読み出すメモリに決定する。
【００８２】
換言すれば、パケット処理装置１０は、ＳＲＡＭ１３をＤＲＡＭ１２に並列に有し、読出ポインタ数に応じてパケットバッファを切り替えることで、バッファにＤＲＡＭ１２のみを用いた場合に発生し得る読出し時のバンク競合による性能低下を抑制する。また、並列具備されるＳＲＡＭ１３の所要容量は、性能要件に応じた必要最小限の容量でよい。例えば、性能要件が５ｐｋｔ／１０ｃｌｋの場合には、ＳＲＡＭ１３は、１フロー当たり４パケットを格納可能であればよい。従って、パケット処理装置１０は、ＳＲＡＭ１３の増設に伴うコストや消費電力の上昇を抑えることができる。
【００８３】
（変形例）
上記実施例では、ＤＲＡＭとＳＲＡＭとにパケットが格納されるものとした（図６参照）が、ポインタが格納されるものとしてもよい。図１９は、変形例において、選択フローの読出ポインタ数に応じて、読出バッファが切り替えられる様子を説明するための図である。なお、図１９において、第２ポインタ内の数字はバンク番号に対応し、例えば、第２ポインタ内の数字が“０”である場合、該ポインタの示す第１ポインタが、ＤＲＡＭ１２ａのバンクＢ０に格納されていることを示す。また、図１９に示すライト部１１１ｇ、１１１ｈとＤＲＡＭ１２ａ、１２ｂとリード部１１３ｆ、１１３ｇとは、それぞれ、図６に示したライト部１１１とＤＲＡＭ１２とリード部１１３と同様の機能を有するので、その詳細な説明は省略する。
【００８４】
具体的には、上記実施例では、パケット処理装置１０は、ＤＲＡＭ１２、ＳＲＡＭ１３にパケット本体を格納し、スケジューラ１１２にポインタをキューイングする構成とした。これに対し、変形例では、パケット処理装置１０は、更に多段的な構成を採る。すなわち、パケット処理装置１０は、ＤＲＡＭ１２ｂにパケット本体を格納し、ＤＲＡＭ１２ａ、ＳＲＡＭ１３には、該パケットのポインタである第１ポインタを格納する。更に、パケット処理装置１０は、第１ポインタのポインタである第２ポインタをスケジューラ１１２にキューイングする。かかる態様では、ＤＲＡＭ１２ａとして、例えば、ＲＬＤＲＡＭ（Reduced  Latency  Dynamic  Random  Access  Memory）を用いることができる。また、ＤＲＡＭ１２ｂとして、例えば、ＤＤＲ（Double  Data  Rate）３ＤＲＡＭを用いることができる。
【００８５】
変形例に係るパケット処理装置１０は、ＤＲＡＭ１２ｂとＤＲＡＭ１２ａとＳＲＡＭ１３とスケジューラ１１２とリード部１１３ｆとを有する。ＤＲＡＭ１２ｂは、パケットを格納する。ＤＲＡＭ１２ａは、ＤＲＡＭ１２ｂにおける上記パケットの格納位置を示す第１ポインタを格納する。ＳＲＡＭ１３は、上記第１ポインタを格納する。スケジューラ１１２は、ＤＲＡＭ１２ａにおける上記第１ポインタの格納位置を示す第２ポインタの数に応じて、ＤＲＡＭ１２ａ、ＳＲＡＭ１３の中から、上記第１ポインタを読み出すメモリを決定する。リード部１１３ｆは、スケジューラ１１２により決定されたメモリから、上記第２ポインタの示す格納位置に格納された第１ポインタを読み出す。
【００８６】
すなわち、変形例に係るパケット処理装置１０は、ミニバッファとしてのＳＲＡＭ１３を、第１ポインタバッファとしてのＤＲＡＭ１２ａと並列に有し、第１ポインタを、これらのバッファに並列に書き込む。読出しに際しては、上記実施例と同様に、パケット処理装置１０は、選択されたフローの読出第２ポインタ数に応じて、ＤＲＡＭ１２ａ、ＳＲＡＭ１３の何れかから、第１ポインタの読出しを行う。第１ポインタは、上述した様に、例えば、フローＩＤ、パケット長、バッファアドレス等の１００ビット程度の情報量である。また、本変形例では、上記実施例と異なり、ＳＲＡＭ１３は、パケット自体ではなく、第１ポインタを格納すればよい。このため、ＳＲＡＭ１３に要する容量は、１００ビット×フロー数×４ポインタ程度の小容量で済む。例えば、スケジューラ１１２の収容するフローの数が１００Ｋの場合、ＳＲＡＭ１３の容量は、約４０Ｍｂｉｔで済む。従って、パケット処理装置１０は、既存のＦＰＧＡ、ＡＳＩＣ、ＮＰＵ等に内蔵されているＳＲＡＭを用いた簡易な構成で、バンク競合に伴うパケット処理遅延を抑制することができる。また、パケット処理装置１０は、新たなメモリを追加する必要がないため、回路規模や消費電力を節減することができる。
【００８７】
上述の変形例では、パケット、第１ポインタ（パケットのポインタ）、第２ポインタ（第１ポインタのポインタ）の三段階の構成とした。しかしながら、ＳＲＡＭ１３の容量や第１ポインタの数によっては、パケット処理装置１０は、第３ポインタ（第２ポインタのポインタ）等の追加により、四段階以上の構成としてもよい。
【００８８】
なお、上記実施例では、性能要件として５ｐｋｔ／１０ｃｌｋを想定したことから、パケット処理装置１０は、読出バッファを切り替える際の閾値を５ポインタとした。しかしながら、上記閾値は５ポインタに限らず、性能要件に応じて適宜変更可能である。例えば、性能要件が７ｐｋｔ／１０ｃｌｋに上がった場合には、パケット処理装置１０は、上記閾値を７ポインタに設定するものとしてもよい。すなわち、パケット処理装置１０は、読出ポインタ数が“７”以上である場合にはＤＲＡＭ１２からパケットを読み出すと共に、“６”以下である場合にはＳＲＡＭ１３からパケットを読み出すものとしてもよい。
【００８９】
更に、上記実施例においては、パケット処理装置１０の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的態様は、図示のものに限らず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することもできる。例えば、ライト部１１１のポインタ生成部１１１ｃとポインタ加算部１１１ｄ、あるいは、スケジューラ１１２の読出ポインタ数抽出部１１２ｂと読出バッファ決定部１１２ｃをそれぞれ１つの構成要素として統合してもよい。反対に、読出フロー選択部１１２ａに関し、フローＩＤ“Ｘ”が選択可能であるか否かの判定を行う部分と、選択されたフローの合計数が“５”以上であるか否かの判定を行う部分とに分散してもよい。更に、入力パケットやポインタを記憶するメモリを、パケット処理装置１０の外部装置として、ネットワークやケーブル経由で接続する様にしてもよい。また、ＳＲＡＭ１３は、ＱｏＳ処理部１１の内部メモリであってもよい。
【符号の説明】
【００９０】
１０  パケット処理装置
１０ａ  プロセッサ
１０ｂ  記憶装置
１０ｃ  ＤＲＡＭ
１０ｄ  ＳＲＡＭ
１０ｅ  入力装置
１０ｆ  表示装置
１０ｇ  通信装置
１１  ＱｏＳ処理部
１２、１２ａ、１２ｂ  ＤＲＡＭ
１３  ＳＲＡＭ
１１１  ライト部
１１１ａ  フロー抽出部
１１１ｂ  書込バッファ決定部
１１１ｃ  ポインタ生成部
１１１ｄ  ポインタ加算部
１１１ｅ  パケット書込部
１１１ｆ  パケット書込部
１１１ｇ、１１１ｈ  ライト部
１１２  スケジューラ
１１２ａ  読出フロー選択部
１１２ｂ  読出ポインタ数抽出部
１１２ｃ  読出バッファ決定部
１１２ｄ  ポインタ減算部
１１３  リード部
１１３ａ  パケット読出部
１１３ｂ  パケット取得部
１１３ｃ  パケット取得部
１１３ｄ  遅延挿入部
１１３ｅ  パケット出力部
１１３ｆ、１１３ｇ  リード部
Ｂ  バス
Ｂ０〜Ｂ７  バンク
Ｆ０〜Ｆｎ  フロー
Ｌ１  ＤＲＡＭリードレイテンシ
Ｌ２  ＳＲＡＭリードレイテンシ
Ｐ１〜Ｐ１４  ポインタ
ＳＣ  スケジューラ
Ｙ１〜Ｙ４  並列書込みの矢印
【図１】
2015186233.tif 000003
【図２】
2015186233.tif 000004
【図３】
2015186233.tif 000005
【図４】
2015186233.tif 000006
【図５】
2015186233.tif 000007
【図６】
2015186233.tif 000008
【図７】
2015186233.tif 000009
【図８】
2015186233.tif 000010
【図９】
2015186233.tif 000011
【図１０】
2015186233.tif 000012
【図１１Ａ】
2015186233.tif 000013
【図１１Ｂ】
2015186233.tif 000014
【図１２】
2015186233.tif 000015
【図１３】
2015186233.tif 000016
【図１４Ａ】
2015186233.tif 000017
【図１４Ｂ】
2015186233.tif 000018
【図１５】
2015186233.tif 000019
【図１６】
2015186233.tif 000020
【図１７】
2015186233.tif 000021
【図１８Ａ】
2015186233.tif 000022
【図１８Ｂ】
2015186233.tif 000023
【図１８Ｃ】
2015186233.tif 000024
【図１９】
2015186233.tif 000025
【図２０】
2015186233.tif 000026
【図２１】
2015186233.tif 000027
【図２２】
2015186233.tif 000028
【図２３】
2015186233.tif 000029