(57)【要約】【課題】多数のユーザが接続されるネットワークにおいて、コアノード内のシェーピングを行うキューの数が、全収容ユーザ数に比べて少ない場合でも、全ユーザに対しエッジノードにおけるパケットの溢れを回避する技術を提供する。【解決手段】コアノードにおいて、パケットに含まれるパケット関連情報を抽出し、パケット関連情報と前記エッジ装置とユーザ間の回線の帯域情報に基づいて、ユーザ毎にエッジ装置におけるユーザ宛ての送信キューのキュー長の推定値である仮想キュー長を計算して保持するとともに、仮想キュー長および予め定めた条件に基づいてユーザ毎に帯域制御の要否を判断し、判断結果に基づいて、パケット中継部においてユーザ毎に該ユーザ宛てのパケットの帯域制御を行う。【選択図】  図８
2017188870.tif 000002
【特許請求の範囲】
【請求項１】
サーバから配信されるユーザ宛てのパケットをネットワークへ送信するとともにネットワークを介して受信したパケットをサーバに送信する通信装置であって、前記ユーザ宛てのパケットは、前記ネットワークのエッジに位置するエッジ装置からユーザに送信されるものであり、
通信装置は、
前記サーバと前記ネットワーク間で送受信するパケットの中継およびパケットの帯域制御を行うとともにパケットに含まれるパケット関連情報を抽出するパケット中継部と、
前記パケット関連情報と前記エッジ装置とユーザ間の回線の帯域情報に基づいて、ユーザ毎に前記エッジ装置における前記ユーザ宛ての送信キューのキュー長の推定値である仮想キュー長を計算して保持するとともに、前記仮想キュー長および予め定めた条件に基づいてユーザ毎に帯域制御の要否を判断する仮想キュー長計算部と、
前記仮想キュー長計算部における判断結果に基づいて、前記パケット中継部においてユーザ毎に該ユーザ宛てのパケットの帯域制御を行うよう前記パケット中継部および前記仮想キュー長計算部を制御する制御部とを有する通信装置。
【請求項２】
請求項１に記載の通信装置であって、前記パケット中継部は、パケット関連情報として、パケット長および宛先アドレスを抽出し、前記仮想キュー長計算部においては、前記宛先アドレスに基づいてユーザ毎に一意の識別子を設定し、該ユーザ識別子を用いてユーザを識別して前記仮想キュー長の管理および帯域制御を行うことを特徴とする通信装置。
【請求項３】
請求項１に記載の通信装置であって、ユーザ毎の帯域制御の要否の判断は、前回クリアされて以降今までの仮想キュー長の最大値である最大仮想キュー長に基づいて判断することを特徴とする通信装置。
【請求項４】
請求項１に記載の通信装置であって、ユーザ毎の帯域制御の要否の判断は、前記仮想キュー長の取りうる最大値であるリミット仮想キュー長を超えて、廃棄されると想定されるパケット数から求めた値に基づいて判断することを特徴とする通信装置。
【請求項５】
請求項１に記載の通信装置であって、ユーザ毎の帯域制御の要否の判断は、前記リミット仮想キュー長に予め設定した閾値を掛けた値に基づいて判断することを特徴とする通信装置。
【請求項６】
請求項１に記載の通信装置であって、
前記パケット中継部は、前記ユーザの全ユーザ数より少ない数のシェーパキューを有し、帯域制御が必要であると判断したユーザを前記シェーパキューに割り当てることを特徴とする通信装置。
【請求項７】
請求項６に記載の通信装置であって、
前記パケット中継部は、シェーパキューと前記ユーザ識別子と前記ユーザ識別子の宛先アドレス範囲を対応づけたシェーパキュー検索テーブルと、
前記仮想キュー長計算部は、ユーザ毎に、ユーザ識別子と前記仮想キュー長の取りうる最大値であるリミット仮想キュー長における最大仮想キュー長の割合の情報を有し、
前記シェーパキュー検索テーブルと前記リミット仮想キュー長における最大仮想キュー長の割合の情報に基づいて、前記シェーパキューに割り当てるユーザの追加削除を行うことを特徴とする通信装置。
【請求項８】
請求項２に記載の通信装置であって、
さらに、ハッシュ関数によりパケットを振り分けて割り当てる複数のシェーパキューを有し、
前記制御部は、
第１のユーザに対しては、前記ユーザ識別子を用いてユーザを識別してユーザ毎に前記仮想キュー長の管理および帯域制御を行い、第２のユーザに対しては、前記ユーザ識別子をキーとしてパケットを前記複数のシェーパキューに割り当てることを特徴とする通信装置。
【請求項９】
サーバから配信されるユーザ宛てのパケットをネットワークへ送信するとともにネットワークを介して受信したパケットをサーバに送信する通信装置における通信方法であって、前記ユーザ宛てのパケットは、前記ネットワークのエッジに位置するエッジ装置からユーザに送信されるものであり、
前記パケットに含まれるパケット関連情報を抽出し、
前記パケット関連情報と前記エッジ装置とユーザ間の回線の帯域情報に基づいて、ユーザ毎に前記エッジ装置における前記ユーザ宛ての送信キューのキュー長の推定値である仮想キュー長を計算して保持するとともに、前記仮想キュー長および予め定めた条件に基づいてユーザ毎に帯域制御の要否を判断し、
前記判断結果に基づいて、前記パケット中継部においてユーザ毎に該ユーザ宛てのパケットの帯域制御を行うことを特徴とする通信方法。
【請求項１０】
請求項９に記載の通信方法であって、パケット関連情報として、パケット長および宛先アドレスを抽出し、前記宛先アドレスに基づいてユーザ毎に一意の識別子を設定し、該ユーザ識別子を用いてユーザを識別して前記仮想キュー長の管理および帯域制御を行うことを特徴とする通信方法。
【請求項１１】
請求項９に記載の通信方法であって、ユーザ毎の帯域制御の要否の判断は、前回クリアされて以降今までの仮想キュー長の最大値である最大仮想キュー長に基づいて判断することを特徴とする通信装置。
【請求項１２】
請求項９に記載の通信方法であって、ユーザ毎の帯域制御の要否の判断は、前記仮想キュー長の取りうる最大値であるリミット仮想キュー長を超えて、廃棄されると想定されるパケット数から求めた値に基づいて判断することを特徴とする通信方法。
【請求項１３】
請求項９に記載の通信方であって、ユーザ毎の帯域制御の要否の判断は、前記リミット仮想キュー長に予め設定した閾値を掛けた値に基づいて判断することを特徴とする通信方法。
【請求項１４】
請求項９に記載の通信方法であって、
前記ユーザの全ユーザ数より少ない数のシェーパキューを有し、帯域制御が必要であると判断したユーザを前記シェーパキューに割り当てることを特徴とする通信方法。
【請求項１５】
請求項１４に記載の通信方法であって、
シェーパキューと前記ユーザ識別子と前記ユーザ識別子の宛先アドレス範囲を対応づけたシェーパキュー検索テーブルと、
ユーザ毎に、ユーザ識別子と前記仮想キュー長の取りうる最大値であるリミット仮想キュー長における最大仮想キュー長の割合の情報を有し、
前記シェーパキュー検索テーブルと前記リミット仮想キュー長における最大仮想キュー長の割合の情報に基づいて、前記シェーパキューに割り当てるユーザの追加削除を行うことを特徴とする通信方法。
【請求項１６】
請求項１０に記載の通信方法であって、
前記制御部は、
第１のユーザに対しては、前記ユーザ識別子を用いてユーザを識別してユーザ毎に前記仮想キュー長の管理および帯域制御を行い、第２のユーザに対しては、ユーザを識別せずに前記ユーザ識別子をキーとしてパケットを前記複数のシェーパキューに割り当てることを特徴とする通信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク内でバーストトラフィックなどによるパケット廃棄の検知、予測及びパケットフローの平滑化を行う通信装置及び方法に関する。
【背景技術】
【０００２】
ネットワーク内でパケットフローの帯域制御または通信品質の保証を行う技術として、例えば特許文献１および特許文献２に記載された技術がある。
特許文献１では、送信パケットをネットワーク内で各パケットのヘッダ情報に応じてそれぞれ個別の帯域を割り当てられた複数のキューグループに分類し、各キューグループ内で送信優先度別の複数のキューを形成するようにバッファメモリにキューイングする送信優先度制御装置と、バッファメモリの各キューグループから、該キューグループに割り当てられた帯域を保証しながら、送信優先度に応じて送信パケットを読み出すパケット読出し制御装置が開示されている。
【０００３】
特許文献２には、キューとして用いるバッファの容量を抑制しつつ、多数のユーザやサービスに対応するフローの通信品質を確保するために、通信パケットの受け渡しに関する受渡情報を入力値として、出力が入力に対して集約される所定の関数によって求められた値に応じて、受信した通信パケットを複数のキューのいずれかへ振り分けて格納する振分部と、キューごとに帯域を制御して、複数のキューに蓄積された通信パケットを送信のために出力する帯域制御部を備えた中継装置が開示されている。
【０００４】
また、特許文献３には、実際にはパケットを挿入せずに、キュー長だけを管理する仮想パケットキューを用いて、仮想パケットキューが保持するキュー長と廃棄条件により、実際のパケットを実パケットキューに挿入するか廃棄するかの制御を行う技術が開示されている。この文献では、廃棄条件は、複数のキューの合計キュー長に基づいて定められるという記載がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１１−３４６２４６号公報
【特許文献２】特開２０１３−３４１６４号公報
【特許文献３】特開２００５−２９５５２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
サーバからユーザに向けたトラフィックは、通信速度が速いサーバに近い回線からネットワークを経由してユーザ回線を収容するエッジノードに送られる。ユーザ回線を収容するエッジノードは、ユーザ回線行きのトラフィックを蓄積するキューを有するが、ユーザ回線はネットワーク内の回線と比較し低速であるため、キューが溢れてパケットが廃棄される場合がある。
ネットワーク内のコアノードでユーザ毎に通信パケットのシェーピングを行えば、エッジノードでのパケットのロスを少なくできる。しかしその為には、通信していないユーザも含めすべてのユーザに対してキューを設け、さらにユーザ識別の為の通信パケットのヘッダ条件とキューの帯域をコアノードに設定する必要があり、多数のユーザ、例えば１０万といった規模のユーザを収容することは困難である。
【０００７】
特許文献１または特許文献２のように、ネットワーク内のノードで通信パケットのヘッダ情報や受渡情報からテーブルの参照や所定の関数によって複数キューのいずれかへ振り分ける方式では、収容可能なユーザ数を増やすことは可能だが、複数のユーザ回線行きの通信パケットが一つのキューに入るため、ユーザ毎にきめ細かく制御することができず、ユーザ毎の公平性の管理が難しいという課題があった。
本発明は、上記課題を解決するためになされたもので、多数のユーザが接続されるネットワークにおいて、コアノード内のシェーピングを行うキューの数が、全収容ユーザ数に比べて少ない場合でも、全ユーザに対しエッジノードにおけるパケットの溢れを回避する技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために本発明においては、一例として、サーバから配信されるユーザ宛てのパケットをネットワークへ送信するとともにネットワークを介して受信したパケットをサーバに送信する通信装置であって、ユーザ宛てのパケットが、ネットワークのエッジに位置するエッジ装置からユーザに送信される場合に、通信装置において、パケットに含まれるパケット関連情報を抽出し、パケット関連情報とエッジ装置とユーザ間の回線の帯域情報に基づいて、ユーザ毎にエッジ装置におけるユーザ宛ての送信キューのキュー長の推定値である仮想キュー長を計算して保持するとともに、仮想キュー長および予め定めた条件に基づいてユーザ毎に帯域制御の要否を判断し、パケット中継部においてユーザ毎に該ユーザ宛てのパケットの帯域制御を行うようにしたものである。
【発明の効果】
【０００９】
本発明によれば、多数のユーザが接続されるネットワークにおいて、コアノード内のシェーピングを行うキューの数が、全収容ユーザ数に比べて少ない場合でも、全ユーザに対しエッジノードにおけるパケットの溢れを回避することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明を適用するネットワーク構成の一例と、本発明の一実施例におけるコアノードの構成を示す図である。
【図２】本発明の一実施例におけるコアノード内の仮想キュー長計算部の構成を示す図である。
【図３】仮想キュー長更新部内の仮想キュー長テーブルの例を示す図である。
【図４】キューを模擬する仮想キューのモデルを表す図である。
【図５】仮想キュー長の時間変化を表す図である。
【図６】パケット中継時の、仮想キュー長更新部内での仮想キュー長テーブル更新方法を説明するフローチャートである。
【図７】ＣＰＵ部からの最大仮想キュー長読み出し時の、仮想キュー長更新部内での仮想キュー長テーブル更新方法を説明するフローチャートである。
【図８】本発明の一実施例におけるコアノード内の仮想キューが溢れた場合のコアノード内の処理を説明する図である。
【図９】シェーパキューに登録するユーザの入れ替え方法を説明するフローチャートである。
【図１０】ユーザをシェーパキューに登録する処理を説明するフローチャートである。
【図１１】パケット中継部内のシェーパキュー検索テーブルとシェーパのキューを示す図である。
【図１２】仮想キュー最大占有率順ユーザ識別子テーブルの例を示す図である。
【図１３】ユーザ情報テーブルの例を示す図である。
【図１４】シェーパキュー管理情報テーブルの例を示す図である。
【図１５】本発明による監視結果に基づき、エッジノードをキュー長が長い装置に交換することで実キューの廃棄を回避することを示す図である。
【図１６】本発明の一実施例におけるコアノード内の仮想キューが溢れた場合のコアノード内の処理を説明する図である。
【発明を実施するための形態】
【００１１】
以下、実施例を図面を用いて説明する。
【実施例１】
【００１２】
図１は本発明を適用するネットワーク構成の一例と、本発明の一実施例におけるコアノードの構成を表す図である。
１は本発明を実施するコアノードであり、動画などのデータを配信する配信サーバ２１、２２から配信データが、コアノード１、コアノード１とエッジノード３１、３２の間のネットワーク１７、エッジノード３１、３２を経由し、ユーザＡ  ３１１、ユーザＢ  ３２１に中継される。ネットワーク１７は、コアノード１とエッジノード３１、３２間の中継装置を含むネットワークを表しているが、ネットワークの構成に依存し、中継装置が無く、コアノード１とエッジノード３１、３２が直結されている場合や、１個、或いは複数個の中継装置を経由する場合も有り得る。
【００１３】
配信サーバ２１、２２は複数のユーザにサービスを提供するサーバであることから、ユーザＡ  ３１１、ユーザＢ  ３２１に比べ一般的には処理能力が高く、配信サーバ２１、２２からコアノード１に繋がる回線２１１、２２１は、エッジノード３１からユーザＡ  ３１１に繋がる回線３１１１、エッジノード３２からユーザＢ  ３２１に繋がる回線３２１１よりも一般的には速い回線が使用される。例えば、配信サーバ２１、２２に繋がる回線２１１、２２１は１０Ｇｂｐｓの速い回線が使用され、ユーザＡ  ３１１、ユーザＢ  ３２１に繋がる回線３１１１、３２１１は、それぞれ１００Ｍｂｐｓ、１Ｇｂｐｓなど、遅い回線が使用される。
【００１４】
配信サーバ２１、２２に繋がる回線２１１、２２１が、ユーザＡ  ３１１、ユーザＢ  ３２１に繋がる回線３１１１、回線３２１１よりも速い回線で、配信サーバ２１、２２からユーザＡ  ３１１、ユーザＢ  ３２１にパケットが連続して送られる場合に、配信サーバ２１、２２に繋がる回線２１１、２２１の速度で送られ、ユーザＡ  ３１１に繋がる回線３１１１行きのエッジノード３１内のキュー３１１２、ユーザＢ  ３２１に繋がる回線３２１１行きのエッジノード３２内のキュー３２１２が溢れる場合がある。
【００１５】
図２以降では、このエッジノード内のキュー３１１２、３２１２の溢れをコアノード１内で検知する方法及び検知する為の構成、及び検知後にエッジノード内のキューの溢れを回避する方法及び回避する為の構成を説明する。
図２は、本発明の一実施例におけるコアノード内の仮想キュー長計算部１２の構成を示す図である。
図１のパケット中継部１１がパケットの中継を行う毎に、パケット中継部１１から仮想キュー長計算部１２に中継を行ったパケットに関連するデータであるパケット関連データ１４が送られる。
【００１６】
パケット関連データのうち、宛先アドレス１４１がユーザ識別検索部１２１に送られ、ユーザ識別検索部１２１は宛先アドレスからユーザを識別し、ユーザ毎に一意のユーザ識別子１２３を出力する。ユーザ識別子１２３は、仮想キュー長更新部１２２に送られる。  パケット関連データのうち、パケット長１４２が仮想キュー長更新部１２２に送られる。仮想キュー長更新部１２２は、ユーザ識別検索部から出力されたユーザ識別子１２３とパケット長１４２に基づきユーザ毎の仮想キュー長を格納したテーブルである仮想キュー長テーブル１２２２内の該当するユーザの仮想キュー長を更新する。また、仮想キュー長計算部１２は、仮想キュー長の今までの最大値を示す最大仮想キュー長を保存している。ＣＰＵ部１３がアクセスインタフェース１５経由で仮想キュー長の今までの最大値を示す最大仮想キュー長を読み出した際に、仮想キュー長計算部１２は、最大仮想キュー長リードクリアモードレジスタ１２２２の設定値により、最大仮想キュー長をクリアするか否かの動作を切り替えるようにする。
【００１７】
図３は仮想キュー長更新部１２２内の仮想キュー長テーブル１２２１の例を示す図である。
仮想キュー長テーブル１２２１は、ユーザ識別子１２２１１をインデクスとし、テーブルの要素として、仮想キュー長の更新時刻１２２１２、仮想キュー長１２２１３、仮想キュー長の今までの最大値を示す最大仮想キュー長１２２１４、仮想キューの出力帯域１２２１５、仮想キュー長の取り得る最大値であるリミット仮想キュー長１２２１６、パケット中継時に更新後の仮想キュー長がリミット仮想キュー長を超えて仮想キューに積めなかったパケットの数を示す廃棄統計１２２１７、パケット中継時に仮想キューに積めたパケットの数を示す中継統計１２２１８から構成される。
【００１８】
当該ユーザの出力帯域１２２１５、リミット仮想キュー長１２２１６は、網管理者が管理しているものであり、網管理者とユーザとの間の契約メニューに依存して値が変わる場合も有り得る。例えば安いメニューでは出力帯域が１００Ｍｂｐｓで、高いメニューでは出力帯域が１Ｇｂｐｓのような場合も有り得る。リミット仮想キュー長１２２１６は、一般的にはユーザからは判り難く、ユーザに開示する場合は少ないと考えられる。パケットの廃棄が頻発しているユーザに対しては、エッジノード３１、３２を、ユーザ行きのキュー３１１２、３２１２がより長い装置に置き換える、或いはキュー３１１２、３２１２が長いネットワークインタフェースカードをエッジノード３１，３２に入れることにより、当該ユーザ宛のパケットの廃棄を回避することができる。そのような場合、ユーザ毎にリミット仮想キュー長が異なる場合も有り得る。
【００１９】
図４は、図３に示す仮想キュー長テーブル１２２１内の仮想キュー長１２２１３を更新するための仮想キューのモデルを表す図である。
仮想キューは、仮想キューに積まれているパケットデータの量を表す仮想キュー長によりエッジノードの実キュー長を模擬するものである。ユーザ宛てのパケット中継時に、当該ユーザの仮想キューの仮想キュー長の値に、中継するパケットのパケット長１４２を加算することでパケットが積まれる状態を模擬し、出力帯域１２２１５から求められる時間あたりのパケット出力量に基づいて、時間の経過と共に仮想キュー長の値を減算することでパケットが引き抜かれる状態を模擬することで、エッジノードにおける実キュー長の推定値を求める、というモデルである。仮想キュー長として取り得る最大値をリミット仮想キュー長１２２１６として設定しておく。仮想キューでは仮想キューの長さは管理するがパケットデータ自体は持たない為、パケットデータを保持しておく為のメモリは不要である。
【００２０】
図５は、図４に示す仮想キューの仮想キュー長１２２１３の時間変化を表す図である。
図５では前回時刻１２２１２１にパケットを中継した後、現時刻１２２１２２に再度パケットを中継したときの仮想キュー長の時間変化を表している。前回時刻１２２１２１ではパケット長１４２分だけ仮想キュー長１２２１３が増加する。現時刻１２２１２２では、前回時刻１２２１２１から現時刻１２２１２２までの時間に仮想キューからパケットが出力された量である帯域＊（現時刻−前回時刻）だけ仮想キュー長が減少した状態からパケット長１４２分だけ仮想キュー分だけ仮想キュー長１２２１３が増加する。
【００２１】
図６は、パケット中継時の、仮想キュー長更新部１２２内での仮想キュー長テーブル更新方法を示すフローチャートである。
図１のパケット中継部１１がパケットを中継し、仮想キュー長計算部１２がパケット関連データ１４を受け取ったときに、仮想キュー長計算部１２は図６のフローチャートのＳＴＡＲＴ  Ｓ５００以下を実行する。Ｓ５０１でパケット到着直前の仮想キュー長を（数１）      パケット到着直前の仮想キュー長＝
仮想キュー長−（現時刻−更新時刻）＊帯域により計算する。次にＳ５０２で
（数２）      パケット到着直前の仮想キュー長＜０
か否かを判定する。ＹＥＳの場合は、パケット到着時点で既に仮想キューが掃けていたことを意味するので、Ｓ５０３で
（数３）      パケット到着直前の仮想キュー長＝０
を実行する。その後、Ｓ５０４で
（数４）      仮想キュー長＝パケット到着直前の仮想キュー長＋パケット長
により、仮想キュー長にパケット長を加算し、Ｓ５０５で
（数５）      仮想キュー長＞リミット仮想キュー長
か否かを判定する。ＹＥＳの場合は、当該パケットを仮想キューに積んだ場合にリミット仮想キュー長を超える。この場合、当該パケットが仮想キューに積めず、Ｓ５０６で
（数６）      仮想キュー長＝パケット到着直前の仮想キュー長
のように、仮想キュー長には当該パケットのキュー長を加算せず、Ｓ５０７で仮想キューに積めずに廃棄したパケット数を示す仮想キュー廃棄統計を１つインクリメントする。
【００２２】
Ｓ５０５の判定結果がＮＯの場合は、当該パケットを仮想キューに積んだ場合にリミット仮想キュー長を超えないので、当該パケットを仮想キューに積むことができ、仮想キュー長はＳ５０４、数４に示すように、仮想キュー長に当該パケットのパケット長を加算する。パケットを仮想キューに積むことができた場合には、さらにＳ５０８で
（数７）      最大仮想キュー長＝ＭＡＸ（最大仮想キュー長、仮想キュー長）
のように仮想キュー長の今までの最大値を示す最大仮想キュー長を更新し、Ｓ５０９で仮想キュー長に積めたパケット数を示す仮想キュー中継統計を１つインクリメントする。
【００２３】
最後に５１０で更新時刻を
（数８）      更新時刻＝現時刻
のように更新し、５１１で本フローチャートが終了する。
【００２４】
図７は、図１のＣＰＵ部１３からの最大仮想キュー長１２２１４読み出し時の、仮想キュー長更新部１２２内での仮想キュー長テーブル１２２１更新方法を示すフローチャートである。
図１のＣＰＵ部１３から最大仮想キュー長１２２１４を読み出すときに、仮想キュー長計算部１２は図７のフローチャートのＳＴＡＲＴ  Ｓ５２０以下を実行する。このフローチャートは、図２の最大仮想キュー長リードクリアモードレジスタ１２２２の設定値が、クリアを示す設定値となっている場合に実行される。ここでは、例えば最大仮想キュー長リードクリアモードレジスタ１２２２の設定値が１のときにクリアする設定であるとする。最大仮想キュー長リードクリアモードレジスタ１２２２の設定値が１に設定されていた場合、最大仮想キュー長１２２１４読み出し時にも最大仮想キュー長１２２１４を更新する必要があることから、仮想キュー長計算部１２は図７のフローチャートに示す処理を実行する。
【００２５】
Ｓ５２１で最大仮想キュー長の読み出し値として、仮想キュー長テーブル１２２１内の最大仮想キュー長１２２１４を返すようにする。
Ｓ５２２で仮想キュー長を
（数９）      仮想キュー長＝仮想キュー長−（現時刻−前回更新時刻）＊帯域
により計算し、Ｓ５２３で
（数１０）      仮想キュー長＜０
か否かを判定する。ＹＥＳの場合は、最大仮想キュー長読み出し時点で既に仮想キューが掃けていたことを意味するので、Ｓ５２４で
（数１１）      仮想キュー長＝０
を実行する。その後、Ｓ５２５で最大仮想キュー長リードクリアモードか否かの判定を行ない、ＹＥＳの場合、リードクリアモードなので、Ｓ５２６で
（数１２）      最大仮想キュー長＝仮想キュー長
を実行する。これは、最大仮想キュー長がクリアされた後、直ぐに最大仮想キュー長に現在の仮想キュー長の値が入ったとみなした場合の値である。ＮＯの場合はリードクリアモードではないので、最大仮想キュー長の値は保存される。
最後にＳ５２７で更新時刻を
（数１３）      更新時刻＝現時刻
のように更新し、Ｓ５２８で本フローチャートを終了する。
【００２６】
ここで、ＣＰＵ部１３から仮想キュー長１２２１３でなく、最大仮想キュー長１２２１４を読んでいるのは、仮想キュー長１２２１３そのものよりも、仮想キュー長の今までの最大値である最大仮想キュー長１２２１４の方が、仮想キューの溢れの判定に、より有用だからである。仮想キュー長１２２１３は、時間と共に激しく変化することが予想され、ＣＰＵ部１３から読んだときに、たまたま小さい値だった場合、溢れる可能性を過小評価してしまう危険性があるが、最大仮想キュー長１２２１４は、仮想キュー長１２２１３の今までの最大値であることから、溢れる可能性を、より正確に評価できる。
【００２７】
さらに、最大仮想キュー長リードクリアモードレジスタ１２２２の値をリード時にクリアするモードに設定した場合には、ＣＰＵ部１３から最大仮想キュー長１２２１４を読む度に最大仮想キュー長１２２１４がクリアされるので、ＣＰＵ部１３から読んだ値は、前回読んだときから今回読んだときまでの間の最大値になる。これを周期的に繰り返すことにより、ＣＰＵ部１３から、仮想キュー長の最大値の時間変化を、最大値として取り込まないタイミングも無く、複数の重複する期間に同じ最大値を複数回取り込むことも無く、把握することができる。
【００２８】
図８は、コアノード１内の仮想キューが溢れたときに、溢れたユーザのパケットだけコアノード内のシェーパキューに積むことにより実キューの廃棄を回避する動作を説明する図である。
シェーパキューとは１１１のように出力側に出力帯域制御部１１２を持つキューのことである。パケット中継部１１内には１１１のように出力帯域制御部１１２を持つキューが複数あり、その他に出力帯域制御部を持たないキュー１１３があり、各キューの出力のアービトレーションを１１４で行い、回線１６にパケットを出力する。
仮想キュー長計算部１２で、あるユーザ、例えばユーザＡの仮想キューの溢れが発生した場合に、ユーザＡ行きのパケットをシェーパキュー１１１に積むようにすることで、ユーザＡ行きのパケットが出力帯域制御部１１２により帯域制限され、エッジノード３１内のユーザＡ行きの実キュー３１１２での廃棄を回避することができる。
【００２９】
図９は、図８に示すパケットの廃棄の回避方法を実現する為の、シェーパに登録するユーザの入れ替え方法を示すフローチャートである。
図９に示す処理はコアノード１内のＣＰＵ部１３で実行される。
図９の処理は装置の起動後、ＳＴＡＲＴ  Ｓ５４０を開始し、Ｓ５４１からＳ５５１までの処理を繰り返すものである。
Ｓ５４１からＳ５５１までの間のループ内で、Ｓ５４２からＳ５５０までの間で、全ユーザ識別子につき、繰り返し処理を実行する。
Ｓ５４３は、あるユーザに対する処理を実行後に次のユーザの処理を行うまでの間隔を意味し、例えば待ち時間を１ｍｓとし、全ユーザ数を10万ユーザとすると、Ｓ５４２からＳ５５０までのループを抜ける時間、即ち全ユーザの処理を行うのに掛かる時間は１００秒となる。この場合、あるユーザのパケットの廃棄が発生し始めてから１００秒以内に当該ユーザ行きのトラフィックがシェーパキューに登録されるようになる。
Ｓ５４４では、最大仮想キュー長リードクリアモードレジスタの値を、最大キュー長をクリアするモードに設定し、ＣＰＵ部１３から当該ユーザ識別子の最大仮想キュー長、廃棄統計値を読む。
【００３０】
Ｓ５４５では、当該ユーザをシェーパキューに登録済みか否かを判定する。ここで、「当該ユーザをシェーパキューに登録済」とは、シェーパのある一つのキューを確保し、当該キューに当該ユーザの帯域を設定し、当該ユーザ宛の宛先アドレス範囲を、後述する図１１のシェーパキュー検索テーブル１１７に登録しているという意味である。
ＮＯ（当該ユーザをシェーパキューに登録済ではない）の場合、
（数１４）      仮想キュー廃棄統計増加量＝
仮想キュー廃棄統計値−前回仮想キュー廃棄統計値
により、当該ユーザの仮想キュー廃棄統計増加量を計算し、Ｓ５４７で、
（数１５）      仮想キュー廃棄統計増加量＞０
により、当該ユーザの仮想キュー廃棄統計が増加しているか否かを判定する。
【００３１】
或いは、
（数１６）      仮想キュー中継統計増加量＝
仮想キュー中継統計値−前回仮想キュー中継統計値
により、当該ユーザの仮想キュー中継統計増加量を計算し、
（数１７）      仮想キュー廃棄率＝
仮想キュー廃棄統計増加量／
（仮想キュー中継統計増加量＋仮想キュー廃棄統計増加量）
により、当該ユーザの仮想キュー廃棄率を計算し、Ｓ５４７を、
（数１８）      仮想キュー廃棄率＞廃棄率閾値
という条件にし、当該ユーザをシェーパキューに登録するか否かを判定することもできる。ここで、廃棄率閾値として、例えば１０のマイナス６乗程度と小さくすることで、廃棄が極少量のユーザはシェーパキューに登録されないようにし、シェーパキューに登録されるユーザ数が上限に達するのを防止することもできる。
【００３２】
或いは、Ｓ５４７を、当該ユーザの仮想キュー廃棄統計が増加しているか否かで判定する代わりに、
（数１９）      最大仮想キュー長＞リミット実キュー長＊判定閾値
という条件で判定し、
（数２０）      判定閾値＜１
とすることで、溢れが発生する前に仮想キューが伸びてきていて溢れる可能性が高いユーザを検出することも可能である。この条件で判定することで、実キューの溢れが発生する前に当該ユーザのパケットをシェーパキューに登録することができ、実キューの溢れを未然に防ぐことができる。
【００３３】
また、仮想キュー長は、実キュー長を模擬するものであり、仮想キューの溢れと実キューの溢れは正確に一致するものではないことから、模擬の正確性のマージンとして、例えば５０％を越えたら実キューが溢れる危険性が高いと判断してシェーパキューに積む、という方法を採ることで、実キューの廃棄を、より確実に回避することができる。
【００３４】
Ｓ５４７でＹＥＳの場合、当該ユーザ行きのパケットが仮想キューから溢れていることを意味するので、５４８で当該ユーザをシェーパキューに登録する。
Ｓ５４５でＹＥＳの場合、当該ユーザは仮想キューに登録済みであり、Ｓ５４９で仮想キュー最大占有率順ユーザ識別子テーブル内の当該ユーザの順位のみを更新する。ここで、仮想キュー最大占有率とは、当該ユーザの仮想キュー長リミット仮想キュー長に対して今迄どのくらいの割合まで最大仮想キュー長が伸びたことがあるかを示す値であり、
（数２１）      仮想キュー最大占有率
＝最大仮想キュー長／リミット仮想キュー長
で計算される。この値が１００％にまで到達した場合、仮想キューで廃棄が発生している、と判断できる。
【００３５】
図１０は、図９内のサブルーチン「当該ユーザをシェーパキューに登録」Ｓ５４８の処理を示すフローチャートである。
Ｓ５４８００で本サブルーチンに入る。
Ｓ５４８０１で、シェーパキューに空きがあるか否かを判定する。
ＮＯの場合、シェーパキューに空きが無いので、Ｓ５４８０２に示すシェーパキューに既に登録されている他のユーザを追い出す処理を行った後に、当該ユーザを登録するようにする。
Ｓ５４８０２は、既に登録されている他のユーザを追い出し空きを作る処理であり、後述する図１２に示す仮想キュー最大占有率順ユーザ識別子テーブルから最大占有率の最も小さいユーザを選択し、仮想キュー最大占有率順ユーザ識別子テーブル、及び、シェーパキューから削除する。
Ｓ５４８０３では、シェーパキューに空きがあるか、空きを作った後なので、当該ユーザを図１２の仮想キュー最大占有率順ユーザ識別子テーブル、及び、シェーパキューに登録し、Ｓ５４８０６で本サブルーチンを抜ける。
【００３６】
図１１は、図８に示すパケットの廃棄の回避方法を実現する為の、パケット中継部１１内のシェーパキュー検索テーブル１１７とシェーパのキューを示す図である。
１１７は、パケット中継部１１内で、パケット中継時にシェーパキューに積むか否かの判定結果、及び、シェーパに積む場合のキュー番号を出力するための検索テーブルである。
パケット中継部１１でパケット中継を行う際、宛先アドレスを検索キーとして、シェーパ検索テーブル１１７を検索する。当該パケットの宛先アドレスが、シェーパキュー検索テーブル１１７に登録されている何れかのエントリの宛先アドレス範囲に入っていた場合、当該エントリのシェーパキュー番号に対応するシェーパキューに当該パケットを積むようにする。ここで、シェーパキュー検索テーブル１１７のインデクスとして図１１の例では宛先アドレス範囲を用いているのは、サブネットアドレスを格納することを一例として想定しているためである。
【００３７】
図１１の例では、宛先アドレスを検索キーとしてシェーパ検索テーブル１１７を検索した結果、例えば、ユーザＡ宛のパケットが宛先アドレス範囲Ａに入った場合、当該パケットをシェーパキュー番号１００のキュー１１１に積み、ユーザＣ宛のパケットが宛先アドレス範囲Ｃに入った場合、シェーパキュー番号２００のキュー１１５に当該パケットを積むようにする。
【００３８】
当該パケットの宛先アドレスが、シェーパキュー検索テーブル１１７に登録されているどのエントリの宛先アドレス範囲にも入っていなかった場合、シェーピングを行なわないキューに当該パケットを積むようにする。
例えば、ユーザＢ宛のパケットがシェーパキュー検索テーブル１１７のどのエントリの宛先アドレス範囲にも入っていなかった場合、シェーピングを行なわないキュー１１３に当該パケットを積むようにする。
【００３９】
図１２は、図９、図１０に示す処理に使用する仮想キュー最大占有率順ユーザ識別子テーブルの例である。この例では１０ユーザについては仮想キュー最大占有率が１００％に達し、仮想キューが溢れているが、１１番目以降のユーザは仮想キュー最大占有率が１００％に達していないことを示している。各ユーザ宛のトラフィックは時間的に変化するので、過去に仮想キューの溢れが発生しシェーパキューに登録されたユーザでも、時間が経つとトラフィックが減る場合がある。そこで常に仮想キュー最大占有率順にユーザをソートしておくことで、シェーパキューに空きが無くなった時点で、最大占有率が最も小さく、シェーパキューから追い出しても廃棄が発生する可能性が最も低いユーザから順に追い出すことで、全ユーザの実キューでの廃棄を、より確実に回避することができる。
【００４０】
図１３、及び、図１４にＣＰＵ部１３がコアノード１内でユーザ、及び、シェーパのキューの管理を行うのに必要な、図１２以外のテーブルの例を示す。ここで示した例は一例であり、必ずしもこの通りのテーブル構成でなくても良い。
図１３は、ＣＰＵ部１３がコアノード１内でユーザの管理を行う為のユーザ情報テーブルである。ＣＰＵ部１３はユーザ情報テーブルから、図３の仮想キュー長テーブル１２２１の各ユーザ識別子のエントリに出力帯域１２２１５、リミット仮想キュー長１２２１６を設定し、図１１のシェーパキュー検索テーブル１１７の各インデクスのエントリに宛先アドレス範囲、ユーザ識別子、シェーパキュー番号を設定する。
図１４は、ＣＰＵ部１３がコアノード１内でシェーパのキュー１１１、１１３、１１５の管理を行う為のシェーパキュー管理情報テーブルである。ＣＰＵ部１３はシェーパキュー管理情報テーブルから、シェーパキュー番号をインデクスとして図１１のシェーパキュー検索テーブル１１７に登録する為のインデクス、図１２の仮想キュー最大占有率順ユーザ識別子テーブルのインデクスを得る。
【００４１】
或いは、図９、図１０に示した処理をコアノード１内で自動的に行う代わりに、ユーザ毎の仮想キューの状態を網管理者に伝え、網管理者がパケット中継部１１内のシェーパキューへのユーザの登録を、構成定義で行うようにすることもできる。この方法は、網管理者の管理ポリシーが、シェーパキューに登録されるユーザが自動的に入れ替わるよりも、シェーパキューに登録するユーザを管理したい、というポリシーの場合には適している。
ユーザ毎の仮想キューの状態の網管理者への伝え方としては、例えば、下記のような表形式で伝えることができる。表示順としては、例えば、仮想キュー最大占有率の大きい順にソートし、仮想キュー最大占有率が１００％に達しているユーザに対しては仮想キューの廃棄があるので、仮想キュー廃棄率の大きい順に更にソートして表示すると、網管理者から、廃棄が発生しているユーザ、或いは廃棄が発生する可能性が高いユーザが判り易い。また、上記ソート順番で、表示するユーザ数を指定して上位のユーザのみ表示するようにしても良い。
表１  仮想キュー状態表示形式
−−−−−−−−−−−−−−−−−−−−
仮想キュー    仮想キュー    ユーザ
最大占有率    廃棄率        識別子
−−−−−−−−−−−−−−−−−−−−
１００％        １０％      ユーザＡ
１００％          １％      ユーザＣ
１００％      ０．１％        ：
９９％          ０％        ：
８０％          ０％        ：
５０％          ０％        ：
２０％          ０％        ：
５％          ０％        ：
１％          ０％        ：
０．１％          ０％        ：
−−−−−−−−−−−−−−−−−−−−
表１に、仮想キュー廃棄統計増加量も併せて表示するようにしても良い。
また、ユーザ識別子だけでなく、当該ユーザが属するエッジノード、及び、エッジノード内でユーザが繋がる回線の番号、回線速度などのユーザの契約形態の情報も併せて表示するようにしても良い。
【００４２】
図１５は、仮想キュー監視サーバ２３でコアノード１内の仮想キュー長を監視することでエッジノード３１、３２における実ユーザキューのパケット廃棄状況を推定し、必要に応じて人手でエッジノード３１、３２をキュー長が長い装置に交換することで実キュー３１１２、３２１２の廃棄を回避することを示す図である。
仮想キュー長計算部１２で計算された、図３に示す仮想キュー長テーブルの情報をＣＰＵ部１３から読み出し、仮想キュー監視サーバ２３から最大仮想キュー長、仮想キュー廃棄統計、仮想キュー中継統計を含む統計情報を読み出すことにより、仮想キューで廃棄が発生しているユーザを把握し、廃棄が発生しているユーザ、例えばユーザＡを収容するエッジノード３１をキューが長い装置に交換する、或いはエッジノード３１のネットワークインタフェースカードをキューが長いネットワークインタフェースカードに交換することにより廃棄を回避することができる。
【００４３】
更に、コアノード内のユーザ毎のリミット仮想キュー長を、エッジノード内の実キュー長として取り得る最大値（以後、リミット実キュー長と呼ぶ）より長くすることにより、溢れの程度を把握することができる。例えば、リミット仮想キュー長をリミット実キュー長の４倍程度にしておき、仮想キュー長の最大値がリミット実キュー長の２倍まで達していた場合、実キュー長を増やすことにより廃棄を回避する場合、２倍まで増やす必要があることが判る。
【００４４】
また、コアノード内でユーザ毎に、複数の送信帯域に対して仮想キュー長を同時に計算することによっても、溢れの程度を把握することができる。例えば、エッジノードに繋がる、あるユーザの回線の実送信帯域が１００Ｍｂｐｓの場合に、エッジノードで当該ユーザに対し、１００Ｍｂｐｓ、２００Ｍｂｐｓ、４００Ｍｂｐｓで同時に仮想キュー長を計算し、１００Ｍｂｐｓでは仮想キュー長がリミット仮想キュー長に達し、２００Ｍｂｐｓ以上では達していなかった場合、エッジノードの当該ユーザ行きの回線を増速することにより廃棄を回避する場合、２００Ｍｂｐｓまで増速する必要があることが判る
コアノードではユーザ毎の仮想キュー長を模擬するが、ユーザ毎の実キューを設ける必要が無いことから、実キューを設ける為に必要となるメモリが不要になり、多くのユーザ、例えば１０万程度のユーザの仮想キュー長を模擬することができる。
ネットワーク内のコアノードでユーザ回線が繋がるエッジノード内のユーザ回線行きのキューのキュー長をコアノードで模擬するようにすることで、どのエッジノードでキューを伸ばすなどの増強が必要かをコアノードで集中して把握することができる。
これにより、エッジノードで最大キュー長などを覚えておき、集計装置から集計できるインタフェースを設ける必要が無くなり、コアノードに比べて大量に必要となるエッジノードに安価な装置を使用することができる。
更に、コアノードで模擬したユーザ毎の仮想キュー長が、リミット仮想キュー長に達した場合に、当該ユーザ行きのパケットをコアノード内でシェーピングを行う複数のキューの内の一つに積むようにすることで、シェーピングを行うキューの数が、全収容ユーザ数、例えば10万ユーザに比べて少ない、例えば１万個の場合でも、エッジノードで実キューの溢れが発生する可能性があるユーザが１万ユーザ以内の場合には、全ユーザに対し、エッジノードでのパケットの溢れを回避することができる。
【実施例２】
【００４５】
次に、第二の実施例について説明する。
図１６は、コアノード１内の仮想キューが溢れたときに、溢れたユーザのパケットだけコアノード内のシェーパキューに積むことにより実キューの廃棄を回避する動作を説明する図である。
第二の実施例では、コアノード内にシェーパキューを複数備えており、ユーザ毎のシェーパキューに登録されていないユーザ行きのパケットを、複数のシェーパキューにハッシュで振り分け、積む構成を示す。
第一の実施例の説明に用いた図８に示すコアノード１では、ユーザ毎のシェーパキューに登録されていないユーザ行きのパケットは、すべて出力帯域制御部を持たないキュー１１３に積んでいた。
【００４６】
これに対し、第二の実施例を説明する図１６のコアノード１は、複数のシェーパキューを備える点を特徴とする。第二の実施例においては、ユーザ毎のシェーパキューに登録されたユーザ行きのパケットはユーザ毎の複数のシェーパキュー１１１０のいずれかに積み、その他のユーザ行きのパケットは、振分部１１３１でユーザ識別情報をハッシュキーとしてハッシュ関数で得られたハッシュ値によりパケットを複数のシェーパキュー１１３２０に振り分け、複数のシェーパキュー１１３２０のいずれかに積むようにする。
【００４７】
図１６において、ユーザＡ  ３１１行きのパケットの通過経路が、ユーザ毎のシェーパキューに登録されたユーザ行きのパケットの通過経路の例である。ユーザＡ行きのパケットはユーザ毎のシェーパキュー１１１に積まれ、出力帯域制御部１１２により出力帯域制御が行われて出力される。ユーザＢ  ３２１行きのパケットの通過経路が、その他のユーザ行きのパケットの通過経路の例である。ユーザＢ行きのパケットは振分部１１３１によりハッシュで振り分けた複数のシェーパキュー１１３２０の一つであるキュー１１３２に積まれ、出力帯域制御部１１３３により出力帯域制御が行なわれて出力される。
【００４８】
キュー１１１にはユーザＡ行きのパケットのみが積まれるので、キュー１１１の出力帯域制御部１１２で制御する帯域はユーザＡに繋がる回線３１１１の帯域に対応して決められる。一方、キュー１１３２にはユーザＢ行きだけでなく複数のユーザ行きのパケットが積まれるので、キュー１１３２の出力帯域制御部１１３２０で制御する帯域は、ユーザＢに繋がる回線３２１１の帯域に対応しては決められない。キュー１１３２の出力帯域制御部１１３２０で制御する帯域は、一般的にはユーザＢに繋がる回線３２１１の帯域よりも大きい値にされる。
【００４９】
第二の実施例によれば、ユーザ毎の帯域制御の要否の判断に時間が掛かるので、あるユーザ行きのトラフィックが急に増えた場合に、トラフィックが増えてからユーザ毎のシェーパキューへ登録するまでの間、エッジノードの実キューで発生する可能性のある溢れを防止することができる。または、溢れを少なくすることができる。
また、第一の実施例のようにシェーパキューが一つの場合には、あるユーザ行きのトラフィック量が変化したときに、他のユーザ行きのトラフィックに対し、揺らぎが増えるなどの影響を与えるが、第二の実施例においては、ハッシュによりキューを分けているので、あるユーザ行きのトラフィック量が変化したときに、他のキューに積まれるユーザ行きのトラフィックには影響を与えないようにできる。
【００５０】
なお、本発明は上述した実施例に限定されるものではなく、様々な変形例も可能である。また、本発明は上述した実施形態に限られるものではなく、種々なる態様で実施できることは勿論である。また、上記の各構成、機能、処理等は、それらの一部又は全部を、ハードウェアで実現してもよく、ソフトウェアで実現してもよい。
【符号の説明】
【００５１】
１…コアノード、１１…パケット中継部、１２…仮想キュー長計算部、１３…ＣＰＵ部、１４…パケット関連データ、１５…アクセスインタフェース２１…配信サーバ、２２…配信サーバ、３１…エッジノード、３２…エッジノード、３１１…ユーザＡ、３２１…ユーザＢ、３１１２…ユーザＡ行きの実キュー、３２１２…ユーザＢ行きの実キュー、１２１…ユーザ識別検索部、１２２…仮想キュー長更新部、１２２１…仮想キュー長テーブル、１２２２…最大仮想キュー長リードクリアモードレジスタ、１４２…パケット長、１２２１３…仮想キュー長、１２２１５…出力帯域、１２２１６…リミット仮想キュー長、１１１…シェーパキュー、１１２…出力帯域制御部、１１３…出力帯域制御部を持たないキュー、１１４…キューの出力の調停部、１１５…シェーパキュー、１１６…出力帯域制御部、１１７…シェーパキュー検索テーブル、２３…仮想キュー監視サーバ、１１３１…振分部、１１１０…ユーザ毎の複数のシェーパキュー、１１３２０…ハッシュ関数により振り分け先を決定する複数のシェーパキュー。
【図１】
2017188870.tif 000003
【図２】
2017188870.tif 000004
【図３】
2017188870.tif 000005
【図４】
2017188870.tif 000006
【図５】
2017188870.tif 000007
【図６】
2017188870.tif 000008
【図７】
2017188870.tif 000009
【図８】
2017188870.tif 000010
【図９】
2017188870.tif 000011
【図１０】
2017188870.tif 000012
【図１１】
2017188870.tif 000013
【図１２】
2017188870.tif 000014
【図１３】
2017188870.tif 000015
【図１４】
2017188870.tif 000016
【図１５】
2017188870.tif 000017
【図１６】
2017188870.tif 000018