(57)【要約】【課題】可変長のパケットを予め設定されたレートに高精度で出力し、しかも装置規模および複雑性を抑えることができるパケットシェーピング装置を提供する。【解決手段】入力パケットを格納するパケット格納領域を有するバッファ部から与えられたフロー毎の入力パケットの長さと前回のパケット出力終了時間と所望送信レートを規定するパケット出力間隔とに基づいて該入力パケットの理想出力終了時間を算出して記憶するとともに、内部の固定単位時間スロットで刻まれるタイムテーブルにおける該前回のパケット出力終了時間の次の時間スロットに該入力パケットのエントリを登録し、該タイムテーブルに登録したエントリに対応する該出力終了時間に該入力パケットを該パケット格納領域から出力する。【選択図】図１
2006197235.tif 000002
【特許請求の範囲】
【請求項１】
入力パケットを格納するパケット格納領域を有するバッファ部と、
内部の固定単位時間スロットで刻まれるタイムテーブルを有し、該バッファ部から与えられたフロー毎の入力パケットの長さと前回のパケット出力終了時間と所望送信レートを規定するパケット出力間隔とに基づいて該入力パケットの理想出力終了時間を算出して記憶するとともに該タイムテーブルにおける該前回のパケット出力終了時間の次の時間スロットに該入力パケットのエントリを登録するスケジューラ部と、
を備え、該バッファ部が、該タイムテーブルに登録したエントリに対応する該出力終了時間を該スケジューラ部から受けて該入力パケットをその出力終了時間に該パケット格納領域から出力することを特徴としたパケットシェーピング装置。
【請求項２】
請求項１において、
該バッファ部が、該パケット格納領域から実際にパケットを出力する際に該スケジューラ部に該パケットのフロー識別子を通知し、該スケジューラ部では、該フロー識別子のパケットに関し、該算出した理想出力終了時間と該実際にパケットを出力した時間との差分をレート補正値として計算し、次パケットの理想出力終了時間から該レート補正値分だけ減算することを特徴としたパケットシェーピング装置。
【請求項３】
請求項２において、
該スケジューラ部が、該レート補正値を積算し、一度に使用できるレート補正値を規制することを特徴としたパケットシェーピング装置。
【請求項４】
請求項１において、
該スケジューラ部と該バッファ部との間に出力すべきパケットの情報を受け渡しするためのFIFOをさらに設け、該バッファ部は内部の固定単位時間毎に該FIFOを巡回的に読み出すことにより該パケット格納領域からパケットの送出を行うことを特徴としたパケットシェーピング装置。
【請求項５】
請求項４において、
該スケジューリング部が、該FIFOに読み出すべきパケット情報が存在しない場合は、スケジューリング対象でないパケットを該パケット格納領域から送出することを特徴としたパケットシェーピング装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケットシェーピング装置に関し、特にIPネットワーク等におけるパケットを予め設定されたレートで出力するためのスケジューリングを行うパケットシェーピング装置に関するものである。
【０００２】
近年、IPネットワーク等においては、多種多量のデータ転送能力及び多量データに対する品質の向上が求められて来ており、その多種多量のパケットデータを効率よく制御するための手法がシェーピング技術である。
【背景技術】
【０００３】
図27は、2つのタイムテーブルA及びBを交互に切り替えることで固定長パケットデータのシェーピング機構を実現する従来例の原理を示した図である。2つのタイムテーブルA及びBにはそれぞれn＋1個の格納領域(以下、時間スロットと称する。)を有しており、各時間スロットに対応して固定長パケットデータの出力時刻（以下、時間ということがある。）が設定されている。
【０００４】
まず、或るフローに対して固定長パケットデータの出力時刻が算出され、その算出された時刻に対応した時間スロットにこのフローを特定するための情報等がリングを組まれて格納される。
【０００５】
一方、スロットに格納されている情報を巡回的に読み出すことにより、この固定長パケットデータの送出間隔すなわちデータレートの制御が行える。また同時に、２つのタイムテーブルA及びBの範囲外時刻に設定された固定長パケットに対しては範囲外テーブルCを用意し、巡回的に上述したタイムテーブルに登録して行くことで低速なデータレートに対しても対応するようにしたデータシェーピング装置がある（例えば、特許文献1参照。）。
【特許文献１】特開2001−313669号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述した従来のシェーピング装置は、各スロットに対応した固定長のパケットデータを制御対象とするものであり、可変長のパケットデータに対しては前段にて固定長のパケットデータに分割する機構が必要である。仮にパケットを分割する機構を設けたとしても、その分割による出力レートの揺らぎが発生することにより、データ品質の劣化を招くことになる。
【０００７】
また2つのタイムテーブルを交互に切り替える機構のため、タイムテーブル切り替え時の動作および処理が複雑になることや、出力ポート毎にタイムテーブルが必要となり、装置規模が大きくなるという問題点がある。
【０００８】
本発明はこのような課題を解決すべく成されたものであり、その目的は可変長のパケットを予め設定されたレートで高精度で出力し、しかも動作や処理が複雑性でないパケットシェーピング装置を提供することにある。
【課題を解決するための手段】
【０００９】
（１）上述した課題を解決するため、本発明に係るパケットシェーピング装置は、入力パケットを格納するパケット格納領域を有するバッファ部と、内部の固定単位時間スロットで刻まれるタイムテーブルを有し、該バッファ部から与えられたフロー毎の入力パケットの長さと前回のパケット出力終了時間と所望送信レートを規定するパケット出力間隔とに基づいて該入力パケットの理想出力終了時間を算出して記憶するとともに該タイムテーブルにおける該前回のパケット出力終了時間の次の時間スロットに該入力パケットのエントリを登録するスケジューラ部と、を備え、該バッファ部が、該タイムテーブルに登録したエントリに対応する該出力終了時間を該スケジューラ部から受けて該入力パケットをその出力終了時間に該パケット格納領域から出力することを特徴としている。
【００１０】
本発明の原理を図1を参照して説明する。図1は、本発明のパケットシェーピング装置を構成するスケジューラ部に設けられているタイムテーブルを時間軸（時間スロット）で示したものであり、この例では、3つのフローID1〜ID3のパケットが入力されてスケジューリングが行なわれたことを示している。
【００１１】
この中で特にフローID3のパケットに着目して説明すると、今、現在時間スロットt0においてフローID3のパケット長MのパケットPKTが到着したとすると（ステップS1）、このパケットPKTの前回入力したパケット（図示せず）が時間スロットt1において「前LCT」で示される前回のパケットの出力終了時間スロットの次の時間スロットにおいて現在入力したパケットPKT（点線で示す）のエントリ（番号）をタイムテーブルに登録する（ステップS2）。
【００１２】
そして、このエントリを登録する際に、この入力パケットPKTの長さと前回のパケット終了時間（前LCT）と所望送信レートを規定するためのパケット出力間隔ICIとに基づいて、この入力パケットPKTの理想出力終了時間t2（新LCT）＝前LCT＋１＋ICI×（M/64）（イーサの最小パケット長＝64バイト）を求めて記憶しておく。これは、図1に示す白抜きの右側のパケットPKTが出力を終了することを示している（ステップS3）。
【００１３】
従って、バッファ部は、このタイムテーブルに登録したエントリに対応するパケットPKTの出力終了時間（新LCT）をスケジューラ部から受けて、この入力パケットPKTをこの出力終了時間（新LCT）においてバッファ部に設けたパケット格納領域から出力させる。
【００１４】
このように、入力パケットの長さを考慮して、入力パケットの出力タイミングをスケジューリングしているので、可変長パケットに対するシェーピングを実現することが可能となる。
【００１５】
（２）また、上記のバッファ部は、該パケット格納領域から実際にパケットを出力する際に該スケジューラ部に該パケットのフロー識別子を通知し、該スケジューラ部では、該フロー識別子のパケットに関し、該算出した理想出力終了時間と該実際にパケットを出力した時間との差分をレート補正値として計算し、次パケットの理想出力終了時間から該レート補正値分だけ減算することができる。
【００１６】
すなわち、図1に示したフローID3のパケットPKTは新LCTの時間タイムスロットt2において出力が終了する筈であるが、実際には、図2(1)に示す2つのパケットPKT1及びPKT2があったとき、これらがパケット格納領域から読み出される時刻は、同図2に示すようにパケットPKT2が出力されるべき時間タイムスロットt+3より遅れて時間タイムスロットt+6になってしまうことがあり、この結果、パケットPKTの出力レートは設定レートよりも低くなってしまうことになる。
【００１７】
この対策として、バッファ部がパケット格納領域から実際にパケットを出力（読出）する際に、スケジューラ部にこのパケットのフロー識別子を通知し、パケット処理部においては、上記の新LCTの時間スロットと実際にパケット格納領域から読み出された時間スロットの差分を計算し、これをレート補正値としておく。そして、次のパケットの新LCTを計算するときに、この新LCTからレート補正値を減算することにより、図2(3)に示すように、入力パケットの理想出力時間TATを求めることができる。この出力時間TATは、新LCTを入力パケット（現パケット）の理想出力終了時間とすれば、実質的にこの現パケットの理想出力開始時間に相当することになる。
【００１８】
このように、パケットの理想出力終了時間より早目にパケットの理想出力を実質的に開始することになり、パケットの出力レートの低下を抑えることが可能となる。
【００１９】
（３）上記のスケジューラ部は、該レート補正値を積算し、一度に使用できるレート補正値を規制することができる。
【００２０】
すなわち、スケジューラ部では、レート補正値を貯金しておき、その使用できるレート補正値を適宜変化させることにより、レート補正値が大き過ぎたり小さ過ぎたりすることに伴なう出力レートの変動を低減し、高精度で可変長パケットの安定したシェーピングを行うことが可能となる。
【００２１】
（４）該スケジューラ部と該バッファ部との間に出力すべき、パケット情報を受け渡すためのFIFOをさらに設け、該バッファ部は内部の固定単位時間毎に該FIFOを巡回的に読み出すことにより該パケット格納領域からパケットの送出を行うことができる。
【００２２】
すなわち、図3に示すように、パケット到着時に完全にパケット情報（例えばパケット番号＝アドレス）を、受け渡し用FIFOに登録しておき、このパケット情報を読み出す場合も例えばパケット読み出し制御部14が64バイトの転送時間のタイミングでアクセスし(ステップS4)、1パケット時間に１フロー分のパラメータのみ更新すればよく、スケジューリング済であるので読出側の処理も簡単になると共にフロー数の増加に容易に対応が可能となる。
【００２３】
（５）上記のスケジューラ部は、該FIFOに読み出すべきパケット情報が存在しない場合は、スケジューリング対象でないパケットの送出を行うことができる。
【００２４】
（６）また、上記のスケジューラ部は、該タイムテーブルへのエントリ登録を行うとき、同一の時間スロットにおいて複数のエントリが発生しても、登録することができる。なお、エントリ番号は常に付与されている。
【００２５】
すなわち、上記の図1は同一のフローIDにつき、一つの時間タイムスロットにおいて一つの可変長パケットを想定して示したが、実際には同一のフローで一つの時間タイムスロットにおいて重複して複数のエントリが発生することがあり、この場合、図4(1)で示したように空いている時間スロットを探すことになるので、時間スロットの空塞を判定しながら永遠と空き時間スロットを探すことになる（ステップS5）。
【００２６】
そこで、同図(2)に示すように、同一の時間スロットに複数エントリ可能なようにし、エントリ番号で同一の時間スロットにおいて縦方向のリンクを形成するようにしている(ステップS6)。
【００２７】
（７）また、上記のバッファ部は、該複数のエントリに対し、一番最初にエントリされた番号のパケットのみに対して読出処理を行い、残りは後続の時間スロットのエントリにリンクを行ってもよい。
【００２８】
（８）また、上記のスケジューラ部は、該タイムテーブルより未来の時間スロットにエントリ登録が必要なパケットのエントリ番号は別のテーブルに登録しておき(図4(2)のステップS7)、該タイムテーブルの1/2周期毎に再スケジューリングを行うことも可能である。
【００２９】
すなわち、図5(1)に示すように、現LCTの位置がタイムテーブルの範囲を超えている場合、このフローのパケットが到着してもエントリすることはできない。
そこで同図(2)に示すように、タイムテーブルの2分の1時間毎に再スケジューリングを行うと共に、通常のパケットのエントリ登録と平行して処理を行い、再スケジューリング不可能なパケットは再度別のテーブルにエントリを行うようにしている。これにより、永久的にスケジューリングが可能となる。
【００３０】
（９）また、上記のスケジューラ部は、該タイムテーブルを該固定時間スロット毎にスライディングする構成とし、上記の再スケジューリングと合わせることで永久的なエントリ登録を可能にすることができる。
すなわち、図6に示すように、スケジューラ部において、1時間スロット単位にスライディングするようにタイムテーブルを構成し、常に現在時間のスロットからタイムテーブル分エントリが可能にしている。
【００３１】
（１０）また、上記のスケジューラ部は、該タイムテーブルのエントリ登録と読出処理に時間差を設けることにより、内部での処理時間差のマージンを確保することができる。
【００３２】
（１１）さらに上記のパケットは可変長パケットでもよい。
【発明の効果】
【００３３】
本発明によれば、可変長パケットに対して、理想的な出力時間を算出し、更には実際に出力される時間からレートの補正を行うことで高精度のパケットスケジューリングを行うことができる。また、内部の単位固定時間（64バイト転送時間）に一つのスケジューリングを行えばよく、装置規模が収容フロー数に依存しないため多くのフローに対応可能となる。
【発明を実施するための最良の形態】
【００３４】
図7は、本発明に係るパケットシェーピング装置の一実施例を示したものである。この実施例では、パケットシェーピング装置は、概略的に、バッファ部1とバッファ番号管理FIFO2とスケジューラ部3とで構成されている。バッファ部1は入力パケットPKTを入力するパケット書込制御部11と、このパケット書込制御部11を経由して入力パケットPKTを順次格納するバッファとしてのパケット格納領域12と、このパケット格納領域12のアドレス管理を行うバッファ管理メモリ13と、パケット格納領域12及びバッファ管理メモリ13に接続されたパケット読出制御部14とで構成されている。
【００３５】
また、スケジューラ部3は、バッファ部1のパケット書込制御部11に接続されたスケジューラエントリ部31と、このスケジューラエントリ部31に相互接続されたフローテーブル32、スケジューラ管理テーブル33及びタイムテーブル34と、フローテーブル32、スケジューラ管理テーブル33、及びタイムテーブル34、バッファ番号管理FIFO2、及びパケット読出制御部14に接続されたスケジューラ読出部35とで構成されている。
【００３６】
このようなパケットシェーピング装置の概略的な動作をまず説明する。
【００３７】
入力されたパケットPKTを、パケット書込制御部11がバッファ12に一旦バッファリングすると同時にパケット識別子（フローＩＤ、バッファ番号、パケット長）をヘッダから抽出してスケジューラ部3に通知する。
【００３８】
スケジューラ部3では、通知されたフローＩＤおよびパケット長に対してスケジューラエントリ部31にて理想的なパケット出力（開始/終了）時間を算出し、入力パケットPKTのエントリ番号をタイムテーブル34に登録する。ここでタイムテーブル34はT個の時間スロットを有しており、各時間スロットはイーサーネットの最小パケット長（６４バイト）の転送時間分であり、パケットの出力時刻に対応している。
【００３９】
スケジューラ読出部35では、上述したタイムテーブル34のエントリを順番に読み出すことにより、出力対象となるエントリ番号が特定され、そのエントリ番号に対応したフローＩＤ、バッファ番号、パケット長をバッファ部1に通知することで、バッファ部1はバッファ12からパケットを出力する。
【００４０】
またバッファ部1ではスケジューラ部3に対して、バッファ12からパケットが実際に読み出された際にフローＩＤの通知を行い、スケジューラ部3ではそのフローＩＤに対応したパケットをエントリした時間と、実際にパケットが読み出された時間の差分を計算し、次パケットのエントリ時にその差分だけ早くエントリすることでレートの補正を行っている。
【００４１】
ここで上述したタイムテーブル34は図6に示したように、１スロット単位時間毎にスライディングする構成とし、常に現在時間のスロットからタイムテーブル分エントリが可能としている。
【００４２】
一方、スケジューラエントリ部31にて算出されたパケット理想出力開始時間(TAT)がタイムテーブル34の範囲外になった場合、未登録レジスタが用いられる。まず未登録レジスタに該当パケットのフローＩＤ、バッファ番号、パケット長を登録する。スケジューラエントリ部31ではタイムテーブルの１／２周期で未登録レジスタにあるパケットの再配置（スケジューリング）処理を行う。これにより永久的なスケジューリングが可能となる。
【００４３】
以下、ＩＰルータに上述したパケットシェーピング機構を適用した場合の具体例について概略的に説明する。
【００４４】
図8はＩＰルータ内のシェーピング機構を示す図である。パケット書込制御部11は、入力されたパケットPKTを受信してパケット格納領域（バッファ）12に格納するとともに、そのパケットPKTを識別するためのフローＩＤ、格納された場所を特定するためのバッファ番号およびパケット長を抽出し、スケジューラ部3に通知する。
【００４５】
上述したフローＩＤ、バッファ番号およびパケット長を受信したスケジューラ部3では、スケジューラエントリ部31により、予め設定されたレート（パケット出力間隔ICI）でタイムテーブル34にエントリを行い、スケジューラ読出部35にてそのタイムテーブル34の出力制御を行うことでシェーピング動作を実現する。このためスケジューラ部3は、上述したタイムテーブル34、フローを管理するためのフローテーブル32、バッファ番号を管理するためのスケジューラ管理テーブル33を含んでいる。
【００４６】
図9はタイムテーブル34、図10はフローテーブル32、図11はスケジューラ管理テーブル33の具体例を示す図である。タイムテーブル34はスロット分のアドレスを有しており、出力されるパケットのエントリ番号が時間順に設定される。フローテーブル32はパケットのフローＩＤに対して、前パケット出力終了時間（LCT）、パケットのスケジューリング対象判定ビット（Enable）、パケット出力間隔（ICI）、出力補正値（L）、出力補正積算値（L'）が設定される。
【００４７】
また、スケジューラ管理テーブル33はエントリ番号に対して、パケット理想出力開始時間（TAT）、フローＩＤ、バッファ番号、次エントリ番号が設定される。具体的には、図12(1)に示すように時間スロット（ｋ）にエントリ番号「３」、「５」、「６」のパケットがエントリされている場合、図(2)に示すように、タイムテーブル34のアドレス（ｋ）には開始エントリ番号「３」、終了エントリ番号「６」、エントリ数「３」が設定され、同図(3)に示すように、スケジューラ管理テーブル33には、アドレス３にパケット出力時刻“ｋ”、次エントリ「５」が設定される。
【００４８】
またスロット（ｋ＋１）に着目すると１パケットしかエントリされていないので、タイムテーブル34のアドレス（ｋ＋１）には開始エントリ「４」、終了エントリも「４」、エントリ数「１」が設定され、スケジューラ管理テーブル33の次エントリには“Ｄ．Ｃ（Don't Care）”が設定される。
【００４９】
ここでパケットがエントリされていないスロットに対しては、タイムテーブル34のエントリ数に“０”が設定される。このように、タイムテーブル34およびスケジューラ管理テーブル33を用いることで、各時間スロットに対応してどのエントリ番号のパケットを出力すればよいかが分かるようになっている。
【００５０】
またフローテーブル32には、個々のフローに対して予め設定する出力間隔（出力レート）ICIが設定されており、スケジューラエントリ部31ではこの出力間隔ICIおよび補正値L、補正積算値L'からエントリすべきスロットを算出し、所定のエントリ登録処理が行われる。
【００５１】
例えば、可変長パケットPKTがいずれかの時間スロットにエントリされる場合、その時間スロットに対応したタイムテーブル34、およびそのエントリ番号に対応したスケジューラ管理テーブル33が更新される。具体的には、該当スロット時間のタイムテーブル34のエントリ数が「０」の場合には、開始エントリ番号および終了エントリ番号に該当パケットのエントリ番号が設定される。また該当時間スロットのタイムテーブル34のエントリ数が「１」以上の場合には、終了エントリ番号に該当パケットのエントリ番号を設定し、またそれまでの終了エントリ番号に対応したスケジューラ管理テーブル33の次エントリ番号を該当パケットのエントリ番号に更新する。
【００５２】
また可変長パケットのエントリ時間がエントリ範囲外の場合、タイムテーブル34内の未登録レジスタR０の開始エントリ番号と終了エントリ番号およびスケジューラ管理テーブル33の次エントリ番号を上述したように更新する。未登録レジスタR０はタイムテーブル34の１／２周期(T/2)毎に未登録レジスタR１にコピーされ、同時に初期化される。コピーされた未登録レジスタR１は、スケジューラエントリ部31にて上述したのと同様の処理を用いて順次タイムテーブル34にエントリ処理を行う。
【００５３】
スケジューリング（テーブル書込）手順例：図13〜18
上記のようなテーブル構成を有するIPルータの具体的なスケジューリング手順を図13〜18を参照して以下に説明する。
【００５４】
まず、図13はスケジューリング手順の全体を示すものであり、図14〜18はこの図13に示したスケジューリング手順の各ステップを詳細に示したものであり、以下の説明ではステップ毎に順次説明をして行く。
【００５５】
ステップS100：
可変長パケットPKTがパケット書込制御部11に入力して来ると、パケット書込制御部11は、バッファ番号管理FIFO2から空きバッファ番号を収得すると共に、そのバッファ番号ではパケット格納領域12にパケットを書き込む（ステップS122）。なお、空きバッファ番号とは、実際にパケットがパケット格納領域12に格納する際のアドレス値を示している。
【００５６】
ステップS101：
(1)可変長パケットPKTのヘッダ等からパケット情報（フローID、パケット長）を抽出する。
【００５７】
(2)その後、パケット書込制御部11は、そのフローID、パケット長、及びバッファ番号をスケジューラエントリ部31に通知する。
【００５８】
(3)この例では、フローID＝5、パケット長＝320、バッファ番号＝100がパケット書込制御部11からスケジューラエントリ部31へ通知されるものとする。
【００５９】
ステップS102：
(1)スケジューラエントリ部31において、上記のステップS101で抽出したフローIDをアドレスとしてフローテーブル32から、以下の情報を収得する。
・前パケット出力終了時間(LCT)
・パケット出力間隔(ICI)
・パケットEnable (Enable)
・補正値(L)
・積算補正値(L')
(2)この場合、LCT=50.0、Enable=1、ICI=2、L=2、L'=8がフローテーブル32からスケジューラエントリ部31へ与えられるものとする。なお、前パケット出力終了時間LCTは、図10に示したフローテーブルに示す如く、32ビットの整数部分と16ビットの小数部分とから成っている。
【００６０】
(3)上記の前パケット出力終了時間LCTとは、前回のパケットPKT0が出力終了する時間スロットt=50を示しており、パケット出力間隔ICIはそのフローに関してユーザが設定する送信レートに対応するものである。
【００６１】
ステップS103：
(1)ステップS102で得たEnable情報から、スケジューラエントリ部31は入力パケットPKTがスケジューリング対象であるか否かを判定する。
【００６２】
(2)この結果、フローID=5のパケットは既に収得した情報からEnable=1であるのでスケジューリング対象パケットであることが分かる。
【００６３】
なお、スケジューリング対象でなければ、バッファ番号管理FIFO2に該当するバッファ番号を書込み、以後の処理は行わない（ステップS123）。
【００６４】
ステップS104：
(1)上記の通り、スケジューリング対象であると判定されたのでスケジューラエントリ部31内に設けられているエントリ番号管理FIFO（図示せず）からエントリ番号を収得する。
【００６５】
(2)スケジューラエントリ部31は、エントリ番号管理FIFOからエントリ番号「5」を収得する。
【００６６】
以後、タイムテーブル34へのエントリ処理を実行する。ここでタイムテーブル34へのアクセスは内部の固定単位時間スロット毎に順次移動するポインタによって行われ、その着目ポインタ値がタイムテーブル34の着目スロットに対応している。さらに、上記の如く、1つの時間スロットづつステイディングしていく（図6参照）。
【００６７】
ステップS105：
(1)まず、スケジューラエントリ部31はステップS102に示した補正値L、及び積算補正値L'（前回出力終了時間LCTと実際に出力した時間との差分で初期値は0）から現パケットのレート補正値L"を算出する。なお、補正値Lは、ユーザーが規制している補正値（上限値）を示す。
【００６８】
(2)この場合、L＞L'の場合はL"＝L'であり、L＜L'の場合はL"＝Lであるので、レート補正値L"＝2となる。これは、レート補正値L"として、補正値Lと積算補正値L'の内小さい方を選択し、レート補正のゆらぎを抑えて送信レートを安定化させている。これは、図2(3)に示したようにタイムテーブル34へのエントリ動作の具体例として示したように、到着したフローID1のパケットは、前パケット出力終了時間LCT、パケット出力間隔ICI、及びパケット長Mから現パケット出力終了時間を算出する。このパケット出力終了時間は理想的な出力時間であり、実際にバッファ部1からパケットが出力される差分時間を考慮に入れる必要があるので、上記で算出したパケット出力時間からレート補正値を引き算した値が実際にそのパケットの出力時間となる。
【００６９】
ステップS106：
(1)入力パケットの出力時間を算出する。この場合の出力時間は、パケット理想出力開始時間(TAT)である。
【００７０】
(2)この例では、スケジューラエントリ部31はTAT=前パケット出力時間終了時間+1−（レート補正値）＝LCT+1-L"=50+1-2=49としてパケット理想出力開始時間(TAT)を算出する。すなわち、このレート補正値は、スケジューラ部3がバッファ部1から順次受信するためにクレジット（貯金）をして行く。ただし、そのクレジットされた積算補正値を、パケット出力時間算出時に一度に使用すると単一フローで見た場合にバースト性が増し、出力レートに揺らぎが発生する可能性があるので、一度に使用できる補正値パラメータを導入して補正値を規制するような構成をしている。
【００７１】
(3)これをタイムテーブル34の時間軸で見ると、前回パケットPKT0の出力終了時間LCTのスロットt=50の次の時間スロット（同一フロー）に関してレート補正値2を減算したので、パケット理想出力開始時間TAT=49であることが示されている。
【００７２】
ここで、タイムテーブル34へのエントリは、算出された時間の整数部のみを用いるわけであるが、実際の算出時には固定小数点を用いることでフロー全体で見ると高精度のレートを実現することができる。
【００７３】
ステップS107：
(1)スケジューラエントリ部31は、パケット理想出力開始時間TATが現在時刻よりも過去か未来かを判定する。
【００７４】
(2)この例では、TAT=49＞現在時間W_Time=48であるので、現在時間から未来の時間へエントリする。
【００７５】
ステップS108a：
(1)スケジューラエントリ部31は、現在のパケット理想出力終了時間(NewLCT)及び積算補正値(NewL')を算出する。
【００７６】
(2)その後、新しく算出されたNewLCT及びNewL'でフローデーブル32を更新する。
【００７７】
(3)この例では、NewLCT=TAT＋ICI×(パケット長/64)=LCT+1+ICI×(パケット長/64)-L"=50+1-2+2（320/64）=59であり、NewL'=L'-L"=6となる。
【００７８】
(4)この結果、図示のように、上記のように求めた現パケットPKT1の理想出力開始時間TAT（（b）参照）に基づき、その理想出力終了時間(NewLCT)は(c)に示すようにt=59である。時間スロットt=49のパケットPKT1のエントリは、(a)に示すように固定長パケットをタイムテーブル34にエントリすることになる（ステップS110以降参照）。
【００７９】
なお、ステップS107において判定結果が“NO”であった場合には、図13のステップS108bに示すように、前パケット出力終了時間の代わりに現在時間を置き換えると共に、積算補正値L'に現在時間を足したものとなる点が異なっている。
【００８０】
すなわち、出力開始時間TATが現在時間よりも過去であれば前パケット出力時間、すなわちパケット出力終了時間はパケット長及びパケット出力間隔から算出した値からレート値を減じた値を現在時間に足した値となり（ステップS108b）、未来であれば前パケット出力時間は、パケット長及びパケット出力間隔から算出した値からレート値を減じた値を前パケット出力終了時間に足した値となる（ステップS108a）。また、同時に積算補正値に関しても、過去時間であれば積算補正値に現在時間からパケット出力時間を引いた値を積算し、未来時間であれば積算補正値からレート補正した値を引いた値となる。
【００８１】
ステップS109：
(1)上記のステップS108で算出した出力時間がタイムテーブル34においてスケジューリング可能か否かの判定を行う。
【００８２】
(2)この場合、TAT-W_Time=49-48＞2000であり、スケジューリング可能と判定する。すなわち、タイムテーブル34は或る決められた時間スロット分のアドレスを保有しており、パケットの出力時間が現在時間から所定の範囲内であるか否かの判定を行っている。
【００８３】
ステップS110：
(1)スケジューリング可能な場合、パケット出力時間でタイムテーブル34にアクセスし、開始エントリ番号、終了エントリ番号、及びエントリ数を収得する。
【００８４】
(2)この場合、開始エントリ番号とは該当するスロットの一番下にあるパケットのエントリ番号を示し、終了エントリ番号とは一番上にあるパケットのエントリ番号を示し、さらにエントリ数とはそのスロットにエントリされているパケットの数を示している。
【００８５】
(3)この結果、スケジューラエントリ部31は、タイムテーブル34からt=TAT=49において、開始エントリ番号=1、終了エントリ番号=3、エントリ数=2のパケットエントリを収集し、時間スロットt=TAT=50においては開始エントリ番号=終了エントリ番号=2、及びエントリ数=1のパケットエントリが収得されることになる。
【００８６】
ステップS111：
(1)スケジューラエントリ部31は、タイムテーブル34のエントリ数が‘0’か否か判定する。
【００８７】
(2)この結果エントリ数=2＞0と判定する。
【００８８】
ステップS112：
エントリ数=0の場合、タイムテーブル34の開始エントリ番号と終了エントリ番号を該当するパケットのエントリ番号に更新する。
【００８９】
ステップS113：
(1)また、エントリ数≠0の場合、終了エントリ番号でスケジューラ管理テーブル33の次エントリ番号を該当パケットのエントリ番号に更新する。
【００９０】
(2)この結果、時間スロットt=TAT=49において、次エントリ番号＝5のパケットが積み重ねられることになる。
【００９１】
ステップS114, S115：
(1)スケジューラエントリ部31は、パケット理想出力時間TATでタイムテーブル34にアクセスし、終了エントリ番号、及びエントリ数を更新する。
【００９２】
(2)この結果、t=TAT=49で終了エントリ番号及びエントリ数を更新することになる。
【００９３】
ステップS116：
一方、ステップS109においてスケジューリングが不可であることが判定された場合には、未登録レジスタR0のエントリ数が、エントリ数＝0であるか否かの判定を行う。
【００９４】
ステップS117：
エントリ数＝0の場合、未登録レジスタR0の開始エントリ番号及び終了エントリ番号を該当パケットのエントリ番号に更新する。
【００９５】
ステップS118：
また、エントリ数≠0の場合は、未登録レジスタR0の終了エントリ番号でスケジューラ管理テーブル33の次エントリ番号を該当パケットのエントリ番号に更新する。
【００９６】
ステップS119：
続いて未登録レジスタR0の終了エントリ番号を該当パケットのエントリ番号に更新する。
【００９７】
ステップS120：
また、未登録レジスタR0のエントリ数をインクリメントする。
【００９８】
ステップS121：
(1)スケジューラエントリ部31は、現パケットのエントリ番号でスケジューラ管理テーブル33にアクセスし、バッファ番号を更新する。
【００９９】
(2)この場合、エントリ番号＝5に基いてバッファ番号を更新する。
【０１００】
パケット読出手順例：図19〜24
図19〜図24はバッファ部1からのパケットの出力（バッファ読出）手順を示したもので、図19はその読出手順の全体を示しており、図20〜図24は図19における各ステップの詳細を示している。以下、各ステップについて順に説明を行う。
【０１０１】
ステップS200：
(1)スケジューラ読出部35は読出ポインタ値をアドレスにしてタイムテーブル34にアクセスし、開始エントリ番号と終了エントリ番号とエントリ数を収得する。
【０１０２】
(2)この場合、スケジューラ読出部35は、タイムテーブル34から上記の例に従い、開始エントリ番号＝1、終了エントリ番号＝5、エントリ数＝3を収得する。
【０１０３】
ここで上述した読出ポインタは、スケジューラエントリ部31の書込ポインタとは同一のものとせず、少しずらした構成をとることとする。これにより、内部処理時間差のマージンを設けることができ誤動作を防止することができる。
【０１０４】
ステップS201：
(1)上記のように収得したエントリ番号から、スケジューラ読出部35は読み出すパケットの有無の判定を行う。
【０１０５】
(2)この結果、スケジューラ読出部35はR_Time=49のタイムスロットはエントリ番号＝3なので読出対象パケットが存在するという判定を行う。すなわち、読出ポインタは内部の固定単位時間スロット毎に順次タイムテーブル34にアクセスし、着目時間スロットにパケットがエントリされているか否かの判定を行い、エントリ数＝0の場合には以後の処理は行わない。
【０１０６】
ステップS202：
(1)エントリ数≠0の場合には、スケジューラ読出部35は上記で得た開始エントリ番号をアドレスとしてスケジューラ管理テーブル33及びフローテーブル32にアクセスして以下の情報を収得する。
・パケット理想出力開始時間(TAT)
・フローID
・バッファ番号
・次エントリ番号
・積算補正値(L')
(2)この結果、スケジューラ読出部35はスケジューラ管理テーブル33及びフローテーブル32から、TAT=49、フローID=25、バッファ番号=250、次エントリ番号=3、L'=6を得る。
【０１０７】
ステップS203：
(1)スケジューラ読出部35は読出ポインタ値+1をアドレスとして、タイムテーブル34にアクセスし、開始エントリ番号と終了エントリ番号とエントリ数を収得する。
【０１０８】
(2)この場合、スケジューラ読出部35は、タイムテーブル34から、開始エントリ番号＝終了エントリ番号＝2及びエントリ数=1を得る。
【０１０９】
ステップS204：
(1)スケジューラ読出部35は積算補正値L'を算出する。
【０１１０】
(2)この場合、スケジューラ読出部35は、L'=L'+R_Time-TAT=6+49-47=8を算出する。
【０１１１】
ステップS205：
(1)上記で得たエントリ番号からスケジューラ読出部35は読み出すパケット数=1か否かを判定する。
【０１１２】
(2)この場合、スケジューラ読出部35はR_Time=49のタイムスロットはエントリ数＝3なので‘1’ではないと判定する。
【０１１３】
ステップS206：
(1)上記で得たエントリ数をスケジューラ読出部35がデクリメントする。
【０１１４】
(2)この結果、エントリ数-1=3-1=2となる。
【０１１５】
ステップS207, S208：
(1)スケジューラ読出部35において、読出ポインタ値+1をアドレスとしてタイムテーブル34にアクセスし、エントリ数及び開始エントリ番号を更新する。
【０１１６】
(2)この結果、スケジューラ読出部35は、タイムテーブル34よりにR_Time+1=50で開始エントリ番号及びエントリ数を更新する。
【０１１７】
具体的には、着目スロットのステップS206で更新されたエントリ数を次スロットのエントリ数に足すことになる。
【０１１８】
ステップS209：
(1)スケジューラ読出部35は、終了エントリ番号をアドレスとしてスケジューラ管理テーブル33にアクセスし、次エントリ番号を次スロットの開始エントリ番号に更新する。
【０１１９】
(2)この結果、スケジューラ読出部35は、スケジューラ管理テーブル33から終了エントリ番号＝5で次エントリ番号を更新する。
【０１２０】
ステップS210：
(1)スケジューラ読出部35は、読出ポインタ値をアドレスとしてタイムテーブル34にアクセスし、タイムテーブル34をクリアする。これは、エントリ番号“1”のパケットの読出が終ったことを示している。
【０１２１】
(2)この結果、スケジューラ読出部35は、終了エントリ番号＝5で次エントリ番号を更新する。
【０１２２】
なお、ステップS205において、エントリ数=1の場合には、上記のステップS206〜S209の処理は行わず、このステップS210にスキップする。
【０１２３】
以上がタイムテーブル34からの読出処理となる。
【０１２４】
ステップS211：
(1)スケジューラエントリ部31内にあるエントリ番号管理FIFOに該当パケットのエントリ番号を返却する。
【０１２５】
(2)この結果、スケジューラエントリ部31は内部エントリ番号管理FIFOにエントリ数=1を返却する。
【０１２６】
ステップS212：
(1)スケジューラ読出部35は読出ポインタ値をインクリメントする。
【０１２７】
(2)この結果、スケジューラ読出部35は、R_Time=R_Time+1として、読出ポインタをインクリメントし、時間スロットt=50においてパケット番号＝3,5,2がエントリされることになる。
【０１２８】
ステップS213：
(1)スケジューラ読出部35は、バッファ番号管理FIFO2に該当パケットのバッファ番号を書き込む。これは読出が終了したパケットの番号（アドレス）を返却することを示している。
【０１２９】
(2)次にパケット読出制御部14が上記のバッファ番号に対応したパケットをパケット格納領域12から読み出す。
【０１３０】
(3)この結果、スケジューラ読出部35からバッファ番号＝250がバッファ番号管理FIFO2とパケット読出制御部14に通知され、パケット読出制御部14はこれに対応したパケットをパケット格納領域12から読出して出力パケットとする。
【０１３１】
ここで、パケット読出制御部14では内部固定時間スロット毎にスケジューラ部3からバッファ番号管理FIFO2に通知されるバッファ番号を周期的に読み出すことでバッファ部1からパケットの出力を行う。この場合に、FIFO2に読み出すべきパケットが存在しない場合には非スケジュールとなったパケットの読出を行う。これにより、物理的に無駄を与えずにパケットの送信が可能となる。
【０１３２】
未登録レジスタの再スケジューリング（再配置）処理動作
次に未登録レジスタからの再スケジューリング手順について図25及び26を参照して説明する。なお、図25はこの再スケジューリング手順の全体を示しており、図26はそのステップの詳細を示したものである。
【０１３３】
ステップS300：
スケジューラエントリ部31では、着目スロットがタイムテーブル34の最大値、若しくはその1/2のときに未登録レジスタR0を未登録レジスタR1にコピーする。具体的には、タイムテーブル34がT時間分保有しているとすると、着目スロットがT時及びT/2のときに未登録レジスタR0の値を未登録レジスタR1にコピーする。
【０１３４】
ステップS301：
未登録レジスタR0をクリアする。
【０１３５】
ステップS302：
未登録レジスタR1のエントリ数＝0であるか否かの判定を行う。この場合、エントリ数＝40なので未登録レジスタR1にパケットがあることが分かる。
【０１３６】
ステップS303：
(1)未登録レジスタR1の開始エントリ番号でスケジューラ管理テーブル33にアクセスし、該当パケットのTATを収得する。
【０１３７】
(2)この結果、スケジューラエントリ部は、開始エントリ番号＝30でTATを収得する。
【０１３８】
以下、スケジューリング手順のステップS109以降と同様の処理を実行することになる。
【０１３９】
このように、2つの未登録レジスタR0、R1を用いることにより、タイムテーブル34の範囲を越えて行う場合でも、半周期毎に他方の未登録レジスタR1にコピーして通常のスケジューリングと平行したスケジューリングを行うので、常にタイムテーブル34の範囲内と同等のスケジューリングを実現していることになる。
【０１４０】
（付記１）
入力パケットを格納するパケット格納領域を有するバッファ部と、
内部の固定単位時間スロットで刻まれるタイムテーブルを有し、該バッファ部から与えられたフロー毎の入力パケットの長さと前回のパケット出力終了時間と所望送信レートを規定するパケット出力間隔とに基づいて該入力パケットの理想出力終了時間を算出して記憶するとともに該タイムテーブルにおける該前回のパケット出力終了時間の次の時間スロットに該入力パケットのエントリを登録するスケジューラ部と、
を備え、該バッファ部が、該タイムテーブルに登録したエントリに対応する該出力終了時間を該スケジューラ部から受けて該入力パケットをその出力終了時間に該パケット格納領域から出力することを特徴としたパケットシェーピング装置。
（付記２）付記１において、
該バッファ部が、該パケット格納領域から実際にパケットを出力する際に該スケジューラ部に該パケットのフロー識別子を通知し、該スケジューラ部では、該フロー識別子のパケットに関し、該算出した理想出力終了時間と該実際にパケットを出力した時間との差分をレート補正値として計算し、次パケットの理想出力終了時間から該レート補正値分だけ減算することを特徴としたパケットシェーピング装置。
（付記３）付記２において、
該スケジューラ部が、該レート補正値を積算し、一度に使用できるレート補正値を規制することを特徴としたパケットシェーピング装置。
（付記４）付記１において、
該スケジューラ部と該バッファ部との間に出力すべきパケットの情報を受け渡しするためのFIFOをさらに設け、該バッファ部は内部の固定単位時間毎に該FIFOを巡回的に読み出すことにより該パケット格納領域からパケットの送出を行うことを特徴としたパケットシェーピング装置。
（付記５）付記４において、
該スケジューリング部が、該FIFOに読み出すべきパケット情報が存在しない場合は、スケジューリング対象でないパケットを該パケット格納領域から送出することを特徴としたパケットシェーピング装置。
（付記６）付記１において、
該スケジューラ部が、該タイムテーブルへのエントリ登録を行うとき、同一の時間スロットにおいて複数のエントリが発生したとき、該エントリを登録することを特徴としたパケットシェーピング装置。
（付記７）付記６において、
該バッファ部が、該複数のエントリに対し、一番最初にエントリされた番号のパケットのみに対して読出処理を行い、残りは後続の時間スロットのエントリにリンクすることを特徴としたパケットシェーピング装置。
（付記８）付記１において、
該スケジューラ部が、該タイムテーブルより未来の時間スロットにエントリ登録が必要なパケットのエントリ番号は別のテーブルに登録しておき、該タイムテーブルの1/2周期毎に再スケジューリングを行うことを特徴としたパケットシェーピング装置。
（付記９）付記８において、
該スケジューラ部が、該タイムテーブルを該固定時間スロット毎にスライディングする構成とし、該再スケジューリングと合わせることで永久的なエントリ登録を可能にしたことを特徴としたパケットシェーピング装置。
（付記１０）付記１において、
該スケジューラ部が、該タイムテーブルのエントリ登録と読出処理に時間差を設けることにより、内部での処理時間差のマージンを確保することを特徴としたパケットシェーピング装置。
（付記１１）付記１において、
該パケットが可変長パケットであることを特徴としたパケットシェーピング装置。
【図面の簡単な説明】
【０１４１】
【図１】本発明に係るパケットシェーピング装置のスケジューリング方式概要（１）を示した図である。
【図２】本発明に係るパケットシェーピング装置のレート補正処理の概要を示した図である。
【図３】本発明に係るパケットシェーピング装置のスケジューリング方式概要（２）を示した図である。
【図４】本発明に係るパケットシェーピング装置のエントリ競合時の処理概要を示した図である。
【図５】本発明に係るパケットシェーピング装置のテーブル超過時の処理概要を示した図である。
【図６】本発明に係るパケットシェーピング装置におけるエントリスライディング処理の概要を示した図である。
【図７】本発明に係るパケットシェーピング装置の一実施例を示したブロック図である。
【図８】図７に示したパケットシェーピング装置をIPルータに適用したときの動作を概略的に示したブロック図である。
【図９】本発明に係るパケットシェーピング装置に用いるタイムテーブルの構成例を示した図である。
【図１０】本発明に係るパケットシェーピング装置に用いるフローテーブルの構成例を示した図である。
【図１１】本発明に係るパケットシェーピング装置に用いるスケジューラ管理テーブルの構成例を示した図である。
【図１２】本発明に係るパケットシェーピング装置で用いる各テーブル間の動作例を示した図である。
【図１３】本発明に係るパケットシェーピング装置においてタイムテーブルにエントリするまでのスケジューリング手順例を示したフローチャート図である。
【図１４】図13に示したスケジューリング手順の詳細を示したフローチャート図（その１）である。
【図１５】図13に示したスケジューリング手順の詳細を示したフローチャート図（その２）である。
【図１６】図13に示したスケジューリング手順の詳細を示したフローチャート図（その３）である。
【図１７】図13に示したスケジューリング手順の詳細を示したフローチャート図（その４）である。
【図１８】図13に示したスケジューリング手順の詳細を示したフローチャート図（その５）である。
【図１９】本発明に係るパケットシェーピング装置におけるバッファからの読出手順例を示したフローチャート図である。
【図２０】図1９に示した読出手順の詳細を示したフローチャート図（その１）である。
【図２１】図1９に示した読出手順の詳細を示したフローチャート図（その２）である。
【図２２】図1９に示した読出手順の詳細を示したフローチャート図（その３）である。
【図２３】図1９に示した読出手順の詳細を示したフローチャート図（その４）である。
【図２４】図1９に示した読出手順の詳細を示したフローチャート図（その５）である。
【図２５】本発明に係るパケットシェーピング装置においてタイムテーブルへの再スケジューリング手順例を示したフローチャート図である。
【図２６】図２５に示した再スケジューリング手順の詳細例を示したフローチャート図である。
【図２７】従来例を示したブロック図である。
【符号の説明】
【０１４２】
1  バッファ部
11  パケット書込制御部
12  パケット格納領域（バッファ）
13  バッファ管理メモリ
14  パケット読出制御部
2  バッファ番号管理FIFO
3  スケジューラ部
31  スケジューラエントリ部
32  フローテーブル
33  スケジューラ管理テーブル
34  タイムテーブル
35  スケジューラ読出部
LCT  前パケット出力終了時間
ICI  パケット出力間隔
Enable  パケットEnable
L  補正値
L'  積算補正値
TAT  パケット理想出力開始時間
図中、同一符号は同一又は相当部分を示す。
【図１】
2006197235.tif 000003
【図２】
2006197235.tif 000004
【図３】
2006197235.tif 000005
【図４】
2006197235.tif 000006
【図５】
2006197235.tif 000007
【図６】
2006197235.tif 000008
【図７】
2006197235.tif 000009
【図８】
2006197235.tif 000010
【図９】
2006197235.tif 000011
【図１０】
2006197235.tif 000012
【図１１】
2006197235.tif 000013
【図１２】
2006197235.tif 000014
【図１３】
2006197235.tif 000015
【図１４】
2006197235.tif 000016
【図１５】
2006197235.tif 000017
【図１６】
2006197235.tif 000018
【図１７】
2006197235.tif 000019
【図１８】
2006197235.tif 000020
【図１９】
2006197235.tif 000021
【図２０】
2006197235.tif 000022
【図２１】
2006197235.tif 000023
【図２２】
2006197235.tif 000024
【図２３】
2006197235.tif 000025
【図２４】
2006197235.tif 000026
【図２５】
2006197235.tif 000027
【図２６】
2006197235.tif 000028
【図２７】
2006197235.tif 000029