(57)【要約】【課題】仮想スイッチから物理スイッチへのスイッチ処理のオフロードの実行を、仮想スイッチの処理負荷に応じて制御すること。【解決手段】制御装置１は、情報処理装置２で動作する仮想スイッチ２ａがスイッチ処理を行う第１のモードと、仮想スイッチ２ａおよび物理スイッチ３が当該スイッチ処理を協働して行う第２のモードとの切り替えを制御する。受信部１ａは、情報処理装置２の負荷の情報と、情報処理装置２で動作する仮想スイッチ２ａが扱う通信の第１の通信量と、情報処理装置２と他の装置との通信の第２の通信量とを情報処理装置２から取得する。制御部１ｂは、取得した情報処理装置２の負荷の情報と第１の通信量と第２の通信量とに基づいて第１のモードから第２のモードへの切り替え可否を決定する。【選択図】図１
2015076643.tif 000002
【特許請求の範囲】
【請求項１】
仮想スイッチが動作可能な装置と、前記装置の通信を中継する物理スイッチとに対し、前記仮想スイッチがスイッチ処理を行う第１のモードと、前記仮想スイッチおよび前記物理スイッチが前記スイッチ処理を協働して行う第２のモードとを切り替え可能な情報処理装置を制御するコンピュータに、
前記装置の負荷の情報と、前記仮想スイッチが扱う通信の第１の通信量と、前記装置と他の装置との通信の第２の通信量とを前記装置から取得し、
取得した前記装置の負荷の情報と前記第１の通信量と前記第２の通信量とに基づいて前記第１のモードから前記第２のモードへの切り替え可否を決定する、
処理を実行させる制御プログラム。
【請求項２】
前記取得では、前記仮想スイッチを実行するハイパーバイザによる前記装置の負荷の情報を取得する、請求項１記載の制御プログラム。
【請求項３】
前記取得では、ＳＮＭＰによる要求を前記装置に送信し、当該要求に対する応答として、前記装置の負荷と前記第１の通信量と前記第２の通信量とを示すＭＩＢ情報を前記装置から取得する、請求項１または２記載の制御プログラム。
【請求項４】
前記第１のモードから前記第２のモードへ切り替えた後、前記装置の負荷の情報と前記第１の通信量と前記第２の通信量とを前記装置から取得し、取得した前記装置の負荷の情報と前記第１の通信量と前記第２の通信量とに基づいて、前記第２のモードから前記第１のモードへの切り替え可否を決定する、請求項１乃至３の何れか１項に記載の制御プログラム。
【請求項５】
前記決定では、前記装置の負荷が第１の閾値以上であり、かつ、前記第１の通信量と前記第２の通信量との合計に対する前記第１の通信量の割合が第２の閾値以上である場合に、前記第１のモードから前記第２のモードへ切り替え可と決定し、前記装置の負荷が前記第１の閾値未満か、または、前記割合が前記第２の閾値未満の場合に、前記第１のモードから前記第２のモードへ切り替え不可と決定する、請求項１乃至４の何れか１項に記載の制御プログラム。
【請求項６】
前記取得では、前記物理スイッチの負荷の情報を前記物理スイッチから取得し、
前記決定では、前記物理スイッチの負荷の情報に基づいて前記切り替え可否を決定する、請求項１乃至５の何れか１項に記載の制御プログラム。
【請求項７】
前記決定では、前記物理スイッチの負荷が第３の閾値以下の場合に前記第１のモードから前記第２のモードへ切り替え可と決定し、前記物理スイッチの負荷が前記第３の閾値よりも大きい場合に前記第１のモードから前記第２のモードへ切り替え不可と決定する、請求項６記載の制御プログラム。
【請求項８】
前記取得では、前記第１の通信量として、前記装置で動作する複数の仮想マシン間の通信の通信量を取得する、請求項１乃至７の何れか１項に記載の制御プログラム。
【請求項９】
仮想スイッチが動作可能な装置と、前記装置の通信を中継する物理スイッチとに対し、前記仮想スイッチがスイッチ処理を行う第１のモードと、前記仮想スイッチおよび前記物理スイッチが前記スイッチ処理を協働して行う第２のモードとの切り替えを制御する制御装置であって、
前記装置の負荷の情報と、前記仮想スイッチが扱う通信の第１の通信量と、前記装置と他の装置との通信の第２の通信量とを前記装置から取得する受信部と、
取得した前記装置の負荷の情報と前記第１の通信量と前記第２の通信量とに基づいて前記第１のモードから前記第２のモードへの切り替え可否を決定する制御部と、
を有する制御装置。
【請求項１０】
仮想スイッチが動作可能な装置と、前記装置の通信を中継する物理スイッチとに対し、前記仮想スイッチがスイッチ処理を行う第１のモードと、前記仮想スイッチおよび前記物理スイッチが前記スイッチ処理を協働して行う第２のモードとの切り替えを制御する制御方法であって、コンピュータが、
前記装置の負荷の情報と、前記仮想スイッチが扱う通信の第１の通信量と、前記装置と他の装置との通信の第２の通信量とを前記装置から取得し、
取得した前記装置の負荷の情報と前記第１の通信量と前記第２の通信量とに基づいて前記第１のモードから前記第２のモードへの切り替え可否を決定する、
制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は制御プログラム、制御装置および制御方法に関する。
【背景技術】
【０００２】
現在、情報処理の分野では、物理的なコンピュータ（物理マシンや物理ホストと呼ぶことがある）上で、複数の仮想的なコンピュータ（仮想マシンや論理ホストと呼ぶことがある）を動作させる仮想化技術が利用されている。各仮想マシン上では、ＯＳ（Operating System）などのソフトウェアを実行できる。仮想化技術を利用する物理マシンは、複数の仮想マシンを管理するソフトウェアを実行する。
【０００３】
例えば、ハイパーバイザと呼ばれるソフトウェアが、ＣＰＵ（Central Processing Unit）の処理能力やＲＡＭ（Random Access Memory）の記憶領域を、演算のリソースとして複数の仮想マシンに割り振ることがある。また、ハイパーバイザが仮想マシンの通信を中継する機能（仮想スイッチと呼ぶことがある）を物理マシン上で動作させることもある。
【０００４】
ここで、ソフトウェアによる処理の一部をハードウェアに処理させることで、ソフトウェア処理に伴う負荷を軽減することが考えられている（オフロードと呼ぶことがある）。例えば、ソフトウェアでの詳細検査が必要な箇所でソフトウェア処理に切り替わるように、ソフトウェア処理への切り替え条件を設定する提案がある。この提案では、１つのアプリケーションセッション中の所望箇所をソフトウェアで処理し、その他の箇所をハードウェアで処理する。また、仮想スイッチの処理（例えば、ＱｏＳ（Quality of Service）やフィルタリングなど）を、外部の物理スイッチへオフロードすることも考えられている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２７２６２８号公報
【非特許文献】
【０００６】
【非特許文献１】大河原克行、“富士通、サーバー上の仮想スイッチ機能を１０ＧｂＥスイッチにオフロードする技術”、[online]、平成22年6月10日、株式会社Impress Watch、[平成25年4月18日検索]、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｃｌｏｕｄ．ｗａｔｃｈ．ｉｍｐｒｅｓｓ．ｃｏ．ｊｐ／ｄｏｃｓ／ｅｖｅｎｔ／２０１００６１０＿３７３１６７．ｈｔｍｌ＞
【発明の概要】
【発明が解決しようとする課題】
【０００７】
仮想スイッチから物理スイッチに処理をオフロードすることで、仮想スイッチの処理負荷を軽減させることはできる。しかし、仮想スイッチの処理負荷が低いような場合は、物理スイッチへオフロードせずに仮想スイッチで処理を実行した方が、処理性能の向上を見込める。したがって、例えば、仮想スイッチから物理スイッチへのオフロードを実施すべきか否かを判断して、オフロードの実施有無を動的に切り替えることが求められる。
【０００８】
具体的には、仮想スイッチから物理スイッチへのオフロードの実施可否を判断するためには、例えば、仮想スイッチの処理負荷を軽減する必要があるか否かと、仮想スイッチに処理負荷のかかる通信がどの程度発生しているかとを判断し、仮想スイッチから物理スイッチへのオフロード実施の適否を決定することが求められる。
【０００９】
しかし、仮想スイッチが動作する物理マシンの処理負荷や、物理マシンの通信量それぞれを単に取得、参照したとしても、仮想スイッチから物理スイッチへのオフロード実施の適否について適切な判断を行うことが可能な情報とはならない。
【００１０】
１つの側面では、本発明は、仮想スイッチから物理スイッチへのスイッチ処理のオフロードの実行を、仮想スイッチの処理負荷に応じて制御できる制御プログラム、制御装置および制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
１つの態様では、コンピュータによって実行される制御プログラムが提供される。この制御プログラムは、仮想スイッチが動作可能な装置と、装置の通信を中継する物理スイッチとに対し、仮想スイッチがスイッチ処理を行う第１のモードと、仮想スイッチおよび物理スイッチがスイッチ処理を協働して行う第２のモードとを切り替え可能な情報処理装置を制御するコンピュータに、装置の負荷の情報と、仮想スイッチが扱う通信の第１の通信量と、装置と他の装置との通信の第２の通信量とを装置から取得し、取得した装置の負荷の情報と第１の通信量と第２の通信量とに基づいて第１のモードから第２のモードへの切り替え可否を決定する、処理を実行させる。
【００１２】
また、１つの態様では、仮想スイッチが動作可能な装置と、装置の通信を中継する物理スイッチとに対し、仮想スイッチがスイッチ処理を行う第１のモードと、仮想スイッチおよび物理スイッチがスイッチ処理を協働して行う第２のモードとの切り替えを制御する制御装置が提供される。この制御装置は、受信部と制御部とを有する。受信部は、装置の負荷の情報と、仮想スイッチが扱う通信の第１の通信量と、装置と他の装置との通信の第２の通信量とを装置から取得する。制御部は、取得した装置の負荷の情報と第１の通信量と第２の通信量とに基づいて第１のモードから第２のモードへの切り替え可否を決定する。
【００１３】
また、１つの態様では、仮想スイッチが動作可能な装置と、装置の通信を中継する物理スイッチとを含み、仮想スイッチがスイッチ処理を行う第１のモードと、仮想スイッチおよび物理スイッチがスイッチ処理を協働して行う第２のモードとの切り替えを制御する制御方法が提供される。この制御方法では、コンピュータが、装置の負荷の情報と、仮想スイッチが扱う通信の第１の通信量と、装置と他の装置との通信の第２の通信量とを装置から取得し、取得した装置の負荷の情報と第１の通信量と第２の通信量とに基づいて第１のモードから第２のモードへの切り替え可否を決定する。
【発明の効果】
【００１４】
１つの側面では、仮想スイッチから物理スイッチへのスイッチ処理のオフロードの実行を、仮想スイッチの処理負荷に応じて制御できる。
【図面の簡単な説明】
【００１５】
【図１】第１の実施の形態の情報処理システムを示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】制御サーバのハードウェア例を示す図である。
【図４】スイッチのハードウェア例を示す図である。
【図５】各装置のソフトウェア例を示す図である。
【図６】仮想スイッチ監視設定テーブルの例を示す図である。
【図７】物理スイッチ監視設定テーブルの例を示す図である。
【図８】サーバ測定テーブルの例を示す図である。
【図９】物理スイッチ測定テーブルの例を示す図である。
【図１０】ＭＩＢ情報の例を示す図である。
【図１１】オフロード適否の判定例を示すフローチャートである。
【図１２】物理スイッチの負荷の取得例を示すフローチャートである。
【図１３】オフロード状態の解除の判定例を示すフローチャートである。
【図１４】サーバの情報の取得例を示すフローチャートである。
【図１５】オフロードの例を示す図である。
【図１６】オフロード状態の解除の例を示す図である。
【図１７】各装置の他のソフトウェア例を示す図である。
【図１８】取得対象の情報の例を示す図である。
【発明を実施するための形態】
【００１６】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の情報処理システムを示す図である。第１の実施の形態の情報処理システムは、制御装置１、情報処理装置２，４および物理スイッチ３を含む。情報処理装置２と物理スイッチ３とは直接または間接に接続されている。例えば、情報処理装置２と物理スイッチ３とは所定のケーブルを介して直接接続される。あるいは、情報処理装置２と物理スイッチ３との間にリピータまたはリピータハブなどの他の装置を介在させることで、情報処理装置２と物理スイッチ３とを間接的に接続してもよい。制御装置１、情報処理装置２および物理スイッチ３は、ネットワーク５に接続されている。物理スイッチ３および情報処理装置４は、ネットワーク６に接続されている。
【００１７】
情報処理装置２では、仮想スイッチ２ａおよび仮想マシン２ｂ，２ｃが動作可能である。例えば、情報処理装置２により実行されるハイパーバイザが仮想スイッチ２ａの機能を実現してもよい。また、ハイパーバイザが情報処理装置２のリソースを仮想マシン２ｂ，２ｃに割り当ててもよい。
【００１８】
物理スイッチ３は、情報処理装置２，４間の通信を中継する。物理スイッチ３は、ＯＳＩ（Open Systems Interconnection）参照レベルの第２層（Ｌ２：Layer2）や第３層（Ｌ３：Layer3）で通信を中継する中継装置でもよい。
【００１９】
第１の実施の形態の情報処理システムでは、仮想マシン２ｂ，２ｃ間のスイッチ処理を仮想スイッチ２ａで行う第１のモードと、仮想スイッチ２ａおよび物理スイッチ３が当該スイッチ処理を協働して行う第２のモードとを切り替え可能である。例えば、スイッチ処理は通信データの転送、ＱｏＳ、フィルタリング（例えば、ＡＣＬ（Access Control List）を用いたセキュリティ機能）およびミラーリングなどを含む。
【００２０】
第１の実施の形態の情報処理システムでは、これらのスイッチ処理を仮想スイッチ２ａから物理スイッチ３に移し、仮想スイッチ２ａおよび物理スイッチ３によりスイッチ処理を協働で行うことで、情報処理装置２の負荷軽減を図れる（オフロード）。ここで、第１のモードの状態をオフロードが解除された状態、第２のモードの状態をオフロード状態ともいえる。
【００２１】
制御装置１は、受信部１ａおよび制御部１ｂを有する。制御部１ｂは、ＣＰＵ、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。制御部１ｂはプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）も含まれ得る。制御装置１は、上記プロセッサとＲＡＭなどのメモリとを含むコンピュータなどの情報処理装置でもよい。
【００２２】
受信部１ａは、情報処理装置２の負荷の情報と、仮想スイッチ２ａが扱う通信の第１の通信量と、情報処理装置２と他の装置（例えば、情報処理装置４）との通信の第２の通信量とを情報処理装置２から取得する。情報処理装置２と通信する他の装置が複数であれば、第２の通信量は、情報処理装置２と当該複数の他の装置との通信の通信量の合計である。例えば、受信部１ａは、取得した各情報を制御装置１が備える記憶部（例えば、ＲＡＭやＨＤＤ（Hard Disk Drive）など）に格納できる。
【００２３】
制御部１ｂは、取得した情報処理装置２の負荷の情報と、第１の通信量と、第２の通信量とに基づいて第１のモードから第２のモードへの切り替え可否を決定する。例えば、制御部１ｂは、情報処理装置２の負荷が比較的大きく（例えば、第１の閾値以上）、かつ、第１，第２の通信量の合計に対する第１の通信量の割合が比較的大きい（例えば、第２の閾値以上）場合に、第１のモードから第２のモードへ切り替え可と決定してもよい。
【００２４】
情報処理装置２の負荷が比較的大きく、情報処理装置２における通信のうち、仮想スイッチ２ａで扱われる通信量の割合が比較的大きい場合には、情報処理装置２において、仮想スイッチ２ａの処理に起因する負荷が比較的大きいと推定できるからである。この場合、オフロードを行うことで、情報処理装置２の負荷を軽減できる可能性が高い。
【００２５】
この場合、制御部１ｂは情報処理装置２の負荷が比較的小さい（例えば、第１の閾値未満）か、または、第１，第２の通信量の合計に対する第１の通信量の割合が比較的小さい（例えば、第２の閾値未満）場合に、第１のモードから第２のモードへ切り替え不可と決定してもよい。
【００２６】
情報処理装置２の負荷が比較的小さければ情報処理装置２の演算のリソースに余裕があると考えられるからである。また、情報処理装置２における通信のうち、仮想スイッチ２ａで扱われる通信の割合が比較的小さければ仮想スイッチ２ａの処理に起因する負荷は比較的小さいと推定できるからである。この場合、オフロードを行わなくてもよいと考えられる。
【００２７】
制御部１ｂは、情報処理装置２から情報を取得し（ステップＳ１）、当該情報に基づいて第１のモードから第２のモードへ切り替えると決定した後、情報処理装置２および物理スイッチ３に対して切り替えを指示してもよい（ステップＳ２）。情報処理装置２および物理スイッチ３は、当該指示に応じて、第１のモードから第２のモードへの切り替えを行う（ステップＳ３）。
【００２８】
制御装置１によれば、受信部１ａにより、情報処理装置２の負荷の情報と、仮想スイッチ２ａが扱う通信の第１の通信量と、情報処理装置２と他の装置との通信の第２の通信量とが情報処理装置２から取得される。制御部１ｂにより、取得した情報処理装置２の負荷と、第１の通信量と、第２の通信量とに基づいて第１のモードから第２のモードへの切り替え可否が決定される。
【００２９】
これにより、仮想スイッチ２ａの処理負荷を推定する情報を取得し、当該情報に基づいてモード切り替えを実行できる。具体的には次の通りである。例えば、仮想スイッチ２ａの機能がハイパーバイザの機能の一部であると、ハイパーバイザによる負荷の何れの割合が仮想スイッチ２ａの処理に起因するものであるかを特定できず、仮想スイッチ２ａの負荷のみを計測できないことがある。一方、仮想スイッチ２ａが動作する情報処理装置２の処理負荷や、情報処理装置２の通信量それぞれを単に取得、参照しても、仮想スイッチ２ａの処理負荷を把握するのは困難である。
【００３０】
そこで、制御装置１では、情報処理装置２の負荷と、仮想スイッチ２ａが扱う通信の第１の通信量と、情報処理装置２と他の装置との通信の第２の通信量とを情報処理装置２から取得する。これらの情報を用いれば、例えば、前述のように情報処理装置２の負荷が比較的大きく、かつ、仮想スイッチ２ａの負荷が比較的大きいと推定される場合を適切に検出して、第１のモードから第２のモードへの切り替えを行える。
【００３１】
情報処理装置２の負荷を考慮する理由は、仮想スイッチ２ａで扱われる通信の割合が比較的大きくても、情報処理装置２が必ずしも高負荷であるとは限らないからである。すなわち、情報処理装置２が比較的低負荷であるにも関わらずモード切り替えが行われることを抑えられる。
【００３２】
なお、受信部１ａは、情報処理装置２の負荷として、仮想スイッチ２ａを実行するハイパーバイザの処理による負荷を取得してもよい。例えば、制御部１ｂは、当該ハイパーバイザの処理による負荷が比較的大きく、かつ、情報処理装置２における通信のうち、仮想スイッチ２ａに起因する通信の割合が比較的大きいと判断される場合に、モード切り替え可と決定する。これにより、例えば情報処理装置２の負荷の主要因が、仮想スイッチ２ａの処理に起因する可能性が特に高いと推定される場合に、モード切り替えを行える。
【００３３】
また、受信部１ａは、第１の通信量として、より絞り込んだ情報を取得することも考えられる。例えば、第１の通信量として、情報処理装置２上で動作する複数の仮想マシン（例えば、仮想マシン２ｂ，２ｃ）の間の仮想スイッチ２ａを経由した通信の通信量を取得してもよい。仮想マシン間の当該通信量の割合が比較的大きい場合、仮想スイッチ２ａにおけるデータ転送の処理やＱｏＳなどのオフロード対象の処理の頻度が高まっており、それによって情報処理装置２の負荷も高まっていると推定されるからである。この場合、オフロードにより情報処理装置２の負荷を軽減できる可能性が特に高い。
【００３４】
また、受信部１ａは、第２のモードへの切り替え後にも情報処理装置２や物理スイッチ３の負荷や通信量の取得を継続してもよい。そして、制御部１ｂは、情報処理装置２や物理スイッチ３の負荷に応じて、第２のモードから第１のモードへの切り替え（オフロード状態の解除）可否を決定してもよい。例えば、オフロード後に、物理スイッチ３の負荷が比較的大きくなり、情報処理装置２の負荷が比較的小さくなったのであれば、第２のモードから第１のモードへ切り替えた方が性能向上を図れる可能性があるからである。
【００３５】
受信部１ａは、例えば、ＳＮＭＰ（Simple Network Management Protocol）を用いて、情報処理装置２および物理スイッチ３から負荷や通信量の情報を取得してもよい。これにより、情報処理装置２および物理スイッチ３から共通の方法により効率的に情報収集できる。
【００３６】
更に、制御装置１による処理は、情報処理装置２で実現されてもよい。すなわち、制御装置１で実行される処理と情報処理装置２で実行される処理とを、ハードウェア的に１つの情報処理装置２で実行させることも可能である。その場合、情報処理装置２が備える制御部（例えば、プロセッサ）が、仮想スイッチ２ａおよび物理スイッチ３から取得した情報に基づいて、制御部１ｂと同様の処理を実行する。
【００３７】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムを示す図である。第２の実施の形態の情報処理システムは、制御サーバ１００、サーバ２００、スイッチ３００およびクライアント４００を含む。制御サーバ１００、サーバ２００およびスイッチ３００は、ネットワーク１０に接続されている。サーバ２００は、所定のケーブルを介してスイッチ３００に接続されている。スイッチ３００およびクライアント４００は、ネットワーク２０に接続されている。ネットワーク１０，２０は、例えばＬＡＮ（Local Area Network）である。ネットワーク１０，２０は、例えばＷＡＮ（Wide Area Network）やインターネットなどの広域ネットワークでもよい。ネットワーク１０は、運用管理用のネットワークでもよい。
【００３８】
制御サーバ１００は、サーバ２００およびスイッチ３００の運用管理を行うサーバコンピュータである。制御サーバ１００は、サーバ２００およびスイッチ３００から管理用の情報を収集する。当該情報の収集には、ＳＮＭＰを利用できる。ＳＮＭＰは管理用の情報を取得するためのプロトコルである。制御サーバ１００はマネージャ、サーバ２００およびスイッチ３００はエージェントとして機能する。制御サーバ１００（マネージャ）は、サーバ２００およびスイッチ３００（エージェント）により管理されるＭＩＢ（Message Information Base）と呼ばれる管理情報群から、所定の情報を収集する。
【００３９】
また、制御サーバ１００は、サーバ２００のオフロードを制御する。具体的には、サーバ２００で動作する仮想スイッチのデータ転送、ＱｏＳ、フィルタリングなどの機能をスイッチ３００に移行させる。物理スイッチ（スイッチ３００）を用いたオフロードは、例えばＶＥＰＡ（Virtual Ethernet Port Aggregator）（Ｅｔｈｅｒｎｅｔは登録商標）と呼ばれる方法を用いて実現され得る。
【００４０】
サーバ２００は、ハイパーバイザや複数の仮想マシンを実行するサーバコンピュータである。ハイパーバイザは、サーバ２００のＣＰＵやＲＡＭなどのリソースを複数の仮想マシンに割り当てる。ハイパーバイザは、複数の仮想マシン間の通信や仮想マシンと他の装置（例えば、クライアント４００）との通信を中継する機能（仮想スイッチ）も担う。
【００４１】
スイッチ３００は、サーバ２００と他の装置（例えば、クライアント４００）との通信を中継する中継装置である。スイッチ３００は、ＯＳＩ参照モデルの第２層で通信の中継を行うＬ２スイッチである。ただし、スイッチ３００は、他の階層で通信の中継を行うものでもよい。例えば、スイッチ３００はＬ３スイッチやルータなどでもよい。
【００４２】
クライアント４００は、ユーザにより利用されるクライアントコンピュータである。例えば、ユーザは、サーバ２００で動作する仮想マシンにより提供される各種サービスを、クライアント４００を用いて利用できる。ただし、ネットワーク２０には更に複数のクライアントが接続され得る。サーバ２００上の仮想マシンは、当該複数のクライアントからもアクセスされ得る。
【００４３】
図３は、制御サーバのハードウェア例を示す図である。制御サーバ１００は、プロセッサ１０１、ＲＡＭ１０２、ＨＤＤ１０３、ＮＩＣ（Network Interface Card）１０４、画像信号処理部１０５、入力信号処理部１０６、ディスクドライブ１０７および機器接続部１０８を有する。各ユニットが制御サーバ１００のバスに接続されている。サーバ２００およびクライアント４００も制御サーバ１００と同様のユニットを用いて実現できる。
【００４４】
プロセッサ１０１は、制御サーバ１００の情報処理を制御する。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ１０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００４５】
ＲＡＭ１０２は、制御サーバ１００の主記憶装置である。ＲＡＭ１０２は、プロセッサ１０１に実行させるＯＳのプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１０２は、プロセッサ１０１による処理に用いる各種データを記憶する。
【００４６】
ＨＤＤ１０３は、制御サーバ１００の補助記憶装置である。ＨＤＤ１０３は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。制御サーバ１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
【００４７】
ＮＩＣ１０４は、ネットワーク１０を介して他の装置（例えば、サーバ２００やスイッチ３００）と通信を行える通信インタフェースである。
画像信号処理部１０５は、プロセッサ１０１からの命令に従って、制御サーバ１００に接続されたディスプレイ１１に画像を出力する。ディスプレイ１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００４８】
入力信号処理部１０６は、制御サーバ１００に接続された入力デバイス１２から入力信号を取得し、プロセッサ１０１に出力する。入力デバイス１２としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００４９】
ディスクドライブ１０７は、レーザ光などを利用して、光ディスク１３に記録されたプログラムやデータを読み取る駆動装置である。光ディスク１３として、例えば、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などを使用できる。ディスクドライブ１０７は、例えば、プロセッサ１０１からの命令に従って、光ディスク１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００５０】
機器接続部１０８は、制御サーバ１００に周辺機器を接続するための通信インタフェースである。例えば、機器接続部１０８にはメモリ装置１４やリーダライタ装置１５を接続できる。メモリ装置１４は、機器接続部１０８との通信機能を搭載した記録媒体である。リーダライタ装置１５は、メモリカード１６へのデータの書き込み、またはメモリカード１６からのデータの読み出しを行う装置である。メモリカード１６は、カード型の記録媒体である。機器接続部１０８は、例えば、プロセッサ１０１からの命令に従って、メモリ装置１４またはメモリカード１６から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００５１】
図４は、スイッチのハードウェア例を示す図である。スイッチ３００は、プロセッサ３０１、ＲＡＭ３０２、ＲＯＭ３０３、スイッチ処理回路３０４およびポート部３０５を有する。
【００５２】
プロセッサ３０１は、スイッチ３００の情報処理を制御する。プロセッサ３０１は、マルチプロセッサであってもよい。プロセッサ３０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ３０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００５３】
ＲＡＭ３０２は、ファームウェアのプログラムやデータを一時的に記憶する。ＲＡＭ３０２に記憶されたプログラムやデータは、プロセッサ３０１の処理に用いられる。
ＲＯＭ３０３は、ファームウェアのプログラムやデータを予め記憶している。ＲＯＭ３０３は、フラッシュメモリなど、書き換え可能な不揮発性メモリであってもよい。ＲＯＭ３０３に記憶されたプログラムやデータは、プロセッサ３０１の処理に用いられる。
【００５４】
スイッチ処理回路３０４は、ポート部３０５の何れかのポートで受信されたパケットを、他のポートへ送出する。また、スイッチ処理回路３０４は、ＱｏＳ処理、フィルタ処理およびミラー処理を行う。ＱｏＳ処理は、例えばマーキング、ポリシングおよびスケジューリングなどである。フィルタ処理は、例えば送受信ポートの組み合わせや、送受信ＭＡＣ（Media Access Control）アドレスの組み合わせに応じたフィルタリングである。ミラー処理は、例えばあるポートから入力されたフレームを複製して、宛先となるポートおよび他のポート（例えば、モニタリング用のポート）から送出する処理である。
【００５５】
スイッチ処理回路３０４は、これらのスイッチ処理を行う専用のプロセッサを備えており、当該スイッチ処理をハードウェアで行える。スイッチ処理回路３０４は、オフロード時には、サーバ２００で動作する仮想スイッチのスイッチ処理を担うこともできる。
【００５６】
ポート部３０５は、複数のポートを備えたネットワークインタフェースである。複数のポートは、ポート３０５ａ，３０５ｂ，３０５ｃ，３０５ｄを含む。ポート３０５ａはサーバ２００に接続されている。ポート３０５ｃはネットワーク１０に接続されている。ポート３０５ｄはネットワーク２０に接続されている。
【００５７】
図５は、各装置のソフトウェア例を示す図である。図５に示す各部は、各装置のＲＡＭに記憶されたプログラムを、各装置のプロセッサが実行することで実現される。制御サーバ１００は、記憶部１１０、収集部１２０、負荷判定部１３０および経路制御部１４０を有する。
【００５８】
記憶部１１０は、収集部１２０、負荷判定部１３０および経路制御部１４０の処理に用いられる情報を記憶する。具体的には、記憶部１１０は、サーバ２００およびスイッチ３００から情報を収集したり、負荷を判定したりするための設定情報を記憶する。また、記憶部１１０は、収集部１２０によりサーバ２００およびスイッチ３００から取得された情報を記憶する。記憶部１１０は、ＲＡＭ１０２やＨＤＤ１０３などの記憶領域を用いて実現できる。
【００５９】
収集部１２０は、記憶部１１０に記憶された設定情報に基づいて、サーバ２００およびスイッチ３００から情報を取得し、記憶部１１０に格納する。具体的には、収集部１２０は、ハイパーバイザの処理に伴うサーバ２００の負荷を取得する。また、収集部１２０は、サーバ２００における通信の通信量の情報を取得する。
【００６０】
当該通信量の情報は、（１）サーバ２００で動作する仮想マシン間の通信の通信量、および、（２）サーバ２００上の仮想マシンがサーバ２００の外部の他の装置と通信した通信量を含む。仮想マシンはサーバ２００で動作するから、（２）の通信量を、サーバ２００と他の装置との間の通信の通信量ということもできる。
【００６１】
ここで、収集部１２０は、（１）および（２）の通信量を個別にサーバ２００から取得することもできる（第１の方法）。あるいは、（１）の通信量と（１）および（２）の通信量の合計とをサーバ２００から取得することもできる（第２の方法）。後述するように、（１）および（２）の通信量の合計を仮想スイッチの負荷の推定に用いるからである。
【００６２】
第１の方法のように個別に（１）および（２）の通信量を取得するなら、収集部１２０は、（１）および（２）の通信量を合計して、当該合計値を記録する。第２の方法のように、（１）および（２）の通信量の合計したものをサーバ２００から得られるなら、取得した合計値を記録する。第２の実施の形態では第２の方法で通信量を取得することを想定する。第１の方法の場合でも、収集部１２０で通信量の合計を得る以外は同様の処理である。第２の方法の場合、当該合計から（１）の通信量を減算すれば、（２）の通信量を得られるから、（１）の通信量と、（１）および（２）の通信量の合計との組を（２）の通信量を示す情報ということもできる。収集部１２０は、ＳＮＭＰを用いて、これらの情報の収集を行える。
【００６３】
負荷判定部１３０は、サーバ２００およびスイッチ３００から収集部１２０により取得された情報に基づいて、サーバ２００で動作する仮想スイッチの負荷を評価する。負荷判定部１３０は、当該仮想スイッチについて評価した負荷に基づいて、オフロードを行うか否かを決定する。負荷判定部１３０は、オフロードを行うと決定すると、オフロードの実行を経路制御部１４０に通知する。
【００６４】
ここで、収集部１２０は、オフロード状態にあるときも、サーバ２００およびスイッチ３００の負荷を継続して取得する。経路制御部１４０は、当該負荷に応じてオフロード状態を解除するか否かを決定する。収集部１２０は、オフロード状態を解除すると決定すると、オフロード状態の解除を経路制御部１４０に通知する。
【００６５】
経路制御部１４０は、負荷判定部１３０からオフロードの実行を通知されると、サーバ２００およびスイッチ３００にオフロードの実行を指示する。経路制御部１４０は、負荷判定部１３０からオフロード状態の解除を通知されると、サーバ２００およびスイッチ３００にオフロード状態の解除を指示する。
【００６６】
サーバ２００は、ハイパーバイザ２１０、仮想マシン２２０，２３０，２４０および記憶部２５０を有する。ハイパーバイザ２１０は、仮想マシン２２０，２３０，２４０にサーバ２００のリソースの割り当てを行う。ハイパーバイザ２１０は、仮想スイッチ２１１および監視部２１２を有する。
【００６７】
仮想スイッチ２１１は、仮想マシン２２０，２３０，２４０の間の通信および仮想マシン２２０，２３０，２４０と他の装置（例えば、クライアント４００）との間の通信を中継する。仮想スイッチ２１１は、スイッチ処理部２１１ａおよびポート２１１ｂ，２１１ｃ，２１１ｄ，２１１ｅを有する。
【００６８】
スイッチ処理部２１１ａは、仮想スイッチ２１１が有する何れかのポートで受信されたパケットを他のポートへ送出する。また、スイッチ処理部２１１ａは、ＱｏＳ処理を実行する。例えば、スイッチ処理部２１１ａは、ポート単位にＱｏＳ処理を行うこともできる。また、スイッチ処理部２１１ａは、スイッチ処理回路３０４と同様に、フィルタ処理やミラーリング処理を実行する。このように仮想スイッチ２１１は、スイッチ処理をソフトウェアで行う。オフロード時には、スイッチ処理部２１１ａは、スイッチ３００と協働して当該スイッチ処理を行える。
【００６９】
ポート２１１ｂ，２１１ｃ，２１１ｄ，２１１ｅは、仮想スイッチ２１１が有する仮想的なポートである。例えば、仮想マシン２２０はポート２１１ｂを介して、他の仮想マシンや他の装置と通信できる。仮想マシン２３０はポート２１１ｃを介して、他の仮想マシンや他の装置と通信できる。仮想マシン２４０はポート２１１ｄを介して、他の仮想マシンや他の装置と通信できる。ポート２１１ｅは、仮想マシン２２０，２３０，２４０がサーバ２００の外部の装置と通信する際に用いられる。
【００７０】
監視部２１２は、サーバ２００が備えるプロセッサのハイパーバイザ２１０による負荷（例えば、ハイパーバイザ２１０の処理によるＣＰＵ使用率）を定期的に取得する。監視部２１２は、仮想スイッチ２１１を経由した仮想マシン２２０，２３０，２４０の間の通信（以下、仮想マシン間の通信ということがある）の通信量を定期的に取得する。また、監視部２１２は、仮想マシン２２０，２３０，２４０と外部の装置（例えば、クライアント４００）との間の仮想スイッチ２１１を経由した通信量を定期的に取得する。
【００７１】
監視部２１２は、例えば、仮想的なポート２１１ｂ，２１１ｃ，２１１ｄ，２１１ｅから入力された通信データの宛先を参照し、仮想スイッチ２１１の何れのポートから当該通信データが出力されるものかを判別する。何れかの仮想マシンが接続されたポートより入力され、他の仮想マシンが接続されたポートから出力されるなら仮想マシン間の通信である。また、入力元または出力先がポート２１１ｅであれば、外部の装置との間の通信である。
【００７２】
監視部２１２は、制御サーバ１００からの要求に応じて、取得した各情報を制御サーバ１００に提供する。具体的には、監視部２１２は、サーバ２００のハイパーバイザ２１０による負荷を制御サーバ１００に提供する。監視部２１２は、仮想スイッチ２１１を経由した仮想マシン２２０，２３０，２４０の間の通信の通信量を制御サーバ１００に提供する。監視部２１２は、当該仮想マシン間の通信量（第１の通信量）と、仮想マシン２２０，２３０，２４０と外部の装置との間の仮想スイッチ２１１を経由した通信量（第２の通信量）との和（総通信量）を制御サーバ１００に提供する。なお、第１，第２の通信量を別個に制御サーバ１００に提供し、制御サーバ１００の処理に応じて、制御サーバ１００が第１，第２の通信量の和を取ることで総通信量を算出してもよい。
【００７３】
ここで、監視部２１２は、ＳＮＭＰを用いて各情報を制御サーバ１００に提供できる。例えば、収集部１２０は、当該負荷や通信量を示す所定のＭＩＢ情報を指定したＳＮＭＰ要求をサーバ２００に送信する。すると、収集部１２０は、当該ＳＮＭＰ要求に対する応答としてサーバ２００から当該ＭＩＢ情報を取得できる。
【００７４】
仮想マシン２２０，２３０，２４０は、サーバ２００で動作する仮想的なコンピュータである。仮想マシン２２０，２３０，２４０は個別にＯＳを実行し、各種サービスをクライアント４００に提供する。記憶部２５０は、ハイパーバイザ２１０の処理に用いられる情報を記憶する。具体的には、記憶部２５０は、監視部２１２により取得された情報を記憶する。記憶部２５０は、サーバ２００が有するＲＡＭやＨＤＤなどの記憶領域を用いて実現できる。
【００７５】
スイッチ３００は、記憶部３１０および監視部３２０を有する。記憶部３１０は、監視部３２０により取得された情報を記憶する。記憶部３１０は、スイッチ３００が有するＲＡＭなどの記憶領域を用いて実現できる。
【００７６】
監視部３２０は、スイッチ３００の負荷を定期的に取得する。具体的には、監視部３２０は、スイッチ処理回路３０４が備えるスイッチ処理用のプロセッサの使用率を取得する。監視部３２０は、制御サーバ１００からの要求に応じて、取得した情報を制御サーバ１００に提供する。
【００７７】
ここで、収集部１２０は、当該負荷を示す所定のＭＩＢ情報（スイッチ３００の機種に固有のもの）を指定したＳＮＭＰ要求をスイッチ３００に送信する。すると、収集部１２０は、当該要求に対する応答としてスイッチ３００から当該ＭＩＢ情報を取得できる。
【００７８】
図６は、仮想スイッチ監視設定テーブルの例を示す図である。仮想スイッチ監視設定テーブル１１１は、サーバ２００および仮想スイッチ２１１の監視を行うための設定情報である。仮想スイッチ監視設定テーブル１１１は、記憶部１１０に格納される。仮想スイッチ監視設定テーブル１１１は、パラメータ名、値および説明の項目を含む。パラメータ名の項目には、パラメータの名称が登録される。値の項目には、パラメータの設定値が登録される。説明の項目には、パラメータの説明や値の単位が登録される。
【００７９】
例えば、仮想スイッチ監視設定テーブル１１１には、次のようなパラメータとその設定値が登録されている。第１に、パラメータ名が“ｐｅｒｆ＿ｉｎｔｅｒｖａｌ＿ｈｖ＿ｃｐｕ”、値が“３０”、説明が“ＭＩＢ取得間隔（秒）”というパラメータである。ＳＮＭＰを用いたＭＩＢ情報の取得間隔が３０秒であることを示す。
【００８０】
第２に、パラメータ名が“ｐｅｒｆ＿ｔｉｍｅ＿ｈｖ＿ｃｐｕ”、値が“３００”、説明が“負荷計算間隔（秒）”というパラメータである。ハイパーバイザ２１０によるＣＰＵ負荷および仮想スイッチ２１１の負荷を計算する間隔が３００秒であることを示す。
【００８１】
第３に、パラメータ名が“ｐｅｒｆ＿ｏｆｆｌｏａｄ＿ａｖｇ＿ｃｐｕ”、値が“９５”、説明が“ＨＶ（Hyper Visor）のＣＰＵ使用率閾値（％）”というパラメータである。オフロードを行うべきと判断するハイパーバイザ２１０のＣＰＵ使用率の下限が９５％であることを示す。なお、収集部１２０は、当該ＣＰＵ使用率として、ハイパーバイザ２１０のカーネルモードのＣＰＵ使用率を取得してもよい。
【００８２】
第４に、パラメータ名が“ｐｅｒｆ＿ｏｆｆｌｏａｄ＿ａｖｇ＿ｉｏ”、値が“３０”、説明が“仮想スイッチ負荷閾値（％）”というパラメータである。オフロードを行うべきと判断する仮想スイッチ２１１の総通信量に対する仮想マシン間の通信量の割合の下限が３０％であることを示す。上記設定によれば、サーバ２００において、ハイパーバイザ２１０によるＣＰＵ使用率が９５％以上、かつ、仮想スイッチ２１１の総通信量に対する仮想マシン間の通信量の割合が３０％以上である場合に、オフロードを行うと判定されることになる。
【００８３】
図７は、物理スイッチ監視設定テーブルの例を示す図である。物理スイッチ監視設定テーブル１１２は、スイッチ３００の監視を行うための設定情報である。物理スイッチ監視設定テーブル１１２は、記憶部１１０に格納される。物理スイッチ監視設定テーブル１１２は、パラメータ名、値および説明の項目を含む。パラメータ名の項目には、パラメータの名称が登録される。値の項目には、パラメータの設定値が登録される。説明の項目には、パラメータの説明や値の単位が登録される。
【００８４】
例えば、物理スイッチ監視設定テーブル１１２には、次のようなパラメータとその設定値が登録されている。第１に、パラメータ名が“ｐｅｒｆ＿ｉｎｔｅｒｖａｌ＿ｐｓｗ＿ｃｐｕ”、値が“３０”、説明が“ＭＩＢ取得間隔（秒）”というパラメータである。ＳＮＭＰを用いたＭＩＢ情報の取得間隔が３０秒であることを示す。
【００８５】
第２に、パラメータ名が“ｐｅｒｆ＿ｔｉｍｅ＿ｐｓｗ＿ｃｐｕ”、値が“３００”、説明が“負荷計算間隔（秒）”というパラメータである。スイッチ３００の負荷を計算する間隔が３００秒であることを示す。
【００８６】
第３に、パラメータ名が“ｐｅｒｆ＿ｏｆｆｌｏａｄ＿ａｖｇ＿ｐｓｗ＿ｌｏａｄ”、値が“３０”、説明が“物理スイッチ負荷閾値（％）”というパラメータである。オフロードを行うべきと判断するスイッチ３００の負荷の上限が３０％であることを示す。この設定によれば、スイッチ３００の負荷が３０％以下である場合に、オフロードを行うと判定されることになる。
【００８７】
ここで、仮想スイッチ監視設定テーブル１１１および物理スイッチ監視設定テーブル１１２の設定内容は一例である。例えば、制御サーバ１００は、運用に応じた各設定値のユーザによる登録を許容する。
【００８８】
図８は、サーバ測定テーブルの例を示す図である。サーバ測定テーブル１１３は、サーバ２００に関して取得された情報を記録するためのテーブルである。サーバ測定テーブル１１３は、記憶部１１０に格納される。サーバ測定テーブル１１３は、測定回、ハイパーバイザ（ＨＶ：Hyper Visor）のＣＰＵ使用率（％）、仮想マシン間の通信量（ｂｙｔｅｓ）および総通信量（ｂｙｔｅｓ）の項目を含む（以下、項目名をいうときは単位を省略する）。
【００８９】
測定回の項目には、測定回数が登録される。例えば、仮想スイッチ監視設定テーブル１１１の設定では、ＭＩＢ取得間隔が３０秒で、負荷計算間隔が３００秒である。したがって、１回分の負荷計算までにＭＩＢ情報が１０回取得されることになる。ＨＶのＣＰＵ使用率の項目には、ＨＶのＣＰＵ使用率が登録される。仮想マシン間の通信量の項目には、仮想スイッチ２１１を経由した仮想マシン間の通信の通信量が登録される。総通信量の項目には、仮想スイッチ２１１を経由した通信の総通信量が登録される。仮想マシン間の通信量および総通信量の項目に登録される通信量は、ＭＩＢ情報を前回取得してからの積算量である。例えば、ＭＩＢ取得間隔が３０秒であれば、３０秒の積算値ということになる。
【００９０】
例えば、サーバ測定テーブル１１３には、測定回が“１回目”、ＨＶのＣＰＵ使用率が“９６”、仮想マシン間の通信量が“１２３４”、総通信量が“５６７８”という情報が登録される。これは、サーバ２００に対する１回目（前回負荷計算を行った直後から１回目）のＭＩＢ情報の取得時に、ハイパーバイザ２１０のＣＰＵ使用率が９６％であったことを示す。また、仮想スイッチ２１１を経由した仮想マシン間の通信量（過去３０秒の積算）が１２３４ｂｙｔｅｓであったことを示す。更に、仮想スイッチ２１１を経由した総通信量（過去３０秒の積算）が５６７８ｂｙｔｅｓであったことを示す。他の測定回の情報も同様である。
【００９１】
図９は、物理スイッチ測定テーブルの例を示す図である。物理スイッチ測定テーブル１１４は、スイッチ３００に関して取得された情報を記録するためのテーブルである。物理スイッチ測定テーブル１１４は、記憶部１１０に格納される。物理スイッチ測定テーブル１１４は、測定回および物理スイッチ負荷（％）の項目を含む（以下、項目名をいうときは単位を省略する）。
【００９２】
測定回の項目には、測定回数が登録される。例えば、物理スイッチ監視設定テーブル１１２の設定では、ＭＩＢ取得間隔が３０秒で、負荷計算間隔が３００秒である。したがって、１回分の負荷計算までにＭＩＢ情報が１０回取得されることになる。物理スイッチ負荷の項目には、スイッチ３００に対して取得された負荷が登録される。
【００９３】
例えば、物理スイッチ測定テーブル１１４には、測定回が“１回目”、物理スイッチ負荷が“２０”という情報が登録される。これは、スイッチ３００に対する１回目（前回負荷計算を行った直後から１回目）のＭＩＢ情報の取得時に、スイッチ３００の負荷が２０％であったことを示す。
【００９４】
なお、スイッチ３００の負荷としては、前述のように機種固有の値を取得することができる。例えば、収集部１２０は、所定時間（５分間、１分間、５秒間など）におけるスイッチ処理回路３０４が備えるスイッチ処理用プロセッサの平均使用率（平均ビジー率）をスイッチ３００の負荷として取得してもよい。
【００９５】
図１０は、ＭＩＢ情報の例を示す図である。ＭＩＢツリーＴは、ＭＩＢ情報のツリー構造を例示している。例えば、プライベートＭＩＢとして、ハイパーバイザ２１０のＣＰＵ使用率、仮想スイッチ２１１経由の仮想マシン間の通信量、仮想スイッチ２１１経由の総通信量に対応する各ＭＩＢオブジェクトを用意する。収集部１２０は、各ＭＩＢオブジェクトの識別子（例えば、ＯＩＤ（Object IDentifier））を指定したＳＮＭＰ要求をサーバ２００に送信する。すると、監視部２１２は、指定された識別子に対応する情報を記憶部２５０から取得して、制御サーバ１００に提供する。
【００９６】
図１１は、オフロード適否の判定例を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。以下に示す処理は、オフロード状態ではないときに実行される。
【００９７】
（Ｓ１１）収集部１２０は、サーバ２００からＭＩＢ情報を取得する。収集部１２０が取得する情報には、ハイパーバイザ２１０のＣＰＵ使用率、仮想スイッチ２１１経由の仮想マシン間の通信量、仮想スイッチ２１１経由の総通信量が含まれる。収集部１２０は、仮想スイッチ監視設定テーブル１１１に登録されたＭＩＢ取得間隔（例えば、３０秒）で、当該ＭＩＢ情報の取得を行う。収集部１２０は、取得した情報をサーバ測定テーブル１１３に登録する（測定回は、後述するステップＳ１３の負荷計算を行った直後であれば１回目であり、その後１ずつ加算して登録する）。
【００９８】
（Ｓ１２）負荷判定部１３０は、仮想スイッチ監視設定テーブル１１１を参照して、前回ハイパーバイザ２１０の負荷計算を行ってから（初回の場合はサーバ２００からＭＩＢ情報の取得を開始してから）、負荷計算間隔分の時間が経過したか否かを判定する。負荷計算間隔分の時間が経過した場合、処理をステップＳ１３に進める。負荷計算間隔分の時間が経過していない場合、処理をステップＳ１１に進める。例えば、仮想スイッチ監視設定テーブル１１１によれば負荷計算間隔は３００秒である。
【００９９】
（Ｓ１３）負荷判定部１３０は、サーバ測定テーブル１１３を参照して、ハイパーバイザ２１０の平均ＣＰＵ使用率（ａｖｇ＿ｃｐｕ）を算出する。例えば、サーバ測定テーブル１１３には、１０回分の測定値が登録されるから、各回の測定値の合計を１０で割った値がハイパーバイザ２１０の平均ＣＰＵ使用率である（これを負荷計算と称している）。
【０１００】
（Ｓ１４）負荷判定部１３０は、ステップＳ１３で求めた平均ＣＰＵ使用率が、仮想スイッチ監視設定テーブル１１１に登録されたＣＰＵ使用率閾値（例えば、９５％）以上であるか否かを判定する。平均ＣＰＵ使用率がＣＰＵ使用率閾値以上である場合、処理をステップＳ１５に進める。平均ＣＰＵ使用率がＣＰＵ使用率閾値未満である場合、処理をステップＳ１１に進める。負荷判定部１３０は、処理をステップＳ１１に進める際に、サーバ測定テーブル１１３の登録内容をクリアする。
【０１０１】
（Ｓ１５）負荷判定部１３０は、サーバ測定テーブル１１３を参照して、仮想スイッチ２１１を経由した仮想マシン間の通信量の合計Ｄ１（ｓｕｍ＿ｐｋｔ＿ｖｍ）を算出する。例えば、サーバ測定テーブル１１３には、仮想マシン間の通信量の１０回分の測定値が登録されるから、これら１０回分の測定値の合計が合計Ｄ１である。
【０１０２】
（Ｓ１６）負荷判定部１３０は、サーバ測定テーブル１１３を参照して、仮想スイッチ２１１を経由した総通信量の合計Ｄ２（ｓｕｍ＿ｐｋｔ＿ａｌｌ）を算出する。例えば、サーバ測定テーブル１１３には、総通信量の１０回分の測定値が登録されるから、これら１０回分の測定値の合計が合計Ｄ２である。
【０１０３】
（Ｓ１７）負荷判定部１３０は、総通信量に対する仮想スイッチ間の通信の割合（Ｄ１÷Ｄ２×１００（％））が、仮想スイッチ監視設定テーブル１１１に登録された仮想スイッチ負荷閾値（例えば、３０％）以上であるか否かを判定する。当該割合が仮想スイッチ負荷閾値以上である場合、処理をステップＳ１８に進める。当該割合が仮想スイッチ負荷閾値未満である場合、処理をステップＳ１１に進める。負荷判定部１３０は、処理をステップＳ１１に進める際に、サーバ測定テーブル１１３の登録内容をクリアする。
【０１０４】
（Ｓ１８）負荷判定部１３０は、スイッチ３００の平均負荷が、物理スイッチ監視設定テーブル１１２に登録された物理スイッチ負荷閾値（例えば、３０％）以下であるか否かを判定する。スイッチ３００の平均負荷が、物理スイッチ負荷閾値以下である場合、処理をステップＳ１９に進める。スイッチ３００の平均負荷が、物理スイッチ負荷閾値よりも大きい場合、処理をステップＳ１１に進める。負荷判定部１３０は、処理をステップＳ１１またはステップＳ１９に進める際に、サーバ測定テーブル１１３の登録内容をクリアする。また、図１２で後述するように負荷判定部１３０は、スイッチ３００の平均負荷を継続して取得し、記憶部１１０に格納している。
【０１０５】
（Ｓ１９）負荷判定部１３０は、オフロードの実行を経路制御部１４０に通知する。経路制御部１４０は、サーバ２００およびスイッチ３００にオフロードの実行を指示する。サーバ２００およびスイッチ３００は、当該指示を受けるとオフロードを実行する。
【０１０６】
このようにして、制御サーバ１００は、サーバ２００の負荷および通信量に基づいて、オフロード実行の可否を決定する。なお、スイッチ３００の負荷に関わらずオフロードを実行することも考えられる。その場合、ステップＳ１７でＤ１÷Ｄ２×１００が仮想スイッチ負荷閾値以上と判定されたときに、ステップＳ１８をスキップしてステップＳ１９を実行してもよい。次に、制御サーバ１００によるスイッチ３００の負荷の取得を説明する。
【０１０７】
図１２は、物理スイッチの負荷の取得例を示すフローチャートである。以下、図１２に示す処理をステップ番号に沿って説明する。
（Ｓ２１）収集部１２０は、サーバ２００およびスイッチ３００でオフロードが実行された状態であるか否かを判定する。オフロードが実行された状態である場合、処理を終了する。オフロードが実行された状態でない場合、処理をステップＳ２２に進める。例えば、経路制御部１４０によりサーバ２００およびスイッチ３００に送信された直前の指示がオフロードの実行指示であれば、オフロードが実行された状態である。また、当該直前の指示がオフロード状態の解除指示であれば、オフロードが実行された状態ではない。
【０１０８】
（Ｓ２２）収集部１２０は、スイッチ３００からＭＩＢ情報を取得する。収集部１２０が取得する情報には、スイッチ３００の負荷の情報が含まれる。収集部１２０は、物理スイッチ監視設定テーブル１１２に登録されたＭＩＢ取得間隔（例えば、３０秒）で、当該ＭＩＢ情報の取得を行う。収集部１２０は、取得した情報を物理スイッチ測定テーブル１１４に登録する（測定回は、後述するステップＳ２４の負荷計算を行った直後であれば１回目であり、その後１ずつ加算して登録する）。
【０１０９】
（Ｓ２３）収集部１２０は、物理スイッチ監視設定テーブル１１２を参照して、前回スイッチ３００の負荷計算を行ってから（初回の場合はスイッチ３００からＭＩＢ情報の取得を開始してから）、負荷計算間隔分の時間が経過したか否かを判定する。負荷計算間隔分の時間が経過した場合、処理をステップＳ２４に進める。負荷計算間隔分の時間が経過していない場合、処理をステップＳ２１に進める。例えば、物理スイッチ監視設定テーブル１１２によれば負荷計算間隔は３００秒である。
【０１１０】
（Ｓ２４）負荷判定部１３０は、物理スイッチ測定テーブル１１４を参照して、スイッチ３００の平均負荷を算出する。例えば、物理スイッチ測定テーブル１１４には、１０回分の測定値が登録されるから、各回の測定値の合計を１０で割った値がスイッチ３００の平均負荷である（これを負荷計算と称している）。負荷判定部１３０は、算出した平均負荷を記憶部１１０に格納する（最新の値を保持しておけばよい）。負荷判定部１３０は、物理スイッチ測定テーブル１１４の登録内容をクリアする。そして、処理をステップＳ２１に進める。
【０１１１】
このようにして、制御サーバ１００は、スイッチ３００の負荷も継続的に監視する。ただし、前述のとおり、図１１のステップＳ１８をスキップする場合には、制御サーバ１００は、図１２に示したスイッチ３００の負荷の監視を行わなくてもよい。
【０１１２】
また、ステップＳ２４の平均負荷の算出は、物理スイッチの機種によって種々の方法を用いることができる。物理スイッチの機種によって取得できるＭＩＢ情報が異なるためである。前述のようにスイッチ処理用のプロセッサの使用率（例えば、過去の所定時間の平均使用率など）を取得できれば、これを計測回数で割ることで物理スイッチの平均負荷を得られる。また、例えば、所定時間内の当該プロセッサの総サイクル数やアイドルサイクル数などの情報を取得できれば、（総サイクル数−アイドルサイクル数）÷総サイクル数を求めることで、当該時間における平均の負荷を得ることもできる。
【０１１３】
制御サーバ１００は、オフロードの指示を行った直後（図１１のステップＳ１９の直後）に、サーバ測定テーブル１１３、物理スイッチ測定テーブル１１４の登録内容および各監視用のタイマ値をリセットしてもよい。
【０１１４】
制御サーバ１００は、オフロードが実行された後も継続的にサーバ２００およびスイッチ３００から前述のＭＩＢ情報を収集し、オフロード状態の解除可否の決定を行う。次に、その手順を説明する。
【０１１５】
図１３は、オフロード状態の解除の判定例を示すフローチャートである。以下、図１３に示す処理をステップ番号に沿って説明する。以下に示す処理は、オフロード状態であるときに実行される。
【０１１６】
（Ｓ３１）収集部１２０は、スイッチ３００からＭＩＢ情報を取得する。収集部１２０が取得する情報には、スイッチ３００の負荷の情報が含まれる。収集部１２０は、物理スイッチ監視設定テーブル１１２に登録されたＭＩＢ取得間隔（例えば、３０秒）で、当該ＭＩＢ情報の取得を行う。収集部１２０は、取得した情報を物理スイッチ測定テーブル１１４に登録する（測定回は、後述するステップＳ３３の負荷計算を行った直後であれば１回目であり、その後１ずつ加算して登録する）。
【０１１７】
（Ｓ３２）収集部１２０は、物理スイッチ監視設定テーブル１１２を参照して、前回スイッチ３００の負荷計算を行ってから（初回の場合はスイッチ３００からＭＩＢ情報の取得を開始してから）、負荷計算間隔分の時間が経過したか否かを判定する。負荷計算間隔分の時間が経過した場合、処理をステップＳ３３に進める。負荷計算間隔分の時間が経過していない場合、処理をステップＳ３１に進める。例えば、物理スイッチ監視設定テーブル１１２によれば負荷計算間隔は３００秒である。
【０１１８】
（Ｓ３３）負荷判定部１３０は、物理スイッチ測定テーブル１１４を参照して、スイッチ３００の平均負荷を算出する。例えば、物理スイッチ測定テーブル１１４には、１０回分の測定値が登録されるから、各回の測定値の合計を１０で割った値がスイッチ３００の平均負荷である。
【０１１９】
（Ｓ３４）負荷判定部１３０は、ステップＳ３３で求めたスイッチ３００の平均負荷が、物理スイッチ監視設定テーブル１１２に登録された物理スイッチ負荷閾値（例えば、３０％）よりも大きいか否かを判定する。スイッチ３００の平均負荷が物理スイッチ負荷閾値よりも大きい場合、処理をステップＳ３５に進める。スイッチ３００の平均負荷が物理スイッチ負荷閾値以下の場合、処理をステップＳ３１に進める。また、負荷判定部１３０は、処理をステップＳ３１に進める際に、物理スイッチ測定テーブル１１４の登録内容をクリアする。
【０１２０】
（Ｓ３５）負荷判定部１３０は、サーバ２００側の負荷を確認して、仮想マシン間の通信を仮想スイッチ２１１に切り戻し（オフロード状態の解除）可能であるか否かを判定する。ここで、切り戻し可能であるとは、オフロード状態を解除しても、サーバ２００が過負荷とならないかを確認することを意味する。切り戻し可能な場合とは、次の（１）および（２）の条件が満たされるときである。何れか一方の条件が満たされなければ、切り戻し可能でない。
【０１２１】
（１）サーバ２００のハイパーバイザ２１０による平均ＣＰＵ使用率が仮想スイッチ監視設定テーブル１１１に登録されたＣＰＵ使用率閾値（例えば、９５％）よりも小さい。
（２）サーバ２００の仮想スイッチ２１１を経由した総通信量に対する仮想マシン間の通信の割合が、仮想スイッチ監視設定テーブル１１１に登録された仮想スイッチ負荷閾値（例えば、３０％）よりも小さい。
【０１２２】
切り戻し可能である場合、処理をステップＳ３６に進める。切り戻し不可である場合、処理をステップＳ３１に進める。負荷判定部１３０は、処理をステップＳ３１またはステップＳ３６に進める際に、物理スイッチ測定テーブル１１４の登録内容をクリアする。また、図１４で後述するように、負荷判定部１３０は、サーバ２００から継続して取得されたＭＩＢ情報により上記平均ＣＰＵ使用率などを継続して取得し、記憶部１１０に格納している。
【０１２３】
（Ｓ３６）負荷判定部１３０は、オフロード状態の解除を経路制御部１４０に通知する。経路制御部１４０は、サーバ２００およびスイッチ３００にオフロード状態の解除を指示する。サーバ２００およびスイッチ３００は、当該指示を受けるとオフロード状態を解除する。
【０１２４】
このようにして、制御サーバ１００は、サーバ２００の負荷および通信量とスイッチ３００の負荷とに基づいて、オフロード状態の解除可否を決定する。ここで、ステップＳ３５では、上記（１）および（２）の条件が両方満たされるときに切り戻し可能と判定するものとした。一方、負荷判定部１３０は、（１）および（２）の条件の何れか一方が満たされるときに切り戻し可能と判定してもよい。この場合、負荷判定部１３０は、（１）および（２）の条件の両方が満たされないときに切り戻し不可と判定することになる。次に、制御サーバ１００によるサーバ２００の負荷および通信量の取得を説明する。
【０１２５】
図１４は、サーバの情報の取得例を示すフローチャートである。以下、図１４に示す処理をステップ番号に沿って説明する。
（Ｓ４１）収集部１２０は、サーバ２００およびスイッチ３００でオフロードが実行された状態であるか否かを判定する。オフロードが実行された状態である場合、処理をステップＳ４２に進める。オフロードが実行された状態でない場合、処理を終了する。具体的な判定方法は、図１２のステップＳ２１と同様である（ただし、図１４ではオフロードが実行された状態である場合に以降の処理が実行される点が異なる）。
【０１２６】
（Ｓ４２）収集部１２０は、サーバ２００からＭＩＢ情報を取得する。収集部１２０が取得する情報には、ハイパーバイザ２１０のＣＰＵ使用率、仮想スイッチ２１１経由の仮想マシン間の通信量、仮想スイッチ２１１経由の総通信量が含まれる。収集部１２０は、仮想スイッチ監視設定テーブル１１１に登録されたＭＩＢ取得間隔（例えば、３０秒）で、当該ＭＩＢ情報の取得を行う。収集部１２０は、取得した情報をサーバ測定テーブル１１３に登録する（測定回は、後述するステップＳ４４の負荷計算を行った直後であれば、１回目であり、その後１ずつ加算して登録する）。
【０１２７】
（Ｓ４３）負荷判定部１３０は、仮想スイッチ監視設定テーブル１１１を参照して、前回ハイパーバイザ２１０の負荷計算を行ってから（初回の場合はサーバ２００からＭＩＢ情報の取得を開始してから）、負荷計算間隔分の時間が経過したか否かを判定する。負荷計算間隔分の時間が経過した場合、処理をステップＳ４４に進める。負荷計算間隔分の時間が経過していない場合、処理をステップＳ４１に進める。例えば、仮想スイッチ監視設定テーブル１１１によれば負荷計算間隔は３００秒である。
【０１２８】
（Ｓ４４）負荷判定部１３０は、サーバ測定テーブル１１３を参照して、ハイパーバイザ２１０の平均ＣＰＵ使用率を算出する。例えば、サーバ測定テーブル１１３には、１０回分の測定値が登録されるから、各回の測定値の合計を１０で割った値がハイパーバイザ２１０の平均ＣＰＵ使用率である。負荷判定部１３０は、算出した平均ＣＰＵ使用率を記憶部１１０に格納する（最新の値を保持しておけばよい）。
【０１２９】
（Ｓ４５）負荷判定部１３０は、サーバ測定テーブル１１３を参照して、仮想スイッチ２１１を経由した仮想マシン間の通信量の合計Ｄ１を算出する。例えば、サーバ測定テーブル１１３には、仮想マシン間の通信量の１０回分の測定値が登録されるから、これら１０回分の測定値の合計が合計Ｄ１である。負荷判定部１３０は、算出した合計Ｄ１を記憶部１１０に格納する（最新の値を保持しておけばよい）。
【０１３０】
（Ｓ４６）負荷判定部１３０は、サーバ測定テーブル１１３を参照して、仮想スイッチ２１１を経由した総通信量の合計Ｄ２を算出する。例えば、サーバ測定テーブル１１３には、総通信量の１０回分の測定値が登録されるから、これら１０回分の測定値の合計が合計Ｄ２である。負荷判定部１３０は、算出した合計Ｄ２を記憶部１１０に格納する（最新の値を保持しておけばよい）。負荷判定部１３０は、サーバ測定テーブル１１３の登録内容をクリアする。そして、処理をステップＳ４１に進める。
【０１３１】
このようにして、制御サーバ１００は、サーバ２００の負荷や通信量も継続的に監視する。ステップＳ４４，Ｓ４５，Ｓ４６で取得された情報は、図１３のステップＳ３５で利用できる。具体的には、平均ＣＰＵ使用率が仮想スイッチ監視設定テーブル１１１に登録されたＣＰＵ使用率閾値よりも小さいかを判定できる。また、Ｄ２に対するＤ１の割合が仮想スイッチ監視設定テーブル１１１に登録された仮想スイッチ負荷閾値よりも小さいかを判定できる。
【０１３２】
なお、制御サーバ１００は、オフロード状態の解除の指示を行った直後（図１３のステップＳ３６の直後）に、サーバ測定テーブル１１３、物理スイッチ測定テーブル１１４の登録内容および各監視用のタイマ値をリセットしてもよい。
【０１３３】
図１５は、オフロードの例を示す図である。図１５では、図１１のステップＳ１９の具体例を示している。図１５では、サーバ２００のＮＩＣが備える物理的なポートをポートＰ１としている（以下、同様）。また、図１５では仮想マシン２４０の図示を省略している。例えば、制御サーバ１００は、オフロードモードへの切り替え準備をスイッチ３００に指示する（ステップＳＴ１１）。スイッチ３００は、当該指示に応じてオフロードモードへの所定の切り替え準備を実行する。具体的には、スイッチ３００は、「宛先がハイパーバイザ２１０上の仮想マシンであるパケットは、ハイパーバイザ２１０が動作しているサーバ２００に向けて折り返す」という設定を行う。スイッチ３００は、当該準備の完了を制御サーバ１００に通知してもよい。
【０１３４】
制御サーバ１００は、オフロードモードへの切り替えをハイパーバイザ２１０に指示する（ステップＳＴ１２）。具体的には、制御サーバ１００は、「宛先がハイパーバイザ２１０上の仮想マシンであるパケットを他の仮想マシンから受信した場合、それをスイッチ３００側へ流す（スイッチ３００側へパススルーする）」ことをハイパーバイザ２１０に指示する。また、制御サーバ１００は、「スイッチ３００からハイパーバイザ２１０上の仮想マシン宛のパケットを受信した場合、それを当該仮想マシン宛に流す」ことをハイパーバイザ２１０に指示する。
【０１３５】
ハイパーバイザ２１０は、当該指示に応じて、仮想スイッチ２１１の設定変更を行い、仮想マシン間の通信を、スイッチ３００を用いて行うよう切り替える（ステップＳＴ１３）。これにより、サーバ２００でソフトウェア処理されていたデータ転送、ＱｏＳ、フィルタ、ミラーリングなどの処理が、スイッチ３００に移され、ハードウェア処理される。
【０１３６】
図１６は、オフロード状態の解除の例を示す図である。図１６では、図１３のステップＳ３６の具体例を示している。図１６では仮想マシン２４０の図示を省略している。例えば、制御サーバ１００は、オフロードモードから元のモード（オフロード状態でないモード）への切り替え準備をハイパーバイザ２１０に指示する（ステップＳＴ２１）。ハイパーバイザ２１０は、当該指示に応じて、元のモードへの所定の切り替え準備を実行する。
【０１３７】
具体的には、ハイパーバイザ２１０は、「宛先がハイパーバイザ２１０上の仮想マシンであるパケットを、スイッチ３００側へ流すのを止め、スイッチ３００内で折り返して宛先の仮想マシンへ流す」という設定を仮想スイッチ２１１に対して行う。ハイパーバイザ２１０は、当該準備の完了を制御サーバ１００に通知してもよい。
【０１３８】
そして、制御サーバ１００は、オフロードモードの解除をスイッチ３００に指示する（ステップＳＴ２２）。具体的には、制御サーバ１００は、「宛先がハイパーバイザ２１０上の仮想マシンであるパケットは、ハイパーバイザ２１０が動作しているサーバ２００に向けて折り返す」という設定をクリアするようスイッチ３００に指示する。
【０１３９】
スイッチ３００は、当該指示に応じて自身の当該設定をクリアする。これにより、オフロードモードの解除が完了する（ステップＳＴ２３）。その後は、スイッチ３００でハードウェア処理されていたデータ転送、ＱｏＳ、フィルタ、ミラーリングなどの処理が、仮想スイッチ２１１に移され、仮想スイッチ２１１でソフトウェア処理されることになる。
【０１４０】
以上のように、制御サーバ１００によれば、仮想スイッチ２１１の処理負荷を推定する情報を取得し、当該情報に基づいてオフロードモードへの切り替えを実行できる。
ここで、サーバ２００の処理負荷のうち、仮想スイッチ２１１に起因する負荷が比較的小さいと、オフロードを行ってもサーバ２００の負荷軽減を十分に図れない。また、サーバ２００が高負荷のときにオフロードを行おうとすると、オフロード自体の処理負荷によって、サーバ２００の高負荷状態が却って助長されるおそれがある。この場合、仮想スイッチ２１１に起因する負荷が比較的小さいのであれば、寧ろオフロードを行わない方が処理性能の向上を見込める可能性が高い。
【０１４１】
ところが、仮想スイッチ２１１がハイパーバイザ２１０に組み込まれていると、仮想スイッチ２１１に起因する負荷を直接把握することが困難となる。例えば、ハイパーバイザ２１０による負荷の何れの割合が仮想スイッチ２１１の処理に起因するものであるかを直接判断するのは難しい。一方、サーバ２００の処理負荷やサーバ２００において発生した通信量それぞれを単に取得、参照しても、仮想スイッチ２１１に起因する負荷を把握するのは困難である。
【０１４２】
そこで、制御サーバ１００では、ハイパーバイザ２１０によるサーバ２００の負荷と、仮想スイッチ２１１が扱う通信量と、サーバ２００と外部の装置との通信の通信量とに基づいて、サーバ２００の負荷が仮想スイッチ２１１に起因するかを判断する。
【０１４３】
ハイパーバイザ２１０によるサーバ２００の負荷が比較的高い場合に、仮想スイッチ２１１を経由した総通信量に対する仮想マシン間の通信の通信量の割合が大きければ、サーバ２００の負荷は、仮想スイッチ２１１に起因するものであると推定できる。なぜなら、仮想マシン間の通信量の割合が比較的大きい場合、仮想スイッチ２１１におけるデータ転送の処理やＱｏＳなどのオフロード対象の処理の頻度が高まっており、それによってサーバ２００の負荷も高まっていると考えられるからである。更に、このとき、ハイパーバイザ２１０によるサーバ２００の負荷が比較的高ければ、サーバ２００が高負荷となっている要因が仮想スイッチ２１１の処理にある可能性が高い。よって、この場合、オフロードによりサーバ２００の負荷を軽減できる可能性が高いと考えられる。
【０１４４】
このように、制御サーバ１００は、サーバ２００の処理負荷が仮想スイッチ２１１に起因するものかを判断することで、オフロードを行うか否かを適切に決定できる。なお、前述のように、制御サーバ１００は、仮想スイッチ２１１を経由した総通信量を得るために、サーバ２００から各仮想マシンと外部の装置との仮想スイッチ２１１を経由した通信量を取得してもよい。その場合、収集部１２０は、仮想マシン間の通信の通信量と各仮想マシンと外部の装置（すなわち、サーバ２００と外部の装置）との通信量とを合計することで、総通信量を得ることができる。
【０１４５】
制御サーバ１００は、仮想スイッチ監視設定テーブル１１１および物理スイッチ監視設定テーブル１１２に登録された負荷計算間隔での平均で負荷を判断する。また、制御サーバ１００は、当該負荷計算間隔の合計の通信量で、仮想マシン間の通信の割合の判断を行う。これにより、例えば、瞬間的な負荷や通信量の高まりでモード切り替えが行われることを抑えられる。また、瞬間的な負荷や通信量の高まりによりモード切り替えが頻発することを抑えられる。
【０１４６】
制御サーバ１００は、ハイパーバイザ２１０によるサーバ２００の負荷が仮想スイッチ監視設定テーブル１１１に登録された閾値以上である場合にオフロードを行う。これにより、サーバ２００のリソースに余裕があるときにまでオフロードが行われるのを抑えられる。
【０１４７】
制御サーバ１００は、オフロードを行うかの決定において、スイッチ３００の負荷を考慮する。これにより、スイッチ３００の負荷が比較的高い場合にオフロードが行われることを抑制できる。よって、スイッチ３００が過負荷となり、通信性能が却って悪化するリスクを低減できる。
【０１４８】
制御サーバ１００は、オフロードを行った後も、サーバ２００およびスイッチ３００の負荷や通信量の監視を継続し、監視結果に基づいて、オフロード状態の解除可否を決定する。オフロード後に、スイッチ３００の負荷が高まり、サーバ２００の負荷が低下すれば、オフロード状態を解除した方が性能向上を図れる可能性があるからである。また、仮想スイッチ２１１を経由する通信のうち、仮想マシン間の通信の割合が比較的小さければ、仮想マシン間の通信を仮想スイッチ２１１に切り戻しても、仮想スイッチ２１１に起因するサーバ２００の負荷上昇を比較的小さく抑えられる。
【０１４９】
制御サーバ１００は、ＳＮＭＰを用いて、サーバ２００およびスイッチ３００から負荷や通信量の情報を取得する。これにより、共通のプロトコルを用いて、サーバ２００およびスイッチ３００の両装置から効率的に情報収集を行える。特に、ＳＮＭＰは運用管理用の情報を収集するプロトコルとして一般的に利用されており、物理スイッチもＳＮＭＰに対応している機種は多数存在している。このため、ＳＮＭＰによりスイッチ３００から取得可能な情報を流用して、制御サーバ１００の機能を実現できる利点もある。
【０１５０】
図１７は、各装置の他のソフトウェア例を示す図である。図１７の例では、サーバ２００が、監視部２１２の代わりに、監視部２６０を有する点が図５の例と異なる。例えば、監視部２６０は、仮想マシン２２０，２３０，２４０上で実行されているアプリケーションがサーバ２００上の仮想マシン間またはサーバ２００外の装置との通信を行うための専用の通信用ライブラリである。この場合、仮想マシン２２０，２３０，２４０で実行されているアプリケーションは、通信時に当該通信用ライブラリを使用することになる。
【０１５１】
監視部２６０は、ハイパーバイザ２１０によるＣＰＵ使用率を取得する。例えば、Ｘｅｎと呼ばれる仮想化ソフトウェアのハイパーバイザであれば、Ｄｏｍａｉｎ０においてｘｍ  ｔｏｐコマンドの実行結果から当該ＣＰＵ使用率を取得し得る。
【０１５２】
監視部２６０は、サーバ２００上の仮想マシン間の通信量を取得する。例えば、通信データの送信元と宛先とにサーバ２００上の仮想マシンの識別子が含まれていれば仮想マシン間の通信である。また、監視部２６０は、仮想マシン２２０，２３０，２４０からサーバ２００外の装置への通信またはサーバ２００外から到着した仮想マシン２２０，２３０，２４０への通信の通信量を取得する。例えば、通信データの送信元または宛先が外部の装置となっていれば（例えば、サーバ２００上の仮想マシン以外の識別子であれば）、サーバ２００外の装置への通信またはサーバ２００外から到着した通信である。
【０１５３】
監視部２６０は、取得した各通信量を制御サーバ１００に提供する。このとき、各通信量を別個に制御サーバ１００に提供してもよい。また、（１）サーバ２００上の仮想マシン間の通信量と、（２）サーバ２００上の仮想マシン間の通信量およびサーバ２００と外部の装置との通信量の合計と、を制御サーバ１００に提供してもよい。
【０１５４】
前者の場合、制御サーバ１００（例えば、収集部１２０）で合計すれば、後者の方法の（２）における合計の通信量を得られる。負荷の計算方法やオフロードの切り替え可否の決定については、図１１〜１４と同様の手順を利用できる。このように監視部２６０をハイパーバイザ２１０の外部に設ければ、ハイパーバイザ２１０自体を改造しなくてよい。このため、第２の実施の形態の制御サーバ１００の機能を簡便に実現し得る。
【０１５５】
図１８は、取得対象の情報の例を示す図である。図１８（Ａ）は、第２の実施の形態において、制御サーバ１００によりサーバ２００から取得され得る情報の例（その１）を示している。図１８（Ｂ）は、制御サーバ１００によりサーバ２００から取得され得る情報の例（その２）を示している。
【０１５６】
図１８（Ａ）（Ｂ）の何れも、取得する情報の区分として、サーバ２００の負荷、仮想スイッチで扱う通信の通信量およびサーバ２００と外部の他の装置との通信の通信量を取得することを示している点では同じである。また、サーバ２００の負荷として、ハイパーバイザ２１０によるサーバ２００の負荷を取得する点、仮想スイッチ２１１で扱う通信の通信量として仮想マシン間の通信の通信量を取得する点は同じである。
【０１５７】
一方、サーバ２００と外部の装置との通信の通信量として、仮想スイッチ２１１を経由した外部の装置との通信の通信量をＭＩＢ情報で取得してもよい（図１８（Ａ）の場合）。また、サーバ２００と外部の装置との通信の通信量を得るための情報として、仮想スイッチ２１１を経由した総通信量をＭＩＢ情報で取得してもよい（図１８（Ｂ）の場合）。
【０１５８】
なぜなら、制御サーバ１００において、当該総通信量から、仮想マシン間の通信分の通信量を差し引けば、サーバ２００と外部の装置との通信の通信量に相当する通信量を間接的に得られるからである。この場合、仮想スイッチ２１１を経由した仮想マシン間の通信量と、仮想スイッチ２１１を経由した総通信量との組み合わせを、サーバ２００と外部の装置との通信の通信量を示す情報ということもできる。
【０１５９】
このように、制御サーバ１００で取得対象とする情報には種々のものが考えられる。図１８で例示した以外にも、サーバ２００の負荷として、サーバ２００のＣＰＵ使用率やメモリ使用率などを取得することも考えられる。また、サーバ２００と外部の装置との通信の通信量として、サーバ２００が備える物理ＮＩＣを経由した外部の装置との通信の通信量を取得してもよい。更に、制御サーバ１００の機能をサーバ２００によって実現してもよい。
【０１６０】
なお、第１の実施の形態の情報処理は、制御装置１（例えば、コンピュータ）が有するプロセッサにプログラムを実行させることでも実現できる。また、第２の実施の形態の情報処理は、プロセッサ１０１にプログラムを実行させることでも実現できる。プログラムは、コンピュータ読み取り可能な記録媒体（例えば、光ディスク１３、メモリ装置１４およびメモリカード１６など）に記録できる。
【０１６１】
例えば、プログラムを記録した記録媒体を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１０２やＨＤＤ１０３などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０１６２】
１  制御装置
１ａ  受信部
１ｂ  制御部
２，４  情報処理装置
２ａ  仮想スイッチ
２ｂ，２ｃ  仮想マシン
３  物理スイッチ
【図１】
2015076643.tif 000003
【図２】
2015076643.tif 000004
【図３】
2015076643.tif 000005
【図４】
2015076643.tif 000006
【図５】
2015076643.tif 000007
【図６】
2015076643.tif 000008
【図７】
2015076643.tif 000009
【図８】
2015076643.tif 000010
【図９】
2015076643.tif 000011
【図１０】
2015076643.tif 000012
【図１１】
2015076643.tif 000013
【図１２】
2015076643.tif 000014
【図１３】
2015076643.tif 000015
【図１４】
2015076643.tif 000016
【図１５】
2015076643.tif 000017
【図１６】
2015076643.tif 000018
【図１７】
2015076643.tif 000019
【図１８】
2015076643.tif 000020