(57)【要約】【課題】輻輳が発生した場合におけるデータパケットの処理効率の低下を抑制する。【解決手段】スイッチ装置２０は、保持部２０２と、スイッチング処理部２１１と、特定部２０３と、書換部２０４とを有する。保持部２０２は、各フローにおいて伝送されるデータ量が所定の閾値以上か否かを示すフラグが対応付けられたフローテーブル２０２０を保持する。スイッチング処理部２１１は、受信バッファ２０９が受信したデータパケットを、宛先に応じて送信ポート２１３毎に設けられた出力キュー２１２に格納する。特定部２０３は、受信バッファ２０９が受信したデータパケットの中で、データ量が所定の閾値以上であるフローに含まれるデータパケットを特定する。書換部２０４は、特定した各データパケットに含まれた輻輳通知情報を参照して、輻輳通知情報に輻輳状態を示す情報が含まれる場合、輻輳状態を示す情報を、非輻輳状態を示す情報に書き換える。【選択図】図２
2015186149.tif 000002
【特許請求の範囲】
【請求項１】
送信装置が送信したデータパケットを受信して受信装置へ送信するスイッチ装置において、
前記送信装置から前記受信装置へ送信される一連のデータパケットを含むフロー毎に、前記フローにおいて伝送されるデータのデータ量が第１の閾値以上か否かを示すフラグが対応付けられたフローテーブルを保持する保持部と、
前記送信装置が送信したデータパケットを受信する受信部と、
前記受信部が受信したデータパケットを、前記データパケットの宛先に応じて送信ポート毎に設けられた出力キューのいずれかに格納する格納部と、
前記受信部が受信したデータパケットの中で、伝送されるデータ量が前記第１の閾値以上であることを示すフラグが対応付けられたフローに含まれるデータパケットを、前記フローテーブルを参照して特定する特定部と、
前記特定部が特定したそれぞれのデータパケットに含まれた、輻輳の発生の有無を通知する輻輳通知情報を参照して、前記輻輳通知情報に輻輳の発生を示す情報が含まれる場合、前記輻輳の発生を示す情報を、輻輳が発生していない旨を示す情報に書き換える書換部と、
前記出力キュー内のデータパケットを送信する送信部と
を有することを特徴とするスイッチ装置。
【請求項２】
前記出力キュー内のデータのデータ量が第２の閾値以上か否かを判定する判定部と、
前記判定部が前記出力キュー内のデータのデータ量を前記第２の閾値以上と判定した場合、前記受信部が受信したデータパケットの中で、伝送されるデータ量が前記第１の閾値以上であることを示すフラグが対応付けられたフローに含まれるデータパケットの前記輻輳通知情報には、輻輳の発生を示す情報を書き込まず、伝送されるデータ量が前記第１の閾値未満であることを示すフラグが対応付けられたフローに含まれるデータパケットの前記輻輳通知情報に、輻輳の発生を示す情報を書き込む書込部と
を有することを特徴とするスイッチ装置。
【請求項３】
前記フロー毎に、前記送信装置から前記受信装置へ送信される一連のデータパケットのデータ量の累積値を算出する算出部と、
前記算出部が算出したデータ量の累積値が前記第１の閾値以上となった場合、前記フローテーブルにおいて、前記累積値に対応するフローに、伝送されるデータのデータ量が前記第１の閾値以上であることを示すフラグを設定する設定部と
を有することを特徴とする請求項１または２に記載のスイッチ装置。
【請求項４】
送信装置と、
受信装置と、
前記送信装置が送信したデータパケットを前記受信装置へ転送するスイッチ装置と
を有し、
前記スイッチ装置は、
前記送信装置から前記受信装置へ送信される一連のデータパケットを含むフロー毎に、前記フローにおいて伝送されるデータのデータ量が所定の閾値以上か否かを示すフラグが対応付けられたフローテーブルを保持する保持部と、
前記送信装置が送信したデータパケットを受信する受信部と、
前記受信部が受信したデータパケットを、前記データパケットの宛先に応じて送信ポート毎に設けられた出力キューのいずれかに格納する格納部と、
前記受信部が受信したデータパケットの中で、伝送されるデータ量が前記所定の閾値以上であることを示すフラグが対応付けられたフローに含まれるデータパケットを、前記フローテーブルを参照して特定する特定部と、
前記特定部が特定したそれぞれのデータパケットに含まれた、輻輳の発生の有無を通知する輻輳通知情報を参照して、前記輻輳通知情報に輻輳の発生を示す情報が含まれる場合、前記輻輳の発生を示す情報を、輻輳が発生していない旨を示す情報に書き換える書換部と、
前記出力キュー内のデータパケットを送信する送信部と
を有することを特徴とする情報処理システム。
【請求項５】
送信装置が送信したデータパケットを受信して受信装置へ送信するスイッチ装置の制御方法において、
コンピュータが、
前記送信装置が送信したデータパケットを受信し、
受信したデータパケットを、前記データパケットの宛先に応じて送信ポート毎に設けられた出力キューのいずれかに格納し、
前記送信装置から前記受信装置へ送信される一連のデータパケットを含むフロー毎に、前記フローにおいて伝送されるデータのデータ量が所定の閾値以上か否かを示すフラグが対応付けられたフローテーブルを参照して、受信したデータパケットの中で、伝送されるデータ量が所定の前記所定の閾値以上であることを示すフラグが対応付けられたフローに含まれるデータパケットを特定し、
特定したそれぞれのデータパケットに含まれた、輻輳の発生の有無を通知する輻輳通知情報を参照して、前記輻輳通知情報に輻輳の発生を示す情報が含まれる場合、前記輻輳の発生を示す情報を、輻輳が発生していない旨を示す情報に書き換え、
前記出力キュー内のデータパケットを送信する
処理を実行することを特徴とするスイッチ装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スイッチ装置、情報処理システムおよびスイッチ装置の制御方法に関する。
【背景技術】
【０００２】
通信ネットワーク内を流れるデータパケットを中継するスイッチ装置では、データパケットが集中することにより輻輳が発生する場合がある。スイッチ装置に輻輳が発生した場合、データパケットの送信元の通信装置が、現在の輻輳ウィンドウのサイズを所定のサイズに縮小することで、輻輳を解消させる技術が知られている。また、インターネットトラフィックのフローのデータパケット数分布は、少数のデータパケットからなる多数のMiceフローと、多数のデータパケットからなる少数のElephantフローとが混在することが知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−１９１９３１号公報
【特許文献２】特開２００９−１７７６５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、輻輳が発生した場合に輻輳ウィンドウのサイズを縮小させると、データパケットの伝送レートが低下する。伝送レートが低下した場合、データ量の多いElephantフローは、データ量の少ないMiceフローよりも、送信対象のデータの送信開始から送信完了までにより多くの時間を要する。そのため、miceフローに含まれるデータパケットと、Elephantフローに含まれるデータパケットとを、輻輳ウィンドウのサイズを縮小させることで一律に制御すると、Elephantフローにより伝送されるデータのスループットへの影響が大きくなる。また、輻輳ウィンドウのサイズを縮小させると、データ量の少ないMiceフローであっても、伝送レートが低下し、スループットが低下する。そのため、データパケットを効率的に処理できない場合があった。
【０００５】
本願に開示の技術は、輻輳が発生した場合におけるデータパケットの処理効率の低下を抑制する。
【課題を解決するための手段】
【０００６】
１つの側面では、送信装置が送信したデータパケットを受信して受信装置へ送信するスイッチ装置は、保持部と、受信部と、格納部と、特定部と、書換部と、送信部とを有する。保持部は、送信装置から受信装置へ送信される一連のデータパケットを含むフロー毎に、フローにおいて伝送されるデータのデータ量が所定の閾値以上か否かを示すフラグが対応付けられたフローテーブルを保持する。受信部は、送信装置が送信したデータパケットを受信する。格納部は、受信部が受信したデータパケットを、データパケットの宛先に応じて送信ポート毎に設けられた出力キューのいずれかに格納する。特定部は、受信部が受信したデータパケットの中で、伝送されるデータ量が所定の閾値以上であることを示すフラグが対応付けられたフローに含まれるデータパケットを、フローテーブルを参照して特定する。書換部は、特定部が特定したそれぞれのデータパケットに含まれた、輻輳の発生の有無を通知する輻輳通知情報を参照して、輻輳通知情報に輻輳の発生を示す情報が含まれる場合、輻輳の発生を示す情報を、輻輳が発生していない旨を示す情報に書き換える。送信部は、出力キュー内のデータパケットを送信する。
【発明の効果】
【０００７】
１実施形態によれば、輻輳が発生した場合におけるデータパケットの処理効率の低下を抑制する。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施例１における情報処理システムの一例を示す図である。
【図２】図２は、実施例１におけるスイッチ装置の一例を示すブロック図である。
【図３】図３は、フローテーブルの一例を示す図である。
【図４】図４は、ＥＣＮフラグのビット位置を説明する図である。
【図５】図５は、ＥＣＥフラグのビット位置を説明する図である。
【図６】図６は、実施例１における通信装置の一例を示すブロック図である。
【図７】図７は、実施例１におけるスイッチ装置の動作の一例を示すフローチャートである。
【図８】図８は、実施例１におけるデータパケットの流れの一例を示す図である。
【図９】図９は、実施例２におけるスイッチ装置の一例を示すブロック図である。
【図１０】図１０は、実施例２におけるスイッチ装置の動作の一例を示すフローチャートである。
【図１１】図１１は、実施例３における通信装置の一例を示すブロック図である。
【図１２】図１２は、実施例３におけるスイッチ装置の一例を示すブロック図である。
【図１３】図１３は、実施例３における通信装置の動作の一例を示すフローチャートである。
【図１４】図１４は、実施例４におけるコントローラの一例を示すブロック図である。
【図１５】図１５は、実施例４におけるスイッチ装置の一例を示すブロック図である。
【図１６】図１６は、実施例４におけるコントローラの動作の一例を示すフローチャートである。
【図１７】図１７は、実施例５における情報処理システムの一例を示す図である。
【図１８】図１８は、パッチパネル装置の一例を示すブロック図である。
【図１９】図１９は、スイッチ装置の機能を実現するコンピュータの一例を示す説明図である。
【発明を実施するための形態】
【０００９】
以下に、本願の開示するスイッチ装置、情報処理システムおよびスイッチ装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１０】
図１は、実施例１における情報処理システム１の一例を示す図である。情報処理システム１は、複数のスイッチ装置２０−１〜６、複数の通信装置１１−１〜６、およびコントローラ４０を有する。情報処理システム１は、例えばデータセンタに設けられる。複数の通信装置１１−１〜６のそれぞれは、例えばサーバである。なお、以下では、複数のスイッチ装置２０−１〜６のそれぞれを区別することなく総称する場合にスイッチ装置２０と記載する。また、複数の通信装置１１−１〜６のそれぞれを区別することなく総称する場合に通信装置１１と記載する。
【００１１】
情報処理システム１は、例えば複数のSpineスイッチ等である上位スイッチ群２１と、例えば複数のLeafスイッチ等である下位スイッチ群２２とを有する。上位スイッチ群２１には、例えば複数のスイッチ装置２０−１〜３が含まれ、下位スイッチ群２２には、例えば複数のスイッチ装置２０−４〜６が含まれる。スイッチ装置２０−４〜６のそれぞれは、スイッチ装置２０−１〜３の中の２つ以上のスイッチ装置２０に接続される。また、複数のスイッチ装置２０−４〜６のそれぞれは、通信装置１１に接続される。複数のスイッチ装置２０は、例えばファットツリーのトポロジーを構成する。
【００１２】
それぞれのスイッチ装置２０は、例えば、受信したデータパケットの送信元のＭＡＣアドレスを、データパケットを受信した外部ポートに対応付けてＦＤＢ（Forwarding  DataBase）に保持するアドレス学習機能を有する。そして、それぞれのスイッチ装置２０は、データパケットを受信した場合、ＦＤＢを参照し、受信したデータパケットの宛先のＭＡＣアドレスに対応付けられた外部ポートからデータパケットを送信する。
【００１３】
コントローラ４０は、それぞれのスイッチ装置２０に接続され、それぞれのスイッチ装置２０を制御する。本実施例において、コントローラ４０は、例えばＳＤＮ（Software-Defined  Network）コントローラであり、それぞれのスイッチ装置２０は、例えばＳＤＮ対応スイッチである。
【００１４】
コントローラ４０は、送信元の通信装置１１から宛先の通信装置１１へ送られる一連のデータパケットを含むフロー毎に、フローを特定する情報等を記述したフローテーブルを、それぞれのスイッチ装置２０へ送信する。それぞれのスイッチ装置２０は、コントローラ４０から送信されたフローテーブルを保持し、保持したフローテーブルに基づいて、受信したデータパケットを含むフローを識別する。
【００１５】
［スイッチ装置２０のブロック図］
図２は、実施例１におけるスイッチ装置２０の一例を示すブロック図である。スイッチ装置２０は、算出部２００、設定部２０１、保持部２０２、特定部２０３、書換部２０４、ＥＣＮ書込部２０５、および送信部２０６を有する。また、スイッチ装置２０は、複数の受信ポート２０８−１〜ｎ、複数の受信バッファ２０９−１〜ｎ、ＦＤＢ２１０、スイッチング処理部２１１、複数の出力キュー２１２−１〜ｎ、および複数の送信ポート２１３−１〜ｎを有する。
【００１６】
なお、以下では、複数の受信ポート２０８−１〜ｎのそれぞれを区別することなく総称する場合に受信ポート２０８と記載し、複数の受信バッファ２０９−１〜ｎのそれぞれを区別することなく総称する場合に受信バッファ２０９と記載する。また、複数の出力キュー２１２−１〜ｎのそれぞれを区別することなく総称する場合に出力キュー２１２と記載し、複数の送信ポート２１３−１〜ｎのそれぞれを区別することなく総称する場合に送信ポート２１３と記載する。
【００１７】
保持部２０２は、例えば図３に示すフローテーブル２０２０を保持する。図３は、フローテーブル２０２０の一例を示す図である。フローテーブル２０２０には、例えば図３に示すように、それぞれのフローを識別するFlow＿ID２０２１に対応付けて、マッチフィールド２０２２、Flow＿Count２０２３、およびE-flag２０２４が格納される。
【００１８】
マッチフィールド２０２２には、フローに含まれるデータパケットの宛先ＭＡＣアドレス（Dst＿MAC）や送信元ＭＡＣアドレス（Src＿MAC）など、フローに含まれる一連のデータパケットを特定する情報が格納される。Flow＿Count２０２３には、フローに含まれるデータパケットのデータ量の累積値を示す情報が格納される。
【００１９】
E-flag２０２４には、フローに含まれるデータパケットのデータ量の累積値が、例えば１ＭＢｙｔｅ等である所定の閾値以上の場合、「１」が格納され、フローに含まれるデータパケットのデータ量の累積値が所定の閾値未満の場合、「０」が格納される。以下、本願では、伝送されるデータ量の累積値が、例えば１ＭＢｙｔｅ等である所定の閾値以上のフローをElephantフローと呼び、伝送されるデータ量の累積値が所定の閾値未満のフローをMiceフローと呼ぶ。
【００２０】
それぞれの受信バッファ２０９は、受信ポート２０８毎に設けられており、対応する受信ポート２０８を介してデータパケットを受信する。それぞれの受信バッファ２０９は、受信部の一例である。それぞれの出力キュー２１２は、送信ポート２１３毎に設けられており、スイッチング処理部２１１から受け取ったデータパケットを、受け取った順に保持する。送信部２０６は、それぞれの出力キュー２１２が保持するデータパケットを、出力キュー２１２が保持した順に、出力キュー２１２に対応する送信ポート２１３から送信する。１つの受信ポート２０８と、１つの送信ポート２１３とは、１つの外部ポートに接続される。
【００２１】
スイッチング処理部２１１は、受信バッファ２０９がデータパケットを受信した場合、データパケットの送信元のＭＡＣアドレスと、受信バッファ２０９に対応する外部ポートの情報とを対応付けてＦＤＢ２１０に登録する。そして、データパケットの宛先のＭＡＣアドレスがＦＤＢ２１０内に登録されていれば、スイッチング処理部２１１は、宛先のＭＡＣアドレスに対応付けられた外部ポートに対応する出力キュー２１２にデータパケットを格納する。なお、データパケットの宛先のＭＡＣアドレスがＦＤＢ２１０内に登録されていなければ、スイッチング処理部２１１は、データパケットを受信した外部ポートに接続された送信ポート２１３に対応する出力キュー２１２以外の全ての出力キュー２１２にデータパケットを格納する。スイッチング処理部２１１は、格納部の一例である。
【００２２】
算出部２００は、それぞれの受信バッファ２０９がデータパケットを受信した場合、フローテーブル２０２０内のマッチフィールドおよびデータパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、算出部２００は、特定したFlow＿IDに対応付けられたFlow＿Countの値をフローテーブル２０２０内で特定する。そして、算出部２００は、特定したFlow＿Countの値に、受信バッファ２０９が受信したデータパケットのデータ量を加算することにより、Flow＿Countの値を更新する。設定部２０１は、フローテーブル２０２０内のFlow＿Countの値を監視し、Flow＿Countの値が所定の閾値以上となった場合、対応するE-flagの値に「１」を設定する。
【００２３】
ＥＣＮ書込部２０５は、それぞれの出力キュー２１２内のデータ量を監視し、いずれかの出力キュー２１２内のデータ量が所定の閾値以上か否かを判定する。所定の閾値とは、送信ポート２１３の伝送速度が例えば１０Ｇｂｐｓの場合、例えば６５パケットである。いずれかの出力キュー２１２内のデータ量が所定の閾値以上と判定した場合、ＥＣＮ書込部２０５は、データ量が所定の閾値以上となった出力キュー２１２内にスイッチング処理部２１１がデータパケットを格納する際、または、データ量が所定の閾値以上となった出力キュー２１２から送信部２０６がデータパケットを取り出す際に、それぞれのデータパケットのＩＰヘッダ内のＥＣＮフラグに「１１」を書き込む。
【００２４】
図４は、ＥＣＮフラグのビット位置を説明する図である。ＥＣＮフラグは、ＩＰデータパケット３０のヘッダのＤＳ（Differentiated  Services）フィールドの上位２ビットに割り当てられる。ＥＣＮフラグにおいて、「００」は輻輳検出が不可能であることを示し、「１０」または「０１」は輻輳検出が可能な状態であり、かつ、非輻輳状態を示し、「１１」は輻輳検出が可能な状態であり、かつ、輻輳状態を示す。ＥＣＮフラグは、輻輳の発生の有無を通知する輻輳通知情報の一例である。
【００２５】
なお、ヘッダのＥＣＮフラグに「１１」が書き込まれたデータパケットを受信した場合、受信側の通信装置１１は、ＴＣＰヘッダ内のＥＣＥ（ECN-Echo）フラグに「１」を書き込んだＡＣＫ（ACKnowledgement）パケットを返信する。
【００２６】
図５は、ＥＣＥフラグのビット位置を説明する図である。ＥＣＥフラグは、ＴＣＰパケット３１のヘッダ内のビット（例えば６ビットのReservedの最上位ビット）に割り当てられる。ＥＣＥフラグは、「０」が非輻輳状態を示し、「１」が輻輳状態を示す。また、例えば、Reservedの最上位から２番目のビットには、ＣＷＲ（Congestion  Window  Reduced）フラグが割り当てられる。ＣＷＲフラグは、「０」が輻輳ウィンドウの非縮小状態を示し、「１」が輻輳ウィンドウの縮小状態を示す。
【００２７】
特定部２０３は、それぞれの出力キュー２１２内のデータパケットを参照し、伝送されるデータ量が所定の閾値以上であることを示すE-flagが対応付けられたフローに含まれるデータパケットを、フローテーブル２０２０を参照して特定する。
【００２８】
例えば、特定部２０３は、出力キュー２１２内のそれぞれのデータパケットのヘッダと、フローテーブル２０２０とを参照して、データパケットが含まれるフローのFlow＿IDを特定する。そして、特定部２０３は、特定したFlow＿IDに対応付けられたE-flagが「１」であるか否か、即ち、特定したFlow＿IDに対応するフローがElephantフローであるか否かを判定する。E-flagが「１」である場合、特定部２０３は、E-flagが「１」であるフローに含まれるデータパケットを識別する情報を書換部２０４へ送る。
【００２９】
書換部２０４は、データパケットを識別する情報を特定部２０３から受け取った場合、それぞれの出力キュー２１２を参照して、受け取った情報で識別されるデータパケットを特定する。そして、書換部２０４は、特定したそれぞれのデータパケットについて、ＩＰヘッダ内のＥＣＮフラグの値が、輻輳状態を示す値である「１１」であるか否かを判定する。
【００３０】
ＩＰヘッダ内のＥＣＮフラグの値が「１１」である場合、書換部２０４は、ＥＣＮフラグの値を、非輻輳状態を示す、例えば「１０」に書き換える。ＩＰヘッダ内のＥＣＮフラグの値が「１１」ではない場合、書換部２０４は、ＥＣＮフラグの値を書き換えない。これにより、Elephantフローに含まれるデータパケットのＥＣＮフラグの値は、ＥＣＮ書込部２０５によって「１１」が書き込まれた場合であっても、書換部２０４によって「１０」に書き換えられる。一方、Miceフローに含まれるデータパケットのＥＣＮフラグの値は、ＥＣＮ書込部２０５によって「１１」が書き込まれた場合には、書換部２０４によって書き換えられず「１１」のままとなる。
【００３１】
なお、本実施例において、書換部２０４がＥＣＮフラグを書き換える処理は、ＥＣＮ書込部２０５がＥＣＮフラグを書き込む処理を行った後に、実行される。また、送信部２０６は、書換部２０４がＥＣＮフラグを書き換える処理を行った後に、出力キュー２１２内のデータパケットを送信する。
【００３２】
［通信装置１１のブロック図］
図６は、実施例１における通信装置の一例を示すブロック図である。通信装置１１は、アプリケーション処理部１１０、複数のTCP  Socket  Buffer１１１−１〜ｍ、およびＮＩＣ（Network  Interface  Card）１１２を有する。複数のTCP  Socket  Buffer１１１−１〜ｍのそれぞれは、例えばソケット毎に設けられる。
【００３３】
アプリケーション処理部１１０は、送信したデータパケットの応答として、ＥＣＥフラグが「１」のＡＣＫパケットを受信した場合、TCP  Socket  Buffer１１１において、輻輳ウィンドウサイズである現在のＴＣＰウィンドウサイズを例えば半分に縮小する。そして、アプリケーション処理部１１０は、ＴＣＰウィンドウサイズを縮小したTCP  Socket  Buffer１１１内のデータパケットのＴＣＰヘッダ内のＣＷＲフラグに「１」を書き込む。
【００３４】
［スイッチ装置２０の動作］
図７は、実施例１におけるスイッチ装置２０の動作の一例を示すフローチャートである。スイッチ装置２０は、データパケットを受信した場合、本フローチャートに示す動作を開始する。
【００３５】
まず、算出部２００は、保持部２０２内のマッチフィールドを参照し、受信バッファ２０９が受信したデータパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する（Ｓ１００）。スイッチング処理部２１１は、ＦＤＢ２１０を参照して、データパケットの宛先のＭＡＣアドレスに対応付けられた外部ポートに対応する出力キュー２１２にデータパケットを格納する（Ｓ１０１）。
【００３６】
次に、算出部２００は、特定したFlow＿IDに対応付けられたFlow＿Countの値をフローテーブル２０２０内で特定する。そして、算出部２００は、特定したFlow＿Countの値に、受信バッファ２０９が受信したデータパケットのデータ量を加算することにより、Flow＿Countの値を更新する（Ｓ１０２）。そして、設定部２０１は、加算後のFlow＿Countの値が、所定の閾値以上か否かを判定する（Ｓ１０３）。
【００３７】
Flow＿Countの値が所定の閾値未満である場合（Ｓ１０３：Ｎｏ）、ＥＣＮ書込部２０５は、ステップＳ１０５に示す処理を実行する。一方、Flow＿Countの値が所定の閾値以上である場合（Ｓ１０３：Ｙｅｓ）、設定部２０１は、Flow＿Countに対応付けられたE-flagの値に「１」を設定する（Ｓ１０４）。
【００３８】
次に、ＥＣＮ書込部２０５は、それぞれの出力キュー２１２内のデータ量を参照して、いずれかの出力キュー２１２内のデータ量が所定の閾値以上か否かを判定する（Ｓ１０５）。いずれの出力キュー２１２内のデータ量も所定の閾値未満である場合（Ｓ１０５：Ｎｏ）、特定部２０３は、ステップＳ１０７に示す処理を実行する。
【００３９】
一方、いずれかの出力キュー２１２内のデータ量が所定の閾値以上である場合（Ｓ１０５：Ｙｅｓ）、ＥＣＮ書込部２０５は、データ量が所定の閾値以上となった出力キュー２１２内のそれぞれのデータパケットのＥＣＮフラグに「１１」を書き込む（Ｓ１０６）。
【００４０】
次に、特定部２０３は、それぞれの出力キュー２１２内のデータパケットおよびフローテーブル２０２０を参照し、Elephantフローに含まれるデータパケットが出力キュー２１２内にあるか否かを判定する（Ｓ１０７）。Elephantフローに含まれるデータパケットが出力キュー２１２内にない場合（Ｓ１０７：Ｎｏ）、書換部２０４は、データパケットのＥＣＮフラグの値を書き換えない。送信部２０６は、出力キュー２１２が保持するデータパケットを、出力キュー２１２が保持した順に、出力キュー２１２に対応する送信ポート２１３から送信し（Ｓ１１０）、スイッチ装置２０は、本フローチャートに示した動作を終了する。
【００４１】
一方、Elephantフローに含まれるデータパケットが出力キュー２１２内にある場合（Ｓ１０７：Ｙｅｓ）、特定部２０３は、Elephantフローに含まれるデータパケットを識別する情報を書換部２０４へ送る。書換部２０４は、特定部２０３から受け取った情報で識別されるElephantフローに含まれるデータパケットを出力キュー２１２内で特定する。そして、書換部２０４は、特定したデータパケットのＥＣＮフラグの値が「１１」であるか否かを判定する（Ｓ１０８）。Elephantフローに含まれるデータパケットのＥＣＮフラグの値が「１１」である場合（Ｓ１０８：Ｙｅｓ）、書換部２０４は、ＥＣＮフラグの値を「１０」に書き換える（Ｓ１０９）。そして、送信部２０６は、ステップＳ１１０に示した処理を実行する。
【００４２】
一方、Elephantフローに含まれるデータパケットのＥＣＮフラグの値が「１１」ではない場合（Ｓ１０８：Ｎｏ）、書換部２０４は、ＥＣＮフラグの値を「１０」に書き換える処理を行わず、送信部２０６は、ステップＳ１１０に示した処理を実行する。
【００４３】
［データパケットの流れ］
図８は、実施例１におけるデータパケットの流れの一例を示す図である。図８では、図１に示した情報処理システム１において、データパケットが、データパケットの送信側である通信装置１１−１から受信側である通信装置１１−４へ送信される場合のデータパケットの流れが例示されている。また、図８では、スイッチ装置２０−２において輻輳が発生した場合のデータパケットの流れが例示されている。なお、図８において、実線の矢印はElephantフローに含まれるデータパケットの流れを示しており、破線の矢印はMiceフローに含まれるデータパケットの流れを示す。
【００４４】
まず、通信装置１１−１は、Elephantフローに含まれるデータパケットと、Miceフローに含まれるデータパケットとを、ＥＣＮフラグの値に「１０」を設定してスイッチ装置２０−４へ送信する（Ｓ２００）。スイッチ装置２０−４では輻輳は発生していないため、スイッチ装置２０−４内のＥＣＮ書込部２０５は、ＥＣＮフラグに「１１」を書き込まない。
【００４５】
また、スイッチ装置２０−４内の特定部２０３は、出力キュー２１２内のデータパケットの中で、Elephantフローに含まれるデータパケットを特定する。そして、スイッチ装置２０−４内の書換部２０４は、特定されたデータパケットのＥＣＮフラグの値が「１１」か否かを判定する。図８の例では、スイッチ装置２０−４において輻輳が発生していないため、Elephantフローに含まれるデータパケットのＥＣＮフラグの値は「１０」である。従って、書換部２０４は、Elephantフローに含まれるデータパケットのＥＣＮフラグの値を書き換えない。そして、送信部２０６は、それぞれのデータパケットをスイッチ装置２０−２へ送信する（Ｓ２０１）。
【００４６】
スイッチ装置２０−２において輻輳が発生した場合（Ｓ２０２）、スイッチ装置２０−２内のＥＣＮ書込部２０５は、データ量が所定値以上となった出力キュー２１２内のそれぞれのデータパケットのＥＣＮフラグに「１１」を書き込む（Ｓ２０３）。そして、スイッチ装置２０−２内の特定部２０３は、出力キュー２１２内のデータパケットの中で、Elephantフローに含まれるデータパケットを特定する。そして、スイッチ装置２０−４内の書換部２０４は、Elephantフローに含まれるデータパケットのＥＣＮフラグの値が「１１」か否かを判定する。
【００４７】
図８の例では、Elephantフローに含まれるデータパケットのＥＣＮフラグの値が「１１」であるため、スイッチ装置２０−２内の書換部２０４は、Elephantフローに含まれるデータパケットのＥＣＮフラグの値を「１０」に書き換える（Ｓ２０４）。そして、送信部２０６は、それぞれのデータパケットをスイッチ装置２０−５へ送信する（Ｓ２０５、Ｓ２０６）。このとき、Elephantフローに含まれるデータパケットのＥＣＮフラグの値は「１０」であり、Miceフローに含まれるデータパケットのＥＣＮフラグの値は「１１」である。
【００４８】
スイッチ装置２０−５では輻輳は発生していないため、スイッチ装置２０−４内のＥＣＮ書込部２０５は、ＥＣＮフラグに「１１」を書き込まない。また、出力キュー２１２内のデータパケットの中で、Elephantフローに含まれるデータパケットのＥＣＮフラグの値が「１０」であるため、スイッチ装置２０−５内の書換部２０４は、ＥＣＮフラグの値を書き換えない。その結果、スイッチ装置２０−５内の送信部２０６は、ＥＣＮフラグに「１０」が書き込まれた状態で、Elephantフローに含まれるデータパケットを通信装置１１−４へ送信する（Ｓ２０７）。また、スイッチ装置２０−５内の送信部２０６は、ＥＣＮフラグに「１１」が書き込まれた状態で、Miceフローに含まれるデータパケットを通信装置１１−４へ送信する（Ｓ２０８）。
【００４９】
通信装置１１−４は、Elephantフローに含まれるデータパケットのＥＣＮフラグが「１０」であるため、ＥＣＥフラグに「０」を設定したＡＣＫパケットをスイッチ装置２０−５へ送信する（Ｓ２０９）。ＥＣＥフラグに「０」が設定されたＡＣＫパケットは、スイッチ装置２０−５、スイッチ装置２０−２、およびスイッチ装置２０−４を介して、通信装置１１−１へ送信される（Ｓ２１０〜Ｓ２１２）。
【００５０】
また、通信装置１１−４は、Miceフローに含まれるデータパケットのＥＣＮフラグが「１１」であるため、ＥＣＥフラグに「１」を設定したＡＣＫパケットをスイッチ装置２０−５へ送信する（Ｓ２１３）。ＥＣＥフラグに「１」が設定されたＡＣＫパケットは、スイッチ装置２０−５、スイッチ装置２０−２、およびスイッチ装置２０−４を介して、通信装置１１−１へ送信される（Ｓ２１４〜Ｓ２１６）。
【００５１】
通信装置１１−１は、Elephantフローに含まれるデータパケットの送信に対して、ＥＣＥフラグに「０」が設定されたＡＣＫパケットを受信したため、ＴＣＰウィンドウサイズの縮小制御を行うことなく、データパケットの送信を続ける（Ｓ２１７〜Ｓ２２０）。このとき、データパケットのＴＣＰヘッダのＣＷＲには「０」が設定される。
【００５２】
また、通信装置１１−１は、Miceフローに含まれるデータパケットの送信に対して、ＥＣＥフラグに「１」が設定されたＡＣＫパケットを受信したため、ＴＣＰウィンドウサイズを例えば半分に縮小する（Ｓ２２１）。そして、通信装置１１−１は、サイズを縮小したＴＣＰウィンドウに基づいて、Miceフローに含まれるデータパケットを送信する（Ｓ２２２〜Ｓ２２５）。このとき、データパケットのＴＣＰヘッダのＣＷＲには「１」が設定される。
【００５３】
［効果］
上述したように、スイッチ装置２０は、Miceフローに含まれるデータパケットについては、ヘッダ内のＥＣＮフラグの値が、輻輳状態を示す「１１」であっても、ＥＣＮフラグの値を書き換えない。そのため、Miceフローに含まれるデータパケットについては、送信元の通信装置１１において、ＴＣＰウィンドウサイズの縮小制御が行われる。これにより、Miceフローに含まれるデータパケットの送信レートが低下し、輻輳状態を解消することができる。
【００５４】
一方、スイッチ装置２０は、Elephantフローに含まれるデータパケットについては、ヘッダ内のＥＣＮフラグの値が、輻輳状態を示す「１１」である場合、ＥＣＮフラグの値を、非輻輳状態を示す「１０」に書き換える。これにより、Elephantフローに含まれるデータパケットについては、送信元の通信装置１１において、ＴＣＰウィンドウサイズの縮小制御が行われない。そのため、Elephantフローに含まれるデータパケットの送信レートの低下が抑制され、Elephantフローのスループットの低下が抑制される。
【実施例２】
【００５５】
［スイッチ装置２０のブロック図］
図９は、実施例２におけるスイッチ装置２０の一例を示すブロック図である。スイッチ装置２０は、算出部２００、設定部２０１、保持部２０２、ＥＣＮ書込部２０５、送信部２０６、および判定部２０７を有する。また、スイッチ装置２０は、複数の受信ポート２０８−１〜ｎ、複数の受信バッファ２０９−１〜ｎ、ＦＤＢ２１０、スイッチング処理部２１１、複数の出力キュー２１２−１〜ｎ、および複数の送信ポート２１３−１〜ｎを有する。
【００５６】
本実施例のスイッチ装置２０は、輻輳が発生した場合、MiceフローのデータパケットのＥＣＮフラグには「１１」を書き込むが、ElephantフローのデータパケットのＥＣＮフラグには「１１」を書き込まない点が、実施例１のスイッチ装置２０とは異なる。なお、以下に説明する点を除き、図９において、図２と同じ符号を付した構成は、図２における構成と同一または同様の機能を有するため説明を省略する。
【００５７】
判定部２０７は、それぞれの出力キュー２１２内のデータ量を監視し、いずれかの出力キュー２１２内のデータ量が所定の閾値以上か否かを判定する。所定の閾値とは、送信ポート２１３の伝送速度が例えば１０Ｇｂｐｓの場合、例えば６５パケットである。いずれかの出力キュー２１２内のデータ量が所定の閾値以上と判定した場合、判定部２０７は、データ量が所定の閾値以上となった出力キュー２１２の情報をＥＣＮ書込部２０５へ送る。
【００５８】
ＥＣＮ書込部２０５は、データ量が所定の閾値以上となった出力キュー２１２の情報を判定部２０７から受け取った場合、フローテーブル２０２０を参照して、出力キュー２１２内のデータパケットの中で、Miceフローに含まれるデータパケットを特定する。
【００５９】
例えば、ＥＣＮ書込部２０５は、フローテーブル２０２０およびデータパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、ＥＣＮ書込部２０５は、特定したFlow＿IDに対応付けられたE-flagが「０」であるフローに含まれるデータパケット、即ち、Miceフローに含まれるデータパケットを特定する。
【００６０】
そして、ＥＣＮ書込部２０５は、出力キュー２１２内のデータパケットの中で、Miceフローに含まれるデータパケットのヘッダ内のＥＣＮフラグに、輻輳状態を示す「１１」を書き込む。このとき、ＥＣＮ書込部２０５は、出力キュー２１２内のデータパケットの中で、Elephantフローに含まれるデータパケットのヘッダ内のＥＣＮフラグには、「１１」を書き込まない。
【００６１】
［スイッチ装置２０の動作］
図１０は、実施例２におけるスイッチ装置２０の動作の一例を示すフローチャートである。なお、以下に説明する点を除き、図１０において、図７と同じ符号を付した処理は、図７における処理と同一または同様の処理であるため説明を省略する。
【００６２】
ステップＳ１０５において、判定部２０７は、それぞれの出力キュー２１２内のデータ量を参照し、いずれかの出力キュー２１２内のデータ量が所定の閾値以上か否かを判定する（Ｓ１０５）。いずれの出力キュー２１２内のデータ量も所定の閾値未満である場合（Ｓ１０５：Ｎｏ）、送信部２０６は、ステップＳ１１０に示した処理を実行する。
【００６３】
一方、いずれかの出力キュー２１２内のデータ量が所定の閾値以上である場合（Ｓ１０５：Ｙｅｓ）、判定部２０７は、データ量が所定の閾値以上となった出力キュー２１２の情報をＥＣＮ書込部２０５へ送る。ＥＣＮ書込部２０５は、フローテーブル２０２０を参照して、データ量が所定の閾値以上となった出力キュー２１２内に、Miceフローに含まれるデータパケットがあるか否かを判定する（Ｓ１２０）。
【００６４】
データ量が所定の閾値以上となった出力キュー２１２内に、Miceフローに含まれるデータパケットがない場合（Ｓ１２０：Ｎｏ）、特定部２０３は、ステップ１０７に示した処理を実行する。一方、データ量が所定の閾値以上となった出力キュー２１２内に、Miceフローに含まれるデータパケットがある場合（Ｓ１２０：Ｙｅｓ）、ＥＣＮ書込部２０５は、該データパケットのＥＣＮフラグに「１１」を書き込む（Ｓ１２１）。そして、送信部２０６は、ステップＳ１１０に示した処理を実行する。
【００６５】
［効果］
上述したように、本実施例のスイッチ装置２０は、輻輳が発生した場合、データ量が所定の閾値以上となった出力キュー２１２が保持するデータパケットの中で、Miceフローに含まれるデータパケットのＥＣＮフラグに「１１」を書き込む。一方、本実施例のスイッチ装置２０は、輻輳が発生した場合、データ量が所定の閾値以上となった出力キュー２１２が保持するデータパケットの中で、Elephantフローに含まれるデータパケットのＥＣＮフラグには「１１」を書き込まない。
【００６６】
これにより、Miceフローに含まれるデータパケットについては、ヘッダ内のＥＣＮフラグに、輻輳状態を示す「１１」が書き込まれ、送信元の通信装置１１において、ＴＣＰウィンドウサイズの縮小制御が行われる。一方、Elephantフローに含まれるデータパケットについては、ヘッダ内のＥＣＮフラグの値が、非輻輳状態を示す「１０」のままとなるため、送信元の通信装置１１において、ＴＣＰウィンドウサイズの縮小制御が行われない。そのため、Elephantフローに含まれるデータパケットの送信レートの低下が抑制され、Elephantフローのスループットの低下が抑制される。
【実施例３】
【００６７】
［通信装置１１のブロック図］
図１１は、実施例３における通信装置１１の一例を示すブロック図である。本実施例における通信装置１１は、アプリケーション処理部１１０、複数のTCP  Socket  Buffer１１１−１〜ｍ、ＮＩＣ１１２、算出部１１３、設定部１１４、保持部１１５、および書込部１１６を有する。
【００６８】
本実施例では、通信装置１１が、Miceフローに含まれるデータパケットと、Elephantフローに含まれるデータパケットとを識別し、識別情報をそれぞれのデータパケットに書き込む点が、実施例１の通信装置１１とは異なる。本実施例におけるスイッチ装置２０は、データパケットに書き込まれた識別情報を用いて、Miceフローに含まれるデータパケットと、Elephantフローに含まれるデータパケットとを識別する。なお、以下に説明する点を除き、図１１において、図６と同じ符号を付した構成は、図６における構成と同一または同様の機能を有するため説明を省略する。
【００６９】
保持部１１５は、例えば図３で説明したフローテーブル２０２０と同様のフローテーブルを保持する。算出部１１３は、それぞれのTCP  Socket  Buffer１１１にデータパケットが格納された場合、保持部１１５内のフローテーブルのマッチフィールドおよびデータパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、算出部１１３は、特定したFlow＿IDに対応付けられたFlow＿Countの値をフローテーブル内で特定する。
【００７０】
そして、算出部１１３は、特定したFlow＿Countの値に、TCP  Socket  Buffer１１１に格納されたデータパケットのデータ量を加算することにより、Flow＿Countの値を更新する。設定部１１４は、フローテーブル内のFlow＿Countの値を監視し、Flow＿Countの値が所定の閾値以上となった場合、対応するE-flagの値に「１」を設定する。
【００７１】
書込部１１６は、TCP  Socket  Buffer１１１にデータパケットが格納された場合、保持部１１５内のフローテーブルのマッチフィールドおよびデータパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、書込部１１６は、特定したFlow＿IDに対応付けられたE-flagの値を抽出する。
【００７２】
抽出したE-flagの値が「０」である場合、書込部１１６は、TCP  Socket  Buffer１１１に格納されたデータパケットのヘッダ内のＤＳＣＰ（Differentiated  Services  Code  Point）フィールドに、特定の値を書き込む。特定の値とは、Miceフローのデータパケットであることを示す値であり、例えば「000000」である。ＤＳＣＰフィールドは、図４に示したＤＳフィールドの下位６ビットに割り当てられる。一方、抽出したE-flagの値が「１」である場合、書込部１１６は、TCP  Socket  Buffer１１１に格納されたデータパケットのヘッダ内のＤＳＣＰフィールドに、特定の値を書き込む。特定の値とは、Elephantフローのデータパケットであることを示す値であり、例えば「000011」である。
【００７３】
なお、本実施例において、設定部１１４は、フロー毎のデータ量の累積値が所定の閾値以上か否かに基づいて、それぞれのフローがMiceフローまたはElephantフローのいずれであるかを判定するが、判定方法はこれに限られない。例えば、設定部１１４は、それぞれのフローについて、例えば１秒等である所定時間毎に、それぞれのTCP  Socket  Buffer１１１のデータ量を計測する。そして、設定部１１４は、所定時間毎のデータ量が、例えば１００ｋＢｙｔｅ等である所定の閾値以上となった場合、Elephantフローと判定するようにしてもよい。
【００７４】
［スイッチ装置２０のブロック図］
図１２は、実施例３におけるスイッチ装置２０の一例を示すブロック図である。スイッチ装置２０は、書換部２０４、ＥＣＮ書込部２０５、および送信部２０６を有する。また、スイッチ装置２０は、複数の受信ポート２０８−１〜ｎ、複数の受信バッファ２０９−１〜ｎ、ＦＤＢ２１０、スイッチング処理部２１１、複数の出力キュー２１２−１〜ｎ、および複数の送信ポート２１３−１〜ｎを有する。
【００７５】
本実施例におけるスイッチ装置２０は、算出部２００、設定部２０１、保持部２０２、および特定部２０３を有しない点が、実施例１におけるスイッチ装置２０とは異なる。なお、以下に説明する点を除き、図１２において、図２と同じ符号を付した構成は、図２における構成と同一または同様の機能を有するため説明を省略する。
【００７６】
書換部２０４は、それぞれの出力キュー２１２内のデータパケットのＩＰヘッダを参照し、ＤＳＣＰにElephantフローを示す値が設定されたデータパケットを特定する。そして、書換部２０４は、特定したそれぞれのデータパケットについて、ＩＰヘッダ内のＥＣＮフラグの値が、輻輳状態を示す値である「１１」であるか否かを判定する。
【００７７】
ＩＰヘッダ内のＥＣＮフラグの値が「１１」である場合、書換部２０４は、ＥＣＮフラグの値を、非輻輳状態を示す、例えば「１０」に書き換える。ＩＰヘッダ内のＥＣＮフラグの値が「１１」ではない場合、書換部２０４は、ＥＣＮフラグの値を書き換えない。
【００７８】
［通信装置１１の動作］
図１３は、実施例３における通信装置１１の動作の一例を示すフローチャートである。例えば、セッションが開始する都度、通信装置１１は、本フローチャートに示す動作を開始する。
【００７９】
まず、アプリケーション処理部１１０は、TCP  Socket  Buffer１１１を０に初期化する（Ｓ３００）。そして、アプリケーション処理部１１０は、ＤＳＣＰの値を「000000」に初期化する（Ｓ３０１）。そして、アプリケーション処理部１１０は、保持部１１５内のフローテーブル内に、Flow＿ID、マッチフィールド、Flow＿Count、およびE-flagを含むレコードを作成する（Ｓ３０２）。マッチフィールドには、例えばTCP  Socket  Buffer１１１を特定する情報が格納される。Flow＿CountおよびE-flagには、初期値として例えば０が格納される。
【００８０】
次に、アプリケーション処理部１１０は、読み込めるデータが存在するか否かを判定する（Ｓ３０３）。読み込めるデータが存在しない場合（Ｓ３０３：Ｎｏ）、アプリケーション処理部１１０は、セッションが終了したか否かを判定する（Ｓ３１１）。セッションが終了していない場合（Ｓ３１１：Ｎｏ）、アプリケーション処理部１１０は、再びステップＳ３０３に示した処理を実行する。一方、セッションが終了した場合（Ｓ３１１：Ｙｅｓ）、通信装置１１は、本フローチャートに示した処理を終了する。
【００８１】
読み込めるデータが存在する場合（Ｓ３０３：Ｙｅｓ）、アプリケーション処理部１１０は、データを読み込んでデータパケットを作成する（Ｓ３０４）。そして、アプリケーション処理部１１０は、作成したデータパケットを、ステップＳ３００で初期化されたTCP  Socket  Buffer１１１に格納する（Ｓ３０５）。
【００８２】
次に、算出部１１３および書込部１１６は、ステップＳ３０２で作成されたレコードを参照して、E-flagが「１」か否かを判定する（Ｓ３０６）。E-flagが「１」である場合（Ｓ３０６：Ｙｅｓ）、書込部１１６は、TCP  Socket  Buffer１１１に格納されたデータパケットのＤＳＣＰの値を、例えば「000011」等である特定の値に書き換える（Ｓ３１０）。そして、アプリケーション処理部１１０は、再びステップＳ３０３に示した処理を実行する。
【００８３】
一方、E-flagが「０」である場合（Ｓ３０６：Ｎｏ）、算出部１１３は、TCP  Socket  Buffer１１１に格納されたデータパケットのデータサイズを、ステップＳ３０２で作成されたレコード内のFlow＿Countに加算する（Ｓ３０７）。そして、設定部１１４は、Flow＿Countが所定の閾値以上か否かを判定する（Ｓ３０８）。
【００８４】
Flow＿Countが所定の閾値以上である場合（Ｓ３０８：Ｙｅｓ）、設定部１１４は、ステップＳ３０２で作成されたレコード内のE-flagに１を設定し（Ｓ３０９）、書込部１１６は、ステップＳ３１０に示した処理を実行する。一方、Flow＿Countが所定の閾値未満である場合（Ｓ３０８：Ｎｏ）、アプリケーション処理部１１０は、再びステップＳ３０３に示した処理を実行する。
【００８５】
［効果］
本実施例では、通信装置１１が、Elephantフローに含まれるデータパケットと、Miceフローに含まれるデータパケットとを判別し、それぞれのデータパケットに識別情報を書き込む。これにより、スイッチ装置２０の処理負荷を軽減することができる。
【実施例４】
【００８６】
［コントローラ４０のブロック図］
図１４は、実施例４におけるコントローラの一例を示すブロック図である。コントローラ４０は、通知部４３、保持部４４、算出部４５、および設定部４６を有する。保持部４４は、例えば図３で説明したフローテーブル２０２０と同様のフローテーブルを保持する。本実施例では、コントローラ４０が、ElephantフローとMiceフローとを判別し、それぞれのフローを識別する情報をそれぞれのスイッチ装置２０に提供する点が、実施例１とは異なる。コントローラ４０は、例えばElephantフローを特定する情報を、それぞれのスイッチ装置２０に提供する。
【００８７】
算出部４５は、情報処理システム１全体のデータパケットの流れを管理するＡＭＳ（Application  Management  Software）から、情報処理システム１を流れたデータパケットのデータ量等を含むフローに関する情報を受信する。そして、算出部４５は、保持部４４内のフローテーブルのマッチフィールドと、受信したフローに関する情報とに基づいて、データパケットが含まれるフローのFlow＿IDを特定する。
【００８８】
そして、算出部４５は、特定したFlow＿IDに対応付けられたFlow＿Countの値をフローテーブル内で特定する。そして、算出部４５は、特定したFlow＿Countの値に、データパケットのデータ量を加算することにより、Flow＿Countの値を更新する。また、設定部４６は、フローテーブル内のFlow＿Countの値を監視し、Flow＿Countの値が所定の閾値以上となった場合、E-flagの値に「１」を設定する。
【００８９】
通知部４３は、フローテーブル内のそれぞれのフローのE-flagの値を監視する。そして、E-flagの値が「０」から「１」に変化した場合、通知部４３は、E-flagの値が「０」から「１」に変化したフローが通過するスイッチ装置２０およびスイッチ装置３０を特定する。コントローラ４０は、情報処理システム１のトポロジーの情報を保持する。通知部４３は、例えば、情報処理システム１のトポロジーの情報を参照して、E-flagの値が「０」から「１」に変化したフローが通過するスイッチ装置２０およびスイッチ装置３０を特定する。
【００９０】
そして、通知部４３は、特定したスイッチ装置２０およびスイッチ装置３０に、E-flagの値が「０」から「１」に変化したフローを特定する情報を送信する。フローを特定する情報とは、例えば、送信元ＭＡＣアドレス、宛先ＭＡＣアドレス、送信元ＩＰアドレス、宛先ＩＰアドレス、およびプロトコル番号等である。
【００９１】
［スイッチ装置２０のブロック図］
図１５は、実施例４におけるスイッチ装置２０の一例を示すブロック図である。スイッチ装置２０は、保持部２０２、特定部２０３、書換部２０４、ＥＣＮ書込部２０５、および送信部２０６を有する。また、スイッチ装置２０は、複数の受信ポート２０８−１〜ｎ、複数の受信バッファ２０９−１〜ｎ、ＦＤＢ２１０、スイッチング処理部２１１、複数の出力キュー２１２−１〜ｎ、複数の送信ポート２１３−１〜ｎ、および登録部２２０を有する。
【００９２】
本実施例におけるスイッチ装置２０は、算出部２００および設定部２０１に代えて、登録部２２０を有する点が、実施例１におけるスイッチ装置２０とは異なる。なお、以下に説明する点を除き、図１５において、図２と同じ符号を付した構成は、図２における構成と同一または同様の機能を有するため説明を省略する。
【００９３】
登録部２２０は、コントローラ４０からフローを特定する情報を受信した場合、フローテーブル２０２０を参照して、受信した情報に対応するマッチフィールド２０２２を、フローテーブル２０２０内で特定する。そして、登録部２２０は、特定したマッチフィールド２０２２に対応付けらたE-flag２０２４に「１」を設定する。
【００９４】
［コントローラ４０の動作］
図１６は、実施例４におけるコントローラ４０の動作の一例を示すフローチャートである。
【００９５】
算出部４５は、ＡＭＳから、情報処理システム１を流れたデータパケットを含むフローに関する情報を受信したか否かを判定する（Ｓ４００）。ＡＭＳからフローに関する情報を受信した場合（Ｓ４００：Ｙｅｓ）、算出部４５は、保持部４４内のフローテーブルのマッチフィールドと、受信したフローに関する情報とに基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、算出部４５は、特定したFlow＿IDに対応付けられたFlow＿Countの値をフローテーブル内で特定する。
【００９６】
次に、算出部４５は、特定したFlow＿Countの値に、データパケットのデータ量を加算することにより、Flow＿Countの値を更新する（Ｓ４０１）。そして、設定部４６は、Flow＿Countの値が、所定の閾値以上か否かを判定する（Ｓ４０２）。Flow＿Countの値が、所定の閾値未満である場合（Ｓ４０２：Ｎｏ）、算出部４５は、再びステップＳ４００に示した処理を実行する。
【００９７】
一方、Flow＿Countの値が所定の閾値以上となった場合（Ｓ４０２：Ｙｅｓ）、通知部４３は、E-flagの値が「０」から「１」に変化したフローが通過するスイッチ装置２０を特定する（Ｓ４０３）。そして、通知部４３は、特定したスイッチ装置２０に、E-flagの値が「０」から「１」に変化したフローを特定する情報を送信し（Ｓ４０４）、算出部４５は、再びステップＳ４００に示した処理を実行する。
【００９８】
［効果］
本実施例では、コントローラ４０が、ElephantフローとMiceフローとを判別し、Elephantフローを特定する情報をそれぞれのスイッチ装置２０に提供する。これにより、スイッチ装置２０の処理負荷を軽減することができる。
【実施例５】
【００９９】
図１７は、実施例５における情報処理システム１の一例を示す図である。本実施例における情報処理システム１は、複数のスイッチ装置２０−１〜６、複数の通信装置１１−１〜ｎ、およびパッチパネル装置５０を有する。なお、本実施例において、それぞれのスイッチ装置２０は、一般的に用いられる従来のスイッチ装置であってもよく、前述の実施例１〜４に記載されたスイッチ装置２０の機能を有している必要はない。
【０１００】
パッチパネル装置５０は、複数のスイッチ装置２０と、複数の通信装置１１とを、それぞれワイヤレベルで接続および分岐させる装置である。図１７において、パッチパネル装置５０内に示した破線は、それぞれのスイッチ装置２０と通信装置１１との接続を示しており、パッチパネル装置５０内に示した実線は、それぞれのスイッチ装置２０間の接続を示している。図１７に例示した接続関係により、例えば図１に示したトポロジーが構成される。
【０１０１】
［パッチパネル装置５０のブロック図］
図１８は、パッチパネル装置５０の一例を示すブロック図である。パッチパネル装置５０は、接続設定部５１、算出部５２、設定部５３、保持部５４、複数の入力ポート５５−１〜ｎ、接続部５６、書換部５７、および複数の出力ポート５８−１〜ｎを有する。なお、以下では、複数の入力ポート５５−１〜ｎのそれぞれを区別することなく総称する場合に入力ポート５５と記載し、複数の５８−１〜ｎのそれぞれを区別することなく総称する場合に出力ポート５８と記載する。
【０１０２】
接続設定部５１は、ユーザが設定した、それぞれの入力ポート５５とそれぞれの出力ポート５８との接続を指示する設定情報を保持する。接続部５６は、接続設定部５１が保持する設定情報に従って、それぞれの入力ポート５５とそれぞれの出力ポート５８とをワイヤレベルで接続する。
【０１０３】
保持部５４は、例えば図３で説明したフローテーブル２０２０と同様のフローテーブルを保持する。算出部５２は、それぞれの入力ポート５５で受信されたデータパケットについて、フローテーブル内のマッチフィールドおよびデータパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、算出部５２は、特定したFlow＿IDに対応付けられたFlow＿Countの値をフローテーブル内で特定する。
【０１０４】
そして、算出部５２は、特定したFlow＿Countの値に、データパケットのデータ量を加算することにより、Flow＿Countの値を更新する。設定部５３は、フローテーブル内のFlow＿Countの値を監視し、Flow＿Countの値が所定の閾値以上となった場合、対応するE-flagの値に「１」を設定する。
【０１０５】
書換部５７は、それぞれの出力ポート５８から送信されるデータパケットのヘッダ情報を監視し、ＥＣＮフラグに「１１」が書き込まれたデータパケットを特定する。そして、書換部５７は、特定したデータパケットのヘッダ情報と、保持部５４内のフローテーブルとを参照して、Elephantフローに含まれるデータパケットであるか否かを判定する。Elephantフローに含まれるデータパケットである場合、書換部５７は、データパケットのヘッダ内のＥＣＮフラグを「１０」に書き換える。
【０１０６】
［効果］
本実施例によれば、前述の実施例１〜４の機能を有していない一般的なスイッチ装置を用いた場合であっても、輻輳が発生した場合、Elephantフローに含まれるデータパケットのＥＣＮフラグを「１０」に書き換えることができる。これにより、Miceフローに含まれるデータパケットについてはＴＣＰウィンドウサイズの縮小制御を行って輻輳状態を解消し、Elephantフローに含まれるデータパケッについては、Elephantフローのスループットの低下を抑制することができる。
【０１０７】
［変形例］
なお、本願に開示の技術は、上記した実施例に限定されるものではなく、その要旨の範囲内で数々の変形が可能である。
【０１０８】
例えば、上記した実施例では、輻輳が発生した場合、データ量の多いElephantフローに含まれるデータパケットのＥＣＮフラグを、非輻輳状態を示す「１０」に書き換えたが、本願に開示の技術はこれに限られない。例えば、フロー毎にスループットの維持に対する優先度を割り当て、スイッチ装置２０は、輻輳が発生した場合、優先度が相対的に高いフローに含まれるデータパケットのＥＣＮフラグを、非輻輳状態を示す「１０」に書き換えるようにしてもよい。それぞれのフローの優先度は、例えば情報処理システム１の管理者等が予め設定する。
【０１０９】
これにより、データ量の少ないMiceフローであっても、スループットの維持に対する優先度が他のフローに比べて高い場合は、輻輳が発生した場合でも、ＴＣＰウィンドウサイズの縮小制御が行われず、スループットが維持される。また、データ量の多い複数のElephantフローによって輻輳が発生した場合であっても、スループットの維持に対する優先度が相対的に低いElephantフローについては、ＴＣＰウィンドウサイズの縮小制御が行われることにより、より迅速な輻輳の解消が期待できる。
【０１１０】
なお、上記した各実施例で説明した各種の処理は、予め用意されたプログラムをコンピュータで実行することで実現できる。そこで、以下では、上記実施例と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図１９は、スイッチ装置２０の機能を実現するコンピュータ７０の一例を示す図である。
【０１１１】
図１９において、スイッチ装置２０の機能を実現するコンピュータ７０は、通信インターフェイス７１、操作インターフェイス７２、表示インターフェイス７３、ＲＯＭ７４、ＣＰＵ７５、ＲＡＭ７６、およびＨＤＤ７７を有する。
【０１１２】
ＨＤＤ７７には、例えば図１９に示すように、スイッチ処理プログラム７７０が予め記憶される。ＣＰＵ７５は、スイッチ処理プログラム７７０をＨＤＤ７７から読み出してＲＡＭ７６に展開する。このスイッチ処理プログラム７７０については、図２、図９、図１２、または図１５に示した各々の構成要素と同様、適宜統合又は分離してもよい。また、ＨＤＤ７７に格納される各データは、常に全てのデータがＨＤＤ７７内に格納される必要はなく、処理に必要なデータのみがＨＤＤ７７に格納されればよい。
【０１１３】
ＣＰＵ７５は、スイッチ処理プログラム７７０を、スイッチ処理プロセス７６０として機能させる。このスイッチ処理プロセス７６０は、ＨＤＤ７７から読み出した各種データを適宜ＲＡＭ７６上に割り当てられた領域に展開し、この展開した各種データに基づいて各種処理を実行する。
【０１１４】
上記した実施例１におけるスイッチ装置２０では、ＣＰＵ７５が、スイッチ処理プログラム７７０を読み込んで実行することにより、算出部２００、設定部２０１、保持部２０２、特定部２０３、書換部２０４、ＥＣＮ書込部２０５、送信部２０６、受信バッファ２０９、ＦＤＢ２１０、スイッチング処理部２１１、および出力キュー２１２と同様の機能を発揮する。
【０１１５】
また、上記した実施例２におけるスイッチ装置２０では、ＣＰＵ７５が、スイッチ処理プログラム７７０を読み込んで実行することにより、算出部２００、設定部２０１、保持部２０２、ＥＣＮ書込部２０５、送信部２０６、判定部２０７、受信バッファ２０９、ＦＤＢ２１０、スイッチング処理部２１１、および出力キュー２１２と同様の機能を発揮する。
【０１１６】
また、上記した実施例３におけるスイッチ装置２０では、ＣＰＵ７５が、スイッチ処理プログラム７７０を読み込んで実行することにより、書換部２０４、ＥＣＮ書込部２０５、送信部２０６、受信バッファ２０９、ＦＤＢ２１０、スイッチング処理部２１１、および出力キュー２１２と同様の機能を発揮する。
【０１１７】
また、上記した実施例４におけるスイッチ装置２０では、ＣＰＵ７５が、スイッチ処理プログラム７７０を読み込んで実行することにより、保持部２０２、特定部２０３、書換部２０４、ＥＣＮ書込部２０５、送信部２０６、受信バッファ２０９、ＦＤＢ２１０、スイッチング処理部２１１、出力キュー２１２、および登録部２２０と同様の機能を発揮する。
【０１１８】
なお、上記した実施例１におけるスイッチ処理プロセス７６０は、図２に示したスイッチ装置２０において実行される処理、例えば図７に示した処理を実行する。また、上記した実施例２におけるスイッチ処理プロセス７６０は、図９に示したスイッチ装置２０において実行される処理、例えば図１０に示した処理を実行する。ＣＰＵ７５が仮想的に実現する各処理部は、全ての処理部がＣＰＵ７５によって常に実現される必要はなく、処理に必要な処理部のみが仮想的に実現されればよい。
【０１１９】
なお、上記のスイッチ処理プログラム７７０については、必ずしも最初からＨＤＤ７７やＲＯＭ７４内に記憶させておく必要はない。例えば、コンピュータ７０に挿入されるフレキシブルディスク、いわゆるＦＤ、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの可搬型記録媒体に各プログラムが記憶される。そして、コンピュータ７０がこれらの可搬型記録媒体から各プログラムを取得して実行するようにしてもよい。また、各プログラムを記憶させた他のコンピュータまたはサーバ装置などから、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介して、コンピュータ７０が各プログラムを取得して実行するようにしてもよい。
【符号の説明】
【０１２０】
２０  スイッチ装置
２０２  保持部
２０２０  フローテーブル
２０３  特定部
２０４  書換部
２０６  送信部
２０９  受信バッファ
２１１  スイッチング処理部
２１２  出力キュー
２１３  送信ポート
【図１】
2015186149.tif 000003
【図２】
2015186149.tif 000004
【図３】
2015186149.tif 000005
【図４】
2015186149.tif 000006
【図５】
2015186149.tif 000007
【図６】
2015186149.tif 000008
【図７】
2015186149.tif 000009
【図８】
2015186149.tif 000010
【図９】
2015186149.tif 000011
【図１０】
2015186149.tif 000012
【図１１】
2015186149.tif 000013
【図１２】
2015186149.tif 000014
【図１３】
2015186149.tif 000015
【図１４】
2015186149.tif 000016
【図１５】
2015186149.tif 000017
【図１６】
2015186149.tif 000018
【図１７】
2015186149.tif 000019
【図１８】
2015186149.tif 000020
【図１９】
2015186149.tif 000021