以下、本発明の一実施形態について添付図面を用いて説明する。
図1は本発明の第1の実施形態の仮想計算機システムの構成の一例を示すブロック図である。仮想計算機システムは、LAN3を介して接続された3つの物理計算機1−A〜1−Cと、これら物理計算機1−A〜1−Cを管理する管理計算機2を備える。物理計算機1−A〜1−Cと管理計算機2はSAN(Storage Area Network)を介してストレージ装置4に接続される。各物理計算機1−A〜1−Cは、筐体8−A〜8−Cにそれぞれ格納される。なお、以下では物理計算機1−A〜1−Cの総称を物理計算機1とし、筐体8−A〜8−Cの総称を筐体8とする。
物理計算機1ではそれぞれ仮想計算機が実行され、各仮想計算機はサービスを提供する。管理計算機2は、各物理計算機1への仮想計算機の割り当てと、仮想計算機の生成、移動、削除を後述するように管理する。
本実施形態の物理計算機1−A〜1−C及び管理計算機2のハードウェア構成は、同様であり、物理計算機1−Aの構成を説明する。筐体8−Aに格納された物理計算機1−Aは、演算処理を行うプロセッサ(またはCPU)100と、プログラムやデータを一時的に格納するメモリ110と、プログラム等を保持する記憶媒体としてのローカルストレージ装置120と、筐体8−Aの外部と通信を行うCNA(Converged Network Adaptor)130がインターコネクト140を介して相互に接続される。
プロセッサ(CPU)100は、N個の演算コアを有し、ローカルストレージ装置120またはストレージ装置4からプログラムを読み込んでメモリ110にロードする。そして、プロセッサ100は、メモリ110にロードしたデータを実行する。
外部との通信を行うCNA130は、ファイバチャネルのプロトコルをイーサネット(登録商標)フレームで扱うFibre Channel over Ethernet(FCoE)技術を用いて、LAN3とSAN5に接続するI/Oデバイスを統合的に扱うことができる。つまり、CNA130は、後述するように、HBA(Host Bus Adapter)としてSAN5に接続される物理I/Oデバイスと、ネットワークインターフェースとしてLAN3に接続される物理I/Oデバイスを含むI/Oデバイスである。
なお、管理計算機2は、上記物理計算機1の構成に加えて、入出力装置としてキーボードやマウスとディスプレイからなるコンソール7を有し、指令の入力と表示を行う。
なお、図示の例ではプロセッサ100が、複数の演算コア#1〜#Nを備える例を示すが、シングルコアであっても良い。
また、一つの筐体8にひとつの物理計算機1を格納する例を示したが、ブレードサーバのように複数の物理計算機1をひとつの筐体8に格納してもよい。
また、上記ではCNA130でHBAとネットワークインターフェースを統合した例を示したが、HBAとネットワークインターフェースがそれぞれ独立した物理I/Oデバイスとして実装されてもよい。
また、上記ではローカルストレージ装置120からプログラムを読み込む例を示したが、ローカルストレージ装置120に代わって、SAN5を介したストレージ装置4からプログラムをロードして起動するようにしても良い。
図2は、仮想計算機システムの論理的な構成の一例を示すブロック図である。物理計算機1−A〜1−Cでは、仮想計算機に対する計算機資源の割り当てを制御するサーバ仮想化部6−A〜6−Cがそれぞれ稼動する。各サーバ仮想化部6−A〜6−Cは管理計算機2のサーバ運用管理プログラム20によって管理される。以下の説明では、サーバ仮想化部6−A〜6−Cの総称をサーバ仮想化部6とする。
サーバ仮想化部6は、物理計算機1の計算機資源を仮想計算機に割り当てるハイパーバイザやVMM(Virtual Machine Monitor)等で構成することができる。以下では、サーバ仮想化部6をハイパーバイザで構成した例を示す。サーバ仮想化部6は物理計算機1上にn個の仮想計算機(VM)60−1〜60−nを稼動させることができる。また、サーバ仮想化部6は物理I/Oデバイスを仮想I/Oデバイス1300−1〜1300−nとして仮想計算機60−1〜60−nに割り当てる処理を実行する。物理計算機1−A〜1−Cを図中物理計算機A〜Cで示し、物理計算機1−Aの仮想計算機60−1〜60−n、サーバ仮想化部6−A〜6−C、物理I/Oデバイス(CNA)130の添え字をA〜Cで表す。なお、物理I/Oデバイス130A〜130Cは、図1のCNA130である。また、仮想計算機60−1〜60−nの総称は仮想計算機60またはVMとする。また、図2で示すように、物理計算機A(1−A)の仮想計算機60の識別子はVM−A1、VM−A2のように「A」を付加し、物理計算機B(1−B)の仮想計算機60の識別子はVM−B1、VM−B2のように「B」を付加し、物理計算機C(1−C)の仮想計算機60の識別子はVM−C1、VM−C2のように「C」を付加する。
例えば、物理計算機1−Aでは、物理計算機A示しサーバ仮想化部Aが仮想計算機VM−A1〜VM−Anを稼動させる。ここで、サーバ仮想化部Aは物理I/OデバイスAを仮想化した仮想I/Oデバイス1、2(1300−1、1300−2)を仮想計算機VM−A1、VM−A2へそれぞれ提供する。仮想計算機VM−A1、VM−A2では、図示しないゲストOS上でアプリケーションAP−A1(10−1)、AP−A2(10−2)を実行し、LAN3を介して図示しないクライアント計算機にサービスを提供する。また、サーバ仮想化部6は、仮想計算機60に割り当てていない余剰の計算機資源をリソースプールとして扱う。
なお、アプリケーションAP−A1、AP−A2、(10−2)の総称は、アプリケーション10とする。また、図2で示すように、物理計算機A(1−A)の仮想計算機60で実行されるアプリケーション10の識別子はAP−A1、AP−A2のように「A」を付加し、物理計算機B(1−B)のアプリケーション10の識別子はAP−B1、AP−B2のように「B」を付加し、物理計算機C(1−C)のアプリケーション10の識別子はAP−C1のように「C」を付加する。
物理計算機1−B、1−Cも物理計算機1−Aと同様であり、サーバ仮想化部B,Cが仮想計算機VM−B1、VM−C1を稼動させ、各仮想計算機上でアプリケーションAP−B1、AP−C1を実行する。以下の説明では、物理計算機Aの仮想計算機VM−A1を移動元の仮想計算機とし、物理計算機Bへ移動する前にリソース使用率(=リソースの使用量)を見積もる例を示す。
アプリケーション10は、仮想計算機60上で実行されて通信やディスクI/OなどのI/O処理を仮想I/Oデバイス1300に対して通信パケット(I/O要求)として発行する。仮想I/Oデバイス1300はI/O要求をサーバ仮想化部6に対して送信する。そして、サーバ仮想化部6は、I/O要求の宛先が同一の筐体8内の物理計算機1であるか否かを判定する。宛先が同一の筐体8内でなければサーバ仮想化部6は、I/O要求を物理I/Oデバイス130に対して発行する。一方、宛先が同一の筐体8内であれば、サーバ仮想化部6はメモリ110を介してI/O要求を宛先の仮想計算機に送信する。なお、物理I/Oデバイス130が受信したI/O要求は、上記の逆の順序でアプリケーションAPに伝達される。
ここで、 サーバ運用管理プログラム20は、各筐体8で使用されている物理計算機1のリソース使用率(またはリソース使用量)や、各処理における負荷のデータなどを収集し、コンソール7を利用する管理者などにGUI等を介して提供する。そして、収集した物理計算機1のリソース使用率や負荷のデータから仮想計算機60の移動が必要であれば、仮想計算機VM−A1を他の物理計算機1へ移動させる。また、サーバ運用管理プログラム20は、各物理計算機1のサーバ仮想化部6を管理し、仮想計算機60の生成、移動、削除を管理する仮想化管理部(図示省略)の機能を有する。なお、仮想化管理部については周知または公知の技術を適用すればよいので、本実施形態では説明を省略する。また、サーバ運用管理プログラム20は、非一時的な計算機読み取り可能な記憶媒体としてのローカルストレージ装置120またはストレージ装置4に格納される。
図3は、仮想計算機60とサーバ仮想化部6及びサーバ運用管理プログラム20の詳細な論理構成を示すブロック図である。なお、図3では物理計算機1−Aについて説明するが、物理計算機1−B、1−Cも同様である。
仮想計算機60−1、60−2ではアプリケーションAP−A1、AP−A2が実行され、各アプリケーション10はI/O利用ログ11−1、11−2を生成する。各I/O利用ログ11−1、11−2は、アプリケーション10の仮想I/Oデバイス1300に対するI/O処理を記録する。このときアプリケーション10は、I/O利用ログ間の依存関係(I/O発行順序)も併せて記録する。
なお、図3の例ではアプリケーション10−1、10−2がそれぞれI/O利用ログ11−1、11−2を生成する例を示したが、各仮想計算機60のOS(図示省略)がI/O利用ログを生成する構成であっても良い。
物理I/Oデバイス130Aは、図1に示した物理計算機1−AのCNA1300である。仮想I/Oデバイス1300−1には複数の仮想I/Oデバイスを含めることができる。
図示の例では、仮想I/Oデバイス1に仮想I/Oデバイス#1と仮想I/Oデバイス#2が含まれる例を示し、物理I/Oデバイス130AがCNAのように複数の物理I/Oデバイスを有する場合には、機能毎に独立した仮想I/OデバイスとしてアプリケーションAP(またはゲストOS)に提供することができる。図示の例では、物理I/Oデバイス130Aのネットワークインターフェースの機能が仮想I/Oデバイス#1として提供され、HBAの機能が仮想I/Oデバイス#2として提供された例を示す。物理I/Oデバイス130Aは、物理I/Oデバイス#1、#3がネットワークインターフェースで構成され、物理I/Oデバイス#2がHBAで構成された例を示す。
次に、サーバ仮想化部6−Aは、I/Oデバイス制御部63と、リソース監視部61及びリソース割当制御部62を含む。
I/Oデバイス制御部63は、筐体8A内部及び筐体8Aの外部とのI/O処理を制御する。筐体8Aの外部に対するI/O要求である場合には、仮想I/Oデバイス1300から入力されたI/O処理を物理I/Oデバイス130Aに発行する。筐体8Aの内部に対するI/O要求である場合には、上述のようにメモリ110でI/O処理を実施する。筐体8Aの内部に対するI/O処理は、前記従来技術に示した仮想スイッチ630で実施する。
リソース監視部61は、各仮想計算機60によるリソースの使用を監視する。リソース監視部61は、プロセッサ100や物理I/Oデバイス130Aにアクセスして、リソースの使用率を取得することができる。なお、リソース監視部61は、リソースの使用を図示しないゲストOSから取得しても良い。また、リソース監視部61はI/O処理の前後でリソースがどの程度使用されたかを取得することで、I/O処理に要するプロセッサ100等の負荷を測定する。なお、リソース監視部61は、物理計算機1毎の使用電力を検知するようにしても良い。この場合、各物理計算機1には、電力の測定装置を設置すればよい。
リソース割当制御部62は、各仮想計算機60上の処理や、サーバ仮想化部6の各コンポーネントの処理で必要となるリソースを割り当てる機能を有する。
リソース使用表610は、筐体8A内の物理計算機1−Aの仮想計算機60毎のリソース使用状況をテーブル(またはログ)で記録したものである。リソース使用表610は三種類で構成され、各仮想計算機60がI/O処理以外で使用したプロセッサのリソース使用を記録するリソース使用表610Aと、各仮想計算機60が発行したI/O処理で使用されたリソースの使用を記録するリソース使用表610Bと、サーバ仮想化部6がI/O処理に関する処理以外で使用したリソースの使用を記録するリソース使用表610Cから構成される。なお、各VMのリソース使用表610Aは、I/O処理を除いて仮想計算機60が使用したプロセッサ100等のリソースの使用を示す。
また、リソース使用表610Bは、各仮想計算機60がI/O処理の際に使用したリソースの使用を示し、本実施形態では、各仮想計算機60がI/O処理の際に使用したプロセッサ100の使用率と、CNA130の使用率をリソースの使用として扱う。なお、リソースの使用率に代わって、データサイズなどをリソースの使用量として扱うようにしても良い。
次に、各物理計算機1のサーバ仮想化部6を管理する管理計算機2は、リソース使用状況管理部21と、負荷検出部22と、マイグレーション制御部23と、入出力部24とを備えて物理I/Oデバイス130Z(CNA)を介して各物理計算機1と通信を行う。
リソース使用状況管理部21は、各物理計算機1のサーバ仮想化部6のリソース監視部と通信することで、各筐体8及び仮想計算機60によって生じる負荷情報(リソース使用情報)を取得する。リソース使用状況管理部21は、各筐体8のサーバ仮想化部6で生成されたリソース使用表610A〜610Cの一部ないしは全てを保持する。リソース使用状況管理部21は、各筐体8の物理計算機1から取得したリソース使用表610A〜610Cの内容を、全リソース使用表210として保持する。全リソース使用表210のフォーマットはリソース使用表610A〜610Cと同一である。
リソース使用状況管理部21は、各筐体8の物理計算機1から取得したI/O処理のリソース使用表610Bに基づいて、各筐体8での所定の単位データサイズのI/O処理に要する負荷(通信コスト)を演算する機能を有する。リソース使用状況管理部21は、この演算結果をリソース変換表220として保持する。リソース変換表220は、各筐体8の物理計算機1での筐体8内の通信コストと筐体8間の通信コストを保持する。
管理計算機2は、移動対象の仮想計算機VM−A1が移動候補の物理計算機1−Bで正常に動作するか否かの見積を行う際に、リソース変換表220を利用する。
マイグレーション制御部23は、各仮想計算機60のリソース使用と、各筐体8の物理計算機1のリソース使用から、移動対象の仮想計算機60を選択して、どの筐体8の物理計算機1にマイグレーションすればよいかを判定する。この移動元の仮想計算機60と、移動先の物理計算機1を選択する手法については、周知または公知の技術を適宜用いることができるので、ここでは説明を省略する。また、移動対象の仮想計算機60を選択するパラメータとしては上記リソース使用の他に、曜日あるいは期末などの暦の情報や時刻の情報を加味しても良い。
また、マイグレーション制御部23は、コンソール7からの指令やスケジュールなどに基づいて、移動対象の仮想計算機60を移動先の物理計算機1へマイグレーションすることができる。
リソース消費状況管理部21と負荷検証部22は、マイグレーション制御部23が判定したマイグレーション対象の仮想計算機60と移動先の筐体8内の物理計算機1の情報を取得して、負荷予測を実施する。負荷予測の概要は次のとおりである。
リソース消費状況管理部21はまず、移動元の仮想計算機60のサーバ仮想化部6から過去のリソース使用履歴としてリソース使用表610A〜610Cを取得し、また、移動先の物理計算機1−Bのリソース使用表610A〜610Cを取得し、全リソース使用表210を更新する。
次に、負荷検証部22は、移動先の物理計算機1の各仮想計算機60のリソース使用を時刻毎に積算して移動先の物理計算機1の全体のリソース使用率を求める。そして、負荷検証部22は、移動先の物理計算機1の全体のリソース使用率に、移動対象の仮想計算機60のリソース使用率を積み重ねて、移動対象の仮想計算機60をマイグレーションした後の移動先の物理計算機1のリソースの使用率を演算する。なお、各物理計算機1の性能が異なる場合には換算式などで補正すればよい。また、I/O処理のリソース使用率を求める際には、移動元の物理計算機1において筐体8内の通信は、移動先の物理計算機では筐体8外の通信に変換し、リソース変換表220からリソース使用を換算する。一方、移動元の物理計算機1において筐体8外の通信のうち、移動先の物理計算機で筐体8内通信になる場合は、リソース変換表220からリソース使用率を換算する。
以上のようにI/O処理では、負荷検証部22が筐体8内通信と筐体8外の通信を、移動先の物理計算機1の仮想計算機60に応じて筐体8内通信と筐体8外通信を変換する。そして、負荷検証部22は、移動対象の仮想計算機60をマイグレーションした後の移動先の物理計算機1の全体のリソース使用をリソース変換表220を参照して各時刻毎に演算する。
そして、負荷検証部22は、マイグレーションした後の移動先の物理計算機1の全体のリソース使用率が所定の閾値Th1を超えていれば移動先の物理計算機1はマイグレーション先として不適切であり、全体のリソース使用率が所定の閾値Th1以内であれば移動先の物理計算機1はマイグレーション先として適切であると判定する。
なお、マイグレーションの可否を判定する閾値Th1は、コンソール7からの指令や所定のファイルに格納される。
入出力部24は、コンソール7へリソース使用状況管理部21のデータ(全リソース使用表210の一部ないしは全部)を表示する。表示方法は、表そのものであってもよいし、別図に示すような、グラフであってもよい。また、これらの表示形式は入出力部24からの指令などによって、コンソール7の利用者(管理者)が指定することができる。また、入出力部24は、負荷検証部22やマイグレーション制御部23の演算結果の表示や、入力を受け付けるインターフェースを提供することができる。
図4は、サーバ仮想化部6のリソース監視部61が管理するリソース使用表のうち各仮想計算機60のリソース使用表610Aの一例を示す。リソース使用表610Aは、各仮想計算機60で使用されているリソースの推移を管理する。リソース使用表610Aは、仮想計算機60の識別子を格納するVM識別子611Aと、時刻を格納するtime612Aと、プロセッサ100の利用率を格納するCPU使用率613Aから構成される。図示の例では、物理計算機1−Aの仮想計算機60−1(VM−A1)について1秒おきにプロセッサ100の利用率を測定した例である。CPU使用率613Aは、仮想計算機60−1のOSから見たプロセッサ100の利用率である。この他、仮想計算機60が使用しているメモリ110の利用率を加えることができる。
なお、リソース使用表610A〜610Cは、ログとしてローカルストレージ装置120あるいはSAN5上のストレージ装置4に格納してもよい。また、筐体8の外部のストレージ装置4にログを格納する場合は、ログを格納するためにI/O処理を行ったときのリソース使用率もI/O利用ログ11−1に記録することができる。
図5Aは、物理計算機1−Aのサーバ仮想化部6−Aのリソース監視部61が管理するリソース使用表のうちI/O処理のリソース使用表610Bの一例を示す。リソース使用表610Bは、物理計算機1−A上の各仮想計算機60が実行したI/O処理の履歴を格納する。
リソース使用表610Bは、時刻を格納するtime611Bと、送信元の仮想計算機60の識別子を格納する送信元識別子612Bと、送信先の仮想計算機60の識別子を格納する送信先識別子613Bと、送受信したデータの容量を格納するデータサイズ614Bと、I/O処理を行ったときのプロセッサ100の利用率を格納するCPU利用率615Bと、I/O処理を行ったときのCNA130の利用率を格納するCNA利用率616Bからひとつのエントリが構成される。
データサイズ614Bは、データの容量の他に、I/Oデバイス130との間で実際に送受信するI/Oバッファのサイズを示すチャンクサイズの何個分か、という形式でもよい。CPU利用率615Bは、仮想計算機60に割り当てられたプロセッサ100のリソースについて仮想計算機60のOS(図示省略)から見た利用率を示す。CNA利用率616Bは、仮想計算機60に割り当てられた仮想I/Oデバイス1300のリソースについて仮想計算機60のOS(図示省略)から見た利用率を示す。
図示のデータのうち、#1aは、物理計算機1−Aの仮想計算機A1(VM−A1)から物理計算機1−Bの仮想計算機B2(VM−B2)へのネットワークアクセスで、データ量が2MBであることを示す。図中#2aのデータは、物理計算機1−Aの仮想計算機A2(VM−A2)からストレージ装置4へのディスクアクセスで、データ量が4MBであることを示す。図中#3aのデータは、物理計算機1−Aの仮想計算機A1(VM−A1)から物理計算機1−Aの仮想計算機A4(VM−A4)へのネットワークアクセスで、データ量が2MBであることを示す。このデータ#3aのように、同一の物理計算機1−A上のネットワークアクセスは、CNA利用率616Bは0%となって、CNA130は経由せずにプロセッサ100の処理によるメモリ110のコピーとなる。すなわち、図3に示した仮想スイッチ630によって物理計算機1−Aの仮想計算機A1(VM−A1)と仮想計算機A4(VM−A4)がメモリ110上で通信を行ったことを意味する。
以上のように、物理計算機1−Aのサーバ仮想化部6−Aでは、仮想計算機60の処理、仮想計算機60のI/O処理及びサーバ仮想化部6の処理で使用されたリソースの履歴が、リソース使用表610A〜610Cとして蓄積される。
なお、他の物理計算機1−B、1−Cのサーバ仮想化部6−B、6−Cについても、上記サーバ仮想化部6−Aと同様に、リソース使用表610A〜610Cが蓄積される。
図5Bは、物理計算機1−Bのサーバ仮想化部6−Bのリソース監視部61が管理するリソース使用表のうちI/O処理のリソース使用表610Bの一部を示す。図5Bでは、図5Aのうち、物理計算機1−Bの仮想計算機60が送信先または送信元となっているI/O処理について示したものである。つまり、筐体8間に跨る通信の場合には、各物理計算機1上のサーバ仮想化部6によってI/O処理のリソース使用表610Bが蓄積される。
なお、リソース使用表610A〜610Cは、ログとしてローカルストレージ装置110またはストレージ装置4ディスクに格納してもよい。
以下では、マイグレーション制御部23が、マイグレーションの対象として物理計算機1−Aの仮想計算機60−1(VM−A1)を選択し、この仮想計算機VM−A1を物理計算機1−Bへ移動させる際の処理について説明する。
<処理の概要>
マイグレーション制御部23が移動対象の仮想計算機VM−A1と、移動先の物理計算機として物理計算機1−Bを選択し、管理計算機2は各物理計算機1−A〜1−Cに対して、リソース使用表610A〜610Cをそれぞれ取得するよう指令する。この指令は、例えば、マイグレーション制御部23が負荷検証部22に移動対象の仮想計算機VM−A1と移動先の物理計算機1−Aを通知し、負荷検証部22全リソース使用表210を更新するようリソース使用状況管理部21に指令する。
リソース使用状況管理部21は、各物理計算機1−A〜1−Cのサーバ仮想化部6−A〜6−Cに対して、それぞれリソース使用表610A〜610Cの更新を指令する。
上記指令により、サーバ仮想化部6−A〜6−Cでは、それぞれ図9Aに示す処理が行われる。図9Aは、サーバ仮想化部6で行われる処理の一例を示すフローチャートである。
まず、各サーバ仮想化部6では、ステップS1で管理計算機2のリソース使用状況管理部21からリソース使用の計測開始の指示を受信すると、上述のリソース使用表610A〜610Cの取得を実施する(S1)。
各サーバ仮想化部6では、ステップS2で各物理計算機1上で使用されたリソースを測定する。各サーバ仮想化部6は測定したリソース使用率で各リソース使用表610A〜610Cを更新する(S2)。上記ステップS1〜S3の処理を管理計算機2から測定終了の通知を受信するまで繰り返す(S3)。
上記の処理により所定期間のリソース使用表610A〜610Cが、各物理計算機1−A〜1−Cのそれぞれについて得られる。なお、管理計算機2が各サーバ仮想化部6に対して指令する測定開始(t1)から測定終了(t2)までの所定の期間は、予め定めた時間やコンソール7から入力した時間などである。
リソース監視部61は、各仮想計算機60が利用するプロセッサ100の利用率(CPU利用率)を、図4で示すように、仮想計算機60毎に所定の時間(図示の例では1秒)で取得し、仮想計算機60毎のリソース使用表610Aを生成する。
I/O処理のリソース使用については、I/Oデバイス制御部63がI/O処理要求を受け付けると、リソース監視部61にCPU利用率とCNA利用率及び処理するデータサイズの取得開始を指令する。I/Oデバイス制御部63は、受け付けたI/O処理が完了すると、リソース監視部61にCPU利用率とCNA利用率及びデータサイズの取得終了を通知する。リソース監視部61は、送信元識別子と送信先識別子にCPU利用率とCNA利用率及びデータサイズを対にして、I/O処理のリソース使用表610Bを生成する。なお、CPU利用率とCNA利用率は、平均値や最大値など予め設定した処理を加えることができる。
また、リソース監視部61は、サーバ仮想化部6自身が利用するプロセッサ100の利用率を所定の時間(例えば、1秒間)間隔で取得し、サーバ仮想化部6のリソース使用表610Cを生成する。
なお、I/O処理のリソース使用については、CPU利用率をサーバ仮想化部6のリソース使用表610Cから差し引いておいても良い。また、各リソース使用率の取得は、公知または周知の手法を適宜適用することができ、上述した手法に限定されるものではない。
各サーバ仮想化部6は、管理計算機2から測定終了の通知を受信すると、リソース使用率の測定を終了し、蓄積したリソース使用表610A〜610Cをそれぞれ管理計算機2のリソース使用状況管理部21へ送信する。
管理計算機2のリソース使用状況管理部21は、各サーバ仮想化部6から受信したリソース使用表610A〜610Cを全リソース使用表210として保持する。
図5Cは、管理計算機2のリソース使用状況管理部21が保持する全リソース使用表210の一例を示す。リソース使用状況管理部21は、物理計算機1−Aのサーバ仮想化部6−Aから受信したリソース使用表610A〜610Cを、リソース使用表610A−1〜610C−1として全リソース使用表210内に保持する。リソース使用状況管理部21は、物理計算機1−Bのサーバ仮想化部6−Bから受信したリソース使用表610A〜610Cを、リソース使用表610A−2〜610C−2として全リソース使用表210内に保持し、同様に、物理計算機1−Cのサーバ仮想化部6−Cから受信したリソース使用表610A〜610Cを、リソース使用表610A−3〜610C−3として全リソース使用表210内に保持する。なお、図中シミュレーション表610B−2sは、後述の負荷検証部22が生成する表である。
次に、リソース使用状況管理部21は、各物理計算機1−A〜1−Cから取得した全リソース使用表210よりI/O処理の単価(コスト)を求めて、リソース変換表220に設定する。本実施形態では、I/O処理のリソース使用表610B−1〜610B−3からI/O処理の単価を求める例について説明する。
図9Bは、管理計算機2で行われる処理の一例を示すフローチャートである。この処理は、各物理計算機1−A〜1−Cからリソース使用表610A〜610Cを受信した後に実行される。
まず、管理計算機2のリソース使用状況管理部21は、ステップS10で、筐体8内の通信コストを演算する。通信コストは、予め設定した単位データサイズ(例えば、128kB)を転送する際に使用したリソースの使用率を求める。なお、以下の例では1MB=1024kBとして演算した例を示す。また、単位データサイズはCNA130が一回の通信で送受可能なデータサイズなどに設定することができる。
この演算は、例えば、図6Aで示すように、同一の筐体8内の通信を抽出し、データサイズ614B(kB)とCPU利用率615Bから単位データサイズ(128kB)あたりのCPU利用率xを次式により求める。
X = CPU利用率/(データサイズ(kB)/128(kB)) …(1)
つまり、図5Aで示したように、物理計算機1−AのI/O処理のリソース使用表610Bには、筐体8内の通信によるI/O処理の履歴と、筐体8間の通信によるI/O処理の履歴が混在している。そこで、リソース使用状況管理部21は、物理計算機1−AのI/O処理のリソース使用表610Bから、送信元識別子612Bと送信先識別子613Bが同一の物理計算機1−A上の仮想計算機VM−Ax間のI/O処理の履歴を抽出し、図6Aの同一の筐体8内のI/O処理の履歴を集計する。
図6AのI/O処理の履歴では、3つの筐体8内のI/O処理から#1a、#6a、#9aのCPU利用率615Bから単位データサイズ当たりのCPU利用率をそれぞれ求め、これらの平均値を筐体8A内のI/O処理にかかるCPU利用率x=0.429%(小数点以下第4位を四捨五入)として設定する。
同様に、図6Aで示したように、同一の筐体8内のI/O処理の履歴から、データサイズ614B(kB)とCNA利用率616Bから単位データサイズ(128kB)あたりのCNA利用率yを次式により求める。
Y = CNA利用率/(データサイズ(kB)/128(kB)) …(2)
同一の物理計算機1−A上では、仮想スイッチ630による通信となるので、CNA利用率616Bの平均値は0%となる。
以上より、筐体8−A内の通信コストは、
平均CPU利用率Xaa=0.429%
平均CNA利用率Yaa=0%
となる。なお、添え字の「aa」は送信元の筐体が8−Aで、送信先の筐体が8−Aであることを示す。
リソース使用状況管理部21は、他の物理計算機1−B,1−Cについても、全リソース使用表210内のリソース使用表610B−2、610B−3から筐体8−B内の通信コストと、筐体8−C内の通信コストとをそれぞれ求める。
次に、ステップS11では、リソース使用状況管理部21が、全リソース使用表210内のリソース使用表610B−1〜610B−3から各筐体8間の通信コストXbb、Ybb、Xcc、Yccを演算する。
例えば、図5A、図5Bで示した物理計算機1−A、1−BのI/O処理のリソース使用表610B−1、610B−2から筐体8−A、8−B間の通信で、筐体8−Aが送信元になるI/O処理の履歴を抽出すると図6Bのように、3つのI/O処理の履歴が抽出される。これらの各行について上記(1)式より単位データサイズ当たりのCPU利用率Xと、単位データサイズ当たりのCNA利用率=Yを求める。そして、各CPU利用率XとCNA利用率=Yの平均値を、筐体8−Aから筐体8−Bへの通信コストとして
平均CPU利用率Xab=0.150%
平均CNA利用率Yab=0.275%
となる。なお、添え字の「ab」は送信元の筐体が8−Aで、送信先の筐体が8−Bであることを示す。また、リソース使用状況管理部21は、送信元の筐体が8−Bで、送信先の筐体が8−Aの通信コストも同様に算出し、平均CPU利用率Xba、平均CNA利用率Ybaとする。
リソース使用状況管理部21は、他の物理計算機1−B,1−Cについても、全リソース使用表210内のリソース使用表610B−2、610B−3から筐体8−A、8−B、8−C間の各通信コストをそれぞれ求める。
次に、ステップS12では、リソース使用状況管理部21は、上記ステップS10、S11で求めた筐体8内と筐体8内の通信コストをリソース変換表220を書き込んで更新する。
図6Cは、リソース変換表220の一部を示す図である。図6Cは、I/O処理のリソース使用表610B−1〜610B−3から各筐体8内及び筐体8間の通信コストを求めたうち、筐体8−Aと筐体8−Bの通信コストに関する部分のリソース変換表220の例を示す。図6Cにおいて、リソース変換表220は、送信元の筐体8の識別子を格納する送信元識別子221と、送信先の筐体8の識別子を格納する送信先識別子222と、単位データサイズ当たりのCPU利用率の平均値Xij(i,jは筐体8の識別子)を格納するCPU利用率223と、単位データサイズ当たりのCNA利用率の平均値Yijを格納するCNA利用率224とからひとつのエントリが構成される。
送信元識別子221が「筐体A」で送信先識別子222も「筐体A」のエントリは、筐体8−Aの筐体内の通信コストXaa、YaaがそれぞれCPU利用率223とCNA利用率224に格納される。
一方、送信元識別子221が「筐体A」で送信先識別子222が「筐体B」のエントリは、筐体8−Aから筐体8−Bへの筐体間の通信コストXab、YabがそれぞれCPU利用率223とCNA利用率224に格納される。
なお、リソース使用率の計測開始(t1)から計測終了(t2)までの期間に、I/O処理のない仮想計算機60があった場合には、過去に求めたリソース変換表220の値を利用するようにしてもよい。あるいは、上記ステップS12のリソース変換表220の更新は、図9Aの処理で新たにリソース使用表610Bが更新された仮想計算機60に関して実行するようにしても良い。
次に、図9BのステップS13では、マイグレーション制御部23が選択した移動対象の仮想計算機VM−A1と、移動先の物理計算機1−Aについて負荷検証部22がリソース使用率の見積を実施する。
まず、負荷検証部22は、移動対象の仮想計算機VM−A1のリソース使用率が記録されたリソース使用表610A−1、610B−1と、移動先の物理計算機1−Bのリソース使用率が記録されたリソース使用表610A−2、610B−2、610C−2を全リソース使用表210から読み込む。
次に、負荷検証部22は、移動対象の仮想計算機60を含む物理計算機1−AのI/O処理のリソース使用率が記録されたリソース使用表610B−1から、移動対象の仮想計算機VM−「A1」を送信元識別子612Bまたは送信先識別子613Bに含むエントリを抽出し、「A1」を物理計算機1−Bへ移動したことを示す「Bx」に置き換える。そして、移動対象の仮想計算機VM−A1を物理計算機1−Bへ移動後の通信状態に応じて、負荷検証部22はCPU利用率615BとCNA利用率616Bを演算する。この演算の結果は図7に示すようになる。
図7は、物理計算機1−Aの仮想計算機VM−A1を物理計算機1−Bへ移動したと仮定して、仮想計算機VM−Bxとして稼動したときのリソース使用率を示すシミュレーション表610B−2sである。このシミュレーション表610B−2sフォーマットはリソース使用表610Bと同一である。ただし、移動対象の仮想計算機VM−A1を含まないエントリは負荷検証部22で削除されたものである。
図7において、エントリ#1a'は、送信元識別子612Bが「A1」から「Bx」に変更され、送信先識別子613Bが「B2」なので筐体8間の通信が筐体8−B内の通信に変更されている。このため、負荷検証部22は、図6Cのリソース変換表220から送信元識別子221と送信先識別子222が「筐体B」の筐体8内の単位データサイズ当たりの通信コスト(CPU利用率=0.492%、CNA利用率=0%)を取得し、図7のエントリ#1a'のデータサイズ=2MB=2048kBを、筐体8内の通信で利用するリソース使用率に変換すると新たな仮想計算機VM−Bxが物理計算機1−Bで使用するCPU利用率=7.87%となる。つまり、2MB=(128kB×16)であるため、CPU利用率Xbbは0.492%×16=7.872%(四捨五入して7.87%) となり、CNA利用率は0%となる。
一方、図7において、エントリ#3a'は、送信元識別子612Bが「A1」から「Bx」に変更され、送信先識別子613Bが「A4」なので筐体8内の通信が筐体8−Bから筐体8−Aへの筐体8間の通信に変更されている。このため、負荷検証部22は、図6Cのリソース変換表220から送信元識別子221が「筐体B」で、送信先識別子222が「筐体A」の筐体8間の通信の単位データサイズ当たりの通信コスト(CPU利用率=0.139%、CNA利用率=0.286%)を取得し、図7のエントリ#3a'のデータサイズ=2MB=2048kBを、筐体8間で通信する際に利用するリソース使用率に変換すると新たな仮想計算機VM−Bxが物理計算機1−Bで使用するCPU利用率=2.22%でCNA利用率=4.26%となる。
負荷検証部22は、図7の他のエントリについても移動対象の仮想計算機VM−A1を物理計算機1−Bへ移動したと仮定して上記と同様に通信コストの演算を行う。
また、負荷検証部22は、物理計算機1−BのI/O処理のリソース使用表610B−2から仮想計算機VM−A1を含むエントリを削除する。これは、シミュレーション表610B−2sで移動対象の仮想計算機VM−A1を物理計算機1−B上のVM−Bxに置き換えてリソース使用率を演算したためである。すなわち、I/O処理のリソース使用表610B−2は、仮想計算機VM−A1を移動する以前の筐体8間の通信で使用するリソースが含まれているため、これを削除しておく。また、負荷検証部22は、シミュレーション表610B−2sを全リソース使用表210に保存する。
次に、図9BのステップS14では、負荷検証部22が、仮想計算機VM−A1を移動した場合について、測定開始時刻t1から測定終了時刻t2までのCPU利用率を各時刻(リソース使用表のtime611B)毎に積算する。
ある時刻tの物理計算機1−BのCPU利用率の予測値X(t)は、次のように行う。
元の物理計算機1−Bの仮想計算機60が利用しているI/O処理を除くCPU利用率X1(t)を、物理計算機1−Bのリソース使用表640A−2から求める。
元の物理計算機1−Bのサーバ仮想化部6Bが利用しているCPU利用率X2(t)を、物理計算機1−Bのリソース使用表640C−2から求める。
仮想計算機VM−A1を削除した物理計算機1−BのI/O処理のリソース使用表610B−2からCPU利用率X3(t)を求める。
最後に、仮想計算機VM−Bxのリソース使用率を示すシミュレーション表610B−2sからCPU利用率X4(t)を求める。
そして、負荷検証部22は、測定開始時刻t1から測定終了時刻t2までの各時刻のCPU利用率の予測値X(t)を、
X(t)=X1(t)+X2(t)+X3(t)+X4(t)
として求め、入出力部24に出力する。
また、負荷検証部22は、仮想計算機VM−A1を移動する以前の物理計算機1−BのCPU利用率Xa(t)を次のように求める。負荷検証部22は、元の物理計算機1−Bのリソース使用表610B−2(仮想計算機VM−A1を削除する以前)からCPU利用率X5(t)を求める。そして、負荷検証部22は、測定開始時刻t1から測定終了時刻t2までの各時刻のCPU利用率Xa(t)を、
Xa(t)=X1(t)+X2(t)+X3(t)+X5(t)
として求め、入出力部24に出力する。
図9BのステップS15では、入出力部24が仮想計算機VM−A1を物理計算機1−Bへ移動した場合のCPU利用率の予測値X(t)と、移動前のCPU利用率Xa(t)をコンソール7に出力する。
入出力部24の出力の結果、図8Aで示すように、仮想計算機VM−A1を移動する前の物理計算機1−BのCPU利用率Xa(t)が実線で表示され、仮想計算機VM−A1を移動した場合の物理計算機1−BのCPU利用率の予測値X(t)が破線で表示される。図8Aはコンソール7のディスプレイに出力された、CPU利用率の予測値X(t)と実測値のCPU利用率Xa(t)の画面イメージである。
また、負荷検証部22が入出力部24に予め設定されたCPU利用率の閾値Th1をコンソール7に表示させ、破線の予測値X(t)が閾値Th1を超えていれば、この仮想計算機VM−A1を当該物理計算機1−Bへマイグレーションさせると、負荷が過大になると判定することができる。このため、仮想計算機VM−A1の物理計算機1−Bへのマイグレーションは不適切であると判定できる。
一方、破線の予測値X(t)が閾値Th1以内であれば、この仮想計算機VM−A1を当該物理計算機1−Bへマイグレーションさせても負荷が過大になることはないと判定することができる。このため、仮想計算機VM−A1の物理計算機1−Bへのマイグレーションは適切であると判定できる。
また、負荷検証部22が、予測値X(t)と実測値Xa(t)の差分を入出力部24へ出力した場合には、図8Bで示すように、CPU利用率の変動量を表示することができる。このとき、閾値Th1と同様に最大負荷を定めておき、CPU利用率の変動量が最大負荷を超える場合には、当該仮想計算機VM−A1を当該物理計算機1−Bへマイグレーションすることができない、と判定することができる。図8Bはコンソール7のディスプレイに出力された、CPU利用率の予測値X(t)と実測値のCPU利用率Xa(t)の差分の画面イメージである。
なお、CNA利用率についても上記のCPU利用率と同様に閾値Th1と予測値X(t)を比較して、仮想計算機VM−A1のマイグレーションが可能であるか否かを事前に判定することが可能となる。
図8A、図8Bの例では、CPU利用率の予測値X(t)が閾値Th1を越えるため、マイグレーションを実施すると物理計算機1−B上の他の仮想計算機60ないしは自仮想計算機VM−Bxに高負荷が生じることが分かるため、仮想計算機VM−A1のマイグレーションをすべきでないと判定できる。また、筐体8−B以外で同様の閾値Th1を越える予測値が生じた場合には、同様に「マイグレーションすべきでない」と判定することができる。また、入出力部24からコンソール7に出力したデータによって、コンソール7の利用者に判定を促す方法も考えられる。
さらに、移動元となる筐体8−Aのプロセッサ100の利用率について考えると、筐体8−Aの物理計算機1−Aの全体負荷(元のリソース使用率を積み上げることで算出可能)に対して、
(1)移動元の仮想計算機VM−A1の負荷を引く(図4)
(2)移動元のVM−A1が発行したI/O処理の負荷を全て引く(図5Aの#1a, #3a〜#9a)
(3)移動元の仮想計算機VM−A1が発行した処理負荷のうち、移動元のVM−A1に対するI/O処理が発生するものについては、移動後のI/O処理が行われた場合の負荷に置き換えた予測負荷を加える。この処理は当該仮想計算機VM−A1を移動する側の処理となるため、図5Bに示した#1b,#4b,#8bを上述と同様に負荷を置き換えたものを用いる。
以上より、移動先の物理計算機1−Bと同様の処理を実現できる。さらに、筐体8−Cについても同様に、外部からの通信に対する負荷をリソース変換表220でリソース使用率を置換することで、仮想計算機VM−A1のマイグレーションした後の負荷を見積もることができる。
このように、各物理計算機1の各仮想計算機60を所定の測定期間で実行してリソース使用表610A〜610Cを各サーバ仮想化部6で生成する。管理計算機2では、これらのリソース使用表610A〜610Cから、リソース変換表220を生成し、同一の物理計算機1上の仮想計算機間の通信コストと、他の物理計算機1間の通信コストをそれぞれ求める。
そして、物理計算機1−Aの負荷測定で生成したI/O処理のリソース使用表610Bから、移動対象の仮想計算機VM−A1が送信元識別子または送信先識別子となっているエントリを抽出する。そして、リソース使用状況管理部21は抽出したエントリの送信元識別子と送信先識別子を移動先の物理計算機1−B上の仮想計算機VM−Bxに置き換える。この置き換え後のシミュレーション表610B−2sでCPU利用率615BとCNA利用率616Bをリソース変換表220を用いて演算する。
このシミュレーション表610B−2sと物理計算機1−Bのリソース使用表610A、610B、610CのCPU利用率、CNA利用率を併せることで、仮想計算機VM−A1を移動後の物理計算機1−Bの負荷を正確に推定することができる。これにより、サービスを提供している他の仮想計算機に影響を与えることなく、移動対象の仮想計算機VM−A1を移動先の物理計算機1−B上で実行可能か否かを判定することができる。
なお、上記では、筐体8全体に対する負荷について監視対象としたが、必要に応じて仮想計算機60も監視対象としてもよい。
また、上記図9Aでは、同一時間における負荷でマイグレーション後の物理計算機1−Bの負荷を見積もったが、例えば、変動する負荷が異なるタイミングで発生する可能性に鑑みて、発生しうる最大負荷量を、移動先の物理計算機1−Bで過去に生じた負荷履歴に積み上げることで、図8A等で示したように閾値Th1を越えるか否かを判定してもよい。これにより、負荷発生のタイミングがずれている場合にも、マイグレーションすべきか否かの検証をすることが可能となる。
なお、上記図8A、図8Bでは、同一時間における負荷量で見積もった例を示したが、例えば、変動する負荷量が違うタイミングで発生する可能性に鑑みて、発生しうる最大負荷量を、移動先で過去に生じた負荷履歴に積み上げることで、閾値を越えるか判断してもよい。これによって、タイミングがずれて負荷が生じた場合についても、検証することが可能となる。
<第2実施形態>
図10は、本発明の第2の実施形態を示し、仮想計算機システムのブロック図である。図10では、ダミーの仮想計算機を物理計算機1−Bで実行して、前記第1実施形態と同様に、仮想計算機VM−A1のマイグレーション先となる物理計算機1−Bに負荷をかける例を示す。その他の構成は、前記第1実施形態と同様である。
前記第1実施形態においては、負荷検証部22によってマイグレーションを実施した後の負荷の推定値X(t)を求めて、推定値が閾値Th1を超えるとマイグレーションを実施不可能と判定する例を示した。
本第2実施形態では、閾値Th1に加えて、マイグレーションを確実に実施可能な閾値Th2を設定し、閾値Th2を越えない場合はマイグレーション可能と判定するとともに閾値Th1を越えた場合には不可能と判定する。なお、閾値Th1は、例えばCPU利用率=90%等に設定され、閾値Th2は、例えばCPU利用率=10%等に設定され、物理計算機1のプロセッサ100の利用率が閾値Th2以下であれば、物理計算機1−Aの確実に仮想計算機VM−A1のマイグレーションを行うことができる、と判定できる。
一方、閾値Th1>推定値X(t)>閾値Th2となるような負荷の場合には、移動先の物理計算機1−B上にダミーの仮想計算機60(以下、ダミーVM−D1、ダミーVM−D2とする)及び、移動元の仮想計算機VM−A1及び移動先の物理計算機1−Bとは異なる物理計算機1−C上にダミーの仮想計算機60−2(ダミーVM−C2)を実行させる。あるいは、ダミーのアプリケーションAP−D3を管理計算機2で実行させる。そして、それぞれのダミーVMあるいはアプリケーションAP−D3が以下のような処理を行うことで、実際に筐体8−Bの物理計算機1−Bに負荷を掛ける。なお、負荷をかけるためのアプリケーションAP−D3は、物理計算機1−C上の仮想計算機60で実行しても良い。
このため、前記第1実施形態の図9Aの処理で、各物理計算機1−A〜1−Cのリソース使用表610A〜610−Cを生成して、管理計算機2のリソース使用状況管理部21の全リソース使用表210に格納した後に、本第2実施形態を実行することを前提とする。つまり、移動元の仮想計算機VM−A1のCPU利用率とI/O処理の送信元と送信先及びデータサイズを、実際の処理の履歴として保持し、本第2実施形態で再生する。
物理計算機1−Bには、サーバ運用管理プログラム20の指令によってサーバ仮想化部6−Bが、図2に示したリソースプール(または余剰リソース)にダミーVM−D1、ダミーVM−D2を生成する。図11は、物理計算機1−BのダミーVM−D1及びダミーVM−D2の詳細を示すブロック図である。
ダミーVM−D1とダミーVM−D2は、図11で示すように、物理計算機1−Bに負荷をかけるダミーのアプリケーションAP−D1とAP−D2をそれぞれ実行する。ダミーのアプリケーションAP−D1とAP−D2は、負荷の履歴を再現するためのリソース使用再生表50と、リソース使用再生表50を生成する負荷再生部51をそれぞれ有する。負荷再生部51は、リソース使用表変換部511と、CPU負荷再生部512と、I/O処理再生部513から構成される。
負荷再生部51のリソース使用量変換部511は、リソース使用表610A〜610Cをサーバ仮想化部6−Bまたは管理計算機2のリソース使用状況管理部21の全リソース使用表210から、移動元の仮想計算機VM−A1のI/O処理を含むリソース使用表を取得する。リソース使用量変換部511は、仮想計算機VM−A1が送信元となるI/O処理をリソース使用表から抽出し、発行先及び発行元の情報を変換し、リソース使用再生表50として保持する。
各ダミーアプリケーションAP−D1、AP−D2のリソース使用再生表50は、リソース使用量変換部511によって変換生成される表である。リソース使用再生表50の内容に基づいて、CPU負荷再生部512及びI/O処理再生部513の送信処理を実行する。
負荷再生部51を構成するCPU負荷再生部512は、リソース使用再生表50に記載されるCPU負荷を生成する。生成方法はどのような形であってもよく、例えば、ループ演算を実行するなどの単純な方法でもよい。
負荷再生部51を構成するI/O処理再生部513は、リソース使用再生表50に基づいて、送信先に指定されたダミーVM−D2またはダミーアプリケーションAP−D3あるいはDisk(ストレージ装置)装置4などに定められたデータサイズのI/O処理を行う。データの内容については、ダミーデータであってもよい。一方、他のダミーVMが再生したI/O処理を受信する必要がある場合には、I/O処理再生部513で受信処理を実施することも含む。
次に、ダミーVM−D1で実行されるダミーアプリケーションAP−D1は、移動元の仮想計算機VM−A1に相当する負荷を生成する。負荷の発生には、移動元のサーバ仮想化部6−Aのリソース監視部61、あるいは管理計算機2の全リソース使用表210からリソース使用表610A〜610Cを取得し、I/O処理のリソース使用表610Bに基づいてダミーアプリケーションAP−D1がI/O処理に関する負荷を発生する。
ダミーアプリケーションAP−D1の負荷再生部51が利用するのは、前記第1実施形態の図9Aの処理で生成した図4に示した物理計算機1−A(筐体8−A)で仮想計算機VM−A1が使用したCPU利用率613Aを含むリソース使用表610Aと、図5Aのリソース使用表610Bのうち仮想計算機VM−A1が発行したI/O処理のデータ(こちらはリソース使用のデータは利用しない)である。
ダミーアプリケーションAP−D1では、図4に示したリソース使用表610AのCPU利用率613Aと同様の負荷を図4のtime612Aと同様のタイミングで発生させる。そして、ダミーアプリケーションAP−D1のI/O処理については、図12Aに示すように、移動元の仮想計算機VM−A1が送信元となるI/O処理の通信先とデータサイズを上記取得したリソース使用表610Bから抽出し、リソース使用再生表50として保持する。
図12Aは、物理計算機1−Aのリソース使用表610Bから仮想計算機VM−A1のI/O処理をダミーアプリケーションAP−D1の負荷再生部51が抽出したダミーVM−D1のリソース使用再生表50の一例を示す図である。リソース使用再生表50は、時刻を格納するtime501と、送信元の仮想計算機60の識別子を格納する送信元識別子502と、送信先の仮想計算機60または装置の識別子を格納する送信先識別子503と、データサイズ504から構成される。前記第1実施形態のCPU利用率やCNA利用率は、リソース使用表610Bから読み込まない。
物理計算機1−BのダミーVM−D1で実行されるダミーアプリケーションAP−D1のリソース使用表変換部511が、図9Aの処理で測定された物理計算機1−AのCPU利用率とI/O処理についてリソース使用表610A、610Bを取得する。ダミーアプリケーションAP−D1の負荷再生部51では、仮想計算機VM−A1に関するCPU利用率のリソース使用表610Aについてはそのままリソース使用再生表50に格納する。
ダミーアプリケーションAP−D1の負荷再生部51では、I/O処理のリソース使用表610Bから送信元識別子が移動対象の仮想計算機VM−A1のエントリを抽出してリソース使用再生表50として保持する。このとき、ダミーアプリケーションAP−D1は、図12Aで示したリソース使用再生表50の送信元識別子502をダミーVM−D1に変換し、送信先識別子503の仮想計算機VM−Bxに関する送信先をダミーVM−D2に変換する。ダミーアプリケーションAP−D1は、図12Aで示した送信先識別子503の仮想計算機VM−Cxに関する送信先をダミーVM−C2に変換する。
つまり、負荷再生部51のリソース使用表変換部511では、移動対象の仮想計算機VM−A1を物理計算機1−Bへ移動させたときに、筐体8−AのVM−A1と、8−B間の通信を筐体8−B内の通信に変換し、筐体8−Aの他のVM−Axと、移動対象の仮想計算機VM−A1間の通信を、筐体8−B、8−C間の筐体外通信に変換する。なお、変換の結果は、I/O処理のリソース使用再生表50を更新しても良いし、識別子を読み替えるように設定してもよい。
そして、ダミーアプリケーションAP−D1では、I/O処理再生部513が、図12Aのtime501のタイミングに基づいてI/O処理を再生する。ここで、I/O処理再生部513がI/O処理を実施(再生)する場合には、同一筐体(筐体8−B)内の仮想計算機60に対するI/O処理については、ダミーVM−D2に対してI/O処理を実施し、筐体外の仮想計算機60に対するI/O処理については、物理計算機1−CのダミーVM−C2または管理計算機2のダミーアプリケーションAP−D3に対して実施する。さらに、I/O処理再生部513がリソース使用再生表50に基づいて再生するI/O処理が、Disk(ストレージ装置4またはローカルストレージ装置120)への処理である場合には、同一Disk装置に対して処理を行う。このI/O処理は、仮想計算機VM−A1が保存したデータを破壊しないように実施する。一例をあげれば、Disk装置(ストレージ装置4またはローカルストレージ装置120)に対するI/O処理の再生がリードであればDisk装置のデータを直接読み込むなどしてもよいし、あるいはダミーデータを読み込んでもよい。一方で、Disk装置に対するI/O処理の再生がライトであれば、本来書くべきデータとは異なる場所に、すなわち予め設定したダミーの領域へデータを書き込むことでデータの上書きなどによる破壊を防ぐ。また、外部の仮想計算機からダミーVM−D1に対するIO処理については、データ受信を行う。
ダミーVM−D2では、物理計算機1−AのI/O処理のリソース使用表610Bのうち、送信元識別子が物理計算機1−Bの仮想計算機VM−Bxを抽出してリソース使用再生表50として保持する。図12Bは、物理計算機1−Aのリソース使用表610Bから仮想計算機VM−Bxが送信元のI/O処理を抽出したダミーVM−D2のリソース使用再生表50の一例を示す図である。
ダミーVM−D2のI/O処理再生部513では、リソース使用再生表50のtime501のタイミングで、図中仮想計算機VM−B2に代わって4kBのデータをダミーVM−D1へ送信するI/O処理を再生する。
物理計算機1−CのダミーVM−C2も、上記物理計算機1−BのダミーVM−D1と同様に構成される。ダミーVM−C2では、物理計算機1−AのI/O処理のリソース使用表610Bのうち、送信元識別子が物理計算機1−Aの移動元の仮想計算機VM−A1以外の仮想計算機VM−Axを抽出してリソース使用再生表50として保持する。図12Cは、物理計算機1−Aのリソース使用表610Bから仮想計算機VM−Axが送信元のI/O処理を抽出したダミーVM−C2のリソース使用再生表50の一例を示す図である。
ダミーVM−C2のI/O処理再生部513では、リソース使用再生表50のtime501のタイミングで、図12Cの仮想計算機VM−A4に代わって512kBのデータをダミーVM−D1へ送信するI/O処理を再生する。
次に、管理計算機2では、物理計算機1−BのダミーVM−D1でリソース使用の再生を開始すると次の処理を実行する。
管理計算機2のリソース使用状況管理部21では、上記のダミーVM−D1、ダミーVM−D2が、仮想計算機VM−A1を物理計算機1−Bへ移動した後の負荷を再生している間の、負荷量(リソースの使用率)を監視する。また、リソース使用状況管理部21は、物理計算機1−Bのリソースの使用率の監視の結果について、入出力部24及びコンソール7を介してユーザにリソースの使用率などを提示する。
管理計算機2の負荷検証部22は、上記物理計算機1−Bのリソース使用率の監視中に高負荷状態を示す閾値Th1を越えるかどうかを判定する。高負荷状態を示す閾値Th1を越えた場合には、ダミーVM−D1、VM−D2、VM−C2の処理を速やかに停止する。
以上により、仮想計算機VM−A1の移動先の物理計算機1−BでダミーVM−D1、VM−D2を実行することで、物理計算機1−B上の他のVM(VM−B1)の提供する処理(サービス)に影響がでることを防ぐ。
なお、ダミーVM−D1で行われるCPU負荷の発生については、上述したダミーVM−D1のダミーアプリケーションAP−D1として負荷を発生させる以外に、サーバ仮想化部6−Bの仮想化管理部に依頼して、リソース割当(スケジューリング)をダミーVM−D1に対して割当てるような方法で実現してもよい。
図13は、本第2実施形態の処理の流れを示すフローチャートである。このフローチャートは、前記第1実施形態の図9Aの処理が完了した後に、管理計算機2のサーバ運用管理プログラム20と、仮想計算機VM−A1の移動先の物理計算機1−B上の仮想計算機60で行われる処理を示す。
まず、ステップS20では、管理計算機2の負荷検証部22が、移動先の物理計算機1−BのCPU利用率が、上述した閾値Th1以下で、かつ閾値Th2以上であれば本処理を開始する。なお、物理計算機1−Aの仮想計算機VM−A1を物理計算機1−B上へマイグレーションする予定が生じたときに、予測される負荷(CPU利用率)にかかわらず本処理を開始することもできる。
ステップS21では、管理計算機2の負荷検証部22が、仮想計算機VM−A1の移動先として選択された物理計算機1−B上のサーバ仮想化部6−Bに対して、ダミーVM−D1、ダミーVM−D2の生成と、ダミーアプリケーションAP−D1、AP−D2の起動を指令する。
ステップS22では、負荷検証部22が、管理計算機2でダミーアプリケーションAP−D3を起動する。また、負荷検証部22は、物理計算機1−C上のサーバ仮想化部6−Cに対して、ダミーVM−C2の生成と、ダミーアプリケーションAP−C2の起動を指令する。
ステップS23では、負荷検証部22がサーバ仮想化部6−B、6−CにダミーVM−D1、D2、C2とダミーアプリケーションAP−D1、D2、C2、D3の起動が完了したかを問い合わせる。ダミーアプリケーションAP−D1、D2、C2、D3の起動が完了すると、ステップS24の処理へ進む。
ステップS24では、管理計算機2のリソース使用状況管理部21が、サーバ仮想化部6−Bのリソース監視部61から物理計算機1−BのCPU利用率を取得し、負荷検証部22が取得したCPU利用率を監視する。
ステップS25では、負荷検証部22が監視している物理計算機1−BのCPU利用率が高負荷を示す閾値Th1を超えたか否かを判定する。CPU利用率が高負荷を示す閾値Th1を超えた場合には、ステップS27へ進み、閾値Th1以下の場合にはステップS26へ進む。
ステップS27では、負荷検証部22が物理計算機1−B上のサーバ仮想化部6−Bに対してダミーVM−D1及びダミーVM−D2を停止させる。また、負荷検証部22は、サーバ仮想化部6−Cに対してもダミーVM−C2の停止を指令する。また、負荷検証部22は、管理計算機2のダミーアプリケーションAP−D3を停止する。その後、管理計算機2は処理を終了する。
一方、ステップS26では、負荷検証部22が全てのダミーVM−D1、VM−D2,VM−C2から処理の完了通知を受信して、全ての再生処理が完了したか否かを判定する。全ての再生処理が完了するまで、ステップS25の判定処理を繰り返す。そして、負荷検証部22は、全てのダミーVM−D1、VM−D2,VM−C2から処理の完了通知を受信するとステップS28へ進んで、物理計算機1−Bの監視を終了する。監視の終了に際して、負荷検証部22はリソース使用状況管理部21が取得した仮想計算機VM−A1の移動先となる物理計算機1−Bのプロセッサ100のCPU利用率の履歴を、入出力部24を介してコンソール7へ出力しても良い。
ステップS29では、負荷検証部22はサーバ仮想化部6−B、6−Cに対してダミーVM−D1、VM−D2、VM−C2の停止と削除を通知する。また、負荷検証部22は管理計算機2のダミーアプリケーションAP−D3を停止させてから、処理を終了する。
一方、管理計算機2の負荷検証部22の指令によって生成されたダミーVM−D1の処理はステップS31〜S38のようになる。ダミーアプリケーションAP−D1、AP−D2、AP−C2は何れも同様の処理を行う。このため、ダミーアプリケーションAP−D1の説明のみを行い、他のダミーアプリケーションAP−D1、C2の説明を省略する。
まず、ステップS31では、物理計算機1−BのダミーVM−D1で実行されるダミーアプリケーションAP−D1のリソース使用表変換部511が、図9Aの処理で物理計算機1−AのCPU利用率とI/O処理についてリソース使用表610A、610Bを取得する。ダミーアプリケーションAP−D1の負荷再生部51では、仮想計算機VM−A1に関するCPU利用率のリソース使用表610Aについてはそのままリソース使用再生表50に格納する。
ステップS32では、ダミーアプリケーションAP−D1が、I/O処理のリソース使用表610Bから送信元識別子が移動対象の仮想計算機VM−A1のエントリを抽出してリソース使用再生表50として保持する。このとき、ダミーアプリケーションAP−D1は、図12Aで示したリソース使用再生表50の送信元識別子502をダミーVM−D1に変換し、送信先識別子503の仮想計算機VM−Bxに関する送信先をダミーVM−D2に変換する。ダミーアプリケーションAP−D1は、図12Aで示した送信先識別子503の仮想計算機VM−Cxに関する送信先をダミーVM−C2に変換する。
そして、ステップS33では、上記送信元識別子502と送信先識別子503を変換した表を、リソース使用再生表50として格納する。
次に、ステップS34では、リソース使用再生表50の格納が完了して再生の準備が完了すると、管理計算機2の負荷検証部22へ起動が完了した通知を送信する。そして、ダミーアプリケーションAP−D1は、ステップS35に進んで、リソース使用再生表50を再生して、ダミーアプリケーションAP−D1、AP−D2で仮想計算機VM−A1を物理計算機1−Bで実行した状況を再生する。ステップS35では、負荷再生部51のCPU負荷再生部512が、リソース使用再生表50に格納した仮想計算機VM−A1のCPU利用率を再生し、負荷再生部51のI/O処理再生部513が、リソース使用再生表50に格納した仮想計算機VM−A1のI/O処理を再生する。この再生の期間中、物理計算機1−Bのリソース監視部61が、管理計算機2のリソース使用状況管理部21へプロセッサ100のCPU利用率を通知する。
ステップS36では、管理計算機2の負荷検証部22からダミーアプリケーションAP−D1の停止の指令を受信したか否かを判定する。ダミーアプリケーションAP−D1は、管理計算機2から停止の指令を受信した場合には、処理を終了する。
一方、管理計算機2から停止の指令を受信していない場合は、ステップS37で負荷再生部51がリソース使用再生表50の再生を完了したか否かを判定する。ステップS37の判定で、再生が完了していなければステップS35へ戻って再生処理を繰り返す。一方、ダミーアプリケーションAP−D1は、リソース使用再生表50の全てについて負荷の再生処理が完了すると、ステップS38へ進んで再生処理の完了を管理計算機2へ通知する。
以上の処理により、物理計算機1−Bでは、移動対象の物理計算機1−Aの仮想計算機VM−A1を移動させた後と同様の負荷とリソース使用率をダミーVM−D1及びダミーアプリケーションAP−D1により発生させる。ダミーVM−D1上のダミーアプリケーションAP−D1は、物理計算機1−Aで測定したCPU利用率と、I/O処理を物理計算機1−B上で再生する。この再生期間中、管理計算機2の負荷検証部22が物理計算機1−BのCPU利用率を監視して、CPU利用率が閾値Th1を超えると即座にダミーアプリケーションAP−D1、AP−D2を停止させて、物理計算機1−B上の他の仮想計算機VM−Bxに影響を与えるのを防ぐことができる。
また、ダミーアプリケーションAP−D1の負荷再生部51では、物理計算機1−Aの負荷測定で生成したI/O処理のリソース使用表610Bから、移動対象の仮想計算機VM−A1が送信元識別子となっているエントリを抽出する。そして、負荷再生部51は抽出したエントリの送信元識別子と送信先識別子をダミーVM−D1、VM−D2、VM−C2に置き換えることで、サービスを提供している他の仮想計算機に影響を与えることなく、移動対象の仮想計算機VM−A1を実行可能か否かを判定することができる。
なお、上記ではCPU利用率について述べたが、物理I/Oデバイス130BとしてのCNAの利用率について適用することができる。
図14は、上記第2の実施形態における物理計算機1−Bの負荷の再生をコンソール7のディスプレイに表示した画面イメージである。
図14で、点線はダミーVM−D1を用いて負荷の再生を検証した負荷データである。また、図14で実践は、ダミーVM−D1、D2を稼動させていないときの負荷を示す。図中時刻t3では、物理計算機1−BのCPU利用率が閾値Th1を超えるため、ダミーVM−D1のダミーアプリケーションAP−D1が停止されたことを示す。
図15は、上記第2の実施形態における物理計算機1−Bの負荷の再生を徐々に行う世にした場合にコンソール7のディスプレイに表示した画面イメージである。
ダミーアプリケーションAP−D1で負荷の再生処理を行う場合に、CPU負荷再生と、I/O処理の再生をリソース使用再生表50のまま行うのではなく、一定の割合ずつ段階的に再生する。
移動元の仮想計算機VM−A1を物理計算機1−Bへ移動することで生じる負荷の予測値が、閾値Th1の近傍であるような場合は、実際にシミュレーション(再生)したことで同一筐体8−B内の仮想計算機60の負荷が高負荷状態となりサービス停止を招く可能性が高い。そのため、段階的に負荷をかけることで、各仮想計算機VM−BxとVM−D1の挙動を確認しながら再生を実施することができる。
物理計算機1−Bへ段階的に負荷をかける一例としては、リソース使用再生表50の処理量(CPU利用率)に一定の割合を乗算して行う方法がある。そのほかに、測定したリソース使用表610A、610Bでもっとも高いCPU利用率及び、最も大きいI/O処理量に一定割合を乗じた負荷(均一な負荷)を実施することが考えられる。これらはどれであってもよい。
また、上記各実施形態では、物理計算機1のリソースの使用量として、CPU利用率やCNA利用率を用いる例を示したが、物理計算機1の負荷を示す値をリソースの使用量として用いることができる。物理計算機1の負荷を示す値としては、動作クロックや動作電圧を動的に変更可能なプロセッサ100を用いた物理計算機1では、動作クロックや動作電圧を物理計算機1の負荷を示す値として用いることができる。あるいは、動作するコアを動的に変更可能なマルチコアのプロセッサ100を用いた物理計算機1では、動作するコアの数や、休止または停止するコアの数を物理計算機1の負荷を示す値として用いることができる。