説明

輻輳制御プログラム、情報処理装置および輻輳制御方法

【課題】効率的なデータ送信を実行することを課題とする。
【解決手段】サーバは、送信対象であるデータをSキュー1に格納し、Sキュー1に格納されるデータを読み出して送信する。サーバは、輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先以外のデータをSキュー2に格納する。サーバは、輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先のデータをDキューに格納する。サーバは、Sキュー1に格納されるデータが送信されてから、Sキュー2に格納されるデータを読み出して送信する。サーバは、Sキュー1に格納されるデータが送信されてから、Dキューに格納されるデータを読み出し、帯域を制御して送信する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データの輻輳制御に関する。
【背景技術】
【0002】
従来、サーバやレイヤ2スイッチ(Layer 2 Switch)などで形成されるネットワークで、通信要求の過多等により通信が成立しにくくなる状態である輻輳が発生した場合、サーバでは、輻輳の悪化を防止する。例えば、サーバは、輻輳の悪化を防止する手法として、パケットやフレームなどのデータをキュー(Queue)から送信する際の帯域幅を変更するレート調整を実行する。
【0003】
図18と図19に示した例を用いてサーバが実行するレート調整について具体的に説明する。図18は、1つのキューでデータを送信するサーバ例を示す図であり、図19は、宛先アドレスごとにキューを設けてデータを送信するサーバの例を示す図である。
【0004】
図18に示すサーバ1は、宛先アドレスA、B、Cのそれぞれのデータを1つのキューに格納し、格納した順番でレイヤ2スイッチ2に送信する。図19に示すサーバ1は、宛先アドレスA用のキュー、宛先アドレスB用のキュー、宛先アドレスC用のキューをそれぞれ設け、それぞれのキューにおいて格納した順番でデータをレイヤ2スイッチ2に送信する。図18および図19に示すレイヤ2スイッチ2は、サーバ1から受信した宛先アドレスAまたはCのデータを送信ポート1から送信し、宛先アドレスBのデータを送信ポート2から送信する。
【0005】
この図18と図19に示したネットワークにおいて、レイヤ2スイッチ2の送信ポート1で輻輳が発生し、サーバが輻輳を検出したとする。図18の場合、サーバ1は、輻輳が解除されるまで、1つのキューで形成される出力ポートのレート調整を実行して輻輳の悪化を防止する。また、図19の場合、サーバ1は、輻輳が悪化する原因となる宛先アドレスAおよびCのデータを出力するキューについてレート調整を実行し、輻輳に影響を及ぼさない宛先アドレスBのデータについてはレート調整を実行しない。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2001−177575号公報
【特許文献2】特開昭63−102527号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、従来技術では、効率的なデータ送信を実行できないという課題があった。
【0008】
例えば、図18の手法では、輻輳に影響を与えない宛先アドレスBのデータについてもレート調整が実行されるので、宛先アドレスBのデータの送信遅延等が発生する。したがって、図18の手法では、不要な送信遅延が発生する場合があり、効率的なデータ送信とは言い難い。
【0009】
図19の手法では、輻輳に影響を与えない宛先アドレスBのデータについてはレート調整が実行されないので、宛先アドレスBのデータの送信遅延等を回避できる。ところが、サーバ1は、データの宛先ごとにキューを設定する必要があり、キュー用に多くのメモリ容量を要する。例えば、48個のポートを有するレイヤ2スイッチ5台各々が235台のサーバに接続されており、1つのキューを4000バイトとした場合、サーバは、234×4000=936000バイトのメモリ容量を必要とする。したがって、図19の手法では、メモリ容量が大きくなり、効率的なデータ送信とは言い難い。
【0010】
1つの側面では、効率的なデータ送信を実行できる輻輳制御プログラム、情報処理装置および輻輳制御方法を提供することを目的とする。
【課題を解決するための手段】
【0011】
サーバは、送信対象であるデータを第1のキューに格納する。サーバは、第1のキューに格納されるデータを読み出して送信する。サーバは、輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先以外のデータを第2のキューに格納する。サーバは、輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先のデータを第3のキューに格納する。サーバは、第1のキューに格納されるデータが全て送信されてから、第2のキューに格納されるデータを読み出して送信する。サーバは、第1のキューに格納されるデータが全て送信されてから、第3のキューに格納されるデータを読み出し、帯域を制御して送信する。
【発明の効果】
【0012】
効率的なデータ送信を実行できる。
【図面の簡単な説明】
【0013】
【図1】図1は、実施例1に係るシステムの全体構成を示す図である。
【図2】図2は、実施例1に係るシステムにおいて輻輳が発生した場合のサーバのキュー制御例を示す図である。
【図3】図3は、L2スイッチの構成を示すブロック図である。
【図4】図4は、L2スイッチが送信する輻輳制御パケットの例を示す図である。
【図5】図5は、サーバの構成を示すブロック図である。
【図6】図6は、キュー領域が有する送信キューの例を示す図である。
【図7】図7は、送信キュー構成テーブルに記憶される情報の例を示す図である。
【図8】図8は、輻輳検出前の送信キュー管理テーブルに記憶される情報の例を示す図である。
【図9】図9は、輻輳検出後の送信キュー管理テーブルに記憶される情報の例を示す図である。
【図10】図10は、実施例1に係るサーバにおける輻輳検出処理の流れを示すフローチャートである。
【図11】図11は、実施例1に係る輻輳時のデータ格納処理の流れを示すフローチャートである。
【図12】図12は、実施例1に係る輻輳時のデータ送信処理の流れを示すフローチャートである。
【図13】図13は、実施例2に係るシステムにおいて輻輳が解除される前の状態例を示す図である。
【図14】図14は、実施例2に係るシステムにおいて輻輳が解除された場合の制御例を示す図である。
【図15】図15は、実施例3に係るシステムにおいて複数箇所で輻輳が検出された場合の制御例1を示す図である。
【図16】図16は、実施例3に係るシステムにおいて複数箇所で輻輳が検出された場合の制御例2を示す図である。
【図17】図17は、輻輳制御プログラムを実行するコンピュータシステムの例を示す図である。
【図18】図18は、1つのキューでデータを送信するサーバ例を示す図である。
【図19】図19は、宛先アドレスごとにキューを設けてデータを送信するサーバの例を示す図である。
【図20】図20は、受信FIFOメモリと退避用FIFOメモリとを設けてパケットを送信するパケット交換機の例を示す図である。
【図21】図21は、受信FIFOメモリと退避用FIFOメモリとを設けてパケットを送信するパケット交換機において、輻輳が解除された場合の制御例を示す図である。
【発明を実施するための形態】
【0014】
以下に、開示する輻輳制御プログラム、情報処理装置および輻輳制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。そして、各実施例は、処理内容を矛盾させない範囲で、適宜組み合わせることが可能である。
【0015】
まず、上述した輻輳の悪化を防止する手法とは別に、輻輳の悪化を防止できるものの、輻輳解除後にデータの順番を担保できない例について説明する。図20は、受信FIFOメモリと退避用FIFOメモリとを設けてパケットを送信するパケット交換機の例を示す図である。
【0016】
図20に示すパケット交換機5は、受信したパケットを受信FIFOメモリに格納する。そして、パケット交換機5は、輻輳が検出されるまでは、受信FIFOメモリからパケットを読み出して出力待ちFIFOメモリに格納した後、出力待ちFIFOメモリからFIFO制御でパケットを読み出して送信する。一方、輻輳が検出された場合、パケット交換機5は、輻輳に影響を及ぼすパケットについては、受信FIFOメモリからパケットを読み出して、退避用FIFOメモリに格納して退避させる。このようにで、パケット交換機5は、輻輳に影響を及ぼすパケットの送信を抑止でき、輻輳の悪化を防止できる。
【0017】
ところが、このパケット交換機5では、輻輳解除後にデータの順番を担保できない。図21は、受信FIFOメモリと退避用FIFOメモリとを設けてパケットを送信するパケット交換機において、輻輳が解除された場合の制御例を示す図である。図21に示すパケット交換機5は、退避用FIFOメモリにパケットA3、A4が格納されている状態で輻輳が解除され、新たなパケットA5が送信対象となった例を示している。なお、パケットA3、A4、A5は、若番の順に送信すべきものとする。
【0018】
このような場合、パケット交換機5は、輻輳が解除されたので、退避用FIFOメモリに格納されるパケットA3、A4を順番に読み出して、出力待ちFIFOメモリに格納する。一方、パケット交換機5は、輻輳解除後に新たに送信対象となったパケットA5を受信FIFOメモリに格納した後、出力待ちFIFOメモリに格納する。
【0019】
このとき、退避用FIFOメモリからA3やA4を読み出すタイミングと、受信FIFOメモリからA5を読み出すタイミングとによって、パケットの順番が入れ替わる可能性がある。例えば、A3を読み出した後かつA4を読み出す前に、A5を読み出した場合には、出力待ちFIFOメモリには、A3、A5、A4の順番で格納される。また、例えば、A3を読み出す前に、A5を読み出した場合には、出力待ちFIFOメモリには、A5、A3、A4の順番で格納される。つまり、いずれの場合でも、出力待ちFIFOメモリに格納された順番で送信されるので、正しい順番で送信されず、パケットの不整合が発生する。
【0020】
このように、受信FIFOメモリと退避用FIFOメモリとを設けてパケットを送信する技術は、輻輳の悪化を防止できるものの、輻輳解除後にデータの順番を担保できないので、有効な手法とは言えない。以下の各実施例では、輻輳の悪化を防止でき、輻輳解除後にデータの順番を担保することもできる輻輳制御プログラム、情報処理装置および輻輳制御方法について説明する。
【実施例1】
【0021】
図1と図2を用いて、実施例1に係るシステムの全体構成を説明する。ここでは、輻輳が検出されるまでの制御と輻輳が検出された後の制御例を説明する。図1は、実施例1に係るシステムの全体構成を示す図であり、図2は、実施例1に係るシステムにおいて輻輳が発生した場合のサーバのキュー制御例を示す図である。図1に示すように、実施例1に係るシステムは、レイヤ2スイッチ(以降、L2スイッチと呼ぶ)10と、L2スイッチ20と、サーバ30とが接続されている。
【0022】
L2スイッチ10は、サーバ30とL2スイッチ20間におけるデータの中継、サーバ30と他の装置間におけるデータの中継、L2スイッチ20と他の装置間におけるデータの中継等を制御するスイッチングハブなどである。例えば、L2スイッチ10は、サーバ30から宛先アドレスA又は宛先アドレスCのデータを受信した場合、受信した宛先アドレスA又は宛先アドレスCのデータを送信ポート1から宛先に送信する。また、L2スイッチ10は、サーバ30から宛先アドレスBのデータを受信した場合、受信した宛先アドレスBのデータを送信ポート2から宛先に送信する。
【0023】
L2スイッチ20は、サーバ30と他の装置間におけるデータの中継、L2スイッチ10と他の装置間におけるデータの中継等を制御するスイッチングハブなどである。例えば、L2スイッチ20は、L2スイッチ10から宛先アドレスAのデータを受信した場合、受信した宛先アドレスAのデータを送信ポート1から宛先に送信する。また、L2スイッチ20は、L2スイッチ10から宛先アドレスCのデータを受信した場合、受信した宛先アドレスCのデータを送信ポート2から宛先に送信する。
【0024】
なお、ここでは、L2スイッチを用いた例を示したが、これに限定されるものではない。例えば、ルータやレイヤ3スイッチなどを用いることもできる。また、図1に示すシステムでやり取りされるデータとは、フロー、パケット、フレーム、リクエスト、各種要求、各種応答などであり、一般的な情報処理システムでやり取りされる情報であれば、どのような情報であってもよい。
【0025】
サーバ30は、クライアント端末にWebサービスやデータベースなどを提供するサーバであってもよく、Webサービスやデータベースなどのサービスを利用するコンピュータであってもよい。
【0026】
このサーバ30は、送信対象であるデータを第1のキューであるスタティックキュー(以降、Sキューと呼ぶ)1に格納する。そして、サーバ30は、Sキュー1に格納されるデータを読み出して送信する。例えば、サーバ30は、図1に示すように、入力又は生成されたデータA1、データC1、データB1、データA2の順にSキュー1に格納し、格納した順番で送信する。なお、各実施例で示すデータAなどは、宛先Aのデータであることを示し、A1、A2は送信する順番を示す。つまり、データA1とデータA2の関係としては、両方とも宛先Aのデータであり、データA2よりもデータA1を先に送信すべきであることを示す。
【0027】
そして、サーバ30は、輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先以外のデータを第2のキューであるSキュー2に格納する。また、サーバ30は、輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先のデータを第3のキューであるダイナミックキュー(以降、Dキューと呼ぶ)に格納する。
【0028】
例えば、図1に示すL2スイッチ20の送信ポート1において、宛先アドレスAへの送信経路で輻輳が検出されたとする。この場合、サーバ30は、図2の(1)に示すように、輻輳検出後に送信対象となったデータB2、C2、A3のうち、輻輳が検出された宛先A以外のデータB2、C2をSキュー2に格納する。また、サーバ30は、輻輳検出後に送信対象となったデータB2、C2、A3のうち、輻輳が検出された宛先のデータA3をDキューに格納する。
【0029】
そして、サーバ30は、Sキュー1に格納されるデータが送信されてから、Sキュー2に格納されるデータを読み出して送信する。また、サーバ30は、Sキュー1に格納されるデータが送信されてから、Dキューに格納されるデータを読み出し、帯域を制御して送信する。
【0030】
上述した例の場合、サーバ30は、Sキュー2およびDキューにデータが格納されているものの、輻輳前にSキュー1にデータが格納されているので、Sキュー1のデータをSキュー2およびDキューより先に送信する。つまり、サーバ30は、図2の(2)に示すように、Sキュー1の最後に格納されているデータA2の送信が完了するまで、Sキュー2に格納されているデータおよびDキューに格納されているデータの送信を実行しない。この間、サーバ30は、新たに送信対象となったデータA4についてはDキューに格納し、データB3についてはSキュー2に格納する。
【0031】
そして、サーバ30は、図2の(3)に示すように、Sキュー1に格納されていた最後のデータA2が送信されると、Sキュー2に格納されているデータB2、C2、B3の順に読み出して送信する。同様に、サーバ30は、図2の(3)に示すように、Sキュー1の最後に格納されるデータA2が送信されると、Dキューに格納されているデータA3、A4の順に読み出し、帯域を制御して送信する。
【0032】
その後、サーバ30は、輻輳が解除されるまで、輻輳が検出された宛先以外のデータC3などについてはSキュー2に格納し、輻輳が検出された宛先のデータA5などについてはDキューに格納する。つまり、サーバ30は、輻輳が解除されるまで、輻輳検出前まで使用していたSキュー1にはデータを格納しない。
【0033】
このように、実施例1によれば、サーバ30は、輻輳が検出されるまでは1つのキューで送信制御を実施する。輻輳が検出された場合には、サーバ30は、輻輳が検出された宛先以外のデータを別のキューに格納して送信制御し、輻輳が検出された宛先のデータを帯域制御用のキューに格納して送信制御する。つまり、サーバ30は、輻輳検出前と輻輳検出後でデータを格納するキューを切り替えるとともに、輻輳に影響を与えるデータについてのみレート調整を実行する。また、サーバ30は、データ送信先が複数ある場合でも、少なくとも3つのキューを用いることで、上述した処理を実行できる。
【0034】
この結果、実施例1に係るサーバ30は、輻輳発生時には、輻輳に影響を与えるデータと輻輳に影響を与えないデータを別々のキューに格納するので輻輳に影響を与えない宛先のデータの送信遅延を防止することができる。また、サーバ30は、宛先ごとにキューを設ける必要もないので、キュー数を削減することができる。また、サーバ30は、輻輳前に格納されたデータの送信が完了してから、輻輳に影響を与えない宛先のデータおよび輻輳に影響を与える宛先のデータの送信を開始するので、送信順序の逆転を防止できる。したがって、実施例1に係るサーバ30は、効率的なデータ送信を実行できる。
【0035】
[各装置の構成]
次に、図1に示した各装置の構成について説明する。ここでは、L2スイッチの構成、サーバの構成を説明する。なお、図1に示したL2スイッチ10とL2スイッチ20は同様の構成を有するので、ここではL2スイッチ10について説明する。
【0036】
(L2スイッチの構成)
図3は、L2スイッチの構成を示すブロック図である。図3に示すように、L2スイッチ10は、通信インタフェース11と、MAC(Media Access Control)テーブル12と、キュー領域13と、スイッチング実行部14と、輻輳検出部15とを有する。なお、MACテーブル12やキュー領域13は、メモリなどに設けられる記憶部である。
【0037】
通信インタフェース11は、MACアドレス等が割り当てられたポート1〜ポートn(n:自然数)を有し、他の装置との間の通信を制御する。例えば、通信インタフェース11は、各ポートからデータを受信してスイッチング実行部14や輻輳検出部15に出力する。また、通信インタフェース11は、スイッチング実行部14や輻輳検出部15から出力されたデータを、スイッチング実行部14や輻輳検出部15に指定されたポートから宛先に送信する。
【0038】
MACテーブル12は、データの送信先に関する経路情報を記憶する。例えば、MACテーブル12は、データのヘッダ等に格納されるMACアドレスやIP(Internet Protocol)アドレスなどのアドレス情報に対応付けて、送信先となる装置やネットワーク機器の情報、送信先となるポートなどを記憶する。なお、MACテーブル12は、予め固定された情報を記憶するスタティックルーティングで制御されてもよく、他装置からの情報に基づいて更新するダイナミックに制御されてもよい。
【0039】
キュー領域13は、通信インタフェース11の各ポートごとに、FIFO(First-In First-Out)で制御される受信キューと送信キューとを有する。例えば、キュー領域13は、通信インタフェース11のポート1で受信され、スイッチング実行部14によっていずれかの受信キューに格納されたデータを当該受信キューの最後に格納する。
【0040】
スイッチング実行部14は、データのスイッチング制御を実行して、データを宛先に送信する。例えば、スイッチング実行部14は、ポート1の受信キューからデータを読み出した場合、MACテーブル12を参照して、当該データのヘッダ等に含まれるアドレス情報から宛先を特定する。さらに、スイッチング実行部14は、MACテーブル12を参照して、特定した宛先へ接続されるポートを特定する。そして、スイッチング実行部14は、特定したポートの送信キューに当該データを格納する。また、スイッチング実行部14は、各ポートの送信キューの先頭に格納されるデータを読み出し、読み出したデータを各ポートから宛先に送信する。
【0041】
輻輳検出部15は、IEEE802.1Qauで規定される輻輳制御方式を用いて輻輳を検出し、輻輳を検出したことを示す輻輳制御パケットをL2スイッチ10に接続される各装置に、輻輳が解除されるまで定期的に送信する。輻輳検出部15は、各送信キューの滞留状況等を監視することで、輻輳を検出する。そして、輻輳検出部15は、輻輳制御パケットを生成して各ポートから送信する。なお、輻輳検出部15は、輻輳が解除された場合には、輻輳制御パケットの送信を停止する。
【0042】
図4は、L2スイッチが送信する輻輳制御パケットの例を示す図である。図4に示すように、輻輳制御パケットは、「DA、SA、VLAN(Virtual Local Area Network)」を有する。さらに、輻輳制御パケットは、輻輳制御メッセージである「バージョン、制御レート、輻輳ポイント識別子、Encapsulated DA、Encapsulated MSDU(Mac Service Data Unit) length、Encapsulated MSDU」を有する。「DA」は、輻輳制御パケットの宛先アドレスを示し、例えば、サンプリングされたパケットの送信先となるアドレスであり、サンプリングされたパケットがサーバ30から送信されたものである場合には、サーバ30のMACアドレスが格納される。
【0043】
「SA」は、輻輳制御パケットの送信元アドレスを示し、例えばL2スイッチ10のMACアドレスが格納される。「VLAN」は、ネットワーク構成がVLANで構成されている場合に、サンプリングされたパケットに含まれるVLANの識別子等が格納される。「バージョン」は、サンプリングされたパケットのバージョンが格納される。「制御レート」は、輻輳時に使用する帯域情報が格納される。この「制御レート」は、管理者等によって予め取り決められていてもよく、輻輳検出部15がネットワークの使用率やキューの帯域状況から特定するようにしてもよい。
【0044】
「輻輳ポイント識別子」は、輻輳の検出ポイントを示し、例えば、ポートのMACアドレスなどが使用される。「Encapsulated DA」は、輻輳が発生している宛先のアドレス情報を示し、サンプリングされたパケットの宛先となるアドレスが格納される。例えば、「Encapsulated DA」は、サンプリングされたパケットがアドレスAに送信されたものである場合には、アドレスAが格納される。「Encapsulated MSDU length」は、MAC層が上位層から受け取るフレームボディの長さであり、例えばサンプリングされたパケットの長さである。「Encapsulated MSDU」は、MAC層が上位層から受け取るフレームボディであり、例えば、サンプリングされたパケットの宛先、送信元、VLAN情報、PDU(Protocol Data Unit)等で形成される情報である。
【0045】
(サーバの構成)
図5は、サーバの構成を示すブロック図である。図5に示すように、サーバ30は、通信ポート31と、データ記憶領域32と、キュー領域33と、送信キュー構成テーブル34と、送信キュー管理テーブル35と、制御部36とを有する。なお、データ記憶領域32、キュー領域33、送信キュー構成テーブル34、送信キュー管理テーブル35は、メモリなどに設けられる記憶部である。
【0046】
通信ポート31は、MACアドレスが割り当てられ、他の装置との間の通信を制御するインタフェースである。例えば、通信ポート31は、制御部36の第1送信部36d、第2送信部36e、第3送信部36fから出力されたデータを宛先に送信する。また、通信ポート31は、L2スイッチ10から受信した輻輳制御パケットを受信制御部36aや輻輳検出部36bに出力する。
【0047】
データ記憶領域32は、制御部36による各種処理に必要なデータおよびプログラムを格納するとともに、外部から受信したデータや送信対象となるデータなどを記憶する。例えば、データ記憶領域32は、制御部36等によって生成された送信対象のデータを記憶する。また、データ記憶領域32は、受信制御部36aによって格納された、通信ポート31によって受信されたデータを記憶する。
【0048】
キュー領域33は、通信ポート31から送信されるデータを格納する送信キューと、通信ポート31によって受信されたデータを格納する受信キューとを有する。例えば、送信キューは、輻輳が検出される前までに送信対象となるデータを記憶するSキュー1を有する。さらに、送信キューは、輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先以外のデータを記憶するSキュー2を有する。また、送信キューは、輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先のデータを記憶するDキューを有する。また、受信キューは、通信ポート31によって受信されたデータを格納する。
【0049】
ここで、説明上、送信キューを明示的に示した一例を用いて具体的に説明する。図6は、キュー領域が有する送信キューの例を示す図である。図6に示すように、キュー領域は、「キュー番号、1、2、・・・、10、・・・、n(n:自然数)」に区分けして形成される。「キュー番号」は、管理者等によって設定された、送信キューを一意に識別する識別子である。「1〜n」は、格納された順番であり、若番から順に読み出されて送信される。
【0050】
図6の場合、「Sキュー1」は、データC1、データC2、・・・、データC10までの10個のデータで待ち行列を形成し、データC1から順に読み出されて送信される。「Sキュー2」は、データB1、データB2の2個のデータで待ち行例が形成されており、データB1から順に読み出されて送信される。「Dキュー」は、データA1のみで待ち行列が形成されており、データA1から順に読み出されて送信される。
【0051】
なお、キュー領域33では、制御部36の各送信部等によって、各送信キューからデータ送信又は各キューにデータが格納されるたびに更新される。例えば、Sキュー1の先頭に格納されているデータC1が読み出されて送信された場合、第1送信部36dは、キュー領域33の「キュー番号=Sキュー1」の「2」に格納される「データC2」を「1」に移動させる。つまり、第1送信部36dは、Sキュー1の先頭のデータが送信された場合には、送信されたデータ以降に格納されているデータを随時前の格納位置に移動させる。また、キュー領域33が図6に示した状態にあり、Dキューに新たなデータA2が格納された場合に、第3送信部36fは、キュー領域33の「キュー番号=Dキュー」の「2」にデータA2を格納する。
【0052】
また、キュー領域33は、Dキューを常に有している必要はなく、Dキューが生成できる領域を確保しておくことで、後述する格納部36cが動的に生成することもできる。なお、キュー領域33が有する各キューは、FIFOなどの手法で制御される。
【0053】
送信キュー構成テーブル34は、キュー領域33が有する各送信キューの構成情報を記憶する。図7は、送信キュー構成テーブルに記憶される情報の例を示す図である。図7に示すように、送信キュー構成テーブル34は、「キュー番号、最大キュー長、キュー長、帯域情報」を記憶する。「キュー番号」は、管理者等によって設定された、送信キューを一意に識別する識別子であり、「最大キュー長」は、管理者等によって設定された、送信キューに蓄積可能な最大のデータ容量を示す。「キュー長」は、送信キューに蓄積されているデータ容量を示し、各送信キューに格納される状態によって動的に更新される。「帯域情報」は、送信キューに割り振られた帯域幅を示し、輻輳検出部36bなどによって動的に更新される。
【0054】
図7の場合、「Sキュー1」には、帯域幅50Mbpsが割り与えられ、最大128Kバイト格納可能であり、現在30Kバイト格納されていることを示す。また、「Sキュー2」には、帯域幅50Mbpsが割り与えられ、最大128Kバイト格納可能であり、現在データが格納されていないことを示す。「Dキュー」には、帯域幅20Mbpsが割り与えられ、最大64Kバイト格納可能であり、現在10Kバイト格納されていることを示す。
【0055】
なお、図7に示した情報はあくまで例示であり、他の情報を記憶していてもよい。また、最大キュー長の単位等もあくまで例示であり、これに限定されるものではない。また、キュー構成テーブル34が記憶する情報は、キュー領域33が有するキューの状態によって適宜更新される。例えば、キュー領域33がDキューを2つ有する場合には、送信キュー構成テーブル34にも2つのDキューの構成情報が記憶される。
【0056】
送信キュー管理テーブル35は、キュー領域33が有する各送信キューごとに、格納対象や輻輳状況等を記憶する。図8は、輻輳検出前の送信キュー管理テーブルに記憶される情報の例を示す図であり、図9は、輻輳検出後の送信キュー管理テーブルに記憶される情報の例を示す図である。
【0057】
図8や図9に示すように、送信キュー管理テーブル35は、「キュー番号、輻輳ポイント識別子、宛先」を対応付けて記憶する。「キュー番号」は、送信キューを一意に識別する識別子であり、「輻輳ポイント識別子」は、輻輳が検出された、L2スイッチ10のポートのMACアドレスである。「宛先」は、送信キューに格納すべき宛先を示す。
【0058】
図8の状態は、「Sキュー1」に全ての宛先のデータを格納し、「Sキュー2」にはデータを格納しない状態である。図9の状態は、「Sキュー1」にはデータを格納せず、「Sキュー2」には宛先アドレスA以外のデータを格納し、「Dキュー」にはL2スイッチ10におけるMACアドレス1のポートから出力される宛先アドレスAのデータを格納する状態である。なお、送信キュー管理テーブル35は、制御部36の各格納部などによって動的に更新される。
【0059】
制御部36は、例えばCPU(Central Processing Unit)などの電子回路であり、OS(Operating System)などの制御プログラム、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有する。制御部36は、受信制御部36aと輻輳検出部36bと格納部36cと第1送信部36dと第2送信部36eと第3送信部36fとを有し、これらによって各種処理を実行する。
【0060】
受信制御部36aは、通信ポート31によって受信されたデータをデータ記憶領域32に格納したり、通信ポート31によって受信されたデータを輻輳検出部36bに出力したりする。また、受信制御部36aは、通信ポート31によって受信されたデータが輻輳制御パケットである場合には、受信した輻輳制御パケットをデータ記憶領域32に格納するとともに、輻輳検出部36bに出力する。
【0061】
輻輳検出部36bは、L2スイッチ10等から受信した輻輳制御パケットに基づいて輻輳を検出する。例えば、輻輳検出部36bは、受信制御部36aから輻輳制御パケットを受信した場合、輻輳を検出する。そして、輻輳検出部36bは、輻輳制御パケットに含まれる「制御レート、輻輳ポイント識別子、Encapsulated DA」を取得し、取得した各情報を格納部36c等に出力する。
【0062】
また、輻輳検出部36bは、取得した「Encapsulated DA」を「宛先」とするDキューのレコードを送信キュー管理テーブル35に生成して、生成したレコードの「輻輳ポイント識別子」に、輻輳制御パケットから取得した「輻輳ポイント識別子」を格納する。さらに、輻輳検出部36bは、輻輳検出後に、輻輳先宛以外のデータを格納するSキューを切り替える。つまり、輻輳検出部36bは、図8に示した輻輳検出前の状態から、図9に示した輻輳検出後の状態を生成する。さらに、輻輳検出部36bは、送信キュー構成テーブル34にDキューのレコードを生成し、生成したレコードの「帯域情報」に、輻輳制御パケットから取得した「制御レート」を格納する。このとき、輻輳検出部36bは、生成したDキューのレコードの「最大キュー長」には管理者等から予め設定された情報を格納する。
【0063】
格納部36cは、輻輳未検出時または輻輳検出時それぞれの状況に応じて、送信対象であるデータを各キューに格納する。例えば、格納部36cは、輻輳検出部36bによって輻輳が検出されるまで、データ記憶領域32に記憶される送信対象データを読み出してSキュー1に格納する。一例としては、格納部36cが、送信キュー管理テーブル35を参照すると、送信キュー管理テーブル35の状態が図8に示した状態であったとする。つまり、送信キュー管理テーブル35にDキューのレコードがなく、Sキュー1の「宛先」が「any」であったとする。この場合、格納部36cは、データ記憶領域32に記憶される送信対象データを順次読み出す。そして、格納部36cは、読み出した送信対象データをキュー領域33のSキュー1に格納するとともに、読み出した送信対象データの長さ分、送信キュー構成テーブル34のSキュー1の「キュー長」を更新する。
【0064】
また、格納部36cは、輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先以外のデータをSキュー2に格納する。例えば、格納部36cは、輻輳検出部36bによって宛先Aの送信経路で輻輳が検出された場合、データ記憶領域32に記憶される送信対象データのうち、宛先A以外のデータを読み出してSキュー2に格納する。
【0065】
一例として、格納部36cが、送信キュー管理テーブル35を参照すると、送信キュー管理テーブル35の状態が図9に示した状態であったとする。つまり、送信キュー管理テーブル35に「宛先」が「A」であるDキューのレコードがあり、Sキュー2の「宛先」が「any」であったとする。この場合、格納部36cは、データ記憶領域32に記憶される送信対象データのうち、宛先アドレスがA以外のデータを順次読み出して、キュー領域33のSキュー2に格納する。そして、格納部36cは、読み出した送信対象データの長さ分、送信キュー構成テーブル34のSキュー2の「キュー長」を更新する。
【0066】
また、格納部36cは、輻輳が検出された場合に、Dキューを生成し、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先のデータをDキューに格納する。例えば、格納部36cは、輻輳検出部36bによって宛先Aの送信経路で輻輳が検出された場合、Dキューをキュー領域33に生成し、データ記憶領域32に記憶される送信対象データのうち、宛先Aのデータを読み出してDキューに格納する。
【0067】
一例として、格納部36cが、送信キュー管理テーブル35を参照すると、送信キュー管理テーブル35の状態が図9に示した状態であったとする。つまり、送信キュー管理テーブル35に「宛先」が「A」であるDキューのレコードがあり、Sキュー2の「宛先」が「any」であったとする。この場合、格納部36cは、データ記憶領域32に記憶される送信対象データのうち、宛先アドレスがAのデータを順次読み出して、キュー領域33のDキューに格納する。そして、格納部36cは、読み出した送信対象データの長さ分、送信キュー構成テーブル34のDキューの「キュー長」を更新する。
【0068】
第1送信部36dは、Sキュー1に格納されるデータを読み出して送信する。例えば、第1送信部36dは、図6に示したキュー領域33の送信キューのうち、Sキュー1の先頭に格納されるデータを読み出す。続いて、第1送信部36dは、送信キュー構成テーブル34を参照し、Sキュー1に対応付けられた「帯域情報=50」を取得する。そして、第1送信部36dは、Sキュー1から読み出したデータを帯域幅(50Mbps)で宛先に送信する。
【0069】
その後、第1送信部36dは、データを読み出して送信するたびに、後続のデータを1つ若番に移動させる。つまり、第1送信部36dは、Sキュー1の先頭、言い換えると、図6ではSキュー1の「1」に格納されるデータを読み出して送信する。そして、第1送信部36dは、Sキュー1に格納されるデータを全て送信した場合に、送信完了通知を第2送信部36eと第3送信部36fに出力する。
【0070】
第2送信部36eは、Sキュー1に格納されるデータがすべて送信されてから、Sキュー2に格納されるデータを読み出して送信する。例えば、第2送信部36eは、図6に示したキュー領域33のSキュー1に記憶されるデータが全て送信されたことを第1送信部36dから受信する。すると、第2送信部36eは、Sキュー2の先頭に格納されるデータを読み出す。続いて、第2送信部36eは、送信キュー構成テーブル34を参照し、Sキュー2に対応付けられた「帯域情報=50」を取得する。そして、第2送信部36eは、Sキュー2から読み出したデータを帯域幅(50Mbps)で宛先に送信する。
【0071】
その後、第2送信部36eは、データを読み出して送信するたびに、後続のデータを1つ若番に移動させる。つまり、第2送信部36eは、Sキュー2の先頭、言い換えると、図6ではSキュー2の「1」に格納されるデータを読み出して送信する。
【0072】
第3送信部36fは、Sキュー1に格納されるデータがすべて送信されてから、Dキューに格納されるデータを読み出し、帯域を制御して送信する。例えば、第3送信部36fは、図6に示したキュー領域33のSキュー1に記憶されるデータが全て送信されたことを第1送信部36dから受信する。すると、第3送信部36fは、Dキューに格納される先頭のデータを読み出す。続いて、第3送信部36fは、送信キュー構成テーブル34を参照し、Dキューに対応付けられた「帯域情報=20」を取得する。そして、第3送信部36fは、Sキュー1や2と異なり、帯域幅(20Mbps)に制限して、Dキューから読み出したデータを宛先に送信する。
【0073】
その後、第3送信部36fは、データを読み出して送信するたびに、後続のデータを1つ若番に移動させる。つまり、第3送信部36fは、Dキューの先頭、言い換えると、図6ではDキューの「1」に格納されるデータを読み出し、帯域を制御して送信する。
【0074】
[処理の流れ]
次に、図10〜図11を用いて、実施例1に係るサーバが実行する各種処理の流れを説明する。ここでは、輻輳検出処理の流れ、輻輳時のデータ格納処理の流れ、輻輳時のデータ送信処理の流れを順に説明する。
【0075】
(輻輳検出処理の流れ)
図10は、実施例1に係るサーバにおける輻輳検出処理の流れを示すフローチャートである。図10に示すように、サーバ30の輻輳検出部36bは、受信制御部36aによって受信されるデータに基づいて輻輳状態を監視する(ステップS101)。
【0076】
そして、輻輳検出部36bは、受信制御部36aによって輻輳制御パケットが受信された場合(ステップS102肯定)、輻輳を検出する(ステップS103)。その後、輻輳検出部36bは、輻輳先宛以外のデータをSキュー1ではなくSキュー2に格納するようにSキューの切り替えを実行し(ステップS104)、格納部36cは、キュー領域33にDキューを生成する(ステップS105)。このとき、輻輳検出部36bは、送信キューの各テーブルを更新する。その後、ステップS101以降を繰り返す。
【0077】
(輻輳時のデータ格納処理の流れ)
図11は、実施例1に係る輻輳時のデータ格納処理の流れを示すフローチャートである。図11に示すように、サーバ30がデータ記憶領域32から送信対象となるデータを読み出した場合(ステップS201肯定)、サーバ30は、当該データのヘッダ等から宛先が輻輳先であるか否かを判定する(ステップS202)。
【0078】
そして、読み出されたデータの宛先が輻輳先であると判定された場合(ステップS202肯定)、格納部36cが当該データをDキューに格納する(ステップS203)。一方、読み出されたデータの宛先が輻輳先でないと判定された場合(ステップS202否定)、格納部36cが当該データを切り替えられたSキュー2に格納する(ステップS204)。その後、ステップS201以降が繰り返し実行される。
【0079】
(輻輳時のデータ送信処理の流れ)
図12は、実施例1に係る輻輳時のデータ送信処理の流れを示すフローチャートである。図12に示すように、切り替え前のSキュー1にデータが格納されている場合(ステップS301肯定)、第1送信部36dは、Sキュー1に格納されるデータを読み出して、Sキュー1に対応付けられた帯域幅で送信する(ステップS302)。その後、ステップS301以降を繰り返す。
【0080】
一方、切り替え前のSキュー1にデータが格納されていない場合(ステップS301否定)、第2送信部36eは、Sキュー2にデータが格納されているか否かを判定する(ステップS303)。つまり、第2送信部36eは、Sキュー1に格納されていたデータが全て送信された場合、Sキュー2にデータが格納されているか否かを判定する。
【0081】
そして、第2送信部36eは、Sキュー2にデータが格納されていると判定した場合(ステップS303肯定)、Sキュー2の先頭に格納されているデータを読み出して、Sキュー2に対応付けられた帯域幅で宛先に送信する(ステップS304)。その後、ステップS303に戻って処理を繰り返す。一方、第2送信部36eは、Sキュー2にデータが格納されていないと判定した場合(ステップS303否定)、処理を終了する。
【0082】
同様に、切り替え前のSキュー1にデータが格納されていない場合(ステップS301否定)、第3送信部36fは、Dキューにデータが格納されているか否かを判定する(ステップS305)。つまり、第3送信部36fは、Sキュー1に格納されていたデータが全て送信された場合、Dキューにデータが格納されているか否かを判定する。
【0083】
そして、第3送信部36fは、Dキューにデータが格納されていると判定した場合(ステップS305肯定)、Dキューの先頭に格納されているデータを読み出して、Dキューに対応付けられた帯域幅で宛先に送信する(ステップS306)。その後、ステップS305に戻って処理を繰り返す。一方、第3送信部36fは、Dキューにデータが格納されていないと判定した場合(ステップS305否定)、処理を終了する。
【0084】
なお、第2送信部36eがSキュー2からデータを取り出すタイミングと、第3送信部36fがDキューからデータを取り出すタイミングとは、例えば、ラウンドロビン(round robin)方式で決定する。一例を挙げると、ある時間内では、Sキュー2から10回取り出す間にDキューから5回取り出すラウンドロビン方式で、帯域制御する。
【0085】
[実施例1による効果]
実施例1によれば、輻輳に影響を与えない宛先のデータの送信遅延を防止することができる。また、キュー数を削減することができる。また、送信順序の逆転を防止できる。したがって、効率的なデータ送信を実行できる。また、非輻輳時以外では、Sキュー1とSキュー2の2つのキューを有していればよいので、キューに要するメモリ容量をさらに削減できる。
【0086】
また、実施例1によれば、データの宛先とキューとを対応付けたりするプロビジョニングによる多大なキュー設定を実行する必要がない。また、輻輳発生しているポイントの数だけのキュー設定で良い。これらの結果、キュー用として確保するメモリや多数キューのスケジューリング機能の削減に対して、多くの効果が見込める。また、キュー数の削減により、データを該当キューに分類する処理負荷も軽減される。
【実施例2】
【0087】
実施例1では、輻輳検出時の処理について説明したが、実施例2では、輻輳解除時の処理について説明する。図13は、実施例2に係るシステムにおいて輻輳が解除される前の状態例を示す図であり、図14は、実施例2に係るシステムにおいて輻輳が解除された場合の制御例を示す図である。なお、実施例2に係るシステムの構成は、実施例1と同様の構成とする。
【0088】
(輻輳検出時)
図13に示すように、サーバ30の輻輳検出部36bは、L2スイッチ20から「輻輳ポイント識別子=1、Encapsulated DA=A」とする輻輳制御パケットを定期的に受信した場合、輻輳を検出する。すると、輻輳検出部36bは、送信キュー管理テーブル35に「輻輳ポイント識別子=1、宛先=A」とするDキューのレコードを生成し、送信キュー構成テーブル34も更新する。また、輻輳検出部36bは、Sキューの切り替えを実行すし、キュー領域33にDキューを生成する。
【0089】
そして、格納部36cは、Sキュー1へのデータの格納を停止する。また、格納部36cは、輻輳検出後に送信対象となったデータB2、C2、A3のうち、輻輳が検出された宛先A以外のデータB2、C2をSキュー2に格納する。また、格納部36cは、輻輳検出後に送信対象となったデータB2、C2、A3のうち、輻輳が検出された宛先AのデータA3をDキューに格納する。
【0090】
続いて、図13の場合、第2送信部36eは、Sキュー1の最後に格納されているデータA2が送信されてから、Sキュー2の先頭に格納されているデータB2を読み出して送信する。同様に、第3送信部36fは、Sキュー1の最後に格納されているデータA2が送信されてから、Dキューの先頭に格納されているデータA3を読み出して送信する。
【0091】
(輻輳解除時)
次に、図14を用いて、図13の輻輳制御時から輻輳が解除された場合について説明する。図14に示すように、輻輳検出部36bは、L2スイッチ20から「輻輳ポイント識別子=1、Encapsulated DA=A」とする輻輳制御パケットを所定期間受信しなくなった場合、輻輳が解除されたと検出する。例えば、輻輳検出部36bは、輻輳が検出された場合には輻輳制御パケットを定期的に受信するが、最新の輻輳制御パケットを受信してから15msの間受信しなかった場合には、輻輳が解除されたと判定する。
【0092】
続いて、輻輳解除を検出した輻輳検出部36bは、送信キュー管理テーブル35に「輻輳ポイント識別子=1、宛先=A」とするDキューのレコードを削除する。また、輻輳検出部36bは、送信キュー管理テーブル35におけるSキュー2の「宛先」を「−」に変更するとともに、Sキュー1の「宛先」を「any」にすることで、Sキューの切り戻しを実行する。
【0093】
つまり、輻輳が解除されるまで、格納部36cは、輻輳検出後に送信対象となったデータB8、C6、A4のうち、輻輳が検出された宛先A以外のデータB8、C6をSキュー2に格納する。そして、第2送信部36eは、Sキュー2からデータを順番に読み出して宛先に送信する。同様に、格納部36cは、輻輳検出後に送信対象となったデータB8、C6、A4のうち、輻輳が検出された宛先AのデータA4をDキューに格納する。そして、第3送信部36fは、Dキューからデータを順番に読み出して宛先に送信する。
【0094】
その後、輻輳が解除されると、格納部36cは、Sキュー2またはDキューへのデータの格納を停止する。そして、格納部36cは、輻輳解除後に送信対象となったデータB9、A5、C7を順番にSキュー1に格納する。その後、第1送信部36dは、Sキュー2およびDキューが空になった後、Sキュー1からデータを読み出して、データ送信を開始する。つまり、図14の場合では、第1送信部36dは、Sキュー2のデータC6とDキューのデータA4が送信された後、Sキュー1の先頭に格納されるデータB9から順番に読み出して送信する。また、格納部36cは、第3送信部36fによってDキューのデータが全て送信されると、Dキューをキュー領域33から削除する。
【0095】
このように、実施例2によれば、輻輳検出前のように、輻輳解除時にキューを切り替えても、データの送信順序の逆転を防止できる。また、輻輳解除後はDキューを削除するので、キュー用として確保するメモリ容量を削減できる。
【実施例3】
【0096】
実施例1では、1箇所で輻輳が検出された場合の処理について説明したが、実施例3では、複数箇所で輻輳が検出された場合の処理について説明する。図15は、実施例3に係るシステムにおいて複数箇所で輻輳が検出された場合の制御例1を示す図であり、図16は、実施例3に係るシステムにおいて複数個所で輻輳が検出された場合の制御例2を示す図である。なお、実施例3に係るシステムの構成は、実施例1と同様の構成とする。
【0097】
(複数箇所での輻輳検出時(例1))
図15に示すように、サーバ30の輻輳検出部36bは、L2スイッチ10から「制御レート=20Mbps、輻輳ポイント識別子=1、Encapsulated DA=C」とする輻輳制御パケットを定期的に受信する。続いて、輻輳検出部36bは、L2スイッチ20から「制御レート=10Mbps、輻輳ポイント識別子=2、Encapsulated DA=C」とする輻輳制御パケットを定期的に受信する。
【0098】
すると、輻輳検出部36bは、L2スイッチ10から受信した輻輳制御パケットの制御レートが「20」であり、L2スイッチ20から受信した輻輳制御パケットの制御レートが「10」であることより、今回検出した輻輳の方がより悪い状態であると判定する。つまり、輻輳検出部36bは、輻輳ポイント識別子は異なるが、輻輳を検出したアドレスが同じであるため、より帯域幅が小さい方を輻輳制御対象として特定する。
【0099】
その後、実施例1や2と同様、輻輳検出部36bは、送信キュー管理テーブル35に「輻輳ポイント識別子=2、宛先=C」とするDキューのレコードを生成し、送信キュー構成テーブル34も更新する。さらに、輻輳検出部36bは、送信キュー管理テーブル35におけるSキュー1の「宛先」を「−」に変更するとともに、Sキュー2の「宛先」を「any」にすることで、Sキューの切り替えを実行する。
【0100】
そして、格納部36cは、輻輳検出後に送信対象となったデータB2、C2、A3のうち、輻輳が検出された宛先C以外のデータA3、B2をSキュー2に格納する。また、格納部36cは、輻輳検出後に送信対象となったデータB2、C2、A3のうち、輻輳が検出された宛先CのデータC2をDキューに格納する。
【0101】
続いて、図15の場合、第2送信部36eは、Sキュー1の最後に格納されているデータA2が送信されてから、Sキュー2の先頭に格納されているデータA3を読み出して送信する。同様に、第3送信部36fは、Sキュー1の最後に格納されているデータA2が送信されてから、Dキューの先頭に格納されているデータC2を読み出して送信する。
【0102】
(複数箇所の輻輳検出時(例2))
図16に示すように、サーバ30の輻輳検出部36bは、L2スイッチ10から「制御レート=20Mbps、輻輳ポイント識別子=1、Encapsulated DA=A」とする輻輳制御パケットを定期的に受信する。続いて、輻輳検出部36bは、L2スイッチ20から「制御レート=10Mbps、輻輳ポイント識別子=2、Encapsulated DA=C」とする輻輳制御パケットを定期的に受信する。
【0103】
すると、輻輳検出部36bは、送信キュー管理テーブル35に「輻輳ポイント識別子=1、宛先=A」とするDキュー1のレコードを生成する。同様に、輻輳検出部36bは、送信キュー構成テーブル34にDキュー1のレコードを生成する。さらに、輻輳検出部36bは、送信キュー管理テーブル35に「輻輳ポイント識別子=2、宛先=C」とするDキュー2のレコードを生成する。同様に、輻輳検出部36bは、送信キュー構成テーブル34にDキュー2のレコードを生成する。
【0104】
続いて、輻輳検出部36bは、送信キュー管理テーブル35におけるSキュー1の「宛先」を「−」に変更するとともに、Sキュー2の「宛先」を「any」にすることで、Sキューの切り替えを実行する。
【0105】
そして、輻輳が検出されると、格納部36cは、Sキュー1へのデータの格納を停止する。また、格納部36cは、輻輳検出後に送信対象となったデータB2、C2、A3のうち、輻輳が検出された宛先AとC以外のデータB2をSキュー2に格納する。また、格納部36cは、輻輳検出後に送信対象となったデータB2、C2、A3のうち、輻輳が検出された宛先AのデータA3をDキュー1に格納する。同様に、格納部36cは、輻輳検出後に送信対象となったデータB2、C2、A3のうち、輻輳が検出された宛先CのデータC2をDキュー2に格納する。
【0106】
続いて、第2送信部36eは、Sキュー1に格納されるデータの送信が完了してから、Sキュー2からデータを順番に読み出して宛先に送信する。同様に、第3送信部36fは、Sキュー1に格納されるデータの送信が完了してから、Dキュー1からデータを順番に読み出して、帯域を制御して宛先に送信する。同様に、第3送信部36fは、Sキュー1に格納されるデータの送信が完了してから、Dキュー2からデータを順番に読み出して、帯域を制御して宛先に送信する。
【0107】
つまり、図16の場合、第2送信部36eは、Sキュー1の最後に格納されているデータA2が送信されてから、Sキュー2の先頭に格納されているデータB2を読み出して送信する。同様に、第3送信部36fは、Sキュー1の最後に格納されているデータA2が送信されてから、Dキュー1の先頭に格納されているデータA3を読み出して送信する。同様に、第3送信部36fは、Sキュー1の最後に格納されているデータA2が送信されてから、Dキュー2の先頭に格納されているデータC2を読み出して送信する。
【0108】
(実施例3による効果)
このように、実施例3によれば、より輻輳を悪化させるおそれのある宛先へのデータ送信の帯域を制御できるので、輻輳の早期解除に貢献できる。また、実施例3によれば、複数の輻輳が検出された場合でも、輻輳それぞれに影響を与えるデータを別々のキューで制御できるので、それぞれの輻輳に与える影響を小さくすることができ、それぞれの輻輳の早期解除に貢献できる。また、複数の輻輳が検出された場合でも、それぞれの輻輳に影響を与えるデータを別々のキューで送信制御できるので、送信順序の逆転も防止できる。
【実施例4】
【0109】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。
【0110】
(輻輳検出手法)
上述した各実施例では、IEEE802.1Qauで規定される輻輳制御方式を用いて輻輳を検出する例について説明したが、これに限定されるものではない。例えば、ネットワーク使用状況の監視、SNMP(Simple Network Management Protocol)を用いたトラップ、監視ソフトウェア等を用いて検出することもできる。
【0111】
(Dキューへの制御)
上述した各実施例では、1つのDキューへ格納される宛先が1つである場合について例示したが、これに限定されるものではない。例えば、L2スイッチの同じポートで宛先が異なる輻輳が連続して発生した場合、つまり、輻輳ポイント識別子が同じであり、宛先が異なる輻輳が連続して発生した場合、同じDキューに宛先を2つ格納することもできる。
【0112】
(L2スイッチへの適用)
上述した実施例では、サーバ30が輻輳制御する例について説明したが、これに限定されるものではない。例えば、L2スイッチ等の通信装置に対しても同様に適用することができる。L2スイッチに適用した場合、各ポートごとに上述した処理を実行する。
【0113】
(システム)
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、例えば図4、図6〜図9等に示した各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。なお、開示するサーバが送信対象とするデータは、他の装置から受信したデータであってもよく、OSが実行するアプリケーションによって生成されたデータであってもよい。
【0114】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、例えば格納部36cを第1格納部、第2格納部、第3格納部に分割するなど各装置の分散・統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【0115】
(プログラム)
ところで、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することができる。そこで、以下では、上記の実施例と同様の機能を有するプログラムを実行するコンピュータシステムの一例を説明する。
【0116】
図17は、輻輳制御プログラムを実行するコンピュータシステムの例を示す図である。図17に示すように、コンピュータシステム100は、バス100aにCPU105、ROM(Read Only Memory)104、RAM(Random Access Memory)101が接続される。また、コンピュータシステム100は、バス100aにNIC(Network Interface Card)102、HDD(Hard Disk Drive)103が接続されている。
【0117】
また、HDD103には、図5に示した送信キュー構成テーブル34に対応する送信キュー構成テーブル103aが設けられる。同様に、HDD103には、送信キュー管理テーブル35に対応する送信キュー管理テーブル103bが設けられる。
【0118】
ROM104は、輻輳制御プログラム104aを保持する。記録媒体の例としてROM104を例に挙げたが、HDD、RAM、CD−ROM等の他のコンピュータ読み取り可能な記録媒体に各種プログラムを格納しておき、コンピュータに読み取らせることとしてもよい。なお、記憶媒体を遠隔地に配置し、コンピュータが、その記憶媒体にアクセスすることでプログラムを取得して利用してもよい。また、その際、取得したプログラムをそのコンピュータ自身の記録媒体に格納して用いてもよい。
【0119】
CPU105は、輻輳制御プログラム104aを読み出して実行することで、図5等で説明した各機能を実行する輻輳制御プロセス105aを動作させる。すなわち、輻輳制御プロセス105aは、受信制御部36a、輻輳検出部36b、格納部36c、第1送信部36d、第2送信部36e、第3送信部36fと同様の機能を実行する。このようにコンピュータシステム100は、ROM104からプログラムを読み出して実行して、輻輳制御プロセス105aが実行される情報処理装置として動作する。
【0120】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0121】
(付記1)データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行するコンピュータに、
受信したデータを第1のキューに格納する手順と、
前記第1のキューに格納されたデータを送信する手順と、
前記中継装置によって輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先以外のデータを第2のキューに格納する手順と、
前記輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先のデータを第3のキューに格納する手順と、
前記第1のキューに格納されるデータが全て送信されてから、前記第2のキューに格納されるデータを読み出して送信するとともに、前記第3のキューに格納されるデータを読み出して帯域を制御して送信する手順と、
を実行させることを特徴とする輻輳制御プログラム。
【0122】
(付記2)前記輻輳が解除された場合に、輻輳解除後に送信対象となったデータを前記第1のキューに格納する手順と、
前記第2のキューおよび前記第3のキューに格納されるデータが全て送信されてから、前記第1のキューに格納されるデータを読み出して送信する手順と、をさらにコンピュータに実行させることを特徴とする付記1に記載の輻輳制御プログラム。
【0123】
(付記3)前記第3のキューに格納する手順は、前記輻輳が検出された場合に、前記第3のキューを動的に生成し、生成した第3のキューに、前記輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先のデータを格納することを特徴とする付記1または2に記載の輻輳制御プログラム。
【0124】
(付記4)前記第3のキューに格納する手順は、前記輻輳が解除された場合、前記生成した第3のキューを削除する処理をさらにコンピュータに実行させることを特徴とする付記3に記載の輻輳制御プログラム。
【0125】
(付記5)複数の輻輳が検出された場合に、各輻輳に対して帯域制御する帯域幅に基づいて、帯域制御の対象とする輻輳を特定する手順をさらにコンピュータに実行させ、
前記第2のキューに格納する手順は、
複数の輻輳検出後に送信対象となったデータのうち、前記特定した輻輳が検出された宛先以外のデータを第2のキューに格納し、
前記第3のキューに格納する手順は、
前記複数の輻輳検出後に送信対象となったデータのうち、前記特定した輻輳が検出された宛先のデータを第3のキューに格納することを特徴とする付記1〜4のいずれか一つに記載の輻輳制御プログラム。
【0126】
(付記6)データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行するコンピュータに、
受信したデータを第1のキューに格納する手順と、
前記第1のキューに格納されたデータを送信する手順と、
前記中継装置によって第1の輻輳と第2の輻輳が検出された場合に、前記第1の輻輳と第2の輻輳検出後に送信対象となったデータのうち、前記第1の輻輳が検出された宛先以外のデータと第2の輻輳が検出された宛先以外のデータとを第2のキューに格納する手順と、
前記第1の輻輳と第2の輻輳が検出された場合に、前記第1の輻輳と第2の輻輳検出後に送信対象となったデータのうち、前記第1の輻輳が検出された宛先のデータを前記第3のキューに格納する手順と、
前記第1の輻輳と第2の輻輳検出後に送信対象となったデータのうち、前記第2の輻輳が検出された宛先のデータを第4のキューに格納する手順と、
前記第1のキューに格納されるデータが送信されてから、前記第2のキューに格納されるデータを読み出して送信するとともに、前記第3のキューと前記第4のキューに格納されるデータそれぞれを読み出し、それぞれ帯域を制御して送信する手順と、
をコンピュータに実行させることを特徴とする輻輳制御プログラム。
【0127】
(付記7)データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行する情報処理装置であって、
受信したデータを第1のキューに格納する第1格納部と、
前記第1格納部によって前記第1のキューに格納されたデータを送信する第1送信部と、
前記中継装置によって輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先以外のデータを第2のキューに格納する第2格納部と、
前記輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先のデータを第3のキューに格納する第3格納部と、
前記第1格納部によって前記第1のキューに格納されたデータが全て送信されてから、前記第2格納部によって第2のキューに格納されたデータを読み出して送信するとともに、前記第3格納部によって第3のキューに格納されたデータを読み出して帯域を制御して送信する第2送信部と、
を有することを特徴とする情報処理装置。
【0128】
(付記8)前記第1格納部は、前記輻輳が解除された場合に、輻輳解除後に送信対象となったデータを前記第1のキューに格納し、
前記第1送信部は、前記第2のキューおよび前記第3のキューに格納されるデータが送信されてから、前記第1のキューに格納されるデータを読み出して送信することを特徴とする付記7に記載の情報処理装置。
【0129】
(付記9)前記第3格納部は、前記輻輳が検出された場合に、前記第3のキューを動的に生成し、生成した第3のキューに、前記輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先のデータを格納することを特徴とする付記7または8に記載の情報処理装置。
【0130】
(付記10)前記第3格納部は、前記輻輳が解除された場合、前記生成した第3のキューを削除することを特徴とする付記9に記載の情報処理装置。
【0131】
(付記11)複数の輻輳が検出された場合に、各輻輳に対して帯域制御する帯域幅に基づいて、帯域制御の対象とする輻輳を特定する特定部をさらに有し、
前記第2格納部は、複数の輻輳検出後に送信対象となったデータのうち、前記特定部によって特定された輻輳が検出された宛先以外のデータを第2のキューに格納し、
前記第3格納部は、複数の輻輳検出後に送信対象となったデータのうち、前記特定部によって特定された輻輳が検出された宛先のデータを第3のキューに格納し、
前記第2送信部は、前記第1のキューに格納されるデータが全て送信されてから、前記第2のキューに格納されるデータを読み出して送信するとともに、前記第3のキューに格納されるデータを読み出して帯域を制御して送信することを特徴とする付記7〜10のいずれか一つに記載の情報処理装置。
【0132】
(付記12)データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行する情報処理装置であって、
受信したデータを第1のキューに格納する第1格納部と、
前記第1格納部によって前記第1のキューに格納されたデータを送信する第1送信部と、
前記中継装置によって第1の輻輳と第2の輻輳が検出された場合に、前記第1の輻輳と第2の輻輳検出後に送信対象となったデータのうち、前記第1の輻輳が検出された宛先以外のデータと第2の輻輳が検出された宛先以外のデータとを第2のキューに格納する第2格納部と、
前記第1の輻輳と第2の輻輳が検出された場合に、前記第1の輻輳と第2の輻輳検出後に送信対象となったデータのうち、前記第1の輻輳が検出された宛先のデータを第3のキューに格納する第3格納部と、
前記第1の輻輳と第2の輻輳検出後に送信対象となったデータのうち、前記第2の輻輳が検出された宛先のデータを第4のキューに格納する第4格納部と、
前記第1格納部によって前記第1のキューに格納されるデータが全て送信されてから、前記第2のキューに格納されるデータを読み出して送信するとともに、前記第3のキューと前記第4のキューに格納されるデータそれぞれを読み出し、それぞれ帯域を制御して送信する第2送信部と、
を有することを特徴とする情報処理装置。
【0133】
(付記13)データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行するコンピュータに実行させる輻輳制御方法であって、
受信したデータを第1のキューに格納し、
前記第1のキューに格納されたデータを送信し、
前記中継装置によって輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先以外のデータを第2のキューに格納し、
前記輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先のデータを第3のキューに格納し、
前記第1のキューに格納されるデータが全て送信されてから、前記第2のキューに格納されるデータを読み出して送信するとともに、前記第3のキューに格納されるデータを読み出して帯域を制御して送信する、
ことを特徴とする輻輳制御方法。
【符号の説明】
【0134】
10、20 L2スイッチ
11 通信インタフェース
12 MACテーブル
13 キュー領域
14 スイッチング実行部
15 輻輳検出部
30 サーバ
31 通信ポート
32 データ記憶領域
33 キュー領域
34 送信キュー構成テーブル
35 送信キュー管理テーブル
36 制御部
36a 受信制御部
36b 輻輳検出部
36c 格納部
36d 第1送信部
36e 第2送信部
36f 第3送信部

【特許請求の範囲】
【請求項1】
データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行するコンピュータに、
受信したデータを第1のキューに格納する手順と、
前記第1のキューに格納されたデータを送信する手順と、
前記中継装置によって輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先以外のデータを第2のキューに格納する手順と、
前記輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先のデータを第3のキューに格納する手順と、
前記第1のキューに格納されるデータが全て送信されてから、前記第2のキューに格納されるデータを読み出して送信するとともに、前記第3のキューに格納されるデータを読み出して帯域を制御して送信する手順と、
を実行させることを特徴とする輻輳制御プログラム。
【請求項2】
前記輻輳が解除された場合に、輻輳解除後に送信対象となったデータを前記第1のキューに格納する手順と、
前記第2のキューおよび前記第3のキューに格納されるデータが全て送信されてから、前記第1のキューに格納されるデータを読み出して送信する手順と、をさらにコンピュータに実行させることを特徴とする請求項1に記載の輻輳制御プログラム。
【請求項3】
複数の輻輳が検出された場合に、各輻輳に対して帯域制御する帯域幅に基づいて、帯域制御の対象とする輻輳を特定する手順をさらにコンピュータに実行させ、
前記第2のキューに格納する手順は、
複数の輻輳検出後に送信対象となったデータのうち、前記特定した輻輳が検出された宛先以外のデータを第2のキューに格納し、
前記第3のキューに格納する手順は、
前記複数の輻輳検出後に送信対象となったデータのうち、前記特定した輻輳が検出された宛先のデータを第3のキューに格納することを特徴とする請求項1または2に記載の輻輳制御プログラム。
【請求項4】
データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行するコンピュータに、
受信したデータを第1のキューに格納する手順と、
前記第1のキューに格納されたデータを送信する手順と、
前記中継装置によって第1の輻輳と第2の輻輳が検出された場合に、前記第1の輻輳と第2の輻輳検出後に送信対象となったデータのうち、前記第1の輻輳が検出された宛先以外のデータと第2の輻輳が検出された宛先以外のデータとを第2のキューに格納する手順と、
前記第1の輻輳と第2の輻輳が検出された場合に、前記第1の輻輳と第2の輻輳検出後に送信対象となったデータのうち、前記第1の輻輳が検出された宛先のデータを前記第3のキューに格納する手順と、
前記第1の輻輳と第2の輻輳検出後に送信対象となったデータのうち、前記第2の輻輳が検出された宛先のデータを第4のキューに格納する手順と、
前記第1のキューに格納されるデータが送信されてから、前記第2のキューに格納されるデータを読み出して送信するとともに、前記第3のキューと前記第4のキューに格納されるデータそれぞれを読み出し、それぞれ帯域を制御して送信する手順と、
を実行させることを特徴とする輻輳制御プログラム。
【請求項5】
データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行する情報処理装置であって、
受信したデータを第1のキューに格納する第1格納部と、
前記第1格納部によって前記第1のキューに格納されたデータを送信する第1送信部と、
前記中継装置によって輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先以外のデータを第2のキューに格納する第2格納部と、
前記輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先のデータを第3のキューに格納する第3格納部と、
前記第1格納部によって第1のキューに格納されたデータが全て送信されてから、前記第2格納部によって第2のキューに格納されたデータを読み出して送信するとともに、前記第3格納部によって第3のキューに格納されたデータを読み出して帯域を制御して送信する第2送信部と、
を有することを特徴とする情報処理装置。
【請求項6】
データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行するコンピュータに実行させる輻輳制御方法であって、
受信したデータを第1のキューに格納し、
前記第1のキューに格納されたデータを送信し、
前記中継装置によって輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先以外のデータを第2のキューに格納し、
前記輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先のデータを第3のキューに格納し、
前記第1のキューに格納されるデータが全て送信されてから、前記第2のキューに格納されるデータを読み出して送信するとともに、前記第3のキューに格納されるデータを読み出して帯域を制御して送信する、
ことを特徴とする輻輳制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate


【公開番号】特開2012−124871(P2012−124871A)
【公開日】平成24年6月28日(2012.6.28)
【国際特許分類】
【出願番号】特願2010−276363(P2010−276363)
【出願日】平成22年12月10日(2010.12.10)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】