従来からパケット転送装置において,入力レート/出力レートの監視を行っているが,レート監視において必要となるID(ユーザ識別のための識別番号)の数が増加する傾向にあり,今後,レート監視に求められるID数が飛躍的に増加することが予想されるため,ID数を増加可能なアーキテクチャが求められている。
パケット転送を行う装置等のインタフェース・ユニットで集線されるデータ容量は年々増大している。数年前まではFE(Fast Ether :100 メガビット秒) やGbE(Giga Bit Ether: 1ギガビット秒)が主流を占めていたが,近年ではネットワークの大容量化が進みバックボーンを中心に10GbE(10ギガビットイーサー)のインタフェースも増えている。
インタフェース・ユニットではQos(Quality of Service) 機能を具備し,各ユーザ毎に通過・廃棄のようなレート監視を行っている。
図14は対象となるネットワーク構成の例を示す。50はそれぞれ企業または端末等である。51はASW(Aggregate Switch :集線装置) ,52はパケット転送装置であるL2SW(Layer 2スイッチ),53はメトロ・アクセスネットワーク(IPネットワーク),54はバックボーンを構成するL2SW,55はバックボーン(フォトニックネットワーク)である。
図15はL2SWの構成例である。図中,52はL2SW,520−1(♯0)〜520−4(♯3)はカード(入出力インタフェース),521は多数(この例はP0〜P3の4個)設けられたポート,522はインタフェース(IF),523は入力部(Ingress 機能),523aは入力するパケットについて監視して予め設定された帯域を越えたパケットを廃棄するポリサー(policer),524は出力部(Egress機能),524aは出力するパケットをバッファに格納した後,出力されるパケットの発生分布が予め決められた帯域を越えないよう監視して規定の帯域になるよう平準化して出力する機能を持つシェーパ(shaper)である。
L2SW52は端末またはネットワークに接続されたカード520−1(♯0)〜520−4(♯3)の複数のポート521からインタフェース522を通って入力部(Ingress 機能) 523から入力したパケットをスイッチ525により相互に切替接続して,各カード520−1(♯0)〜520−4(♯3)の出力部(Egress機能)524からインタフェース522を介して各ポート521から外部の端末やネットワークに出力される。各カードの入力部523のポリサー523aには各ユーザから送信されて入力するパケットについて,予め各ユーザに対して送信が許容された帯域を越えないかの監視をし,越えた場合にはそのパケットを廃棄する機能を備える。また,各カードの出力部524のシェーパ524aは各ユーザが受信することを許容された平均帯域を越えないかの監視をしてパケットを出力する。
図16はトークンバケットによる帯域管理の説明図である。図中,aは一定期間(周期)中に転送可能な(転送が許容された)データ量であるトークン供給動作を表し,例えば,1Mバイト/Sなら,周期1Sec でトークンが1Mbyte(メガバイト) になる。この例ではa1〜a3の3回の供給動作が行われる。bは一定周期の時間を表し,b1〜b3で示す3つの周期を示す。cは伝送可能な容量を表すバケットであり,c1〜c9は時間の推移に対応して伝送可能な容量を表すバケット内のトークン量(カウンタ量という)の変化を表す。dは送信または受信されるパケットを表し,d1,d2,d6,d7はパケットの長さが短く(1Mとする),d3〜d5はパケットの長さが長い(2Mとする)ものとする。
以下の説明では,パケットを受信(入力)する場合の動作について記述するが,送信(出力)する場合にも同様である。周期b1の開始時点で,あるユーザのバケットcに対して,a1で示すトークン供給動作が実行され,当該ユーザに対して予め設定された量(この例では,1周期で3Mの量とする)のトークンが供給される。c1の中の網かけで示す部分が新たに供給されたトークンの部分であり,3Mの量である。この状態でこのユーザ用のパケットd1を受信すると,トークン量は伝送した量(1M)だけ使用したので,この周期b1で利用可能なトークンは,c2に示すように3M−1M=2Mとなる。この後,このユーザ用のパケットd2を受信すると,残りのトークンはc3に示すように,2M−1M=1Mとなる。
この後,次の周期b2の開始時点で,a2で示すトークン供給動作が実行されると,新たなトークン(3M)の供給により,c4で示すように3M+1M=4Mの量にトークンが更新される。この後,パケットd3(長さ2M)を受信すると,バケットのトークン量はc5に示すように4M−2M=2Mに更新される。以下,このような動作が図に示すように続けられ,周期b3の開始時点で,このユーザのバケットのトークン量がc7に示すように3Mに更新され,この後パケットd5(長さ2M)を受信すると,バケットのトークン量はc8に示すように3M−2M=1Mとなり,その後パケットd6(長さ1M)を受信すると,バケットのトークン量は1M−1M=0の演算が行われてc9のように0となる。この後,更にパケットd7(長さ1M)を受信すると,このユーザに割り当てられたトークンは既に0になっているため,このパケットd7を受信することは許容されず廃棄される。このように,ユーザに付与された帯域に対応したトークン量により受信(または送信)パケットの量に応じた演算を行って,帯域の監視が行われる。
図17は従来のレート監視装置の構成であり,このレート監視装置は上記図15に示す構成におけるポリサー523aやシェーパ524aに相当する機構であり,上記図16を用いて説明したトークンを用いた原理による監視を行う。
図17において,6はレート監視装置,60はトークン供給設定部,61はトークンカウンタ,62は一定周期毎に出力を発生するトークンタイマ,63はリソース供給部,64はパケット情報抽出部,65は演算部,66はパケットバッファである。
図18はテーブルの構成例であり,図18のA.はレート監視装置6の内部RAMに設けたトークン供給設定テーブル(図17のトークン供給設定部60に対応)の構成例,B.はレート監視装置6の内部RAMに設けたトークンカウンタテーブル(図17のトークンカウンタ61に対応)の構成例である。A.のトークン供給設定テーブルには,各ユーザ毎の帯域監視のための識別番号であるメータID毎に,そのメータIDの使用・未使用(オン/オフで表す)の状態と,各ユーザに対して利用可能な(または許容された)最大帯域であるバースト値,及び利用できる平均帯域に対応するトークン量が設定されている。図18のB.のトークンカウンタテーブルには,メータID毎に使用・未使用の状態と,現在の各ユーザのトークン量を表すトークンカウンタとが設定されている。
図17のトークン供給設定部60には予め,CPU(図示省略)からユーザのメータIDに対応して許容されたバースト値と平均帯域に対応するトークン量が図18のA.に示すテーブルに設定されている。
図17のレート監視装置6のトークンタイマ62から一定周期で出力が発生するとトークン供給設定部60を駆動する。これにより,使用中の状態に設定されたメータIDに対応するトークン設定値が,順番にリソース供給部63に出力され,リソース供給部63は該当するメータIDに対応するトークンカウンタ61の現在のトークン量を読み出してリソース供給部63に出力し,トークン供給設定部60からのトークン設定値を加算して,再びトークンカウンタ61の当該メータIDに対応するトークンカウンに書き込む。この動作は,トークンタイマ62からの一定周期毎に発生するタイマの出力毎に実行される。
レート監視装置6にパケットデータが入力されると,パケット情報抽出部64において,パケットデータ(パケット全体)をパケットバッファ66に格納すると共にパケット情報(送信元,送信先を含むヘッダやパケット長等の情報)を抽出して,トークンカウンタ61に供給すると共に演算部65に供給する。トークンカウンタ61はパケット情報を受け取ると,当該パケットの送信先(出力側のレート監視装置の場合)のユーザ(メータID)に対応するトークンカウンタ値を読み出して演算部65に出力する。演算部65は入力されたトークンカウンタ値から,情報抽出部64から入力されたパケット情報の中のパケット長の情報に相当するトークン量を減算して,その結果をトークンカウンタ61の元の位置に書き戻す。この演算結果が正(0を含む)ならパケットバッファ66に格納したパケットデータは所定の間隔で読み出されて出力され,演算結果が負なら演算部65からはパケットデータを廃棄することを指示する廃棄フラグが出力される。このようにして,レート監視装置6により出力する送信先に対応して予め設定された帯域に制限するよう監視(シェーパ機能)が行われる。なお,入力パケットの送信元アドレスに対応したトークンを監視(ポリサー機能)することも行われている。
以前の集線ではFE(Fast Ether)やGbE(Giga Bit Ether)を束ねるようなインタフェース・ユニットが主流であり,ユニットで集線後のデータレートも10GbE程度であったが,近年の大容量化で10GbEを束ねるユニットが求められると共に,集線したデータの細やかなレート監視が求められている。
上記図17に示すレート監視の技術では,ユーザ数が増大して且つ集線による高速化したパケットに対応するため,デバイス内部のメモリ(図17のトークンカウンタ61の内部RAM)を利用して,レート監視を実現している。しかし,装置内部のメモリのサイズには限界があるため,ユーザ数の増大に対応するにはメモリの増加が必要であり,限界を越えるにはデバイスの進化を待つ必要があるという問題がる。また,デバイス内部のメールを外部メモリに置き換えて実現する方法では,レイテンシ(遅延時間)が大きくなるため,実現することができなかった。
パケット交換の技術において,パケットを記憶して交換するための記憶装置として内部メモリ(SRAM)とそれより大容量の外部記憶装置(DDRSDRAM)を使用してジュアルモードで動作させるために,外部記憶装置インタフェースと外部記憶装置マネージャ及び内部記憶装置と外部記憶装置の間でパケットデータの転送を実行する転送エンジンを設け,ランダムアクセスの待ち時間を隠すために予測的にバンクの切替えを採用する等の提案がなされている(特許文献1参照)。
特開2005−287038号公報
図1はこの方式の概要構成を示す図である。図中,1はパケット転送装置内のレート監視装置であり,入力側(Ingress)に設けた場合はポリサー,出力側(Egress) に設けた場合はシェーパとして構成される。10はトークンを付与(加算)する一定周期毎に出力を発生するトークンタイマ,11はタイミング生成部,12は各ユーザ(メータID)に対して設定(外部RAMのトークン供給設定部20に設定)されたトークンを供給(加算)して外部RAMのトークンカウンタ21に格納する処理を行うリソース供給部,13はパケット情報抽出部,14は所定数の入力パケットのそれぞれのトークンカウンタの値を格納したキャッシュレジスタ,15aは予め決められた所定個数の入力パケットに関するパケット情報(メータID,パケット長及び所定個数のメータIDの同一性を表す一致フラグ)を格納する容量を備えた第1の情報キャッシュ,15bは15aと同様のパケット情報を格納する第2の情報キャッシュ,16はトークン演算部,17aは第1の情報キャッシュ15aに対するトークン演算部16により演算結果を格納する第1の情報バッファ,17bは第2の情報キャッシュ15bに対するトークン演算部16により演算結果を格納する第2の情報バッファ,18は入力するパケットを格納するパケットバッファ,19は第1の情報バッファ17aと第2の情報バッファ17bの一方を交互に選択する選択部,20は外部RAMのトークン供給設定部,21は外部RAMのトークンカウンタ,3aは入力されるパケットデータ,3bは監視装置1から出力されるパケットデータである。
外部RAMのトークン供給設定部20には上記図18のA.に示すようなトークン供給テーブルと同様にメータID(ユーザ別に割り当てられたID),オン・オフ(使用・未使用),バースト設定(最大容量),ユーザが申請した平均使用帯域に対応したトークン値とが外部(図示省略された端末やメモリ)から設定され,外部RAMのトークンカウンタには上記図18のB.に示すようなトークンカウンタテーブルと同様にメータID,オン・オフ,トークンカウンタの現在値とをCPUから設定する。
トークン供給設定部20はトークンタイマ10から発生するタイミング信号に応じて読み出したメータIDに対応したトークン値を受け取ると,同じタイミング信号によりトークンカウンタ21から読み出された同じメータIDに対応したトークンカウンタ値と加算してトークンカウンタ21の同じメータIDのトークンカウンタ値として書き戻す処理を順番に実行する。
入力するパケット3aは,レート監視装置1のパケット情報抽出部13へ入力されるとパケットのヘッダに基づいた連続した所定個数のパケットの各パケット情報(入力の場合は送信元,出力の場合は送信先アドレスに対応したメータID及びレングス(パケット長)等の情報)とそれらの所定個数の各パケットのユーザ(ユーザID)の同一性を表すフラグ情報とを発生して第1の情報キャッシュ15aと第2の情報キャッシュ15bの一方に格納する。第1の情報キャッシュ15aへ情報格納されると,その後の所定個数のパケットは第2の情報キャッシュ15bに格納され,交互に格納される。
一方,キャッシュレジスタ14には第1の情報キャッシュ15a,第2の情報キャッシュ15bに格納された所定個数のパケット情報(そのユーザID)の中の現在トークン演算を行う一方の情報キャッシュに格納された各メータIDに対応するトークンカウンタ値を外部RAMのトークンカウンタ21から一括して取り出して格納する。なお,外部RAMのトークンカウンタ21のトークン値の読み出しは,第1の情報キャッシュ15aまたは第2の情報キャッシュ15bに格納されたメータIDを取り出して,トークンカウンタ21に対するアドレスとしてアクセスし,トークン値をキャッシュレジスタ14に読み出す。
トークン演算部16はパケット情報の格納が終了した第1の情報キャッシュ15a(第2の情報キャッシュ15bへのパケット情報の格納中)についてトークン演算を実行する。この時,第1の情報キャッシュ15a内のフラグ情報を参照して,同じユーザIDのパケット情報についてのトークン演算は,それらの複数パケットの各レングスの情報に相当するトークン量を現在の当該ユーザIDのトークン値(キャッシュレジスタ14から取り出した値)から減算し,結果が正であれば,そのパケットの通過(転送許可)を指示する表示を,負であればそのパケットの廃棄を指示する表示を,第1の情報キャッシュ15aに対応したトークン演算部16の出力側に設けられた,情報バッファ17aの中の演算を行ったパケットに対応する位置に設定する。この時,フラグ情報により同一ユーザIDのパケットが入っていることを判定した場合には,そのパケット情報のレングスに対応するトークン量の減算と,減算結果の正負の判定に対応する通過,廃棄を指示する指示情報を第1の情報キャッシュ15aの対応する位置に設定する。
また,トークン演算部16は,トークン演算の結果である残りのトークン値を外部RAMのトークンカウンタ21に書き込むが,第1の情報キャッシュ15a内の複数の同一ユーザIDのパケットについては,途中の演算結果を保持して最後に求めた演算結果を書き込むようにする。なお,負の結果が得られた場合にも書き込むことにより,その後のリソース供給部の制御によりトークン供給を行うことで正の値に戻ることがある。
第1の情報キャッシュ15aについてトークン演算が終了して情報バッファ17aに結果(通過指示か廃棄指示の指示情報)が設定されると,タイミング生成部11からのタイミング信号に応じて第2の情報キャッシュ15bの情報に対するトークン演算を開始するよう切替えられ,結果を情報バッファ17bの元のユーザIDに対応した位置に格納する。また,第1の情報バッファ17a,第2の情報バッファ17bはタイミング生成部11のタイミング信号により選択部19により選択され,選択された情報バッファ例えば,第1の情報バッファ17aが選択されると,その先頭の情報(ユーザID)に対応するパケットデータがパケットバッファ18から読み出される。レート監視装置1から読み出されたパケットデータ3bは後段に供給され,同時に第1の情報バッファ17aに設定された指示情報が「廃棄」を表す場合は,「廃棄」を表す指示情報(廃棄フラグと呼ぶ場合もある)も後段の装置に供給され,後段において指示情報が「通過」を表す場合には対応するパケットデータを転送し,指示情報が「廃棄」を表す場合には対応するパケットデータを廃棄する。
図2は実施例の構成を示す。図3は情報キャッシュ,キャッシュレジスタ及び情報バッファのデータ構成を示す図である。図中,1,10〜19の各部は上記図1の同一符号と同じである。但し,第1の情報キャッシュ15a,第2の情報キャッシュ15bは4つのパケットデータのそれぞれのパケット情報を格納するキャッシュ150a,150bと,同一性を表すフラグ情報(F1〜F6)を格納するバッファ151a,151bとを備えている。また,第1の情報バッファ17aと第2の情報バッファ17bにはトークン演算部16による演算結果に応じた指示情報として通過を指示するV(Valid) か, 廃棄を指示するD(Discard) が設定される。但し,指示情報として,VとDをそれぞれ表す2ビットの情報を設けることができるが,指示情報を1ビットだけで表し,“1”なら通過,“0”なら放棄を表すものとして処理するようにしてもよい。
外部RAMのトークン供給設定部20には,各メータID(ユーザIDと同じ)に対してそれぞれ従来(図18のA.)と同様の構成で図2に具体例で示すように,オン/オフ(使用,未使用),許容バースト量であるバースト設定,トークン設定の各値が設定され,外部RAMのトークンカウンタ21にも図2に示すように各メータIDに対しオン・オフ,トークンカウンタの値が設定され,設定は外部(図示省略された端末またはメモリ)から入力される。
入力パケットがレート監視装置1に入力すると,パケット情報抽出部13でパケットデータをパケットバッファ18に格納すると共に,パケット情報が抽出されて第1の情報キャッシュ15aには図3のA.に示すようにキャッシュID0〜ID3で示す4つの位置にメータID(ユーザID)として0〜3,イネーブル(Ena:使用中か否か)を表すE0〜E3,及びパケット長(Lenglth:byteで表す) としてL0〜L3の各値が設定され,同時に一致フラグ(Flag) の情報が図3のB.に示す内容が設定される。この一致フラグは,第1(第2)の情報キャッシュ15a(15b)のそれぞれに設定された4つのパケット情報について,入力パケットから抽出されて設定されたメータID0〜ID3が相互に一致するか否かを表すもので,F1〜F6の6つのフラグで構成される。すなわち,F1はメータID0とID1の比較結果を表すフラグであり,一致なら“1”,不一致なら“0”である。同様にF2はメータID0とID2の比較結果,F3はメータID0とID3の比較結果,F4はメータID1とID2の比較結果,F5はメータID1とID3の比較結果,F6はメータID2とID3の比較結果を表す。
図2に示す例では,第1の情報キャッシュ15aに4つのパケット情報150aが格納されたものとする。この例ではキャッシュID0〜ID3にメータID0のパケットが連続して格納されて,各パケットのパケット長が64 (Kbyte)である。これに対する一致フラグ151aはF1〜1F6の全てが“1”である。また,その後の4つのパケットデータは第2の情報キャッシュ15bに4つのパケット情報150bが格納されたものとする。この例では,キャッシュID0〜ID3にメータID1,ID2,ID3,ID4と全て異なるメータIDのパケットであることを示し,パケット長が64(Kbyte)であり, その一致フラグ151bは全て“0”である。一方,キャッシュレジスタ14には図3のC.に示すように各キャッシュID(第1の情報キャッシュ15a)に対応したトークンカウンタ値が設定される。但し,トークンカウンタ値はパケットのユーザ情報(送信元または送信先)に対応するメータIDを用いてトークンカウンタ21から読み出される。
トークン演算部16における第1の処理フローを図4に示す。最初に第1の情報キャッシュ15aの中の先頭のキャッシュID0に対応するイネーブル情報のE0が“1”か判別し(図4のS1),“0”であれば終了し,“1”であれば,キャッシュID0に有効なパケット情報が設定されているとし,トークンカウンタ(TokenCTR) ≧0が成立するか判別する(図4のS2)。ノーの場合(負の場合)は,トークン演算部16内の一時的にカウント値を保持する一時トークンカウンタ(TMPCTRで表す)0にキャッシュレジスタ14が保持するトークンカウント値を設定し,出力側の第1の情報バッファ17a内のD0=“1”(放棄情報)を設定する(同S3)。第1の情報バッファ17a,17bには図3のD.に示すように各キャッシュID0〜ID3に対応してV(Valid)とD(Discard) の値(それぞれ1ビット)を設定する構成を備えている。
ステップS2でイエスと判定された場合,トークンカウンタ0−L0(キャッシュID0のレングス)の演算をして一時トークンカウンタ(TMPCTR0)に設定する。続いて,第1の情報キャッシュ15aのキャッシュID1に対応するイネーブル情報のE1が“1”であるかを判別し(図4のS5),“0”であれば(キャッシュID1にパケット情報が格納されていないので),一時トークンカウンタ0(TMPCTR0)をトークンカウンタ21に書き戻し(同S6),“1”であれば続いてE2が“1”であるか判別する(同S7)。“0”であれば,後述する第2のフローチャート(図5)に移行し,“1”であれば次にE3が“1”であるか判定する(図4のS8)。ここで,“0”であることが分かると後述する第2のフローチャート(図5)に移行し,“1”であれば後述する第3のフローチャート(図6)に移行する。
図5はトークン演算部の第2のフローチャートであり,上記図4の第1のフローチャートにおいてE0=E1=“1”でキャッシュID0,ID1に有効なパケット情報が格納され,ID2が未使用である場合(図4のステップS7でノーの場合)に実行され,メータID0,ID1に対応するトークンカウンタ値の処理が実行される。
最初にF1(一致フラグ1)が“1”(キャッシュID0のメータIDとキャッシュID1のメータIDが一致)であるか判別し(図5のS1),“0”の場合はトークンカウンタ1(TokenCTR1)≧0か判別し(同S2),ノーの場合は一時トークンカウンタ(TMPCTR1)の値をトークンカウンタ(TokenCTR1)の値として書き戻し,出力側の第1の情報バッファ17a内のD1=“1”(放棄指示)を設定する(同S3)。ステップS2において,イエスと判断された場合はトークンカウンタ1(TokenCTR1)−L1(パケット1)の演算をして,演算結果を一時トークンカウンタ(TMPCTR1)に設定する(同S4)。ステップS3及びS4の後,一時トークンカウンタ(TMPCTR0)/一時トークンカウンタ(TMPCTR1)をトークンカウンタ21に書き戻す(図5のS5)。
また,ステップS1においてF1が“1”であると判別されると,一時トークンカウンタ(TMPCTR0)≧0であるか判別し(図5のS6),ノーと判別されると一時トークンカウンタ0(TMPCTR0)の場合はトークンカウンタ0(TokenCTR0)の値を一時トークンカウンタ(TMPCTR0)に設定し,情報バッファ17a内にD1=“1”(放棄情報)を設定する(同S7)。ステップS6においてイエスと判別されると,トークンカウンタ0−レングス(L1)の演算をして,結果を一時トークンカウンタ0(TMPCTR0)に設定する(図5のS8)。ステップS7,S8に続いて一時トークンカウンタ(TMPCTR0)をトークンカウンタ21に書き戻す(図5のS9)。
図6,図7はトークン演算部の第3のフローチャート(その1),(その2)であり,図4に示す第1のフローチャートにおいて,E0=E1=E2=“1”であってE3=“0”(キャッシュID3は不使用)の場合に上記図4のステップS8に続いて実行され,メータID0,ID1,ID2のトークンカウンタ値の処理が実行される。
最初にフラグF1が“1”(メータID0とID1が一致)であるか判別し(図6のS1),“0”の場合はトークンカウンタ1(TokenCTR1)≧0か判別し(同S2),ノー(負の場合)は一時トークンカウンタ(TMPCTR1)にトークンカウンタ1(TokenCTR1)の値を設定し,D1に“1”(放棄指示)を設定する(同S3)。ステップS2でイエスと判別されると,トークンカウンタ1(TokenCTR1)−レングス(L1)の演算をして一時トークンカウンタ1(TMPCTR1)に設定する(同S4)。ステップS3,S4に続いて一致フラグF2=“1”(メータID0=ID2)であるかを判別する(同S5)。ここで,ノー(メータID0≠ID2)と判別されると,図7に移行し,フラグF4=“1”(メータID1=ID2)か判別し(図7のS50),ノ−(不一致)の場合はトークンカウンタ2(TokenCTR2)≧0か判別し(同S51),ここでノー(トークンカウンタ2の値が負)と判別されると一時トークンカウンタ2(TMPCTR2)にトークンカウンタ2(TokenCTR2)の値を設定し,D2=“1”(情報バッファ17a内の第2の放棄指示D2)を設定し(同S52),イエスと判別されると,トークンカウンタ2(TokenCTR2)−レングス(L2)の演算をして一時トークンカウンタ2(TMPCTR2)に設定する(同S53)。ステップS52,S53に続いて一時トークンカウンタ0,1,2(TMPCTR0,TMPCTR1,TMPCTR2)をトークンカウンタ21のそれぞれの対応するメータID0,ID1,ID2に書き戻す(同S54)。
図7のS50において,イエスと判別されると,一時トークンカウンタ1(TMPCTR1)≧0であるか判別し(同S55),ノーと判別されると一時トークンカウンタ1(TMPCTR1)の値をそのまま保持し,情報バッファ17aのD1(放棄指示)=“1”を設定し(同S56),ステップS55でイエスと判別されると,メータID1とID2が一致しているため,一時トークンカウンタ1(TMPCTR1)−レングス(L2)の演算をして結果を一時トークンカウンタ1(TMPCTR1)に設定する(同S57)。ステップS56,S57に続いて演算結果を保持する一時トークンカウンタ0,1(TMPCTR0/TMPCTR1)の値をトークンカウンタ21のメータID0,ID1の位置に書き戻す(図7のS58)。
上記図6のステップS1において,イエスと判別されると(メータID0=ID1の場合),一時トークンカウンタ0(TMPCTR0)≧0か判別し(図6のS6),ノーの場合(負の場合)は,一時トークンカウンタ0(TMPCTR0)の値はそのまま変化せず(図6のS7),イエスの場合は一時トークンカウンタ0(TMPCTR0)−L1の演算をして一時トークンカウンタ0(TMPCTR0)に設定する(同S8)。ステップS7,S8に続いてF2=“1”(メータID0=ID2)か判別し(図6のS9),ノーの場合は図7のS50に移行し,イエスの場合(メータID=ID2)は一時トークンカウンタ0(TMPCTR0)≧0か判別して(同S10),ノーの場合は一時トークンカウンタ0(TMPCTR0)の値は変化せず(同S11),イエスの場合はID2のパケット長であるレングスL2を一時トークンカウンタ0(TMPCTR0)から減算する演算をして,結果を一時トークンカウンタ0(TMPCTR0)に保持する(同S12)。ステップS11,S12に続いて,一時トークンカウンタ0(TMPCTR0)をトークンカウンタ21に書き戻し,F1=“0”(メータID0≠ID1)の場合は一時トークンカウンタ1(TMPCTR1)をトークンカウンタ21に書き戻す(図6のS13)。
図8はトークン演算部の第4のフローチャート(その1)であり,上記図4に示す第1のフローチャートのステップS8でイエスと判定された,E0=E1=E2=E3=“1”の場合であり,各メータID0〜ID3の全てにパケット情報が設定されている場合であり,全てのメータID0〜ID3についてトークンカウンタ値の処理が実行される。なお,この時,図4のステップS4で一時トークンカウンタ0(TMPCTR0)にはTokenCTR0−L0の演算結果を保持している。
最初にフラグF1が“1”(メータID0とID1が一致)であるか判別し(図6のS1),ノー(不一致)の場合はトークンカウンタ1(TokenCTR1)≧0か判別し(同S2),ノー(不一致)の場合は一時トークンカウンタ1(TMPCTR1)にトークンカウンタ1(TokenCTR1)の値を設定し,D1(第1のパケットの放棄指示)を“1”に設定し(同S3),イエスの場合はトークンカウンタ1(Token CTR1) −L1の演算をして結果を一時トークンカウンタ1(TMPCTR1)に設定する(同S4)。ステップS3,S4の後は,F2=“1”(メータID0=ID2)であるか判別し(図8のS5),ノー(不一致)の場合はAのルートで示す後述する図9のステップS60に移行し,イエス(一致)の場合はステップS10の処理が実行される。ステップS1でイエス(メータID0とID1が一致)である場合は一時トークンカウンタ0(TMPCTR0)≧0か判別し(同S6),ノーの場合は一時トークンカウンタ0(TMPCTR0)の値は変化せず,D1=“1”(第1のパケットの放棄指示)を設定し(図8のS7),イエスの場合は一時トークンカウンタ0(TMPCTR0)−L1の演算をして結果を一時トークンカウンタ0(TMPCTR0)に保持し(同S8),ステップS7,S8に続いてF2=“1”(メータID0=ID2)か判定し(同S9),ノーの場合は図9に示すステップS60に移行し,イエスの場合は一時トークンカウンタ0(TMPCTR0)≧0であるか判別する(同S10)。
ここで,ノーの場合は一時トークンカウンタ0(TMPCTR0)は変えず,D1=“1”(第1のパケットの放棄指示)を設定し(図8のS11),イエスである場合は一時トークンカウンタ0(TMPCTR0)−L2の演算をして,結果を一時トークンカウンタ0(TMPCTR0)に設定する(同S12)。ステップS11,S12に続いてF3=“1”(メータID0=ID3)か判定し(同S13),ノーの場合はF5=“1”(メータID1=ID3)か判定し(同S14),ノーの場合はCの経路で後述する図10のステップS66に移行し,イエスの場合はDの経路で後述する図9に示すステップS56に移行する。図8のステップS13でイエス(メータID0=ID3)と判別されると,一時トークンカウンタ0(TMPCTR0)≧0であるか判別し,ノーと判別されると,一時トークンカウンタ0(TMPCTR0)は変化せず,D1=“1”(第1のパケットの放棄指示)を設定し(図8のS16),イエスの場合は一時トークンカウンタ0(TMPCTR0)−L3の演算をして,結果を一時トークンカウンタ0(TMPCTR0)に保持する(同S17)。ステップS16,S17に続いて,一時トークンカウンタ0(TMPCTR0)をトークンカウンタ21に書き戻し,F1=“0”(ID0≠ID1)の場合は一時トークンカウンタ1(TMPCTR1)をトークンカウンタ21に書き戻し,F2=“0”(ID0≠ID2)の場合は一時トークンカウンタ2(TMPCTR2)を書き戻し,F3=“0”(ID0≠ID3)の場合は一時トークンカウンタ3(TMPCTR3)を書き戻す(図8のS18)。
図9はトークン演算部の第4のフローチャート(その2)であり,最初に図8に示すステップS5においてノーと判別された場合に,F4=“1”(メータID1=ID2)であるか判別し(図9のS50),ノー(不一致)の場合は図10に移行し,イエス(一致)の場合は一時トークンカウンタ1(TMPCTR1)≧0か判別する(同S51)。ここで,ノーと判別された場合は一時トークンカウンタ1(TMPCTR1)は変化せず,D1=“1”(第1のパケットの放棄指示)を設定し(図9のS52),イエスと判別されると一時トークンカウンタ1(TMPCTR1)−L2の演算をして結果を一時トークンカウンタ1(TMPCTR1)に格納する(同S53)。ステップS52,S53に続いてF3=“1”(メータID0=ID3)であるか判別し(図9のS54),ノー(不一致)の場合はF5=“1”(メータID1=ID3)であるか判別し(同S55),ノー(不一致)の場合は後述する図10のステップS66に移行し,イエスの場合(一致)は,一時トークンカウンタ1(TMPCTR1)≧0かの判別をする(同S56)。ここで,ノーと判別されると一時トークンカウンタ1(TMPCTR1)の値は変化せず,D1=“1”を設定し(図9のS57),イエスと判別されると一時トークンカウンタ1(TMPCTR1)−L3の演算をして結果を一時トークンカウンタ1(TMPCTR1)に格納する(同S58)。ステップS57,S58に続いて,一時トークンカウンタ0(TMPCTR0)及び一時トークンカウンタ1(TMPCTR1)をトークンカウンタ21に書き戻し,F4=“0”(メータID1≠ID2)の場合は一時トークンカウンタ2(TMPCTR2)を書き戻し,F5=“0”(メータID1≠ID3)の場合は一時トークンカウンタ3(TMPCTR3)を書き戻す。
図10はトークン演算部の第4のフローチャート(その3)であり,図9に示すステップS1においてノー(メータID1≠ID2)と判別された場合であり,最初にトークンカウンタ2(TokenCTR2) ≧0であるか判別し(図10のS60),ノーと判別されると一時トークンカウンタ2(TMPCTR2)は変化せず,D2(第2のパケットの放棄指示)=“1”を設定し(同S61),イエスの場合は一時トークンカウンタ2(TMPCTR2)−L2の演算をして,結果を一時トークンカウンタ2(TokenCTR2)に格納する(同S62)。ステップS61,S62に続いて,F3=“1”(メータID0=ID3)であるか判別し(図10のS63),イエス(ID0=ID3)である場合は図8のステップS15に移行し,ノー(ID0≠ID3)の場合はF5=“1”(メータID1=ID3)であるかの判別をする(同S64)。ここで,イエス(ID1=ID3)と判別された場合は図9のステップS56に移行し,ノー(ID1≠ID3)と判別された場合はF6=“1”か判別し(図10のS65),イエス(メータID2=ID3)と判別されると,一時トークンカウンタ2(TMPCTR2)≧0か判別する(同S70)。ここでノーと判別されると,一時トークンカウンタ2(TMPCTR2)は変化せず,D2=“1”に設定し(図10のS71),イエスと判別されると一時トークンカウンタ2(TMPCTR2)−L3の演算をして,結果を一時トークンカウンタ2(TMPCTR2)に設定する。上記ステップS71,72に続いて一時トークンカウンタ0(TMPCTR0),一時トークンカウンタ1(TMPCTR1),一時トークンカウンタ2(TMPCTR2)をトークンカウンタ21に書き戻す。
ステップS65において,ノー(メータID2≧ID3)と判別されると,トークンカウンタ3(TokenCTR3)≧0か判別し,ノー(負の値)の場合は一時トークンカウンタ3(TMPCTR3)にトークンカウンタ(TokenCTR3)の値を設定し,D3=“1”を設定し,イエスの場合はトークンカウンタ(TokenCTR3)−L3の演算をして一時トークンカウンタ3(TMPCTR3)に設定する。このステップS67,S68に続いて一時トークンカウンタ0(TMPCTR0),一時トークンカウンタ1(TMPCTR1),一時トークンカウンタ2(TMPCTR2),一時トークンカウンタ3(TMPCTR3)をトークンカウンタ21に書き戻す。
図11,図12は実施例の各部のタイミングチャート(その1),(その2)である。図中,(1) はレート監視装置の内部CLK(クロック),(2) はFP(フレームパルス),(3) ,(4)はパケット情報抽出を表し,(3) は各パケットのメータID,(4) は各パケットのレングス(Length),(5) はタイミング生成部(図2の11)からの情報キャッシュ(図2の15a,15b)の切替え及び選択部(図2の19)による情報バッファ(17a,17b)の切替えを行う切替信号,(6) 〜(14)は第1の情報キャッシュの情報であり,(6) 〜(9) は4つのパケットのレングス(Length) の情報(1〜4)の設定タイミング,(10)〜(13)は同じく第1の情報キャッシュへのメータID0〜ID3の設定タイミング,(14)は第1の情報キャッシュ内の有効レジスタ数(キャッシュ内に格納されたパケット情報の数)の変化を示し,(15)〜(23)は第2の情報キャッシュの情報であり,(15)〜(18)は第2の情報キャッシュ(図2の15b)へのレングス(Length) の情報(1〜4)の設定タイミング,(19)〜(22)は第2の情報キャッシュへのメータID0〜ID3の設定タイミング,(23)は第2の情報キャッシュ内の有効レジスタ数の変化を示す。
(24)はトークンカウンタ(図2の21)への加算(Add) データの発生タイミングを示し,(25)は外部RAMのトークンカウンタ(図2の21)値の出力タイミング信号,(26)は外部RAM(トークンカウンタ)のチップセレクト信号,(27)は外部RAMの書き込みイネーブル信号,(28)はトークンカウンタ値リタイミング信号,(29)〜(32)はキャッシュレジスタ(図2の14)の信号である。
図11,図12では,内部クロック(1) に同期したフレームパルスFPが(2) が発生し, これらの信号(1),(2) に同期して入力するパケットからパケット情報が抽出され, 各パケットのメータID(入力側の監視の場合は送信元アドレスに対応するメータID,出力の監視の場合は送信先アドレスに対応するメータID)がa,b,c,…が抽出され(図11の(3)),同時に各パケットのレングスの情報L1,L2,…が抽出される(同(4))。4つのパケットに対応するパケット情報が抽出される毎に(5) に示すように,第1の情報キャッシュと第2の情報キャッシュの切替えを行う信号がタイミング生成部から発生する。この例では,サイド(Side)1,サイド(Side)2の状態に交互に切替えられる。
第1の情報キャッシュにはそれぞれ上記(4) で抽出された各レングスの情報L1〜L4が(6) 〜(9) のように順番に設定され,上記(3) で抽出された各メータIDの情報a〜dが(10)〜(13)のように情報キャッシュの中の各レジスタに設定され,有効レジスタ数が(14)に示すように順次更新される。
第1の情報キャッシュ15aにパケット情報の設定が行われると,第2の情報キャッシュ15bに切替えられ,後続の4つのパケットについてレングスの情報L5〜L8が(15)〜(18)に示すように設定され, メータIDの情報e〜hが(19)〜(22)に示すように順番に設定され,キャッシュ内の有効レジスタ数が(23)に示すように変化する。
トークンカウンタ値の加算データが(24)に示すように「a,b,c,d」として上記第1の情報キャッシュのメータIDの情報(10)〜(13)から取り出す。また,(25)に示すように外部RAMのトークンカウンタ(図2の21)のカウンタ値(i,ii,iii,iv)が最初に出力され,その後にカウンタ値(v,vi,vii,viii)が発生し,チップセレクト信号(26)より少し後のタイミングに出力される。また,キャッシュレジスタ(図2の14)は(29)〜(32)に示すように最初のタイミングで第1の情報キャッシュのメータIDに対応したカウンタ値(i,ii,iii,iv)が発生し,後のタイミングで第2の情報キャッシュのメータIDに対応したカウンタ値(v,vi,vii,viii)を発生している。
図13は情報キャッシュのデータとキャッシュレジスタのデータの具体例を示す。A.は第1の例であり,連続して入力する4つのパケットデータは同じメータID0(同じユーザ)に関し,4つパケットのレングスは同じ64K(byte)であるため,パケット情報としては(a1)に示すようにキャッシュID0〜3に対して,メータIDは全て同じ「ID0」であり,レングスは「64」となり,一致フラグは(a2)に示すようにF1〜F6が全て“1”になる。この場合,パケット情報の各キャッシュIDに対応したメータID「ID0」についてトークンカウンタから取り出したトークン値は全て(a3)に示すように「150」となり,キャッシュレジスタに設定される。
図13のB.は第2の例であり,連続して入力する4つのパケットデータは異なるメータIDで,各パケットのレングスは同じ64Kであり,パケット情報は(b1)のように設定され,一致フラグは(b2)に示すようにF1〜F6は全て“0”になる。この場合,パケット情報の各キャッシュIDに対応した各メータIDについてトークンカウンタから取り出したトークン値は(b3)に示すようにそれぞれ異なる値が設定されている。
図13のC.は第3の例であり,入力するパケットデータは1つのメータIDである「ID5」であり,レングスが256Kである。この場合,(c1)のようにキャッシュID0に対してだけ,メータID5,Ena=“1”,レングス=256が設定され,キャッシュID1〜3に対してメータIDは設定されず,Enaは“0”,レングス=0が設定され,一致フラグは(c2)に示すように全て“0”となる。また,メータID5によりトークンカウンタからトークン値を取得すると,キャッシュレジスタには(c3)に示すようにキャッシュID0(メータID5)のみにトークン値「200」が設定される。
(付記1) 複数のユーザのメータID毎に予め設定されたトークン値によるパケット転送装置のレート監視方式において,各メータIDに対して予め設定されたトークン値を一定周期毎に加算された現在のトークン値を保持する外部RAMのトークンカウンタを設け,入力パケットデータを格納するパケットバッファと,各パケットデータのヘッダからメータID及びレングス情報を抽出する手段から抽出された所定数のパケットデータのユーザID及びレングスを含むパケット情報と前記所定数のパケットデータのメータIDの相互の同一性を表す一致フラグとからなる情報を格納する第1の情報キャッシュと第2の情報キャッシュを設け,前記第1の情報キャッシュと第2の情報キャッシュの一方を前記パケット情報の入力動作を行うよう駆動し,他方を入力された前記パケット情報を用いて各メータIDについてトークン演算部によるトークン演算を行うよう決められた周期で切替える信号を発生するタイミング生成部を備え,前記トークン演算部による前記第1の情報キャッシュと第2の情報キャッシュのそれぞれの複数のパケットデータの各メータIDに対応するトークン演算の結果としてパケットデータの通過・廃棄を表すフラグが設定される第1の情報バッファと第2の情報バッファを備え,前記パケットバッファからのパケットデータの出力時に前記第1の情報バッファまたは第2の情報バッファの出力を後段に出力することを特徴とするパケット転送装置のレート監視方式。
(付記2) 付記1において,前記第1の情報キャッシュと第2の情報キャッシュに格納された一致フラグは,前記各情報キャッシュ内の複数のメータIDについて2つのメータIDの全ての組合せについて比較結果を表すフラグにより構成され,前記トークン演算部は,各情報キャッシュについてのトークン値の演算において,前記一致フラグを判別して,同一メータIDについてのトークン演算を,前記トークンカウンタにアクセスすることなく実行することを特徴とするパケット転送装置のレート監視方式。
(付記3) 付記1において,前記第1の情報キャッシュまたは第2の情報キャッシュに格納されたメータIDに対応したトークン値を前記外部RAMのトークンカウンタから読み出して保持するキャッシュレジスタを備え,前記トークン算出部は前記キャッシュレジスタからトークン値を取り出して演算を行い,キャッシュレジスタ内の全てのメータIDについて求められたトークン値を前記外部RAMのトークンカウンタに書き込むことを特徴とするパケット転送装置のレート監視方式。
(付記4) 付記1乃至3のいずれかにおいて,前記トークンカウンタのメータIDはパケット転送装置への入力パケットの送信元アドレスに対応して付与され,前記トークン演算部は転送装置へ入力するパケットのレートを監視することを特徴とするパケット転送装置のレート監視方式。
(付記5) 付記1乃至3いずれかにおいて,前記トークンカウンタのメータIDはパケット転送装置の出力パケットの送信先アドレスに対応して付与され,前記トークン演算部は転送装置から出力されるパケットのレートを監視することを特徴とするパケット転送装置のレート監視方式。