(57)【特許請求の範囲】
【請求項１】
通信の管理単位であるフローごとの入力フレームをそれぞれ保持する複数のフレームバッファと、
前記複数のフレームバッファを巡回して、外部へ出力すべきフレームを各フレームバッファから読み出す第１スケジューラおよび第２スケジューラと、
を備え、
前記第１スケジューラは、本通信装置の通信速度より低い速度に基づく時間間隔で前記複数のフレームバッファを順次巡回し、各フレームバッファに対する１回の巡回あたり１フレームを読み出し、
前記第２スケジューラは、各フレームバッファに対する１回の巡回あたり、最短フレーム長より大きい所定の基準値を読み出しの制限量として１以上のフレームを読み出すことを特徴とする通信装置。
【請求項２】
前記複数のフレームバッファのそれぞれについて、少なくとも前記第１スケジューラにより読み出されたフレームの積算量を読み出し積算量として保持する積算量監視部をさらに備え、
前記第２スケジューラは、あるフレームバッファの読み出し積算量が大きいほど当該フレームバッファからの読み出しの制限量を小さい値へ変更することを特徴とする請求項１に記載の通信装置。
【請求項３】
前記第２スケジューラは、あるフレームバッファの読み出し積算量が所定値を超過する場合、当該フレームバッファからのフレーム読み出しをスキップし、
前記積算量監視部は、前記フレームバッファからのフレーム読み出しがスキップされた場合、前記フレームバッファの読み出し積算量をそれまでよりも小さくすることを特徴とする請求項２に記載の通信装置。
【請求項４】
前記複数のフレームバッファを巡回して、外部へ出力すべきフレームを各フレームバッファから読み出すスケジューラであって、最短フレーム長より大きく、かつ、前記第２スケジューラにおける基準値より小さい別の基準値を読み出しの制限量として１以上のフレームを読み出す第３スケジューラをさらに備えることを特徴とする請求項１から３のいずれかに記載の通信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、データ通信技術に関し、特に通信装置に関する。
【背景技術】
【０００２】
近年、光ファイバによるブロードバンドの急速な普及により、通信におけるアクセス回線速度は、最大１００Ｍｂｐｓから１Ｇｂｐｓへ高速化が進展している。さらに、１０ＧＥ−ＰＯＮ（Gigabit Ethernet-Passive Optical Network、「Ethernet」は登録商標）の標準化により、アクセス回線のさらなる高速化も想定される。
【０００３】
インターネットアクセスは基本的にベストエフォートサービスであり、複数の加入者のトラフィックは有限の通信帯域を共有して通信が行われる。このような通信形態においては、専用線等に求められる帯域保証ではなく、各加入者のトラフィックを公平に取り扱うよう帯域制御を行う通信装置が用いられることがある。なお、本明細書での「帯域」は、所定の単位時間あたりの通信データ量であるとも言える。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−１５３４８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
公平な帯域制御を実現する従来の技術としてＷＲＲ（Weighted Round Robin）キューバッファ読み出し制御方式が知られている。この方式では、論理的な加入者回線（加入者側の装置と他装置との論理的な通信セッションとも言える）である入力フローごとに、フレームを一時的に保持するキューバッファを具備する。通信装置に入力されたフレームは、入力フローごとのキューバッファへ格納される。スケジューラは、フレーム読み出しを行うキューバッファを一定周期で巡回的に決定することにより各フローにおける出力データ量が均等になるようにする。
【０００６】
１周期における読み出しデータ量（ここでは「Ｘ」とする）を最短フレーム長より大きくすると、最短フレームが１つ蓄積されたキューバッファからフレームを読み出す場合、読み出しデータ量はＸよりも小さくなる。すなわち、出力帯域よりも少ないデータ量しか読み出されず、出力帯域に余剰が発生することになる。また、余剰分を他のキューバッファのフレームに割り当てる場合、余剰量に応じて動的にかつ公平に割り当てる方式が必要となるが、この場合、方式が複雑化しやすく適切な方法もなかった。
【０００７】
出力帯域の余剰が発生しないように、Ｘ以上にフレームが蓄積されたキューバッファからのみフレームを読み出すよう制限することも考えられる。しかしこの場合、Ｘより小さいフレーム蓄積量しかないキューバッファからはフレームが読み出されなくなってしまう。また、Ｘを最短フレーム長とした場合は出力帯域の余剰は発生しない。しかし通信速度が速くなると、最短フレームの処理に費やすことができる時間（以下、「フレーム処理猶予時間」とも呼ぶ。）は短くなりすなわち１周期が短くなる。通信速度の一層の高速化が見込まれる状況において、従来の技術では、フレーム処理猶予時間内に、次のフレーム読み出しを行うべきキューバッファを決定することが一層困難になることが考えられる。
【０００８】
本発明は、こうした課題に鑑みてなされたものであり、その主たる目的は、通信装置において公平な帯域制御と通信速度の向上への対応との両立を支援するための技術を提供することである。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、本発明のある態様の通信装置は、通信の管理単位であるフローごとの入力フレームをそれぞれ保持する複数のフレームバッファと、複数のフレームバッファを巡回して、外部へ出力すべきフレームを各フレームバッファから読み出す第１スケジューラおよび第２スケジューラと、を備える。第１スケジューラは、本通信装置の通信速度より低速で、各フレームバッファに対する１回の巡回あたり１フレームを読み出し、第２スケジューラは、各フレームバッファに対する１回の巡回あたり、最短フレーム長より大きい所定の基準値を読み出しの制限量として１以上のフレームを読み出す。
【００１０】
なお、以上の構成要素の任意の組合せ、本発明の表現を装置、方法、システム、プログラム、プログラムを格納した記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１１】
本発明によれば、通信装置において公平な帯域制御と通信速度の向上への対応との両立を支援することができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態の通信システムの構成を示す図である。
【図２】図１の通信装置の機能構成を示すブロック図である。
【図３】逐次スケジューラの動作を詳細に示すフローチャートである。
【図４】調整スケジューラの動作を詳細に示すフローチャートである。
【図５】実施の形態の通信装置におけるフレーム読み出しの具体例を示す図である。
【図６】実施の形態の通信装置におけるフレーム読み出しの具体例を示す図である。
【発明を実施するための形態】
【００１３】
実施の形態の通信装置は、複数のキューバッファを巡回してフレームを読み出すスケジューラを２つ備える。第１のスケジューラは、通信装置の通信速度（例えば１０Ｇｂｐｓ）よりも低速（例えば１Ｇｂｐｓ）で、１周期あたり読み出し対象のキューバッファから１フレームを読み出す。言い換えれば、最低フレーム長を読み出し制限量として、１周期あたり読み出し対象のキューバッファから、読み出しデータ量が読み出し制限量以上になるまでフレームを読み出す。その一方、第２のスケジューラは、最低フレーム長より大きい基準値を読み出し制限量として、１周期に読み出し対象のキューバッファから、読み出しデータ量が読み出し制限量以上になるまでフレームを読み出す。
【００１４】
少なくとも第１のスケジューラは各キューバッファを順次巡回して１フレームを読み出すため、複数のキューバッファ間でのフレーム読み出し量の公平性を維持しやすくなる。また、第１のスケジューラと並行して第２のスケジューラがフレームを読み出すため、第１のスケジューラが通信装置の通信速度よりも低速で動作しても出力帯域の余剰は発生しにくい。すなわち、通信装置の出力帯域を有効活用しつつ、通信装置の高速化へ対応が容易になる。言い換えれば、通信速度に対するスケーラビリティを維持しやすくなる。
【００１５】
なお実施の形態の通信装置は、可変長のイーサネットフレーム（「イーサネット」は登録商標、以下単に「フレーム」とも呼ぶ。）を中継するレイヤ２スイッチであることとする。ただし、所定の通信フレームを伝送するその他の伝送装置、例えばＬ３スイッチやルータ等であってもよいことはもちろんである。
【００１６】
図１は、実施の形態の通信システムの構成を示す。通信システム１００において、通信装置１０は、所定の伝送路を介して他の通信装置である他通信装置１２や、ユーザのＰＣ等の情報処理端末１４と接続され、他通信装置１２とともにＬＡＮやＷＡＮ等の通信網を構成する。通信装置１０は、他通信装置１２や情報処理端末１４から送出されたフレームを受信し、フレームの設定内容（ＶＬＡＮ−ＩＤ、ＭＡＣアドレス等）に基づいて他通信装置１２や情報処理端末１４へ当該フレームを中継する。本実施の形態では、通信装置１０の出力帯域、すなわち通信速度は１０Ｇｂｐｓであることとする。
【００１７】
図２は、図１の通信装置１０の機能構成を示すブロック図である。通信装置１０は、入力ポート２０と、出力ポート２２と、キューバッファ２４で総称される第１キューバッファ２４ａ、第１キューバッファ２４ｂ、第３キューバッファ２４ｃ・・・と、方路決定部２６と、フレーム書込部２８と、フレーム読出し部３０を備える。
【００１８】
本明細書のブロック図において示される各ブロックは、ハードウェア的には、コンピュータのＣＰＵやメモリをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。
【００１９】
入力ポート２０は、他通信装置１２や情報処理端末１４から伝送路へ送出されたイーサネットフレームを受信する通信ポートである。出力ポート２２は、他通信装置１２や情報処理端末１４へ伝送すべきイーサネットフレームを伝送路へ送出する通信ポートである。なお入力ポート２０および出力ポート２２は説明の簡明化のため別個に示しているが、物理的には１つの通信ポートにおいて入力ポート２０と出力ポート２２の両方の機能が実装されてもよいことはもちろんである。
【００２０】
キューバッファ２４は、通信装置１０で受け付けられたフレームデータを、その設定内容（ＶＬＡＮ−ＩＤやＭＡＣアドレス等）に応じたフローごとに一時的に保持するＦＩＦＯ（First In First Out）のメモリである。図２では第１キューバッファ２４ａ〜第３キューバッファ２４ｃを示したが、例えば送信元ＭＡＣアドレスと宛先ＭＡＣアドレスとの組み合わせごと、またＶＬＡＮ−ＩＤごと等、４以上のキューバッファが含まれてもよいことはもちろんである。なお、第１キューバッファ２４ａ〜第３キューバッファ２４ｃのそれぞれが蓄積するフレームのデータ量は後述の積算量監視部３６へ通知される。
【００２１】
方路決定部２６は、入力ポート２０で受け付けられたフレームに設定された宛先情報（宛先ＭＡＣアドレスやＶＬＡＮ−ＩＤ等）にもとづいてフローおよび出力ポート２２を決定する。フレーム書込部２８は、方路決定部２６からフレームを受け付けて、方路決定部２６により特定されたフローに対応するキューバッファ２４へフレームデータを格納する。フレーム書込部２８は、フレームを格納したキューバッファ２４の識別情報と、格納したフレームの長さを積算量監視部３６へ通知する。
【００２２】
フレーム読出し部３０は、キューバッファ２４に格納されたフレームデータを読み出し、方路決定部２６により決定された出力ポート２２から、そのフレームデータを送出させる。フレーム読出し部３０は、逐次スケジューラ３２と調整スケジューラ３４と積算量監視部３６を含む。
【００２３】
逐次スケジューラ３２は、一度に処理するフレームの制限量（言い換えると、１周期における読み出しフレームの制限量）を最短フレーム長である８４バイト、すなわちイーサネットフレームの最短長６４バイト＋フレーム間ギャップ２０バイトとする。そして、通信装置１０の通信速度よりも低速の１Ｇｂｐｓで動作する。具体的には、１周期０．６７２マイクロ秒（以下「μｓ」とも表記する。）で第１キューバッファ２４ａ〜第３キューバッファ２４ｃを順次巡回する。そして、各キューバッファ２４への巡回あたり読み出しフレームの制限量を超えるまでフレームデータを読み出す。すなわち各キューバッファ２４から１フレームを読み出す。逐次スケジューラ３２は、各キューバッファ２４から読み出したフレームのデータ量を積算量監視部３６へ通知する。
【００２４】
調整スケジューラ３４は、一度に処理するフレームの制限量（以下「読み出し基準値」とも呼ぶ。）を最短フレーム長の１０倍の８４０バイトとする。そして、出力帯域の１０Ｇｂｐｓの速度で動作する。具体的には、１周期０．６７２μｓで第１キューバッファ２４ａ〜第３キューバッファ２４ｃを順次巡回する。そして、各キューバッファ２４への巡回あたり、読み出し基準値と、各キューバッファ２４からのそれまでの読み出し量とに応じて定まる制限量（以下、「読み出し制限量」とも呼ぶ。）を超えるまでフレームデータを読み出す。詳細は後述するが、各キューバッファ２４からのそれまでの読み出し量が小さいほど、調整スケジューラ３４によるフレームデータの読み出し量を大きくすることにより、複数のキューバッファ２４間での公平なフレーム読み出しを実現する。
【００２５】
積算量監視部３６は、第１キューバッファ２４ａ〜第３キューバッファ２４ｃのそれぞれに蓄積されたフレームのデータ量を示す情報（以下、「蓄積フレーム量」とも呼ぶ。）を保持する。そして、フレーム書込部２８から通知された書込フレーム量に応じて蓄積フレーム量を増加させる一方、逐次スケジューラ３２および調整スケジューラ３４から通知された読み出しフレーム量に応じて蓄積フレーム量を減少させる。
【００２６】
また積算量監視部３６は、第１キューバッファ２４ａ〜第３キューバッファ２４ｃのそれぞれについて、逐次スケジューラ３２および調整スケジューラ３４で読み出されたフレームの積算量を示す情報（以下、「読み出し積算量」とも呼ぶ。）を保持する。具体的には、逐次スケジューラ３２から通知された読み出しフレームのデータ量を、そのまま読み出し積算量へ加算する。その一方、調整スケジューラ３４から通知された読み出しフレームのデータ量については、そのデータ量から読み出し基準値（８４０バイト）を減じた値を読み出し積算量へ加算する。したがって、読み出しフレーム量が読み出し基準値未満であれば、読み出し積算量を減少させることになる。
【００２７】
逐次スケジューラ３２および調整スケジューラ３４は、キューバッファ２４からのフレーム読み出しを行うべき際、積算量監視部３６から各キューバッファ２４の蓄積フレーム量を取得する。調整スケジューラ３４は、積算量監視部３６から各キューバッファ２４の読み出し積算量をさらに取得する。逐次スケジューラ３２は、フレームが蓄積されたキューバッファ２４、すなわち蓄積フレーム量が０より大きいキューバッファ２４をフレーム読み出しの対象として選択する。その一方、調整スケジューラ３４は、蓄積フレーム量＋読み出し積算量が読み出し基準値（８４０バイト）以上となるキューバッファ２４をフレーム読み出しの対象として選択する。
【００２８】
以上の構成による通信装置１０の動作を以下説明する。
通信装置１０の入力ポート２０は、他通信装置１２や情報処理端末１４から送信された通信フレームを所定の伝送路を介して受信する。方路決定部２６は、受信された通信フレームの内容に基づいて出力ポートおよびフローを決定する。フレーム書込部２８は、複数種類のフローと複数種類のキューバッファとの対応関係を予め定めたテーブルを参照し、方路決定部２６により決定されたフローに対応づけられたキューバッファ２４へフレームを格納する。そして、フレームを格納したキューバッファ２４とそのフレーム長とを積算量監視部３６へ通知する。
【００２９】
積算量監視部３６は、各キューバッファ２４における蓄積フレーム量と読み出し積算量を保持し、フレーム書込部２８やスケジューラからの通知に応じて逐次更新する。逐次スケジューラ３２は、積算量監視部３６に保持された蓄積フレーム量にしたがって、フレームを読み出すべきキューバッファ２４を決定してフレームデータを読み出す。調整スケジューラ３４は、積算量監視部３６に保持された蓄積フレーム量と読み出し積算量とにしたがって、フレームを読み出すべきキューバッファ２４と読み出し制限量とを決定してフレームを読み出す。フレーム読出し部３０は、逐次スケジューラ３２および調整スケジューラ３４により読み出されたフレームデータを、出力ポート２２を介して他通信装置１２や情報処理端末１４へ送出させる。
【００３０】
図３は、逐次スケジューラ３２の動作を詳細に示すフローチャートである。逐次スケジューラ３２は、積算量監視部３６から各キューバッファ２４の蓄積フレーム量を取得する。逐次スケジューラ３２は、前回選択したキューバッファ（以下「Ｍ」）を記憶し、Ｍ＋１のキューバッファ２４から順にフレームが蓄積されたキューバッファ２４を検索して、条件に該当する最初のキューバッファ２４を選択する（Ｓ１０）。
【００３１】
いずれかのキューバッファ２４を選択した場合（Ｓ１２のＹ）、当該バッファから１フレームを読み出す（Ｓ１４）。そして、逐次スケジューラ３２はフレームを読み出したキューバッファ２４および読み出したフレーム長を積算量監視部３６へ通知し、積算量監視部３６は当該キューバッファ２４の読み出し積算量へそのフレーム長を加算する（Ｓ１５）。なお図３には不図示であるが、積算量監視部３６は、当該キューバッファ２４の蓄積フレーム量から読み出しフレーム量を減算する。
【００３２】
いずれのキューバッファ２４も未選択、すなわちフレームを蓄積したキューバッファ２４がなければ（Ｓ１２のＮ）、Ｓ１４およびＳ１５はスキップされる。停止コマンドが受け付けられた等の所定の終了条件が未充足の場合（Ｓ１６のＮ）、１周期（０．６７２μｓ）が経過するまで待機し（Ｓ１８のＮ）、１周期の経過を検出すると（Ｓ１８のＹ）、Ｓ１０へ戻る。終了条件が充足すると（Ｓ１６のＹ）、本図のフローを終了する。
【００３３】
図４は、調整スケジューラ３４の動作を詳細に示すフローチャートである。調整スケジューラ３４は、積算量監視部３６から各キューバッファ２４の蓄積フレーム量および読み出し積算量を取得する。逐次スケジューラ３２は、前回選択したキューバッファ（以下「Ｎ」）を記憶し、Ｎ＋１のキューバッファ２４から順に、（蓄積フレーム量＋読み出し積算量）が読み出し基準値（８４０バイト）以上となるキューバッファ２４を検索する。そして条件に該当する最初のキューバッファ２４を選択する（Ｓ２０）。
【００３４】
いずれかのキューバッファ２４を読み出し対象として選択した場合（Ｓ２２のＹ）、調整スケジューラ３４は、読み出し基準値（８４０バイト）から読み出し積算量を減じた値を読み出し制限量として算出する（Ｓ２４）。なお同一の周期において逐次スケジューラ３２が同一のキューバッファ２４からフレームを読み出した場合、逐次スケジューラ３２により読み出されたフレーム量も読み出し積算量に含める。読み出し制限量が０以上であれば（Ｓ２６のＮ）、調整スケジューラ３４は読み出し対象のキューバッファ２４から読み出し制限量を超えるまでフレーム読み出しを実行する（Ｓ２８）。読み出し制限量が０未満、言い換えれば読み出し基準値よりも読み出し積算量が大きければ（Ｓ２６のＹ）、Ｓ２８をスキップし、フレーム読み出しを行わない。
【００３５】
調整スケジューラ３４は、読み出し対象のキューバッファ２４および読み出したフレーム長を積算量監視部３６へ通知する。積算量監視部３６は、通知されたキューバッファ２４の読み出し積算量へ、読み出しフレーム量から読み出し基準値（８４０バイト）を減じた値を加算する（Ｓ３０）。このとき、読み出しフレーム量が８４０バイトよりも小さい場合は、読み出し積算量をそれまでより小さくすることになる。なお図４には不図示であるが、積算量監視部３６は、通知されたキューバッファ２４の蓄積フレーム量から読み出しフレーム量を減算する。
【００３６】
いずれのキューバッファ２４も未選択、すなわち（蓄積フレーム量＋読み出し積算量）が読み出し基準値（８４０バイト）以上となるキューバッファ２４がなければ（Ｓ２２のＮ）、Ｓ２２からＳ３０はスキップされる。停止コマンドが受け付けられた等の所定の終了条件が未充足の場合（Ｓ３２のＮ）、１周期（０．６７２μｓ）が経過するまで待機し（Ｓ３４のＮ）、１周期の経過を検出すると（Ｓ３４のＹ）、Ｓ２０へ戻る。終了条件が充足すると（Ｓ３２のＹ）、本図のフローを終了する。
【００３７】
次に、図５および図６を参照して実施の形態の通信装置１０におけるフレーム読み出しの具体例を説明する。この例ではキューバッファ＃１〜＃１０のそれぞれに、格納フレーム欄で示すフレームが蓄積されている。なおキューバッファ＃４は開始当初、５００バイト１フレームが蓄積されており、後述するように後の時点で５００バイト１フレームが追加して蓄積される。同図のフレーム長８４バイトは、イーサネットの最小フレーム長に、フレーム間ギャップおよびプリアンブルを加えた長さである。また、逐次スケジューラ３２のＭ＋１および調整スケジューラ３４のＮ＋１、すなわち両スケジューラが最初に検索すべきキューバッファはともにキューバッファ＃１であることとする。
【００３８】
図５の各周期の欄では、「フレームを読み出すスケジューラ種類」−「読み出しフレーム数」−「読み出し積算量」を示している。Ｓ１は逐次スケジューラ３２を意味し、Ｓ２は調整スケジューラ３４を意味している。
【００３９】
１周期目は、逐次スケジューラ３２によりキューバッファ＃１が選択され、８４バイトフレームが１つ読み出される。また調整スケジューラ３４は、蓄積フレーム量が８４０バイト以上あるキューバッファを検索してキューバッファ＃５を選択する。そしてキューバッファ＃５から８４０バイトを超える１０００バイトフレームが１つ読み出される。逐次スケジューラ３２と調整スケジューラ３４は、読み出し対象のキューバッファと読み出したフレーム量を積算量監視部３６へ通知する。積算量監視部３６は、キューバッファ＃１の読み出し積算量を８４バイト、キューバッファ＃５の読み出し積算量を１６０バイト（１０００−８４０）と算出する。
【００４０】
２周期目は、逐次スケジューラ３２によりキューバッファ＃２が選択され、８４バイトフレームが１つ読み出される。また調整スケジューラ３４によりキューバッファ＃６が選択され、１０００バイトフレームが１つ読み出される。キューバッファ＃２の読み出し積算量は８４バイト、キューバッファ＃６の読み出し積算量は１６０バイトとなる。
【００４１】
３周期目は、逐次スケジューラ３２によりキューバッファ＃３が選択され、８４バイトフレームが１つ読み出される。また調整スケジューラ３４によりキューバッファ＃７が選択されて１０００バイトフレームが１つ読み出される。キューバッファ＃３の読み出し積算量は８４バイト、キューバッファ＃７の読み出し積算量は１６０バイトとなる。
【００４２】
４周期目は、逐次スケジューラ３２によりキューバッファ＃４が選択され、５００バイトフレームが１つ読み出される。また調整スケジューラ３４によりキューバッファ＃８が選択されて８４０バイトを超えるまでフレームが読み出されることにより、５００バイトフレームが２つ読み出される。キューバッファ＃４の読み出し積算量は５００バイト、キューバッファ＃８の読み出し積算量は１６０バイトとなる。
【００４３】
５周期目は、逐次スケジューラ３２によりキューバッファ＃５が選択され、１０００バイトフレームが１つ読み出される。また調整スケジューラ３４によりキューバッファ＃９が選択され、５００バイトフレームが２つ読み出される。キューバッファ＃５の読み出し積算量は１１６０バイト（１６０＋１０００）、キューバッファ＃９の読み出し積算量は１６０バイトとなる。
【００４４】
６周期目は、逐次スケジューラ３２によりキューバッファ＃６が選択され、１０００バイトフレームが１つ読み出される。また調整スケジューラ３４によりキューバッファ＃１０が選択され、５００バイトフレームが２つ読み出される。キューバッファ＃６の読み出し積算量は１１６０バイト、キューバッファ＃１０の読み出し積算量は１６０バイトとなる。
【００４５】
ここでキューバッファ＃４に、５００バイトのフレームが新たに格納されたとする。
７周期目は、逐次スケジューラ３２によりキューバッファ＃７が選択され、１０００バイトフレームが１つ読み出される。また調整スケジューラ３４は、（蓄積フレーム量＋読み出し積算量）が８４０バイト以上となるキューバッファを検索してキューバッファ＃４を選択する。そしてキューバッファ＃４から、（８４０バイト−読み出し積算量５００バイト）を超えるまでフレームを読み出すことにより、５００バイトフレームを１つ読み出す。キューバッファ＃７の読み出し積算量は１１６０バイトとなる。キューバッファ＃４の読み出し積算量は、元の読み出し積算量５００バイト＋（読み出しフレーム量５００バイト−読み出し基準値８４０バイト）＝１６０バイトとなる。
【００４６】
８周期目は、逐次スケジューラ３２によりキューバッファ＃８が選択され、５００バイトフレームが１つ読み出される。また調整スケジューラ３４は、（蓄積フレーム量＋読み出し積算量）が８４０バイト以上となるキューバッファを検索してキューバッファ＃５を選択する。このときキューバッファ＃５では、読み出し基準値８４０バイト−読み出し積算量１１６０バイト＜０となるため、調整スケジューラ３４はフレームの読み出しをスキップする。キューバッファ＃８の読み出し積算量は６６０バイト（１６０＋５００）となる。キューバッファ＃５の読み出し積算量は、元の読み出し積算量１１６０バイト＋（読み出しフレーム量０バイト−読み出し基準値８４０バイト）＝３２０バイトとなる。
【００４７】
９周期目は、逐次スケジューラ３２によりキューバッファ＃９が選択され、５００バイトフレームが１つ読み出される。また調整スケジューラ３４は、（蓄積フレーム量＋読み出し積算量）が８４０バイト以上となるキューバッファを検索してキューバッファ＃６を選択する。このときキューバッファ＃６では、読み出し基準値８４０バイト−読み出し積算量１１６０バイト＜０となるため、調整スケジューラ３４はフレームの読み出しをスキップする。キューバッファ＃９の読み出し積算量は６６０バイト（１６０＋５００）となる。キューバッファ＃６の読み出し積算量は、元の読み出し積算量１１６０バイト＋（読み出しフレーム量０バイト−読み出し基準値８４０バイト）＝３２０バイトとなる。
【００４８】
１０周期目は、逐次スケジューラ３２によりキューバッファ＃１０が選択され、５００バイトフレームが１つ読み出される。また調整スケジューラ３４は、（蓄積フレーム量＋読み出し積算量）が８４０バイト以上となるキューバッファを検索してキューバッファ＃７を選択する。このときキューバッファ＃７では、読み出し基準値８４０バイト−読み出し積算量１１６０バイト＜０となるため、調整スケジューラ３４はフレームの読み出しをスキップする。キューバッファ＃１０の読み出し積算量は６６０バイト（１６０＋５００）となる。キューバッファ＃７の読み出し積算量は、元の読み出し積算量１１６０バイト＋（読み出しフレーム量０バイト−読み出し基準値８４０バイト）＝３２０バイトとなる。
【００４９】
１１周期目は、逐次スケジューラ３２によりフレームが蓄積されたキューバッファ＃８が選択され、５００バイトフレームが１つ読み出される。また調整スケジューラ３４は、（蓄積フレーム量＋読み出し積算量）が８４０バイト以上となるキューバッファを検索して同じキューバッファ＃８を選択する。このときキューバッファ＃８では、読み出し基準値８４０バイト−元の読み出し積算量６６０バイト−逐次スケジューラ３２による読み出し量５００バイト＜０となるため、調整スケジューラ３４はフレームの読み出しをスキップする。キューバッファ＃８の読み出し積算量は、元の読み出し積算量６６０バイト＋逐次スケジューラ３２による読み出し量５００バイト＋（調整スケジューラ３４による読み出しフレーム量０バイト−読み出し基準値８４０バイト）＝３２０バイトとなる。
【００５０】
１２周期目は、逐次スケジューラ３２によりフレームが残存するキューバッファ＃９が選択され、５００バイトフレームが１つ読み出される。また調整スケジューラ３４は、（蓄積フレーム量＋読み出し積算量）が８４０バイト以上となるキューバッファを検索して同じキューバッファ＃９を選択する。このときキューバッファ＃９では、読み出し基準値８４０バイト−元の読み出し積算量６６０バイト−逐次スケジューラ３２による読み出し量５００バイト＜０となるため、調整スケジューラ３４はフレームの読み出しをスキップする。キューバッファ＃９の読み出し積算量は、元の読み出し積算量６６０バイト＋逐次スケジューラ３２による読み出し量５００バイト＋（調整スケジューラ３４による読み出しフレーム量０バイト−読み出し基準値８４０バイト）＝３２０バイトとなる。
【００５１】
１３周期目は、逐次スケジューラ３２によりフレームが残存するキューバッファ＃１０が選択され、５００バイトフレームが１つ読み出される。また調整スケジューラ３４は、（蓄積フレーム量＋読み出し積算量）が８４０バイト以上となるキューバッファを検索して同じキューバッファ＃１０を選択する。このときキューバッファ＃１０では、読み出し基準値８４０バイト−元の読み出し積算量６６０バイト−逐次スケジューラ３２による読み出し量５００バイト＜０となるため、調整スケジューラ３４はフレームの読み出しをスキップする。キューバッファ＃１０の読み出し積算量は、元の読み出し積算量６６０バイト＋逐次スケジューラ３２による読み出し量５００バイト＋（調整スケジューラ３４による読み出しフレーム量０バイト−読み出し基準値８４０バイト）＝３２０バイトとなる。
【００５２】
この１３回の周期において各キューバッファから読み出されたフレーム量と読み出し積算量は以下のようになる。
キューバッファ＃１  ：読み出しフレーム量８４バイト、積算量８４バイト
キューバッファ＃２  ：読み出しフレーム量８４バイト、積算量８４バイト
キューバッファ＃３  ：読み出しフレーム量８４バイト、積算量８４バイト
キューバッファ＃４  ：読み出しフレーム量１０００バイト、積算量１６０バイト
キューバッファ＃５  ：読み出しフレーム量２０００バイト、積算量３２０バイト
キューバッファ＃６  ：読み出しフレーム量２０００バイト、積算量３２０バイト
キューバッファ＃７  ：読み出しフレーム量２０００バイト、積算量３２０バイト
キューバッファ＃８  ：読み出しフレーム量２０００バイト、積算量３２０バイト
キューバッファ＃９  ：読み出しフレーム量２０００バイト、積算量３２０バイト
キューバッファ＃１０：読み出しフレーム量２０００バイト、積算量３２０バイト
【００５３】
この１３回の周期に相当する出力帯域のフレーム量は、８４０バイト×１３＝１０９２０バイトである。これを１０個のキューバッファで均等に分けると１０９２バイト／キューバッファとなる。しかし、キューバッファ＃１〜＃４は、１０９２バイトのフレームがないため、単純に逐次スケジューラ３２のみで巡回した場合、出力帯域に余剰が発生することになる。その余剰量は、１０９２バイト×４−（８４バイト×３＋１０００バイト）＝３１１６バイトとなる。通信装置１０のキューバッファ＃５〜＃１０は、１０９２バイト×６＋３１１６バイト＝９６６８バイトを公平に使用することになる。
【００５４】
上記の例では、キューバッファ＃５〜＃１０は、それぞれが格納するフレーム長が異なるにもかかわらず、読み出したフレーム量は同じであり、公平な帯域使用が実現されている。また、キューバッファ＃１〜＃４は、一度には８４０バイトに満たないフレームしか蓄積されなかったにもかかわらず、８４０バイトのフレームデータの蓄積を待つことなく、フレーム読出しが行われている。また、全体の読み出しフレーム量は１３２５２バイト、読み出し積算量は２３３２バイトとなり、前者から後者を減算すると１０９２０バイトとなって１３回分の出力帯域のフレーム量と合致している。このように、出力帯域に対しても無駄なくフレームの読み出しが行われている。
【００５５】
本実施の形態の通信装置１０によれば、逐次スケジューラ３２は各キューバッファへの巡回あたり１フレームを読み出すため、複数のキューバッファ間でのフレーム読み出し量の公平性を維持しやすくなる。また、逐次スケジューラ３２と並行して調整スケジューラ３４がフレーム読み出しを行うため、逐次スケジューラ３２が通信装置の通信速度よりも低速で動作しても出力帯域の余剰は発生しにくい。すなわち、通信装置の出力帯域を有効活用しつつ、通信装置の高速化への対応が容易になる。
【００５６】
また通信装置１０によれば、あるキューバッファにおけるフレームの読み出し積算量が大きいほど、当該キューバッファからの調整スケジューラ３４によるフレーム読み出し量を小さくする。これにより、複数のキューバッファ間でのフレーム読み出し量の公平性を一層厳密に維持しやすくなる。
【００５７】
また通信装置１０によれば、あるキューバッファにおけるフレームの読み出し積算量が所定値（例えば読み出し基準値８４０バイト）を超過する場合、当該キューバッファからの調整スケジューラ３４によるフレーム読み出しをスキップする。そして、当該キューバッファの読み出し積算量をそれまでよりも小さくする（例えば読み出し基準値８４０バイトを減算する）。これにより、次回の巡回時には当該キューバッファからの調整スケジューラ３４によるフレーム読み出しが行われやすくなり、複数のキューバッファ間でのフレーム読み出し量の公平性を一層厳密に維持しやすくなる。
【００５８】
なお、通信装置１０では、出力帯域１０Ｇｂｐｓの公平読み出しを実現するにあたり、逐次スケジューラ３２および調整スケジューラ３４において次のフレーム読み出しの対象とするキューバッファを決定するまでの時間として、１Ｇｂｐｓの最短フレーム時間である０．６７２μｓが確保されればよい。一方、従来のＷＲＲによるフレーム読み出しでは同じ０．６７２μｓ周期で次のフレーム読み出しの対象とするキューバッファを決定した場合、１Ｇｂｐｓの出力帯域しか実現できない。このように、通信装置１０で提案する技術は、従来技術と比較して、高速な出力帯域での公平読み出しを一層容易に実現可能であり、高速なインタフェースを持つ通信装置に好適である。
【００５９】
以上、本発明を実施の形態をもとに説明した。この実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００６０】
上記実施の形態の通信装置１０は、最短フレーム長を基準として各キューバッファへの巡回あたり１フレームを読み出す逐次スケジューラ３２と、読み出し基準値８４０バイト（ここでは「第１読み出し基準値」と呼ぶ。）を基準として各キューバッファへの巡回あたり１以上のフレームを読み出す調整スケジューラ３４を備えることとした。変形例として、通信装置１０は、最短フレーム長よりも大きく第１読み出し基準値よりも小さい基準値（ここでは「第２読み出し基準値」と呼ぶ。）を基準として各キューバッファへの巡回あたり１以上のフレームを読み出す１つ以上の中間スケジューラをさらに備えてもよい。
【００６１】
以下では、通信装置１０は、１つの中間スケジューラをさらに備える例を示す。なお第２読み出し基準値は、最短フレーム長と読み出し基準値の略中間値であってもよく、また読み出し基準値の半分程度の値であってもよく、ここでは４２０バイトとする。
【００６２】
中間スケジューラは、逐次スケジューラ３２と同様に動作し、各キューバッファへの巡回あたり、第２読み出し基準値４２０バイトを上回るまで１以上のフレームデータを読み出し、キューバッファの識別情報と読み出しフレーム量を積算量監視部３６へ通知する。積算量監視部３６は、逐次スケジューラ３２および中間スケジューラによる読み出し量を各キューバッファの読み出し積算量にそのまま加算する。実施の形態と同様に、調整スケジューラ３４は、読み出し積算量が大きいほど読み出し制限量を小さくし、その結果、調整スケジューラ３４による読み出しフレーム量は低減される。
【００６３】
上記実施の形態では、調整スケジューラ３４による１回の読み出し量が大きくなることがあり、言い換えれば、各キューバッファのフレームのバースト量が大きくなることがあった。この場合、通信装置１０の出力フレームを受け付ける他通信装置１２等において一度に大きなデータ量を処理する必要が生じ、他通信装置１２等の処理負荷が一時的に高まって処理の遅延を生じさせることが考えられる。本変形例によれば、逐次スケジューラ３２と調整スケジューラ３４の中間の値を基準値とする中間スケジューラを設けることにより、１周期あたりの通信装置１０の出力フレーム量を平準化させやすくなる。これにより例えば他通信装置１２における処理負荷も平準化させやすくなり、処理の遅延を生じさせにくくすることができる。
【００６４】
請求項に記載の各構成要件が果たすべき機能は、実施の形態および変形例において示された各構成要素の単体もしくはそれらの連係によって実現されることも当業者には理解されるところである。
【符号の説明】
【００６５】
１０  通信装置、  ２０  入力ポート、  ２２  出力ポート、  ２４  キューバッファ、  ２６  方路決定部、  ２８  フレーム書込部、  ３０  フレーム読出し部、  ３２  逐次スケジューラ、  ３４  調整スケジューラ、  ３６  積算量監視部。
【図１】
0005416168.tif 000002
【図２】
0005416168.tif 000003
【図３】
0005416168.tif 000004
【図４】
0005416168.tif 000005
【図５】
0005416168.tif 000006
【図６】
0005416168.tif 000007