(57)【要約】【課題】メモリ使用量の低減化を図ること。【解決手段】転送装置１００は、フレームを受信し、複数のバッファのうち受信されたフレームを、当該フレームが所属するフローに関する特定のバッファに順次書き込むとともに、特定のバッファに同一フローの残存フレームがあるか否かを判断し、残存フレームがない場合に、フレームの理想送出時刻の演算要求を出力し、演算要求を受けた場合、フレームの受信時刻と、フローの設定帯域と、に基づいて、フレームを特定のバッファから読み出す理想送出時刻を算出し、算出された理想送出時刻が到来した場合、特定のバッファからフレームを読み出し、読み出されたフレームを当該フレームの転送先に送信する。【選択図】図１
2015073210.tif 000002
【特許請求の範囲】
【請求項１】
フレームを受信する受信部と、
複数のバッファのうち、前記受信部によって受信されたフレームを、当該フレームが所属するフローに関する特定のバッファに順次書き込むとともに、前記特定のバッファに同一フローの残存フレームがあるか否かを判断し、前記残存フレームがない場合に、前記フレームの理想送出時刻の演算要求を出力する書込処理部と、
前記書込処理部からの前記演算要求を受けた場合、前記フレームの受信時刻と、前記フローの設定帯域と、に基づいて、前記フレームを前記特定のバッファから読み出す理想送出時刻を算出する算出部と、
前記算出部によって算出された理想送出時刻が到来した場合、前記特定のバッファから前記フレームを読み出す読出処理部と、
前記読出処理部によって読み出されたフレームを当該フレームの転送先に送信する送信部と、
を有することを特徴とする転送装置。
【請求項２】
所定サイズの記憶領域であるタイムスロットを時系列に構成したフレーム出力リストと、
前記理想送出時刻と前記フローの識別情報とを含む前記フレーム出力リストへの登録要求を出力する登録要求部と、
前記登録要求部からの前記登録要求を受けた場合、現在時刻に基づいて、前記登録要求に含まれる前記理想送出時刻に対応するタイムスロットに前記登録要求に含まれる前記フローの識別情報を登録する登録処理部と、を有し、
前記読出処理部は、前記理想送出時刻が到来した場合、前記理想送出時刻に対応するタイムスロットに登録された前記フローの識別情報を含む読出要求を前記フレーム出力リストから受けて、前記読出要求に含まれる前記フローの識別情報により特定される前記バッファから前記フレームを読み出すことを特徴とする請求項１に記載の転送装置。
【請求項３】
前記読出処理部は、前記フローの識別情報により特定される前記特定のバッファから前記フレームを読み出した結果、前記特定のバッファに残存フレームが有る場合には、前記フローの識別情報を前記フレーム出力リストに登録すべき旨を示す登録指示情報を前記算出部に出力し、前記特定のバッファに残存フレームがない場合には前記フローの識別情報を前記フレーム出力リストに登録すべきでない旨を示す登録不指示情報を前記算出部に出力し、
前記算出部は、前記登録指示情報を受けた場合、前記残存フレームの理想送出時刻を算出し、前記登録不指示情報を受けた場合、前記残存フレームの理想送出時刻を算出せず、
前記登録要求部は、前記残存フレームの理想送出時刻が算出された場合、前記残存フレームの理想送出時刻と前記フローの識別情報とを含む前記フレーム出力リストへの登録要求を出力することを特徴とする請求項２に記載の転送装置。
【請求項４】
前記フレームの受信時刻と、前記フローの設定帯域と、に基づいて、前記フローにおける前記フレームのトークン量を算出し、当該トークン量が、トークンの最大許容蓄積量よりも小さい所定のしきい値以下である場合に前記フローの識別情報を含む読出要求を滞留させ、前記しきい値より大きい場合に前記フローの識別情報を含む読出要求を、滞留させた識別情報よりも優先して前記読出処理部に出力する優先制御部を有し、
前記読出処理部は、前記優先制御部からの前記読出要求を受けた場合、前記読出要求に含まれる前記フローの識別情報により特定される前記特定のバッファから前記フレームを読み出すことを特徴とする請求項１に記載の転送装置。
【請求項５】
前記優先制御部は、
第１のキューと、
前記第１のキューよりも優先読出しされる第２のキューと、
前記フレームの受信時刻と、前記フローの設定帯域と、に基づいて、前記フローにおける前記フレームのトークン量を算出し、当該トークン量が、前記しきい値以下である場合に前記フローの識別情報を前記第１のキューに格納し、前記しきい値より大きい場合に前記フローの識別情報を前記第２のキューに格納する振分け部と、有し、
前記読出処理部は、前記第１のキューまたは前記第２のキューのうち前記第２のキューから優先的に出力される前記読出要求を受けた場合、前記読出要求に含まれる前記フローの識別情報により特定される前記特定のバッファから前記フレームを読み出すことを特徴とする請求項４に記載の転送装置。
【請求項６】
所定サイズの記憶領域であるタイムスロットを時系列に構成した第１のフレーム出力リストと、
収容可能なフローの数分のエントリにより構成されフローごとに前記算出部によって算出される理想送出時刻を格納可能な第２のフレーム出力リストと、
前記理想送出時刻と前記フローの識別情報とを含む前記第１のフレーム出力リストへの登録要求を出力する登録要求部と、
前記登録要求部からの前記登録要求を受けた場合、前記登録要求に含まれる前記理想送出時刻が、現在時刻から前記第１のフレーム出力リストに対応する時間長を加算した時刻を超過するか否かを判断し、超過しない場合には、前記第１のフレーム出力リストにおける前記登録要求に含まれる前記理想送出時刻に対応するタイムスロットに前記登録要求に含まれる前記フローの識別情報を登録し、超過する場合には、前記第２のフレーム出力リストにおける前記フローのエントリに前記理想送出時刻を登録する登録処理部と、を有し、
前記読出処理部は、前記理想送出時刻が到来した場合、前記理想送出時刻に対応するタイムスロットに登録された前記フローの識別情報を含む読出要求を前記第１のフレーム出力リストから受けて、前記読出要求に含まれる前記フローの識別情報により特定される前記特定のバッファから前記フレームを読み出すことを特徴とする請求項１に記載の転送装置。
【請求項７】
前記登録処理部は、連続的な読出タイミングで、前記第２のフレーム出力リストに登録された前記理想送出時刻が、前記読出タイミングから前記第１のフレーム出力リストに対応する時間長を加算した時刻を超過するか否かを判断し、超過しない場合には、前記第１のフレーム出力リストにおいて、前記第２のフレーム出力リストに登録された前記理想送出時刻に対応するタイムスロットに、前記第２のフレーム出力リストに前記理想送出時刻が登録されたエントリにより特定される前記フローの識別情報を登録することを特徴とする請求項６に記載の転送装置。
【請求項８】
フレームを受信する受信手順と、
複数のバッファのうち、前記受信手順によって受信されたフレームを、当該フレームが所属するフローに関する特定のバッファに順次書き込むとともに、前記特定のバッファに同一フローの残存フレームがあるか否かを判断し、前記残存フレームがない場合に、前記フレームの理想送出時刻の演算要求を出力する書込手順と、
前記書込手順によって前記演算要求を受けた場合、前記フレームの受信時刻と、前記フローの設定帯域と、に基づいて、前記フレームを前記特定のバッファから読み出す理想送出時刻を算出する算出手順と、
前記算出手順によって算出された理想送出時刻が到来した場合、前記特定のバッファから前記フレームを読み出す読出手順と、
前記読出手順によって読み出されたフレームを当該フレームの転送先に送信する送信手順と、
を含むことを特徴とする転送方法。
【請求項９】
所定サイズの記憶領域であるタイムスロットを時系列に構成したフレーム出力リストへの前記理想送出時刻と前記フローの識別情報とを含む登録要求を出力する登録要求手順と、
前記登録要求手順によって前記登録要求を受けた場合、現在時刻に基づいて、前記登録要求に含まれる前記理想送出時刻に対応するタイムスロットに前記登録要求に含まれる前記フローの識別情報を登録する登録手順と、を含み、
前記読出手順では、前記理想送出時刻が到来した場合、前記理想送出時刻に対応するタイムスロットに登録された前記フローの識別情報を含む読出要求を前記フレーム出力リストから受けて、前記読出要求に含まれる前記フローの識別情報により特定される前記バッファから前記フレームを読み出すことを特徴とする請求項８に記載の転送方法。
【請求項１０】
前記フレームの受信時刻と、前記フローの設定帯域と、に基づいて、前記フローにおける前記フレームのトークン量を算出し、当該トークン量が、トークンの最大許容蓄積量よりも小さい所定のしきい値以下である場合に前記フローの識別情報を含む読出要求を滞留させ、前記しきい値より大きい場合に前記フローの識別情報を含む読出要求を、滞留させた識別情報よりも優先して、前記読出手順をおこなう読出処理部に出力する優先制御手順を含み、
前記読出手順では、前記優先制御手順によって前記読出処理部が前記読出要求を受けた場合、前記読出要求に含まれる前記フローの識別情報により特定される前記特定のバッファから前記フレームを読み出すことを特徴とする請求項８に記載の転送方法。
【請求項１１】
所定サイズの記憶領域であるタイムスロットを時系列に構成した第１のフレーム出力リストへの前記理想送出時刻と前記フローの識別情報とを含む登録要求を出力する登録要求手順と、
前記登録要求手順によって前記登録要求を受けた場合、前記登録要求に含まれる前記理想送出時刻が、現在時刻から前記第１のフレーム出力リストに対応する時間長を加算した時刻を超過するか否かを判断し、超過しない場合には、前記第１のフレーム出力リストにおける前記登録要求に含まれる前記理想送出時刻に対応するタイムスロットに前記登録要求に含まれる前記フローの識別情報を登録し、超過する場合には、収容可能なフローの数分のエントリにより構成されフローごとに前記算出手順によって算出される理想送出時刻を格納可能な第２のフレーム出力リストにおける前記フローのエントリに、前記理想送出時刻を登録する登録手順と、を含み、
前記読出手順では、前記理想送出時刻が到来した場合、前記理想送出時刻に対応するタイムスロットに登録された前記フローの識別情報を含む読出要求を前記第１のフレーム出力リストから受けて、前記読出要求に含まれる前記フローの識別情報により特定される前記特定のバッファから前記フレームを読み出すことを特徴とする請求項８に記載の転送方法。
【請求項１２】
プロセッサが実行するプログラムを格納する前記プロセッサにより読み取り可能な非一時的な記録媒体であって、
前記プロセッサに、
フレームを受信する受信手順と、
複数のバッファのうち、前記受信手順によって受信されたフレームを、当該フレームが所属するフローに関する特定のバッファに順次書き込むとともに、前記特定のバッファに同一フローの残存フレームがあるか否かを判断し、前記残存フレームがない場合に、前記フレームの理想送出時刻の演算要求を出力する書込手順と、
前記書込手順によって前記演算要求を受けた場合、前記フレームの受信時刻と、前記フローの設定帯域と、に基づいて、前記フレームを前記特定のバッファから読み出す理想送出時刻を算出する算出手順と、
前記算出手順によって算出された理想送出時刻が到来した場合、前記特定のバッファから前記フレームを読み出す読出手順と、
前記読出手順によって読み出されたフレームを当該フレームの転送先に送信する送信手順と、
を実行させる転送プログラムを記録した非一時的な記録媒体。
【請求項１３】
前記プロセッサに、
所定サイズの記憶領域であるタイムスロットを時系列に構成したフレーム出力リストへの前記理想送出時刻と前記フローの識別情報とを含む登録要求を出力する登録要求手順と、
前記登録要求手順によって前記登録要求を受けた場合、現在時刻に基づいて、前記登録要求に含まれる前記理想送出時刻に対応するタイムスロットに前記登録要求に含まれる前記フローの識別情報を登録する登録手順と、を実行させ、
前記読出手順では、前記理想送出時刻が到来した場合、前記理想送出時刻に対応するタイムスロットに登録された前記フローの識別情報を含む読出要求を前記フレーム出力リストから受けて、前記読出要求に含まれる前記フローの識別情報により特定される前記バッファから前記フレームを読み出すことを特徴とする請求項１２に記載の転送プログラムを記録した非一時的な記録媒体。
【請求項１４】
前記プロセッサに、
前記フレームの受信時刻と、前記フローの設定帯域と、に基づいて、前記フローにおける前記フレームのトークン量を算出し、当該トークン量が、トークンの最大許容蓄積量よりも小さい所定のしきい値以下である場合に前記フローの識別情報を含む読出要求を滞留させ、前記しきい値より大きい場合に前記フローの識別情報を含む読出要求を、滞留させた識別情報よりも優先して、前記読出手順をおこなう読出処理部に出力する優先制御手順を実行させ、
前記読出手順では、前記優先制御手順によって前記読出処理部が前記読出要求を受けた場合、前記読出要求に含まれる前記フローの識別情報により特定される前記特定のバッファから前記フレームを読み出すことを特徴とする請求項１２に記載の転送プログラムを記録した非一時的な記録媒体。
【請求項１５】
前記プロセッサに、
所定サイズの記憶領域であるタイムスロットを時系列に構成した第１のフレーム出力リストへの前記理想送出時刻と前記フローの識別情報とを含む登録要求を出力する登録要求手順と、
前記登録要求手順によって前記登録要求を受けた場合、前記登録要求に含まれる前記理想送出時刻が、現在時刻から前記第１のフレーム出力リストに対応する時間長を加算した時刻を超過するか否かを判断し、超過しない場合には、前記第１のフレーム出力リストにおける前記登録要求に含まれる前記理想送出時刻に対応するタイムスロットに前記登録要求に含まれる前記フローの識別情報を登録し、超過する場合には、収容可能なフローの数分のエントリにより構成されフローごとに前記算出手順によって算出される理想送出時刻を格納可能な第２のフレーム出力リストにおける前記フローのエントリに、前記理想送出時刻を登録する登録手順と、を実行させ、
前記読出手順では、前記理想送出時刻が到来した場合、前記理想送出時刻に対応するタイムスロットに登録された前記フローの識別情報を含む読出要求を前記第１のフレーム出力リストから受けて、前記読出要求に含まれる前記フローの識別情報により特定される前記特定のバッファから前記フレームを読み出すことを特徴とする請求項１２に記載の転送プログラムを記録した非一時的な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを転送する転送装置に関する。
【背景技術】
【０００２】
テレビコンテンツのデジタル化やＷｅｂでの動画配信サービスの普及により、ストリーミングデータ増大やＷｅｂトラヒックが大容量化している。このため、高速通信を安価に実現できるイーサネット（登録商標、以下同じ）が普及している。イーサネット上で大容量のデータを送信する場合には、複数のフレームを連続的（バースト的）に送出する。このようなバーストトラヒックが多重される場合、中継網での廃棄が発生する場合があるため、ＱｏＳ（Ｑｕａｌｉｔｙ  ｏｆ  Ｓｅｒｖｉｃｅ）を確保するために網の入口でピークレートシェーピングを行う。この際、各フローの送信帯域に応じた帯域がシェーパには設定される。
【０００３】
このような多フローのバーストトラヒックに対するシェーピング方法として、フレーム出力リストスケジューリング方式がある。本方式は、各フローのフレーム送信予定時刻をフレーム出力リストに登録しておき、本リストを一定間隔で読み出すことにより、送出予定時刻に送出要求が登録されたフローのフレームを送出する。フレーム出力リストスケジューリング方式では、１フローにつき複数の送信予定時刻をフレーム出力リストに登録する登録方式が採用される。具体的には、当該登録方式では、フレーム到着の度にフレーム出力リストに送信予定時刻が登録される。この結果、バッファに保持している全フレームの送信予定時刻がフレームリストに登録される（たとえば、下記特許文献１を参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−１８３９１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した登録方式では、バッファに保持している全フレームの送信予定時刻が到着時にフレームリストに登録される。したがって、フレーム出力リストが大きくなり、膨大なメモリ容量が必要になるという問題がある。
【０００６】
本発明は、メモリ使用量の低減化を図ることを目的とする。
【課題を解決するための手段】
【０００７】
本願において開示される発明の一側面となる転送装置、転送方法および記録媒体は、フレームを受信し、複数のバッファのうち受信されたフレームを、当該フレームが所属するフローに関する特定のバッファに順次書き込むとともに、前記特定のバッファに同一フローの残存フレームがあるか否かを判断し、前記残存フレームがない場合に、前記フレームの理想送出時刻の演算要求を出力し、前記演算要求を受けた場合、前記フレームの受信時刻と、前記フローの設定帯域と、に基づいて、前記フレームを前記特定のバッファから読み出す理想送出時刻を算出し、算出された理想送出時刻が到来した場合、前記特定のバッファから前記フレームを読み出し、読み出されたフレームを当該フレームの転送先に送信することを特徴とする。
【発明の効果】
【０００８】
本発明の代表的な実施の形態によれば、メモリ使用量の低減化を図ることができる。前述した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【０００９】
【図１】実施例１にかかる登録方式を示す説明図である。
【図２】実施例１にかかる転送装置のハードウェア構成例を示すブロック図である。
【図３】フレームのヘッダのフォーマット例を示す説明図である。
【図４】内部ヘッダのフォーマット例を示す説明図である。
【図５】入力ヘッダ処理テーブルの記憶内容例を示す説明図である。
【図６】キュー管理テーブルの記憶内容例を示す説明図である。
【図７】帯域管理テーブルの記憶内容例を示す説明図である。
【図８】図２に示した出力フレームバッファ制御部の詳細なブロック構成を示すブロック図である。
【図９】フレーム出力リストの構成例を示す説明図である。
【図１０】帯域管理部の書込処理部による処理手順例を示すフローチャートである。
【図１１】帯域管理部の読出処理部による処理手順例を示すフローチャートである。
【図１２】帯域管理部による帯域管理処理の処理手順例を示すフローチャートである。
【図１３】図１２に示したトークン加算処理（ステップＳ１２０２）の処理手順例を示すフローチャートである。
【図１４】時刻カウンタ周回数更新処理の処理手順例を示すフローチャートである。
【図１５】実施例１によるトークンバケツアルゴリズムによるフレームの転送例を示す説明図である。
【図１６】実施例２にかかる登録方式を示す説明図である。
【図１７】実施例２にかかる出力フレームバッファ制御部の詳細なブロック構成を示すブロック図である。
【図１８】読出要求優先制御部（振分け部）による振分け処理手順例を示すフローチャートである。
【図１９】実施例１および実施例２のフレーム出力リストと、実施例３の短期フレーム出力リストおよび長期フレーム出力リストと、の比較例を示す説明図である。
【図２０】長期フレーム出力リストの構成例を示す説明図である。
【図２１】実施例３にかかる転送装置のハードウェア構成例を示すブロック図である。
【図２２】実施例３にかかる帯域管理部による帯域管理処理の処理手順例１を示すフローチャートである。
【図２３】実施例３にかかる帯域管理部による帯域管理処理の処理手順例１を示すフローチャートである。
【図２４】帯域管理部による長期フレーム出力リスト更新処理の処理手順例２を示すフローチャートである。
【図２５】実施例４にかかる転送装置のハードウェア構成例を示すブロック図である。
【発明を実施するための形態】
【００１０】
（実施例１）
実施例１について説明する。実施例１の転送装置では、１フローにつき一つの理想送出時刻をフレーム出力リストに登録する登録方式が採用される。背景技術のように、出力フレームバッファに保持しているフレームのすべてではなく、実施例１の転送装置は、フロー毎に１フレームの理想送出時刻の位置にフローＩＤを登録する。したがって、フレーム出力リストに使用される転送装置内のメモリ使用量の低減化を図ることができる。
【００１１】
図１は、実施例１にかかる登録方式を示す説明図である。なお、転送装置は、時刻カウンタを有する。時刻カウンタは、１クロックごとにカウンタ値が１カウントアップする周回カウンタである。以下、（１）〜（７）の順に時系列で説明する。
【００１２】
（１）フレームが受信されると、転送装置１００は、書込処理部１０１により、受信フレームをフローごとに分けて出力フレームバッファ１０２に書き込む。出力フレームバッファ１０２は、収容可能なｎ個のフローの各々についてキューとなるバッファ１０２−１〜１０２−ｎを有する。この際、書込処理部１０１は、受信フレームが所属するフローのバッファ１０２−ｉ（ｉ＝１〜ｎのいずれか）に残存フレームがない場合、受信フレームの理想送出時刻の演算要求を、帯域管理部１０４に送信する。
【００１３】
（２）帯域管理部１０４は、受信フレームの理想送出時刻の演算要求を受信した場合、算出部１４１により、理想送出時刻を算出する。理想送出時刻の算出には、トークンバケツアルゴリズムが用いられる。算出部１４１は、現在のトークンの値が０以上であれば、現在の時刻カウンタの値を理想送出時刻として登録要求部１４２に出力する。
【００１４】
一方、現在のトークンの値が０以上でない場合は、下記式（Ａ）により、理想送出時刻を算出して登録要求部１４２に出力する。なお、設定帯域とは、受信フレームが所属するフローに設定された帯域である。
【００１５】
理想送出時刻＝（０−現在のトークンの値）／設定帯域・・・（Ａ）
【００１６】
（３）登録要求部１４２は、受信フレームに含まれるフローＩＤと算出部１４１からの理想送出時刻とを含む登録要求を、登録処理部１４３に出力する。フローＩＤとは、受信フレームが所属するフローを一意に特定する識別情報である。たとえば、ＶＬＡＮＩＤが採用される。
【００１７】
（４）登録処理部１４３は、フレーム出力リスト１０５を有する。フレーム出力リスト１０５とは、複数のタイムスロットとなる領域を時系列で並べたリストである。１つのタイムスロットは、たとえば、８バイトの時間間隔を示す。登録処理部１４３は、現在時刻に相当するタイムスロットの位置から理想送出時刻分の時刻カウンタ値を進めた場合のタイムスロットを、登録要求に含まれるフローＩＤを登録すべきタイムスロットに決定する。すでに、他のフローＩＤが登録済みである場合は、登録処理部１４３は、後続の空きスロットに決定する。登録処理部１４３は、決定したタイムスロットにフローＩＤを登録する。
【００１８】
（５）登録処理部１４３は、現在時刻である現在の時刻カウンタ値に相当するタイムスロットに格納されているフローＩＤを含む読出要求を、読出処理部１０３に出力する。
【００１９】
（６）読出処理部１０３は、登録処理部１４３からの読出要求を受けると、読出要求内のフローＩＤにより特定されるフローについて、出力フレームバッファ１０２内のバッファ１０２−ｉに保持されている先頭フレームを読み出す。読み出されたフレームは、出力ポートから宛先に送信される。
【００２０】
（７）読出処理部１０３は、読出要求内のフローＩＤにより特定されるフローについて、出力フレームバッファ１０２内のバッファ１０２−ｉに残存フレームがある場合に、算出部１４１に演算要求を送信する。つぎに送信すべきフレームの理想送出時刻を算出して、フローＩＤをフレーム出力リスト１０５に登録するためである。
【００２１】
＜転送装置１００のハードウェア構成例＞
図２は、実施例１にかかる転送装置１００のハードウェア構成例を示すブロック図である。転送装置１００は、複数（ｍ枚）のインタフェースカード２００−１〜２００−ｍとフレーム中継部２１０とが接続されて構成される。各インタフェースカード２００−１〜２００−ｍは、同一機能である。あるインタフェースカード２００−ｊ（ｊ＝１〜ｍのいずれか）で受信されたフレームは、フレーム中継部２１０に送られる。フレーム中継部２１０では、フレームがどのインタフェースカード２００−ｊから送信すべきかを特定して、特定したインタフェースカード２００−ｊにフレームを出力する。フレーム中継部２１０からフレームを受けたインタフェースカード２００−ｊは、該当する宛先にフレームを送信する。これにより、フレームが転送される。
【００２２】
つぎに、インタフェースカード２００−ｊの詳細構成例についてインタフェースカード２００−１を例に挙げて説明する。インタフェースカード２００−１は、ＮＩＦ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ）管理部２０１と、設定レジスタ２０２と、を有する。ＮＩＦ管理部２０１は、たとえば、プロセッサであり、不図示の入力装置からの指示により、設定レジスタ２０２に所定の値を格納する。設定レジスタ２０２は、入力フレームバッファ制御部２０５および出力フレームバッファ制御部２０６で必要な値を格納する記憶領域である。設定レジスタ２０２は、たとえば、フリップフロップで構成され、入力フレームバッファ制御部２０５および出力フレームバッファ制御部２０６から参照可能である。
【００２３】
また、インタフェースカード２００−１は、入出力回線ＩＦ（Ｉｎｔｅｒｆａｃｅ）２０３と、入力ヘッダ処理部２０４と、入力フレームバッファ制御部２０５と、入力ヘッダ処理テーブル２４０と、を有する。入出力回線ＩＦ２０３は、いわゆるポートである。入出力回線ＩＦ２０３は、フレームを受信すると、受信フレームに対し、受信フレームのフレーム長を内部ヘッダとして付与し、入力ヘッダ処理部２０４に出力する。
【００２４】
図３は、フレームのヘッダのフォーマット例を示す説明図であり、図４は、内部ヘッダのフォーマット例を示す説明図である。図４において、内部ヘッダ４００は、フレーム長フィールド４０１と、フローＩＤフィールド４０２と、出力ＮＩＦフィールド４０３と、を含む。入出力回線ＩＦ２０３では、フローＩＤフィールド４０２と出力ＮＩＦＩＤフィールド４０３は空である。出力ＮＩＦＩＤフィールド４０３とは、出力先のインタフェースカード２００−ｉを一意に特定する識別情報を格納するフィールドである。
【００２５】
図２に戻り、入力ヘッダ処理部２０４は、入力ヘッダ処理テーブル２４０を参照して、入出力回線ＩＦ２０３で付与された内部ヘッダ４００に、出力ＮＩＦＩＤとフローＩＤを格納し、入力フレームバッファ制御部２０５に出力する。
【００２６】
図５は、入力ヘッダ処理テーブル２４０の記憶内容例を示す説明図である。入力ヘッダ処理テーブル２４０に記憶される情報は、あらかじめ登録される。入力ヘッダ処理部２０４は、入出力回線ＩＦ２０３からフレームを受けると、フレームのヘッダからＶＬＡＮヘッダ内のＶＬＡＮＩＤを抽出する。そして、入力ヘッダ処理部２０４は、入力ヘッダ処理テーブル２４０において、抽出したＶＬＡＮＩＤのエントリから出力ＮＩＦＩＤとフローＩＤとを抽出して、内部ヘッダに格納する。そして、入力ヘッダ処理部２０４は、フレームを入力フレームバッファ制御部２０５に出力する。
【００２７】
図２に戻り、入力フレームバッファ制御部２０５は、入力ヘッダ処理部２０４からのフレームを順次入力フレームバッファ２５０に格納し、先入れ先出し方式により、入力フレームバッファ２５０からフレーム中継部２１０にフレームを出力する。
【００２８】
また、インタフェースカード２００−１は、出力フレームバッファ制御部２０６と、キュー管理テーブル２６１と、帯域管理テーブルと、フレーム出力リスト１０５と、出力フレームバッファ１０２と、を有する。
【００２９】
図６は、キュー管理テーブル２６１の記憶内容例を示す説明図である。キュー管理テーブル２６１は、出力フレームバッファ１０２を管理するテーブルであり、フローごとに、フローＩＤと、バッファサイズと、格納バイト数と、ライトポインタと、リードポインタと、を格納する。フローＩＤにはＶＬＡＮＩＤが用いられるが、ここでは、インタフェースカード２００−ｊごとに区別するため、ＶＬＡＮＩＤからオフセットされた値となる。格納バイト数、ライトポインタおよびリードポインタは、更新される値である。
【００３０】
バッファサイズは、そのフローに割り当てられたバッファのサイズである。格納バイト数とは、そのフローに格納されたフレームのバイト数である。ライトポインタとは、出力フレームバッファ１０２の書込位置を指定するアドレスであり、リードポインタとは、出力フレームバッファ１０２の読出位置を指定するアドレスである。なお、キュー管理テーブル２６１は、たとえば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）により構成される。
【００３１】
図７は、帯域管理テーブル２６２の記憶内容例を示す説明図である。帯域管理テーブル２６２は、フローごとに、フローＩＤと、設定帯域と、バケツの深さと、前回トークン値と、前回時刻カウンタ値と、時刻カウンタ周回数と、を格納する。前回トークン値、前回時刻カウンタ値および時刻カウンタ周回数は、更新される値である。
【００３２】
設定帯域とは、そのフローにおいて流れるフレームの通信速度である。バケツの深さとは、トークンバケツアルゴリズムにおけるトークンの上限値である。バケツの深さは、０よりも大きい値である。トークンの値がバケツの深さを超えると、超えた分のトークンが破棄される。
【００３３】
前回トークン値とは、前回のトークン加算時におけるトークンの値である。前回時刻カウンタ値とは、前回のトークン加算時における時刻カウンタ値である。時刻カウンタ周回数とは、時刻カウンタがラップアラウンドした回数である。前回トークン値、前回時刻カウンタ値および時刻カウンタ周回数は、トークン加算に用いられる値である。
【００３４】
＜出力フレームバッファ制御部２０６のハードウェア構成例＞
図８は、図２に示した出力フレームバッファ制御部２０６の詳細なブロック構成を示すブロック図である。出力フレームバッファ制御部２０６は、図１に示した書込処理部１０１および読出処理部１０３と、帯域管理部１０４と、を有する。帯域管理部１０４は、図１に示した算出部１４１、登録要求部１４２、および登録処理部１４３を有する。
【００３５】
書込処理部１０１は、フレーム中継部２１０からのフレームを、フローごとに分けて出力フレームバッファ１０２に書き込む。具体的には、たとえば、書込処理部１０１は、キュー管理テーブル２６１の該当するフローのエントリを参照して、ライトポインタの位置にフレームを書き込む。そして、書き込んだフレームのサイズ分、格納サイズ数を加算し、ライトポインタを更新する。また、書込処理部１０１は、図１の（１）に示したように、受信フレームが所属するフローに残存フレームがない場合、受信フレームの送信予定時刻の演算要求を、帯域管理部１０４に送信する。
【００３６】
読出処理部１０３は、図１の（６）に示したように、帯域管理部１０４からの読出要求を受けると、読出要求内のフローＩＤにより特定されるフローについて、出力フレームバッファ１０２に保持されている先頭フレームを読み出す。具体的には、たとえば、読出処理部１０３は、キュー管理テーブル２６１の該当するフローのエントリを参照して、リードポインタの位置からフレームを読み出す。そして、読み出したフレームのサイズ分、格納サイズ数を減算し、リードポインタを更新する。なお、読み出されたフレームは、入出力回線ＩＦ２０３から宛先に送信される。
【００３７】
また、読出処理部１０３は、図１の（７）に示したように、読出要求内のフローＩＤにより特定されるフローについて、出力フレームバッファ１０２内のバッファ１０２−ｉに残存フレームがある場合に、算出部１４１に演算要求を送信する。
【００３８】
帯域管理部１０４は、図１の（２）に示したように、受信フレームの送信予定時刻の演算要求を受信した場合、トークンバケツアルゴリズムにより送信予定時刻となる理想送出時刻を算出する。算出部１４１は、現在のトークンの値が０以上であれば、現在の時刻カウンタ値を理想送出時刻として登録要求部１４２に出力する。一方、現在のトークンの値が０以上でない場合は、上述したように、理想送出時刻を算出して登録要求部１４２に出力する。
【００３９】
また、帯域管理部１０４は、図１の（３）に示したように、受信フレームに含まれるフローＩＤと算出部１４１からの理想送出時刻とを含む登録要求を、登録処理部１４３に出力する。また、帯域管理部１０４は、図１の（４）に示したように、現在時刻に相当するタイムスロットの位置から理想送出時刻分の時刻カウンタ値を進めた位置となるタイムスロットを、登録要求に含まれるフローＩＤを登録すべきタイムスロットに決定する。すでに、他のフローＩＤが登録済みである場合は、登録処理部１４３は、後続の空きスロットに決定する。登録処理部１４３は、決定したタイムスロットにフローＩＤを登録する。
【００４０】
そして、帯域管理部１０４は、図１の（５）に示したように、現在時刻である現在の時刻カウンタ値に相当するタイムスロットを特定し、当該タイムスロットに格納されているフローＩＤを含む読出要求を、読出処理部１０３に出力する。
【００４１】
図９は、フレーム出力リスト１０５の構成例を示す説明図である。フレーム出力リスト１０５は、複数のタイムスロットとなる領域を時系列で並べたリストである。具体的には、各タイムスロットは存否フラグを有する。存否フラグは、タイムスロットにフローＩＤが存在するか否かを示す識別情報である。タイムスロットにフローＩＤが登録されると、帯域管理部１０４は、登録処理部１４３により、存否フラグを、未登録を示す「０」から登録を示す「１」に更新する。また、現在時刻に相当するタイムスロットからフローＩＤを読み出して読出処理部１０３に出力した場合、帯域管理部１０４は、登録処理部１４３により、フローＩＤが読みされて空になったタイムスロットに対応する存否フラグを「０」に更新する。
【００４２】
フレーム出力リスト１０５では、１フローにつき１フレームについてフローＩＤが登録されるため、上述した特許文献に比べて、フレーム出力リスト１０５のリスト長を短くすることができ、省メモリ化を図ることができる。
【００４３】
＜書込処理手順例＞
図１０は、帯域管理部１０４の書込処理部１０１による処理手順例を示すフローチャートである。書込処理部１０１は、フレーム中継部２１０からフレームを受信することで処理を開始する（ステップＳ１０００）。
【００４４】
書込処理部１０１は、フレームの内部ヘッダ４００から、フローＩＤおよびフレーム長を取得し、取得したフローＩＤのエントリから格納バイト数とバッファサイズとを抽出する（ステップＳ１００１）。つぎに、書込処理部１０１は、取得したフローＩＤにより特定されるフローについて、出力フレームバッファ１０２内のバッファ１０２−ｉが満杯（Ｆｕｌｌ）か否かを判断する（ステップＳ１００２）。具体的には、たとえば、書込処理部１０１は、取得フレーム長＋格納バイト長＞バッファサイズを満たすか否かを判断する。
【００４５】
満たさない場合（ステップＳ１００２：Ｎｏ）、すなわち、満杯でない場合、書込処理部１０１は、取得したフローＩＤにより特定されるフローについて、出力フレームバッファ１０２内のバッファ１０２−ｉは空であるか否かを判断する（ステップＳ１００３）。具体的には、たとえば、書込処理部１０１は、格納バイト長＝０であるか否かを判断する。
【００４６】
空である場合（ステップＳ１００３：Ｙｅｓ）、書込処理部１０１は、受信フレームのフローＩＤ、フレーム長を含む演算要求を、図１の（１）に示したように、帯域管理部１０４に送信し（ステップＳ１００４）、ステップＳ１００５に移行する。
【００４７】
一方、ステップＳ１００３において、空でない場合（ステップＳ１００３：Ｎｏ）、書込処理部１０１は、演算要求を送信せずに、ステップＳ１００５に移行する。
【００４８】
このあと、書込処理部１０１は、受信フレームを出力フレームバッファ１０２の該当するフローのバッファ１０２−ｉに格納する（ステップＳ１００５）。そして、書込処理部１０１は、キュー管理テーブル２６１において、書き込んだフレームのフレーム長分、格納サイズ数を加算し、ライトポインタを更新する（ステップＳ１００６）。
【００４９】
また、ステップＳ１００２において、出力フレームバッファ１０２内のバッファ１０２−ｉが満杯（Ｆｕｌｌ）である場合（ステップＳ１００２：Ｙｅｓ）、書込処理部１０１は、受信フレームを廃棄する（ステップＳ１００７）。これらの処理により書込処理が終了する。
【００５０】
＜読出処理手順例＞
図１１は、帯域管理部１０４の読出処理部１０３による処理手順例を示すフローチャートである。読出処理部１０３は、帯域管理部１０４の登録処理部１４３から読出要求を受信することで処理を開始する（ステップＳ１１００）。
【００５１】
読出処理部１０３は、読出要求に含まれるフローＩＤによりキュー管理テーブル２６１を検索してリードポインタおよびフレーム長を取得する（ステップＳ１１０１）。つぎに、読出処理部１０３は、フローＩＤにより特定されるフローについて、出力フレームバッファ１０２内のバッファ１０２−ｉのリードポインタの位置からフレームを読み出して、入出力回線ＩＦ２０３に出力する（ステップＳ１１０２）。これにより、読み出されたフレームは、転送装置１００の外部に送信される。
【００５２】
このあと、読出処理部１０３は、キュー管理テーブル２６１において、読み出したフレームのフレーム長分、格納サイズ数を減算し、リードポインタを更新する（ステップＳ１１０３）。そして、読出処理部１０３は、フレームを読み出したことにより、該当するフローについて出力フレームバッファ１０２内のバッファ１０２−ｉが空になったか否かを判断する（ステップＳ１００４）。すなわち、ステップＳ１１０３における更新後の格納サイズ数が０であるか否かを判断する。
【００５３】
空でない場合（ステップＳ１１０４：Ｎｏ）、残存フレームのうち先頭フレームについて、理想送出時刻を求め、フレーム出力リスト１０５に登録する必要がある。そのため、読出処理部１０３は、ステップＳ１１０１で取得したフローＩＤおよびフレーム長と、フレーム出力リスト１０５への登録すべき旨を示す登録指示情報と、を含む演算要求を、帯域管理部１０４に送信して（ステップＳ１１０５）、一連の処理を終了する。一方、空である場合（ステップＳ１１０４：Ｙｅｓ）、読出処理部１０３は、ステップＳ１１０１で取得したフローＩＤおよびフレーム長と、フレーム出力リスト１０５への登録すべきでない旨を示す登録不指示情報と、を含む演算要求を、帯域管理部１０４に送信して（ステップＳ１１０６）、一連の処理を終了する。
【００５４】
＜帯域管理処理手順例＞
図１２は、帯域管理部１０４による帯域管理処理の処理手順例を示すフローチャートである。帯域管理部１０４は、図１０のステップＳ１００４、図１１のステップＳ１１０５またはステップＳ１１０６におけるいずれかの演算要求を受信した場合に処理を開始する（ステップＳ１２００）。
【００５５】
帯域管理部１０４は、算出部１４１により、演算要求に含まれるフローＩＤのエントリを、帯域管理テーブル２６２から取得する（ステップＳ１２０１）。つぎに、帯域管理部１０４は、算出部１４１により、トークン加算処理を実行する（ステップＳ１２０２）。トークン加算処理（ステップＳ１２０２）は、現在のトークン値を算出する処理である。トークン加算処理（ステップＳ１２０２）では、たとえば、特開平５−２５２１９２に示したようなバーチャルスケジューリングアルゴリズムが適用される。トークン加算処理（ステップＳ１２０２）の詳細については図１３で後述する。
【００５６】
帯域管理部１０４は、トークン加算処理（ステップＳ１２０２）により現在のトークン値を求めたあと、登録処理部１４３により、演算要求の送信元が、書込処理部１０１であるか読出処理部１０３であるかを判断する（ステップＳ１２０３）。書込処理部１０１である場合（ステップＳ１２０３：書込処理部）、帯域管理部１０４は、登録処理部１４３により、現在トークン値Ｔが、Ｔ≧０であるか否かを判断する（ステップＳ１２０４）。Ｔ≧０である場合（ステップＳ１２０４：Ｙｅｓ）、帯域管理部１０４は、登録処理部１４３により、理想送出時刻を現在の時刻カウンタ値Ｃとし（ステップＳ１２０５）、フレーム出力リスト登録処理を実行する（ステップＳ１２０７）。
【００５７】
一方、Ｔ≧０でない場合（ステップＳ１２０４：Ｎｏ）、理想送出時刻を、（０−Ｔ）／設定帯域として（ステップＳ１２０６）、フレーム出力リスト登録処理を実行する（ステップＳ１２０７）。フレーム出力リスト登録処理（ステップＳ１２０７）では、帯域管理部１０４は、登録処理部１４３により、フレーム出力リスト１０５における理想送出時刻の位置に、演算要求に含まれるフローＩＤを格納し、存否フラグを「１」に設定する。
【００５８】
このあと、帯域管理部１０４は、帯域管理テーブル２６２を更新する（ステップＳ１２０８）。具体的には、たとえば、帯域管理部１０４は、演算要求に含まれるフローＩＤのエントリについて、前回トークン値に現在トークン値Ｔを上書きし、前回時刻カウンタ値に現在時刻カウンタ値Ｃを上書きする。
【００５９】
一方、ステップＳ１２０３において、演算要求の送信元が読出処理部１０３であると判断された場合（ステップＳ１２０３：読出処理部）、帯域管理部１０４は、登録処理部１４３により、現在トークン値Ｔから、演算要求に含まれるフレーム長を減算することにより、現在トークン値Ｔを更新する（ステップＳ１２０９）。そして、帯域管理部１０４は、登録処理部１４３により、演算要求に登録指示情報と登録不指示情報のいずれの情報が含まれているかを判断する（ステップＳ１２１０）。
【００６０】
登録指示情報が含まれる場合（ステップＳ１２１０：登録指示）、ステップＳ１２０４に移行する。一方、登録不指示情報が含まれる場合（ステップＳ１２１０：登録不指示）、ステップＳ１２０８に移行する。すなわち、登録不指示の場合は、出力フレームバッファ１０２内のバッファ１０２−ｉに残存フレームがないため、フレーム出力リスト登録処理は実行されない。
【００６１】
＜トークン加算処理手順例＞
図１３は、図１２に示したトークン加算処理（ステップＳ１２０２）の処理手順例を示すフローチャートである。帯域管理部１０４は、算出部１４１により、演算要求に含まれるフローＩＤのエントリを、帯域管理テーブル２６２から取得する（ステップＳ１２０１）ことにより、トークン加算処理（ステップＳ１２０２）を開始する。
【００６２】
まず、帯域管理部１０４は、現在の時刻カウンタ値Ｃを求める（ステップＳ１３０１）。具体的には、たとえば、帯域管理部１０４は、下記式により現在の時刻カウンタ値Ｃを求める。
【００６３】
現在の時刻カウンタ値Ｃ＝現在の時刻カウンタ値Ｃ＋フローＩＤ×Ｎ・・・（Ｂ）
【００６４】
上記式（Ｂ）において、右辺でフローＩＤを加算することで、フローごとに時刻カウンタがラップアラウンドするタイミングがずれる。これにより、フローごとに仮想的な現在の時刻カウンタ値Ｃを求めることができる。また、Ｎは１以上の整数で、時刻カウンタの周回数の更新周期である。時刻カウンタの周回数の更新処理は、Ｎクロックに１回実行される。時刻カウンタの周回数の更新処理については、図１４で後述する。
【００６５】
つぎに、帯域管理部１０４は、時刻カウンタの周回数が０，１，２のいずれであるかを判断する（ステップＳ１３０２）。周回数＝０である場合（ステップＳ１３０２：０）、現在の時刻カウンタ値Ｃは、フレーム出力リスト１０５のリスト長に相当する時間を周回していない値になる。この場合、帯域管理部１０４は、加算トークン量Ｔａｄｄを、下記式（Ｃ）により算出し（ステップＳ１３０３）、ステップＳ１３０７に移行する。
【００６６】
Ｔａｄｄ＝設定帯域×（Ｃ−Ｃｐ）・・・（Ｃ）
【００６７】
設定帯域は、処理対象となるフローのフローＩＤをキーにして、帯域管理テーブル２６２から読み出される値であり、Ｃｐは、処理対象となるフローのフローＩＤをキーにして、帯域管理テーブル２６２から読み出される前回時刻カウンタ値である。
【００６８】
また、ステップＳ１３０２において、周回数＝１である場合（ステップＳ１３０２：１）、帯域管理部１０４は、現在の時刻カウンタ値Ｃ＞前回の時刻カウンタ値Ｃｐであるか否かを判断する（ステップＳ１３０４）。現在の時刻カウンタ値Ｃ＞前回の時刻カウンタ値Ｃｐでない場合（ステップＳ１３０４：Ｎｏ）、帯域管理部１０４は、加算トークン量Ｔａｄｄを、下記式（Ｄ）により算出し（ステップＳ１３０５）、ステップＳ１３０７に移行する。
【００６９】
Ｔａｄｄ＝設定帯域×（Ｃｍａｘ−（Ｃｐ−Ｃ）＋１）・・・（Ｄ）
【００７０】
Ｃｍａｘは、時刻カウンタの最大値である。現在の時刻カウンタ値ＣがＣ＝Ｃｍａｘである場合、つぎの時刻の時刻カウンタ値は、周回して「０」となる。Ｃｍａｘの大きさは、トークンの深さに対応しており、たとえば、時刻カウンタがｎ周したらバケツの深さ分のトークンを蓄積することができる。本例では、ｎ＝１として、時刻カウンタが１周以上したらバケツの深さ分のトークンを蓄積することができる。
【００７１】
一方、ステップＳ１３０４において、現在の時刻カウンタ値Ｃ＞前回の時刻カウンタ値Ｃｐでない場合（ステップＳ１３０４：Ｎｏ）、帯域管理部１０４は、加算トークン量Ｔａｄｄを、下記式（Ｅ）により算出し（ステップＳ１３０６）、ステップＳ１３０７に移行する。バケツの深さは、トークンの最大許容蓄積量である。
【００７２】
Ｔａｄｄ＝バケツの深さ・・・（Ｅ）
【００７３】
また、ステップＳ１３０２において、周回数＝２である場合（ステップＳ１３０２：２）、帯域管理部１０４は、加算トークン量Ｔａｄｄを、上記式（Ｅ）により算出し（ステップＳ１３０６）、ステップＳ１３０７に移行する。
【００７４】
このあと、帯域管理部１０４は、下記式（Ｆ）により、現在トークン値Ｔを算出する（ステップＳ１３０７）。
【００７５】
Ｔ＝前回トークン値Ｔｐ＋Ｔａｄｄ・・・（Ｆ）
【００７６】
前回トークン値Ｔｐは、処理対象となるフローのフローＩＤをキーにして、帯域管理テーブル２６２から読み出されるトークン値である。
【００７７】
そして、帯域管理部１０４は、算出した現在トークン値Ｔが、Ｔ＞バケツの深さであるか否かを判断する（ステップＳ１３０８）。Ｔ＞バケツの深さである場合（ステップＳ１３０８：Ｙｅｓ）、帯域管理部１０４は、現在トークン値Ｔをバケツの深さに更新して（ステップＳ１３０９）、トークン加算処理（ステップＳ１２０２）を終了する。一方、Ｔ＞バケツの深さでない場合（ステップＳ１３０８：Ｎｏ）、ステップＳ１３０９を実行せずにトークン加算処理（ステップＳ１２０２）を終了する。
【００７８】
＜時刻カウンタ周回数更新処理手順例＞
図１４は、時刻カウンタ周回数更新処理の処理手順例を示すフローチャートである。帯域管理部１０４は、時刻カウンタがＮクロック計数する都度、時刻カウンタ周回数更新処理を開始する（ステップＳ１４００）。
【００７９】
帯域管理部１０４は、まず、現在の時刻カウンタ値Ｃを取得し（ステップＳ１４０１）、Ｃの上位ＸビットがＡｌｌ‘０’であるか否かを判断する（ステップＳ１４０２）。ここで、Ｘは、処理対象となる時刻カウンタ値Ｃのビット数−Ｌｏｇ2（フローの上限数）であり、図２の設定レジスタ２０２に格納される値である。たとえば、フローの上限数＝４で、かつ、時刻カウンタ値が７ビットのビット列である場合、上位５ビットがすべてＡｌｌ‘０’であるか否か判断される。
【００８０】
Ｃの上位ＸビットがＡｌｌ‘０’でない場合（ステップＳ１４０２：Ｎｏ）、帯域管理部１０４は、いずれのフローについても時刻カウンタ値の周回数を更新しないため、処理を終了する。
【００８１】
一方、Ｃの上位ＸビットがＡｌｌ‘０’である場合（ステップＳ１４０２：Ｙｅｓ）、帯域管理部１０４は、Ｃの下位Ｙビットのうち、下位ｌｏｇ２Ｎビット目からＹビット目までのビット列を、処理対象となるフローＩＤとして抽出する。そして、帯域管理部１０４は、抽出したフローＩＤをキーにして帯域管理テーブル２６２のエントリを取得する（ステップＳ１４０３）。
【００８２】
そして、帯域管理部１０４は、取得したエントリにおける時刻カウンタ周回数が、時刻カウンタ周回数の上限値である「２」であるか否かを判断する。「２」である場合（ステップＳ１４０４：Ｙｅｓ）、時刻カウンタ周回数が上限に達しているため、処理を終了する。
【００８３】
一方、「２」でない場合（ステップＳ１４０４：Ｎｏ）、時刻カウンタ周回数が上限に達していないため、帯域管理部１０４は、取得したエントリにおける時刻カウンタ周回数をインクリメントし（ステップＳ１４０５）、インクリメント後の時刻カウンタ周回数を、取得したエントリに書き込む（ステップＳ１４０６）。これにより、時刻カウンタ周回数更新処理を終了する。
【００８４】
これにより、時刻カウンタ周回数を更新することができるため、トークン加算処理（ステップＳ１２０２）において、時刻カウンタ周回数に応じた加算トークン量Ｔａｄｄを求めることができる。
【００８５】
このように、実施例１の転送装置１００によれば、フロー毎のバッファにフレームがない場合に、フレーム出力リスト１０５の理想送出時刻の位置にフローＩＤを登録し、フレームを送信する度にフロー毎のバッファにフレームが残存していれば続けて理想送出時刻の位置にフローＩＤを登録する。この結果、出力フレームバッファ１０２に保持しているフレームのすべてではなく、フロー毎に１フレームの理想送出時刻の位置にフローＩＤが登録される。したがって、出力フレームバッファ１０２に保持しているフレームのすべてについて理想送出時刻にフローＩＤを登録する場合に比べて、フレーム出力リスト１０５に使用される転送装置１００内のメモリ容量の低減化を図ることができる。
【００８６】
（実施例２）
つぎに、実施例２について説明する。実施例１では、フロー毎の出力フレームバッファ１０２内の該当するバッファ１０２−ｉにフレームがない場合に、フレーム出力リスト１０５の理想送出時刻の位置にフローＩＤを登録し、フレームを送信する度にフロー毎の出力フレームバッファ１０２内のバッファ１０２−ｉにフレームが残存していれば続けて理想送出時刻の位置にフローＩＤを登録する登録方式について説明した。実施例１では、送信帯域の小さい、すなわち、遠い未来に登録されるフローはフレーム出力リスト１０５での競合の確率が低くなるため、理想的な時刻にフローＩＤを登録することができる。
【００８７】
図１５は、実施例１によるトークンバケツアルゴリズムによるフレームの転送例を示す説明図である。あるフローについて、フレームＦ０は、そのフローのトークンが０以上であるため、到着するとすぐに送出される。フレームＦ０の送出によりトークンが減少する。フレームＦ１が到着すると、トークンは０未満であるため、理想送出時刻が算出される。フレームＦ１の送出によりトークンが減少する。フレームＦ１は、理想送出時刻に送出される。同様に、フレームＦ２が到着すると、トークンは０未満であるため、フレームＦ１と同様、理想送出時刻が算出される。
【００８８】
このとき、既に登録されている送信帯域の小さい他のフローとフレーム出力リスト１０５にて競合が発生し、フレームＦ２の送出タイミングは、フレームＦ２の理想送出時刻よりも遅れる。これにより、揺らぎが発生し、フレーム転送がバースト的になる。理想送出時刻の計算は、実施例１で示したようにトークンバケツアルゴリズムで設計されるため、このバースト長がバケツの深さを超えるようになると、トークンが廃棄され、設定した送信帯域を下回る。つまり、設定帯域の大きいフロー程、設定した送信帯域通りに出力ができないこととなる。
【００８９】
このため、実施例２では、現在時刻での読出要求のタイミングにおいて、そのフローについてのトークン量に応じて、フレームを優先して送信すべきか否かを判定する。すなわち、転送装置１００は、トークン量がバケツの深さに到達しそうなフローほど優先して、フレームを送信できるように制御する。これにより、既に登録されている送信帯域の小さいフローとフレーム出力リスト１０５にて競合が発生した場合、送信帯域の大きい方のフローのフレームを優先して送信することができ、設定した送信帯域通りのフレーム転送を実現することができる。
【００９０】
図１６は、実施例２にかかる登録方式を示す説明図である。図１６中、（１）〜（７）は、図２に示した登録方式と同一処理内容である。したがって、図２と同一処理内容については説明を省略するとともに、相違点について説明する。
【００９１】
実施例２にかかる転送装置１００は、読出要求優先制御部１６００を有する。（５）登録処理部１４３が、現在時刻である現在の時刻カウンタ値に相当するタイムスロットに格納されているフローＩＤを含む読出要求を出力すると、読出要求優先制御部１６００は、当該読出要求を受信する。
【００９２】
（ａ）読出要求優先制御部１６００は、振分け部１６０１により、読出要求に含まれるフローＩＤにより特定されるフローについてのトークン量に応じて、高優先キュー１６０２または低優先キュー１６０３のいずれに振り分けるべきかを決定する。振分け部１６０１は、トークンバケツに余裕がなければ、フローＩＤの振分け先を高優先キュー１６０２に決定し、余裕があれば、フローＩＤの振分け先を高優先キュー１６０２に決定する。そして、読出要求優先制御部１６００は、振分け部１６０１により、決定した振分け先のキューに、読出要求に含まれるフローＩＤを格納する。
【００９３】
（ｂ）読出要求優先制御部１６００は、キュー制御部１６０４により、高優先キュー１６０２の先頭のフローＩＤから順次読出処理部１０３に出力する。高優先キュー１６０２が空になった場合、読出要求優先制御部１６００は、キュー制御部１６０４により、低優先キュー１６０３の先頭のフローＩＤから順次読出処理部１０３に出力する。このように、フローＩＤは、高優先キュー１６０２から優先読出されるため、読出処理部１０３は、優先読出されたフローＩＤにより特定されるフローの先頭フレームを、出力フレームバッファ１０２内のバッファ１０２−ｉから読み出すことができる。
【００９４】
＜出力フレームバッファ制御部２０６のハードウェア構成例＞
実施例２にかかる転送装置１００のハードウェア構成例は、図２に示した実施例１にかかるハードウェア構成例と同一構成であるため、その説明を省略する。ただし、実施例２では、出力フレームバッファ制御部２０６の内部構成が実施例１の出力フレームバッファ制御部２０６と相違する部分があるため、相違点について説明する。
【００９５】
図１７は、実施例２にかかる出力フレームバッファ制御部２０６の詳細なブロック構成を示すブロック図である。なお、図８に示した構成と同一構成については同一符号を付し、その説明を省略する。
【００９６】
出力フレームバッファ制御部２０６は、読出要求優先制御部１６００を有する。読出要求優先制御部１６００は、図１６に示したように、振分け部１６０１と、高優先キュー１６０２と、低優先キュー１６０３と、キュー制御部１６０４と、を有する。振分け部１６０１による振分け処理について、図１８を用いて説明する。
【００９７】
＜振分け処理手順例＞
図１８は、読出要求優先制御部１６００（振分け部１６０１）による振分け処理手順例を示すフローチャートである。読出要求優先制御部１６００は、登録処理部１４３から送出される読出要求を受信することで処理を開始する（ステップＳ１８００）。
【００９８】
読出要求優先制御部１６００は、読出要求に含まれるフローＩＤを用いて帯域管理テーブル２６２のエントリを取得する（ステップＳ１８０１）。そして、読出要求優先制御部１６００は、取得したエントリについて、トークン加算処理を実行する（ステップＳ１８０２）。トークン加算処理（ステップＳ１８０２）は、図１３に示したトークン加算処理（ステップＳ１２０２）と同一処理であるため、説明を省略する。
【００９９】
トークン加算処理（ステップＳ１８０２）により、現在のトークン値を取得できるため、読出要求優先制御部１６００は、現在トークン値＞バケツの深さ×重みであるか否かを判断する（ステップＳ１８０３）。重みは、設定レジスタ２０２に格納されており、０より大きく１未満の値をとる。すなわち、「バケツの深さ×重み」の値は、０（見かけの０）より大きく、バケツの深さ未満の値をとる。「バケツの深さ×重み」の値は、図１５に示したしきい値に相当する。
【０１００】
現在トークン値＞バケツの深さ×重みを満たさない場合（ステップＳ１８０３：Ｎｏ）、トークンバケツに余裕があることになるため、読出要求優先制御部１６００は、受信した読出要求を低優先キュー１６０３に格納する（ステップＳ１８０４）。一方、現在トークン値＞バケツの深さ×重みを満たす場合（ステップＳ１８０３：Ｙｅｓ）、トークンバケツに余裕がないことになるため、読出要求優先制御部１６００は、受信した読出要求を高優先キュー１６０２に格納する（ステップＳ１８０５）。これにより、振分け処理を終了する。
【０１０１】
このあと、キュー制御部１６０４が、高優先キュー１６０２に格納された読出要求から優先的に読み出して読出処理部１０３に出力し、高優先キュー１６０２が空になると、低優先キュー１６０３に格納された読出要求を読み出して読出処理部１０３に出力する。これにより、読出制御部は、優先読出されたフローＩＤにより特定されるフローの先頭フレームを出力フレームバッファ１０２から読み出すことができる。
【０１０２】
このように、実施例２によれば、フローの設定帯域に関わらずトークンバケツの溢れ発生を防止することができ、設定帯域に依存しない公平な帯域制御が可能となる。
【０１０３】
（実施例３）
つぎに、実施例３について説明する。実施例１および実施例２では、１フローにつき１つの理想送出時刻をフレーム出力リスト１０５に登録する登録方式を採用した。この場合、各フローのすべてのフレームについての理想送出時刻を登録する登録方式に比べて、フレーム出力リスト１０５のリスト長を短くすることができ、メモリ使用量の低減化を図ることができる。
【０１０４】
これに対し、実施例３では、短期フレーム出力リストと長期フレーム出力リストという２つのフレーム出力リストを採用して、フレーム転送を実現する。
【０１０５】
図１９は、実施例１および実施例２のフレーム出力リスト１０５と、実施例３の短期フレーム出力リストおよび長期フレーム出力リストと、の比較例を示す説明図である。近年のフレームネットワークでは、６４バイト長のフレームから９６００バイト長のフレームが送信される。トークンバケツアルゴリズムにおいて、９６００バイト長のような長大なフレームについてトークンが減算されたあとに、低帯域、たとえば、設定帯域の小さい０．５Ｍｂｐｓのフレームが到着した場合、算出される理想送出時刻は、遠い未来の時刻となる。このため、そのような時刻に対応するタイムスロットをフレーム出力リスト１０５で確保する必要があり、フレーム出力リスト１０５のリスト長を長くする必要がある。
【０１０６】
これに対し、実施例３では、フレーム出力リスト１０５のリスト長を短くして短期フレーム出力リスト１９０１とする。すなわち、短期フレーム出力リスト１９０１は、実施例１および実施例２のフレーム出力リスト１０５と同一構造であるが、リスト長が実施例１および実施例２のフレーム出力リスト１０５よりも短い。このため、実施例１および実施例２のフレーム出力リスト１０５に比べて、遠い未来の理想送出時刻についてはタイムスロットが存在しない。
【０１０７】
また、短期フレーム出力リスト１９０１によりリスト長を短くした分を補うために、長期フレーム出力リスト１９０２を採用する。短期フレーム出力リスト１９０１に入りきらない未来の理想送出時刻については、長期フレーム出力リスト１９０２に格納させる。
【０１０８】
図２０は、長期フレーム出力リスト１９０２の構成例を示す説明図である。長期フレーム出力リスト１９０２は、タイムスロットではなく、フロー数分のエントリを有する。各エントリは、短期フレーム出力リスト１９０１と同様、フローＩＤおよび存否フラグを格納するほか、理想送出時刻も格納する。長期フレーム出力リスト１９０２のリスト長は、未来の時刻分のタイムスロット列ではなく、収容可能なフロー数分のエントリ列となるため、サイズを固定化することができ、メモリ使用量の低減化を図ることができる。
【０１０９】
このように、短期フレーム出力リスト１９０１と長期フレーム出力リスト１９０２とを用いることにより、理想送出時刻が短期フレーム出力リスト１９０１に収まる場合には、実施例１および実施例２の場合と同様、帯域管理部１０４は、短期フレーム出力リスト１９０１に登録することができる。また、理想送出時刻が短期フレーム出力リスト１９０１に収まらない場合には、帯域管理部１０４は、そのフローのフローＩＤで特定されるエントリの存否フラグを、存在を示す「１」に設定して、理想送出時刻を格納する。
【０１１０】
そして、長期フレーム出力リスト１９０２に格納された理想送出時刻が、短期フレーム出力リスト１９０１に収まる時間内の時刻になった場合に、帯域管理部１０４は、短期フレーム出力リスト１９０１において、その理想送出時刻の位置にフローＩＤを格納する。また、帯域管理部１０４は、短期フレーム出力リスト１９０１に格納したフローＩＤの存否フラグを、存在しないことを示す「０」に設定する。このような短期フレーム出力リスト１９０１と長期フレーム出力リスト１９０２の連携処理により、メモリ使用量の低減化を図ることができる。
【０１１１】
＜転送装置１００のハードウェア構成例＞
図２１は、実施例３にかかる転送装置１００のハードウェア構成例を示すブロック図である。実施例１と同一構成には同一符号を付し、その説明を省略する。ここでは、実施例１との相違点について説明する。インタフェースカード１０−１には、フレーム出力リスト１０５の替わりに、短期フレーム出力リスト１９０１および長期フレーム出力リスト１９０２を有する。短期フレーム出力リスト１９０１および長期フレーム出力リスト１９０２は、出力フレームバッファ制御部２０６からアクセス可能である。具体的には、出力フレームバッファ制御部２０６内の帯域管理部１０４からアクセス可能である。
【０１１２】
＜帯域管理処理手順例＞
図２２および図２３は、実施例３にかかる帯域管理部１０４による帯域管理処理の処理手順例を示すフローチャートである。実施例１と同一処理には同一ステップ番号を付し、その説明を省略する。ここでは、実施例１との相違点について説明する。
【０１１３】
図２２において、ステップＳ１２０５またはステップＳ１２０６のあと、図２３のステップＳ２３０１に移行する。また、ステップＳ１２１０において、演算要求に、登録不指示情報が含まれる場合（ステップＳ１２１０：登録不指示）、実施例１と同様、図２３のステップＳ１２０８に移行する。
【０１１４】
図２３において、帯域管理部１０４は、登録処理部１４３により、ステップＳ１２０５またはステップＳ１２０６で算出した理想送出時刻が短期フレーム出力リスト１９０１において登録可能な時刻を超過するか否かを判断する（ステップＳ２３０１）。具体的には、たとえば、帯域管理部１０４は、登録処理部１４３により、理想送出時刻が、現在時刻である現在の時刻カウンタ値Ｃに短期フレーム出力リスト１９０１のリスト長に対応する時間長を加算した時刻を超過したか否かを判断する。
【０１１５】
超過していない場合（ステップＳ２３０１：Ｎｏ）、帯域管理部１０４は、登録処理部１４３により、短期フレーム出力リスト登録処理を実行する（ステップＳ２３０２）。短期フレーム出力リスト登録処理（ステップＳ２３０２）は、フレーム出力リスト登録処理（ステップＳ１２０７）と同一処理である。
【０１１６】
つぎに、帯域管理部１０４は、登録処理部１４３により、短期フレーム出力リスト１９０１への登録ができなかったか否かを判断する（ステップＳ２３０３）。たとえば、すでに同一の理想送出時刻のタイムスロットに他のフローＩＤが登録されている場合には、後続のタイムスロットに登録することになるが、後続のタイムスロットのいずれも空きがない場合には、短期フレーム出力リスト１９０１に登録できないことになる。
【０１１７】
したがって、登録不可でない場合（ステップＳ２３０３：Ｎｏ）、すなわち、登録できた場合、ステップＳ１２０８に０移行する。一方、登録不可の場合（ステップＳ２３０３：Ｙｅｓ）、帯域管理部１０４は、登録処理部１４３により、長期フレーム出力リスト登録処理を実行する（ステップＳ２３０４）。また、ステップＳ２３０１において、理想送出時刻が短期フレーム出力リスト１９０１を超過する場合（ステップＳ２３０１：Ｙｅｓ）も、帯域管理部１０４は、登録処理部１４３により、長期フレーム出力リスト登録処理を実行する（ステップＳ２３０４）。
【０１１８】
長期フレーム出力リスト登録処理（ステップＳ２３０４）では、帯域管理部１０４は、登録処理部１４３により、理想送出時刻で転送すべきフレームが所属するフローを特定するフローＩＤのエントリを長期フレーム出力リスト１９０２から特定し、当該特定されたエントリの存否フラグを、存在を示す「１」に設定し、かつ、理想送出時刻を格納する。そして、ステップＳ１２０８に移行する。
【０１１９】
＜長期フレーム出力リスト１９０２の更新処理手順例＞
図２４は、帯域管理部１０４による長期フレーム出力リスト１９０２の更新処理の処理手順例を示すフローチャートである。帯域管理部１０４は、登録処理部１４３により、長期フレーム出力リスト１９０２からの読出タイミングであるか否かを判断する（ステップＳ２４０１）。短期フレーム出力リスト１９０１のリスト長に相当する時間長を時刻カウンタが一周するまでの間は、長期フレーム出力リスト１９０２に登録された理想送出時刻の中の直近の時刻であっても到来することはない。したがって、読出タイミングとは、たとえば、短期フレーム出力リスト１９０１からすべての読出要求を読み出すのに要する所要時間を、フロー数で除算した時間間隔となる。
【０１２０】
帯域管理部１０４は、登録処理部１４３により、読出タイミングが到来するまで待ち受ける（ステップＳ２４０１：Ｎｏ）。読出タイミングが到来した場合（ステップＳ２４０１：Ｙｅｓ）、帯域管理部１０４は、登録処理部１４３により、長期フレームリストの中の存否フラグが「１」のエントリのうち、未選択フローＩＤがあるか否かを判断する（ステップＳ２４０２）。未選択フローＩＤがない場合（ステップＳ２４０２：Ｎｏ）、ステップＳ２４０１に戻る。
【０１２１】
一方、未選択フローＩＤが有る場合（ステップＳ２４０２：Ｙｅｓ）、帯域管理部１０４は、登録処理部１４３により、未選択フローＩＤを選択し（ステップＳ２４０３）、その理想送出時刻を抽出する（ステップＳ２４０４）。そして、帯域管理部１０４は、抽出した理想送出時刻を更新する（ステップＳ２４０５）。具体的には、たとえば、帯域管理部１０４は、抽出した理想送出時刻を示す時刻カウンタ値から、現在時刻を示す時刻カウンタ値を減算する。そして、帯域管理部１０４は、登録処理部１４３により、更新後の理想送出時刻について、図２３のステップＳ２３０２と同様、短期フレーム出力リスト登録処理を実行する（ステップＳ２４０６）。
【０１２２】
つぎに、帯域管理部１０４は、登録処理部１４３により、図２３のステップＳ２３０３と同様、短期フレーム出力リスト１９０１への登録ができなかったか否かを判断する（ステップＳ２４０７）。登録不可の場合（ステップＳ２４０７：Ｙｅｓ）、帯域管理部１０４は、登録処理部１４３により、選択フローＩＤのエントリはそのままにして（理想送出時刻は更新前の時刻のまま）、ステップＳ２４０２に戻り、さらに、未選択フローＩＤがあるか否かを判断する。一方、登録不可でない場合（ステップＳ２４０７：Ｎｏ）、すなわち、登録できた場合、帯域管理部１０４は、登録処理部１４３により、選択フローＩＤの存否フラグを「１」から「０」に更新して（ステップＳ２４０８）、ステップＳ２４０１に移行する。
【０１２３】
このように、実施例３によれば、近未来の時刻については短期フレーム出力リスト１９０１を用いてフローＩＤの登録処理を実行することで効率的なフレーム転送を実現し、それよりも先の遠い未来の時刻については長期フレーム出力リスト１９０２にフローＩＤおよび理想送出時刻を滞留させておく。そして、帯域管理部１０４は、短期フレーム出力リスト１９０１に登録可能になった場合に、フローＩＤを短期フレーム出力リスト１９０１に移行する。これにより、リスト長の短縮化を図ることができ、メモリ使用量の低減化を図ることができる。
【０１２４】
（実施例４）
つぎに、実施例４について説明する。実施例１〜実施例３では、論理回路により構成した例を説明したが、実施例４は、実施例１〜実施例３の転送装置１００の一部または全部の機能を、ソフトウェアにより実現する例である。なお、一部の機能をソフトウェアにより実現する場合、残余の部分は、実施例１〜実施例３に示したように論理回路で実現することとしてもよい。
【０１２５】
図２５は、実施例４にかかる転送装置１００のハードウェア構成例を示すブロック図である。転送装置１００は、プロセッサ２５０１と、記憶デバイス２５０２と、入力デバイス２５０３と、出力デバイス２５０４と、通信インターフェース（通信ＩＦ２５０５）と、を有する。プロセッサ２５０１、記憶デバイス２５０２、入力デバイス２５０３、出力デバイス２５０４、および通信ＩＦ２５０５は、バス２５０６により接続される。プロセッサ２５０１は、転送装置１００を制御する。
【０１２６】
記憶デバイス２５０２は、プロセッサ２５０１の作業エリアとなる。また、記憶デバイス２５０２は、プロセッサ２５０１が実行することにより実施例１〜実施例３の転送装置１００の一部または全部の機能を実現するプログラムや、実施例１〜実施例３で用いられた各種テーブルを記憶する非一時的な記録媒体である。
【０１２７】
記憶デバイス２５０２としては、たとえば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、フラッシュメモリがある。入力デバイス２５０３は、データを入力する。入力デバイス２５０３としては、たとえば、キーボード、マウス、タッチパネル、テンキー、スキャナがある。出力デバイス２５０４は、データを出力する。出力デバイス２５０４としては、たとえば、ディスプレイ、プリンタがある。通信ＩＦ２５０５は、ネットワークと接続し、データを送受信する。
【０１２８】
このように、実施例４によれば、実施例１〜実施例３にかかる転送装置１００をソフトウェアにより実現することができる。
【０１２９】
以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。
【符号の説明】
【０１３０】
１００  転送装置、１０１  書込処理部、１０２  出力フレームバッファ、１０３  読出処理部、１０４  帯域管理部、１０５  フレーム出力リスト、１４１  算出部、１４２  登録要求部、１４３  登録処理部、２０４  入力ヘッダ処理部、２０５  入力フレームバッファ制御部、２０６  出力フレームバッファ制御部、２１０  フレーム中継部、２４０  入力ヘッダ処理テーブル、２５０  入力フレームバッファ、２６１  キュー管理テーブル、２６２  帯域管理テーブル、１６００  読出要求優先制御部、１６０２  高優先キュー、１６０３  低優先キュー、１６０４  キュー制御部、１９０１  短期フレーム出力リスト、１９０２  長期フレーム出力リスト
【図１】
2015073210.tif 000003
【図２】
2015073210.tif 000004
【図３】
2015073210.tif 000005
【図４】
2015073210.tif 000006
【図５】
2015073210.tif 000007
【図６】
2015073210.tif 000008
【図７】
2015073210.tif 000009
【図８】
2015073210.tif 000010
【図９】
2015073210.tif 000011
【図１０】
2015073210.tif 000012
【図１１】
2015073210.tif 000013
【図１２】
2015073210.tif 000014
【図１３】
2015073210.tif 000015
【図１４】
2015073210.tif 000016
【図１６】
2015073210.tif 000017
【図１７】
2015073210.tif 000018
【図１８】
2015073210.tif 000019
【図２０】
2015073210.tif 000020
【図２４】
2015073210.tif 000021
【図１５】
2015073210.tif 000022
【図１９】
2015073210.tif 000023
【図２１】
2015073210.tif 000024
【図２２】
2015073210.tif 000025
【図２３】
2015073210.tif 000026
【図２５】
2015073210.tif 000027