(57)【特許請求の範囲】
【請求項１】
スリープ状態と通常の動作状態とを切り替え可能な物理ＣＰＵを複数備えた物理計算機と、
前記物理計算機を複数の論理区画に分割し、各論理区画上でそれぞれゲストＯＳを動作させて、各論理区画に対する物理計算機の資源の割当を制御する仮想化制御部と、を備えた仮想計算機システムであって、
前記仮想化制御部は、
前記論理区画に対する操作指令を受け付ける論理区画制御部と、
前記操作指令に基づいて前記論理区画に前記ゲストＯＳを実行する仮想ＣＰＵを割り当てる仮想ＣＰＵ制御部と、
前記操作指令に基づいて前記仮想ＣＰＵを前記物理ＣＰＵに割り当て、前記物理ＣＰＵの動作状態を制御する仮想−物理ＣＰＵ割当制御部と、
前記仮想−物理ＣＰＵ割当制御部からの操作指令に基づいて前記物理ＣＰＵの動作状態を制御する物理ＣＰＵ制御部と、を含み、
前記物理ＣＰＵは、動作クロックの周波数を変更するクロック制御部を有し、
前記操作指令は、前記論理区画に割り当てられた当該仮想ＣＰＵが前記物理ＣＰＵを使用する比率としての割り当て率を含み、
前記仮想−物理ＣＰＵ割当制御部は、
前記論理区画制御部から仮想ＣＰＵを生成する操作指令を受け付けると、前記複数の物理ＣＰＵのうち、前記通常動作状態の物理ＣＰＵに前記仮想ＣＰＵを割り当て可能か否かを判定し、割り当て可能な場合には当該仮想ＣＰＵを前記通常動作状態の物理ＣＰＵに割り当て、割り当て不能な場合にはスリープ状態の物理ＣＰＵを起動する指令を前記物理ＣＰＵ制御部に発行して、前記仮想ＣＰＵを当該起動した物理ＣＰＵに割り当て、仮想ＣＰＵと物理ＣＰＵの割り当て状態と物理ＣＰＵの動作状態を管理するテーブルに前記割り当てた仮想ＣＰＵを追加して更新し、
前記論理区画制御部から仮想ＣＰＵを削除する操作指令を受け付けると、当該仮想ＣＰＵを前記テーブルから削除し、当該仮想ＣＰＵを削除した物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなった場合には、当該物理ＣＰＵをスリープ状態に移行するよう前記物理ＣＰＵ制御部に指令し、
前記物理ＣＰＵに対する仮想ＣＰＵの割り当てを変更したときには、当該物理ＣＰＵに割り当てられている仮想ＣＰＵの割り当て率の和に基づいて前記物理ＣＰＵの動作クロックの周波数を決定し、当該動作クロックの周波数を前記物理ＣＰＵ制御部へ指令し、
前記物理ＣＰＵ制御部は前記動作クロックの周波数を前記クロック制御部へ指令することを特徴とする仮想計算機システム。
【請求項２】
前記仮想−物理ＣＰＵ割当制御部は、
前記論理区画制御部から仮想ＣＰＵを削除する操作指令を受け付けると、当該仮想ＣＰＵを前記テーブルから削除した後に、当該テーブルを参照して当該仮想ＣＰＵを削除した第１の物理ＣＰＵに割り当てられた第２の仮想ＣＰＵが存在し、かつ、通常動作状態にある第２の物理ＣＰＵに前記第２の仮想ＣＰＵを割り当て可能な場合には、前記第２の仮想ＣＰＵを前記第２の物理ＣＰＵに再割り当てを行い、前記第１の物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなると、当該第１の物理ＣＰＵをスリープ状態に移行させることを特徴とする請求項１に記載の仮想計算機システム。
【請求項３】
前記論理区画は、ゲストＯＳが利用する仮想ＣＰＵの実使用率を検知して前記仮想化制御部へ通知する稼動状態検出部を含み、
前記仮想−物理ＣＰＵ割当制御部は、
前記物理ＣＰＵに対する仮想ＣＰＵの割り当てを変更したときには、当該物理ＣＰＵに割り当てられている仮想ＣＰＵの実使用率の和に基づいて物理ＣＰＵに対する仮想ＣＰＵの割り当てを変更することを特徴とする請求項１に記載の仮想計算機システム。
【請求項４】
前記仮想−物理ＣＰＵ割当制御部は、
前記論理区画制御部から仮想ＣＰＵを削除する操作指令を受け付けると、当該仮想ＣＰＵを前記テーブルから削除した後に、当該テーブルを参照して当該仮想ＣＰＵを削除した第１の物理ＣＰＵに割り当てられた第２の仮想ＣＰＵが存在するときには、前記稼動状態検出部からの実使用率を取得して、通常動作状態にある第２の物理ＣＰＵに割り当てられている仮想ＣＰＵの実使用率の和に、前記第２の仮想ＣＰＵの実使用率を加算した値が所定の閾値未満であれば、前記第２の仮想ＣＰＵを前記第２の物理ＣＰＵに再割り当てを行い、前記第１の物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなると、当該第１の物理ＣＰＵをスリープ状態に移行させることを特徴とする請求項３に記載の仮想計算機システム。
【請求項５】
前記仮想−物理ＣＰＵ割当制御部は、
前記第２の物理ＣＰＵに割り当てられている仮想ＣＰＵの実使用率の和に、前記第２の仮想ＣＰＵの実使用率を加算した値が所定の閾値未満であれば、前記第２の物理ＣＰＵに割り当てられている仮想ＣＰＵの割り当て率の和に前記第２の仮想ＣＰＵの割り当て率を加算した値が１００％を超えることを許容することを特徴とする請求項４に記載の仮想計算機システム。
【請求項６】
スリープ状態と通常の動作状態とを切り替え可能な物理ＣＰＵを複数備えた物理計算機を複数の論理区画に分割し、各論理区画上でそれぞれゲストＯＳを動作させて、各論理区画に対する物理計算機の資源の割当を制御する仮想化制御部を備えた仮想計算機システムの制御方法であって、
前記物理ＣＰＵは、動作クロックの周波数を変更するクロック制御部を有し、
前記仮想化制御部が前記論理区画に対する操作指令を受け付けるステップと、
前記仮想化制御部は、前記受け付けた操作指令が前記論理区画に前記ゲストＯＳを実行する仮想ＣＰＵを生成する操作指令のときには、前記複数の物理ＣＰＵのうち、前記通常動作状態の物理ＣＰＵに前記仮想ＣＰＵを割り当て可能か否かを判定し、割り当て可能な場合には当該仮想ＣＰＵを前記通常動作状態の物理ＣＰＵに割り当て、前記判定結果が割り当て不能な場合にはスリープ状態の物理ＣＰＵを起動して、前記仮想ＣＰＵを当該起動した物理ＣＰＵに割り当てるステップと、
前記仮想化制御部が、仮想ＣＰＵと物理ＣＰＵの割り当て状態と物理ＣＰＵの動作状態を管理するテーブルに前記割り当てた仮想ＣＰＵを追加して更新するステップと、
前記仮想化制御部は、前記受け付けた操作指令が前記論理区画制御部から仮想ＣＰＵを削除する操作指令のときには、当該仮想ＣＰＵを前記テーブルから削除し、当該仮想ＣＰＵを削除した物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなった場合には、当該物理ＣＰＵをスリープ状態に移行させるステップと、
を含み、
前記操作指令は、前記論理区画に割り当てられた当該仮想ＣＰＵが前記物理ＣＰＵを使用する比率としての割り当て率を含み、
前記仮想ＣＰＵを当該起動した物理ＣＰＵに割り当てるステップは、
新たに仮想ＣＰＵを割り当てた前記物理ＣＰＵに割り当てられている仮想ＣＰＵの割り当て率の和に基づいて前記物理ＣＰＵの動作クロックの周波数を変更し、
前記仮想ＣＰＵを前記テーブルから削除し、当該仮想ＣＰＵを削除した物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなった場合には、当該物理ＣＰＵをスリープ状態に移行させるステップは、
当該物理ＣＰＵに他の仮想ＣＰＵが割り当てられているときには、割り当てられている仮想ＣＰＵの割り当て率の和に基づいて前記物理ＣＰＵの動作クロックの周波数を変更することを特徴とする仮想計算機の制御方法。
【請求項７】
前記仮想ＣＰＵを前記テーブルから削除し、当該仮想ＣＰＵを削除した物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなった場合には、当該物理ＣＰＵをスリープ状態に移行させるステップは、
当該仮想ＣＰＵを前記テーブルから削除するステップと、
前記テーブルを参照して当該仮想ＣＰＵを削除した第１の物理ＣＰＵに割り当てられた第２の仮想ＣＰＵが存在し、かつ、通常動作状態にある第２の物理ＣＰＵに前記第２の仮想ＣＰＵを割り当て可能か否かを判定するステップと、
前記判定結果が割り当て可能な場合には、前記第２の仮想ＣＰＵを前記第２の物理ＣＰＵに再割り当てを行い、前記第１の物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなると、当該第１の物理ＣＰＵをスリープ状態に移行させるステップと、
を含むことを特徴とする請求項６に記載の仮想計算機の制御方法。
【請求項８】
前記ゲストＯＳが利用する仮想ＣＰＵの実使用率を検知して前記仮想化制御部へ通知するステップをさらに含み、
前記仮想ＣＰＵを前記テーブルから削除し、当該仮想ＣＰＵを削除した物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなった場合には、当該物理ＣＰＵをスリープ状態に移行させるステップは、
当該物理ＣＰＵに他の仮想ＣＰＵが割り当てられているときには、割り当てられている仮想ＣＰＵの前記実使用率の和に基づいて当該物理ＣＰＵに対する仮想ＣＰＵの割り当てを変更することを特徴とする請求項６に記載の仮想計算機の制御方法。
【請求項９】
前記仮想ＣＰＵを前記テーブルから削除し、当該仮想ＣＰＵを削除した物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなった場合には、当該物理ＣＰＵをスリープ状態に移行させるステップは、
当該仮想ＣＰＵを前記テーブルから削除した後に、当該テーブルを参照して当該仮想ＣＰＵを削除した第１の物理ＣＰＵに割り当てられた第２の仮想ＣＰＵが存在するときには、前記実使用率を取得して、通常動作状態にある第２の物理ＣＰＵに割り当てられている仮想ＣＰＵの実使用率の和に、前記第２の仮想ＣＰＵの実使用率を加算した値が所定の閾値未満であれば、前記第２の仮想ＣＰＵを前記第２の物理ＣＰＵに再割り当てを行い、前記第１の物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなると、当該第１の物理ＣＰＵをスリープ状態に移行させることを特徴とする請求項８に記載の仮想計算機の制御方法。
【請求項１０】
前記仮想ＣＰＵを前記テーブルから削除し、当該仮想ＣＰＵを削除した物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなった場合には、当該物理ＣＰＵをスリープ状態に移行させるステップは、
前記第２の物理ＣＰＵに割り当てられている仮想ＣＰＵの実使用率の和に、前記第２の仮想ＣＰＵの実使用率を加算した値が所定の閾値未満であれば、前記第２の物理ＣＰＵに割り当てられている仮想ＣＰＵの割り当て率の和に前記第２の仮想ＣＰＵの割り当て率を加算した値が１００％を超えることを許容することを特徴とする請求項９に記載の仮想計算機の制御方法。
【請求項１１】
スリープ状態と通常の動作状態とを切り替え可能な物理ＣＰＵを複数備えた物理計算機を複数の論理区画に分割し、各論理区画上でそれぞれゲストＯＳを動作させて、各論理区画に対する物理計算機の資源の割当を制御するプログラムであって、
前記物理ＣＰＵは、動作クロックの周波数を変更するクロック制御部を有し、
前記論理区画に対する操作指令を受け付けるステップと、
前記受け付けた操作指令が前記論理区画に前記ゲストＯＳを実行する仮想ＣＰＵを生成する操作指令のときには、前記複数の物理ＣＰＵのうち、前記通常動作状態の物理ＣＰＵに前記仮想ＣＰＵを割り当て可能か否かを判定し、割り当て可能な場合には当該仮想ＣＰＵを前記通常動作状態の物理ＣＰＵに割り当て、前記判定結果が割り当て不能な場合にはスリープ状態の物理ＣＰＵを起動して、前記仮想ＣＰＵを当該起動した物理ＣＰＵに割り当てるステップと、
前記仮想ＣＰＵと物理ＣＰＵの割り当て状態と物理ＣＰＵの動作状態を管理するテーブルに前記割り当てた仮想ＣＰＵを追加して更新するステップと、
前記受け付けた操作指令が前記論理区画制御部から仮想ＣＰＵを削除する操作指令のときには、当該仮想ＣＰＵを前記テーブルから削除し、当該仮想ＣＰＵを削除した物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなった場合には、当該物理ＣＰＵをスリープ状態に移行させるステップと、を前記物理計算機に実行させ、
前記操作指令は、前記論理区画に割り当てられた当該仮想ＣＰＵが前記物理ＣＰＵを使用する比率としての割り当て率を含み、
前記仮想ＣＰＵを当該起動した物理ＣＰＵに割り当てるステップは、
新たに仮想ＣＰＵを割り当てた前記物理ＣＰＵに割り当てられている仮想ＣＰＵの割り当て率の和に基づいて前記物理ＣＰＵの動作クロックの周波数を変更し、
前記仮想ＣＰＵを前記テーブルから削除し、当該仮想ＣＰＵを削除した物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなった場合には、当該物理ＣＰＵをスリープ状態に移行させるステップは、
当該物理ＣＰＵに他の仮想ＣＰＵが割り当てられているときには、割り当てられている仮想ＣＰＵの割り当て率の和に基づいて前記物理ＣＰＵの動作クロックの周波数を変更することを特徴とするプログラム。
【請求項１２】
前記仮想ＣＰＵを前記テーブルから削除し、当該仮想ＣＰＵを削除した物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなった場合には、当該物理ＣＰＵをスリープ状態に移行させるステップは、
当該仮想ＣＰＵを前記テーブルから削除するステップと、
前記テーブルを参照して当該仮想ＣＰＵを削除した第１の物理ＣＰＵに割り当てられた第２の仮想ＣＰＵが存在し、かつ、通常動作状態にある第２の物理ＣＰＵに前記第２の仮想ＣＰＵを割り当て可能か否かを判定するステップと、
前記判定結果が割り当て可能な場合には、前記第２の仮想ＣＰＵを前記第２の物理ＣＰＵに再割り当てを行い、前記第１の物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなると、当該第１の物理ＣＰＵをスリープ状態に移行させるステップと、
を含むことを特徴とする請求項１１に記載のプログラム。
【請求項１３】
前記ゲストＯＳが利用する仮想ＣＰＵの実使用率を検知して前記仮想化制御部へ通知するステップをさらに含み、
前記仮想ＣＰＵを前記テーブルから削除し、当該仮想ＣＰＵを削除した物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなった場合には、当該物理ＣＰＵをスリープ状態に移行させるステップは、
当該物理ＣＰＵに他の仮想ＣＰＵが割り当てられているときには、割り当てられている仮想ＣＰＵの前記実使用率の和に基づいて当該物理ＣＰＵに対する仮想ＣＰＵの割り当てを変更することを特徴とする請求項１１に記載のプログラム。
【請求項１４】
前記仮想ＣＰＵを前記テーブルから削除し、当該仮想ＣＰＵを削除した物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなった場合には、当該物理ＣＰＵをスリープ状態に移行させるステップは、
当該仮想ＣＰＵを前記テーブルから削除した後に、当該テーブルを参照して当該仮想ＣＰＵを削除した第１の物理ＣＰＵに割り当てられた第２の仮想ＣＰＵが存在するときには、前記実使用率を取得して、通常動作状態にある第２の物理ＣＰＵに割り当てられている仮想ＣＰＵの実使用率の和に、前記第２の仮想ＣＰＵの実使用率を加算した値が所定の閾値未満であれば、前記第２の仮想ＣＰＵを前記第２の物理ＣＰＵに再割り当てを行い、前記第１の物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなると、当該第１の物理ＣＰＵをスリープ状態に移行させることを特徴とする請求項１３に記載のプログラム。
【請求項１５】
前記仮想ＣＰＵを前記テーブルから削除し、当該仮想ＣＰＵを削除した物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなった場合には、当該物理ＣＰＵをスリープ状態に移行させるステップは、
前記第２の物理ＣＰＵに割り当てられている仮想ＣＰＵの実使用率の和に、前記第２の仮想ＣＰＵの実使用率を加算した値が所定の閾値未満であれば、前記第２の物理ＣＰＵに割り当てられている仮想ＣＰＵの割り当て率の和に前記第２の仮想ＣＰＵの割り当て率を加算した値が１００％を超えることを許容することを特徴とする請求項１４に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の物理計算機上でゲストＯＳを稼動させる仮想計算機システムの改良に関するものである。
【背景技術】
【０００２】
近年、プロセッサ（ＣＰＵ）の高性能化に伴って計算機で消費される電力も増加してきた。特にサーバ用途で用いられるＣＰＵでは大容量のキャッシュメモリを搭載しているため性能も高いが消費電力も大きい。さらに、サーバでは複数のＣＰＵを搭載しているため、消費電力がさらに大きくなる。このため、多数のサーバを運用するデータセンタ等では、サーバの消費電力が大きいとサーバの設置条件や冷却等への影響が大きくなる。
【０００３】
また、サーバを用いたＩＴシステムでは、一般に、ＣＰＵのピーク性能に応じたシステム設計を行う。このため、多数のサーバを運用するデータセンタ等では、ＣＰＵの稼働率が高くないサーバが多数存在している。ここで、近年のＣＰＵでは、動作クロックを変更したりＣＰＵの駆動電圧を変更して消費電力を低減する技術が採用されているが、負荷が低い状態（アイドル状態や待機状態など）であっても電力消費はゼロにはならない。このため、複数のサーバを１台のサーバに集約してＣＰＵの稼働率を向上させるサーバ仮想化（仮想計算機）の技術に注目が集まっている。
【０００４】
サーバ仮想化の技術としては、ホストＯＳ上で複数のゲストＯＳを稼動させるＶＭｗａｒｅ（登録商標）のＥＳＸ  Ｓｅｒｖｅｒ（非特許文献１）や特許文献１に開示される技術が知られており、ハイパバイザを用いる仮想化技術としては、ＸｅｎＳｏｕｒｃｅ社のＸｅｎ（非特許文献２）等が知られている。
【０００５】
非特許文献１では、仮想ＣＰＵを物理ＣＰＵへ割り付ける処理は、ホストＯＳ（ＶＭ  Ｋｅｒｎｅｌ）のスケジューラに依存している。また、特許文献１では、管理ＯＳ上でゲストＯＳを稼動させ、ゲストＯＳからの指示に基づき、管理ＯＳが物理ＣＰＵの電源制御やクロック制御を実施して仮想計算機の低消費電力を抑制しようとするものである。
【０００６】
また、非特許文献２では、ハイパバイザがＳＥＤＦ（Simple Early Deadline First）／ＢＶＴ（Borrowed Virtual Timer Scheduler）のようなリアルタイムスケジュール方法によって仮想ＣＰＵを物理ＣＰＵに割り当てるものである。
【特許文献１】特開２００６−１１３７６７号公報
【非特許文献１】「ＶＭｗａｒｅ  ＥＳＸ  Ｓｅｒｖｅｒ」、[online]、ＶＭｗａｒｅ corp.  発行、[平成１９年１１月１日検索]、インターネット＜ＵＲＬ：http://www.vmware.com/files/jp/pdf/esx_datasheet.pdf＞
【非特許文献２】「Ｘｅｎ  3.0  Ｄａｔａｓｈｅｅｔ」、[online]、ＸｅｎＳｏｕｒｃｅ  Ｉｎｃ．  発行、[平成１９年１１月１日検索]、インターネット＜ＵＲＬ：http://www.vmware.com/files/jp/pdf/esx_datasheet.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上記非特許文献１の従来例では、仮想ＣＰＵと物理ＣＰＵの管理がホストＯＳ側で実施されるため、ホストＯＳ上の仮想化ソフトウェアによって消費電力を考慮した物理ＣＰＵの制御が行えない。さらに、仮想サーバが利用する仮想ＣＰＵが、どの物理ＣＰＵに割り当てられるかについても、ホストＯＳのスケジューラに依存することになる。このため、仮想化ソフトウェアによる、仮想ＣＰＵと物理ＣＰＵの割当て制御による消費電力の低減は困難であるという問題があった。
【０００８】
また、上記非特許文献２の従来例では、ハイパバイザは物理ＣＰＵに対する仮想サーバが利用する仮想ＣＰＵの割当を制御しているため、消費電力を意識した割当の実施は可能である。しかし、非特許文献２の技術で利用されているリアルタイムスケジュール方法では、仮想サーバからの要求に応じて何時でも物理ＣＰＵに仮想ＣＰＵを割り当てることを可能にしている。このため、物理ＣＰＵは常に稼動状態となっており、実行する命令がない、つまり、仮想ＣＰＵが割り当てられていなくても電力を消費しているという問題があった。
【０００９】
さらに、上記特許文献１の従来例では、管理ＯＳによって物理ＣＰＵの消費電力を低減する処理を行っているが、本処理の動作の契機はゲストＯＳからの指示に基づき管理ＯＳが物理ＣＰＵの電源およびクロックの制御を行っている。このため、ゲストＯＳからの指示があるまでは、管理ＯＳは物理ＣＰＵに対して消費電力を低減する処理を実行しない。このため、仮想計算機システム全体で消費電力を低減することができないという問題があった。
【００１０】
そこで本発明は、上記問題点に鑑みてなされたもので、仮想計算機システムにおいて、仮想ＣＰＵと物理ＣＰＵの対応付けを制御することにより、仮想ＣＰＵが割り当てられていない物理ＣＰＵを計算機システム全体で最適化することで消費電力の低減を図ることを目的とする。
【課題を解決するための手段】
【００１１】
本発明は、スリープ状態と通常の動作状態とを切り替え可能な物理ＣＰＵを複数備えた物理計算機と、前記物理計算機を複数の論理区画に分割し、各論理区画上でそれぞれゲストＯＳを動作させて、各論理区画に対する物理計算機の資源の割当を制御する仮想化制御部と、を備えた仮想計算機システムであって、前記仮想化制御部は、前記論理区画に対する操作指令を受け付ける論理区画制御部と、前記操作指令に基づいて前記論理区画に前記ゲストＯＳを実行する仮想ＣＰＵを割り当てる仮想ＣＰＵ制御部と、前記操作指令に基づいて前記仮想ＣＰＵを前記物理ＣＰＵに割り当て、前記物理ＣＰＵの動作状態を制御する仮想−物理ＣＰＵ割当制御部と、前記仮想−物理ＣＰＵ割当制御部からの操作指令に基づいて前記物理ＣＰＵの動作状態を制御する物理ＣＰＵ制御部と、を含み、前記物理ＣＰＵは、動作クロックの周波数を変更するクロック制御部を有し、前記操作指令は、前記論理区画に割り当てられた当該仮想ＣＰＵが前記物理ＣＰＵを使用する比率としての割り当て率を含み、前記仮想−物理ＣＰＵ割当制御部は、前記論理区画制御部から仮想ＣＰＵを生成する操作指令を受け付けると、前記複数の物理ＣＰＵのうち、前記通常動作状態の物理ＣＰＵに前記仮想ＣＰＵを割り当て可能か否かを判定し、割り当て可能な場合には当該仮想ＣＰＵを前記通常動作状態の物理ＣＰＵに割り当て、割り当て不能な場合にはスリープ状態の物理ＣＰＵを起動する指令を前記物理ＣＰＵ制御部に発行して、前記仮想ＣＰＵを当該起動した物理ＣＰＵに割り当て、仮想ＣＰＵと物理ＣＰＵの割り当て状態と物理ＣＰＵの動作状態を管理するテーブルに前記割り当てた仮想ＣＰＵを追加して更新し、前記論理区画制御部から仮想ＣＰＵを削除する操作指令を受け付けると、当該仮想ＣＰＵを前記テーブルから削除し、当該仮想ＣＰＵを削除した物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなった場合には、当該物理ＣＰＵをスリープ状態に移行するよう前記物理ＣＰＵ制御部に指令し、前記物理ＣＰＵに対する仮想ＣＰＵの割り当てを変更したときには、当該物理ＣＰＵに割り当てられている仮想ＣＰＵの割り当て率の和に基づいて前記物理ＣＰＵの動作クロックの周波数を決定し、当該動作クロックの周波数を前記物理ＣＰＵ制御部へ指令し、前記物理ＣＰＵ制御部は前記動作クロックの周波数を前記クロック制御部へ指令する。
【００１２】
また、前記仮想−物理ＣＰＵ割当制御部は、前記論理区画制御部から仮想ＣＰＵを削除する操作指令を受け付けると、当該仮想ＣＰＵを前記テーブルから削除した後に、当該テーブルを参照して当該仮想ＣＰＵを削除した第１の物理ＣＰＵに割り当てられた第２の仮想ＣＰＵが存在し、かつ、通常動作状態にある第２の物理ＣＰＵに前記第２の仮想ＣＰＵを割り当て可能な場合には、前記第２の仮想ＣＰＵを前記第２の物理ＣＰＵに再割り当てを行い、前記第１の物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなると、当該第１の物理ＣＰＵをスリープ状態に移行させる。
【００１３】
また、前記仮想−物理ＣＰＵ割当制御部は、前記論理区画制御部から仮想ＣＰＵを削除する操作指令を受け付けると、当該仮想ＣＰＵを前記テーブルから削除した後に、当該テーブルを参照して当該仮想ＣＰＵを削除した第１の物理ＣＰＵに割り当てられた第２の仮想ＣＰＵが存在するときには、前記稼動状態検出部からの稼働率を取得して、通常動作状態にある第２の物理ＣＰＵに割り当てられている仮想ＣＰＵの稼働率の和に、前記第２の仮想ＣＰＵの稼働率を加算した値が所定の閾値未満であれば、前記第２の仮想ＣＰＵを前記第２の物理ＣＰＵに再割り当てを行い、前記第１の物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなると、当該第１の物理ＣＰＵをスリープ状態に移行させる。さらに、前記第２の物理ＣＰＵに割り当てられている仮想ＣＰＵの稼働率の和に、前記第２の仮想ＣＰＵの稼働率を加算した値が所定の閾値未満であれば、前記第２の物理ＣＰＵに割り当てられている仮想ＣＰＵの割り当て率の和に前記第２の仮想ＣＰＵの割り当て率を加算した値が１００％を超えることを許容する。
【発明の効果】
【００１４】
したがって、本発明は、論理区画に仮想ＣＰＵを割り当てた後に、仮想ＣＰＵを削除する際には、仮想ＣＰＵを削除した物理ＣＰＵに他の仮想ＣＰＵが割り当てられていない場合にはこの物理ＣＰＵをスリープ状態にして、物理計算機の消費電力を積極的に抑制することが可能となる。
【００１５】
また、仮想ＣＰＵを削除した第１の物理ＣＰＵに割り当てられている第２の仮想ＣＰＵが存在し、かつ、通常動作状態にある第２の物理ＣＰＵに前記第２の仮想ＣＰＵを割り当て可能な場合には、前記第２の仮想ＣＰＵを前記第２の物理ＣＰＵに再割り当てを行い、前記第１の物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなると、当該第１の物理ＣＰＵをスリープ状態に移行させることで、積極的にスリープ状態の物理ＣＰＵを生成することで、仮想ＣＰＵを割り当て最適化して物理計算機の消費電力を低減することができる。
【００１６】
さらに、仮想ＣＰＵの稼働率を取得して、前記第２の仮想ＣＰＵを前記第２の物理ＣＰＵに再割り当てを行う際には、第２の物理ＣＰＵに割り当てる仮想ＣＰＵの稼働率が閾値未満であれば仮想ＣＰＵの割り当て率が１００％を超えることを許容するので、さらに効率よく仮想ＣＰＵの再配置を行い、スリープ状態の物理ＣＰＵの数を最大にして物理計算機の消費電力を低減することができる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００１８】
図１は、第１の実施形態を示し、本発明を適用する仮想計算機システムの一例を示すブロック図である。
【００１９】
仮想計算機システムは、ゲストＯＳ（またはアプリケーション：ＡＰ）１００、１１０を実行する仮想ＣＰＵ２０１、２０２、２１１，２１２が割り当てられた論理区画（Logical  PARtition）２００，２１０と、これら複数の論理区画２００，２１０及び仮想ＣＰＵ２０１、２０２、２１１，２１２を提供する仮想化ソフトウェア３００と、仮想化ソフトウェア３００を実行する物理計算機４００と、物理計算機４００に接続されて仮想化ソフトウェア３００に操作指令を送信する管理コンソール５００と、を備える。なお、論理区画２００，２１０で稼動するゲストＯＳ１００，１１０が仮想サーバを提供する。
【００２０】
＜物理計算機の構成＞
物理計算機４００は、演算処理を行う物理ＣＰＵ４１０、４１１、４１２と、データやプログラムを格納するメモリ４２０と、物理ＣＰＵ４１０〜４１２及びメモリ４２０へ電力を供給する電源供給部４３０と、物理ＣＰＵ４１０〜４１２及びメモリ４２０へクロックを供給するクロック供給部を備える。また、物理計算機４００は、図示しないインターフェースを介して接続された管理コンソール５００を有し、この管理コンソール５００は、表示装置と入力装置を備える。メモリ４２０には仮想化ソフトウェア３００がロードされ、物理ＣＰＵ４１０〜４１２により実行される。
【００２１】
なお、物理計算機４００は、図示はしないがストレージ装置やネットワークインターフェースなどのＩ／Ｏ装置を備えることができる。
【００２２】
ここで、物理ＣＰＵ４１０〜４１２は、仮想化ソフトウェア３００からの操作指令に応じてクロックと電力を変更可能な省電力機構を備える。例えば、物理ＣＰＵ４１０は、図２で示すように、複数のプロセッサコア４１０１，４１０２と、データや命令を一時的に格納するキャッシュ４１０３と、電源供給部４３０から入力された電力と、クロック供給部４４０から入力されたクロックをプロセッサコア４１０１，４１０２及びキャッシュに供給するクロック・電力制御部４１０４を備え、このクロック・電力制御部４１０４が後述するように省電力機構を含む。なお、物理ＣＰＵ４１１、４１２も図２の物理ＣＰＵ４１０と同一の構成である。
【００２３】
クロック・電力制御部４１０４は、仮想化ソフトウェア３００から受け付けた指令に基づいて、プロセッサコア４１０１，４１０２に供給する電圧とクロックを変更し、プロセッサコア４１０１，４１０２の動作モードを動的に変更する。クロック・電力制御部４１０４の電圧とクロックの変更は、プロセッサコア４１０１，４１０２のみに電力とクロックを遮断し、その他の部分に電源供給を継続して再起動可能な状態を維持する動作状態を含む。また、クロック・電力制御部４１０４は、プロセッサコア４１０１，４１０２が通常の稼動状態のときに、プロセッサコア４１０１，４１０２の処理能力が最大となる定格クロック及び定格電圧から、プロセッサコア４１０１，４１０２の処理能力が最小となる最低クロック及び最低電圧の間で電圧及びクロックを変更し、物理ＣＰＵ４１０の処理能力を優先させる動作状態から消費電力を低減させる動作状態の間で動作状態を変更させることができる。  なお、クロック・電力制御部４１０４は、プロセッサ動作状態コア４１０１，４１０２毎にクロック周波数と電圧を変更可能である。
【００２４】
次に、仮想化ソフトウェア３００は、物理ＣＰＵ４１０〜４１２のクロック・電力制御部４１０４に動作モードを設定することで、物理ＣＰＵ４１０〜４１２の動作モードを変更する。ここで、物理ＣＰＵ４１０〜４１２の動作モードは、ＡＣＰＩ（Advanced Configuration and Power Interface Specification）で規定されるプロセッサの動作モードＣ０〜Ｃ３を用いることができる。なお、プロセッサの動作モードＣ０〜Ｃ３は、ＡＣＰＩのＲｅｖ３．０で規定されるものである（http://www.acpi.info/spec30a.htm、ADVANCED CONFIGURATION AND POWER INTERFACE SPECIFICATION、Revision 3.0a,  December 30, 2005）。プロセッサ（物理ＣＰＵ４１０〜４１２）の動作モードＣ０〜Ｃ３は、次のとおりである。
・Ｃ０：動作状態（通常稼動状態）
・Ｃ１：アイドル状態（スリープ状態）：物理ＣＰＵの待機状態で、動作クロックの停止や、ＨＬＴ命令などによる命令実行の停止状態を示す
・Ｃ２：Ｃ１よりも低消費電力の状態
・Ｃ３：スタンバイ状態（プロセッサコア４１０１，４１０２への電源遮断状態。再起動に必要な電力は継続して供給される）
なお、物理ＣＰＵ４１０〜４１２の動作モードは、上記ＡＣＰＩのＣ０〜Ｃ３に代わって、システムの動作状態を示すＳ０〜Ｓ３を用いても良い。Ｓ０〜Ｓ３の動作モードは、次のとおりである。
・Ｓ０： 動作状態（通常稼動状態）
・Ｓ１：スリープ状態。ＶＧＡ信号はオフ、物理ＣＰＵはパワーダウン。
・Ｓ２：物理ＣＰＵの電源遮断（再起動に必要な電力は継続して供給される）。
・Ｓ３  スタンバイ状態。作業内容をメモリに書き込み、メモリへの通電と再起動に必要な電流のみ流れる。
【００２５】
仮想化ソフトウェア３００は、物理ＣＰＵ４１０〜４１２のクロック・電力制御部４１０４に指令を送ることで、物理ＣＰＵ４１０〜４１２の動作モードを、定格の動作クロックの周波数で処理を行う通常モードと、処理の実行を停止するスリープ状態のスリープモードと、処理を実行するが動作クロックの周波数を低下させる低消費電力モードの何れかに変更することができる。
【００２６】
＜仮想化ソフトウェアの構成＞
図１において、仮想化ソフトウェア３００は、例えば、ハイパバイザなどホストＯＳを利用しないソフトウェアで構成されており、物理計算機４００の計算機資源を複数の論理区画２００（ＬＰＡＲ＃１）、２１０（ＬＰＡＲ＃２）に分割するＬＰＡＲ制御部３１０と、論理区画２００，２１０に物理ＣＰＵ４１０〜４１２を仮想化した仮想ＣＰＵ２０１，２０２，２１１，２１２を割り当てる仮想ＣＰＵ制御部３２０と、物理ＣＰＵ４１０〜４１２を制御する物理ＣＰＵ制御部３３０と、仮想ＣＰＵと物理ＣＰＵの割り当て状況を管理する仮想−物理ＣＰＵ割当制御部３４０とを含む。この仮想化ソフトウェア３００は、メモリ４２０にロードされて物理ＣＰＵ４１０〜４１２により実行される。また、仮想化ソフトウェア３００は、図示しないストレージ装置や不揮発性メモリ等の記憶媒体に格納される。
【００２７】
ＬＰＡＲ制御部３１０は、システム管理者等が操作する管理コンソール５００からの操作指令に応じて論理区画２００，２１０の生成や不要になった論理区画の削除を行う。ＬＰＡＲ制御部３１０は、管理コンソール５００からの操作指令に応じて論理区画に対して物理計算機４００の計算機資源を割り当てる。管理コンソール５００から設定する計算機資源としては、メモリ４２０の割当量（アドレス範囲など）と仮想ＣＰＵ及びＩ／Ｏ装置を各論理区画２００、２１０毎に設定する。なお、ＬＰＡＲ制御部３１０が、物理計算機４００の計算機資源を割り当てる手法については、公知の手法を用いることができる。
【００２８】
ＬＰＡＲ制御部３１０では、生成した論理区画２００，２１０に仮想ＣＰＵを割り当てて、論理区画２００，２１０のそれぞれでゲストＯＳ１００、１１０を動作させ、各ゲストＯＳ１００，１１０上でそれぞれアプリケーション（ＡＰ）を動作させる。
【００２９】
仮想ＣＰＵ制御部３２０は、ＬＰＡＲ制御部３１０から要求された仮想ＣＰＵの生成と削除（論理区画の生成と削除に対応）と、仮想ＣＰＵの稼動状態の管理を行う。このため、仮想ＣＰＵ制御部３２０は、論理区画２００，２１０と仮想ＣＰＵ２０１〜２１２の対応関係を保持する論理区画対応表３４２を備えている。
【００３０】
仮想ＣＰＵ制御部３２０では、ＬＰＡＲ制御部３１０から仮想ＣＰＵの生成を受け付けた場合は、当該仮想ＣＰＵの割り当て先となる物理ＣＰＵの決定を仮想−物理ＣＰＵ割当制御部３４０に仮想ＣＰＵの生成を指令し、仮想ＣＰＵの生成が完了した通知を受けると論理区画対応表３４２に仮想ＣＰＵを割り当てた論理区画の情報を更新する。
【００３１】
また、仮想ＣＰＵ制御部３２０がＬＰＡＲ制御部３１０から仮想ＣＰＵの削除を受け付けた場合は、当該仮想ＯＰＵの割り当て先である物理ＣＰＵと、当該消滅対象の仮想ＣＰＵの対応関係を削除するよう仮想−物理ＣＰＵ割当制御部３４０に指令し、このとき、仮想−物理ＣＰＵ割当制御部３４０は、当該物理ＣＰＵに割り当てられている仮想ＣＰＵがなくなる場合には、物理ＣＰＵ制御部３３０へ当該物理ＣＰＵの動作モードを省電力モードへ移行するように指令する。さらに、仮想ＣＰＵ制御部は、削除した仮想ＣＰＵを論理区画対応表３４２から削除する。なお、物理ＣＰＵの動作モード及び省電力モードについては後述する。
【００３２】
さらに、仮想ＣＰＵ制御部３２０は、各論理区画２００，２１０に割り当てられた仮想ＣＰＵ２０１，２０２，２１１，２１２の稼動状態（割当状態）を監視して論理区画対応表３４２を更新し、取得した稼動状態を仮想−物理ＣＰＵ割当制御部３４０へ通知する。
【００３３】
物理ＣＰＵ制御部３３０は、物理ＣＰＵ４１０〜４１２の稼動状態（動作モード）を監視して、仮想−物理ＣＰＵ割当制御部３４０からの要求に応じて物理ＣＰＵ４１０〜４１２の動作モードを制御する。物理ＣＰＵ制御部３３０は、物理ＣＰＵ４１０〜４１２に対して仮想ＣＰＵが割り当てられていない場合には、該当する物理ＣＰＵの動作モードを省電力モードに変更する。また、仮想−物理ＣＰＵ割当制御部３４０から物理ＣＰＵ４１０〜４１２に新たに仮想ＣＰＵを割り当てる場合、該当する物理ＣＰＵ４１０〜４１２が省電力モードの場合には、当該物理ＣＰＵの動作モードを稼動状態へ移行させる。
【００３４】
仮想−物理ＣＰＵ割当制御部３４０は、仮想ＣＰＵ制御部３２０からの要求に応じて物理ＣＰＵ４１０〜４１２に対する仮想ＣＰＵの割当状況を動的に管理する。このため、仮想−物理ＣＰＵ割当制御部３４０は、仮想ＣＰＵ２０１，２０２，２１１，２１２と物理ＣＰＵ４１０〜４１２の対応関係を設定した仮想−物理ＣＰＵ割当表４３１を保持する。
【００３５】
仮想−物理ＣＰＵ割当制御部３４０は、仮想ＣＰＵ制御部３２０から仮想ＣＰＵの稼動状態を取得し、物理ＣＰＵ制御部３３０から物理ＣＰＵ４１０〜４１２の稼動状態を取得し、仮想ＣＰＵ制御部３２０からの要求と、仮想ＣＰＵの稼動状態の変化に応じて、物理ＣＰＵ４１０〜４１２に対する仮想ＣＰＵの割り当てを動的に変更する。このため、仮想−物理ＣＰＵ割当制御部３４０は、物理ＣＰＵ４１０〜４１２に割り当てた仮想ＣＰＵを管理する仮想−物理ＣＰＵ割当表３４１を備える。
【００３６】
本第１の実施形態においては、仮想−物理ＣＰＵ割当制御部３４０は、仮想ＣＰＵ制御部３２０からの要求と、仮想ＣＰＵ２０１，２０２，２１１，２１２の割当率に基づいて物理ＣＰＵ４１０〜４１２に対する仮想ＣＰＵの割り当てを動的に変更し、物理ＣＰＵ４１０〜４１２の動作モードを動的に変更する例を示す。
【００３７】
＜仮想ＣＰＵの割り当て＞
次に、仮想化ソフトウェア３００が行う仮想ＣＰＵの割り当てについて説明する。仮想化ソフトウェア３００が物理計算機４００の計算機資源を各論理区画２００，２１０に割当てる方法は、専用割当と共用割当の二種類ある。
【００３８】
専用割当は、特定の計算機資源を特定の論理区画に専用的に割当てる方法である。計算機資源のうち、メモリ４２０（主記憶）とＩ／Ｏ装置は共用割当される。
【００３９】
なお、物理ＣＰＵ４１０〜４１２を専用割当にすることもできる。物理ＣＰＵ４１０〜４１２の専用割当の場合、ある論理区画に対して専用割当する物理ＣＰＵ４１０〜４１２の数をそのＬＰＡＲに対するＣＰＵの割当量と呼ぶ。
【００４０】
一方、共用割当は、計算機資源を各論理区画に少しづつ時分割によって割り当てる。共有割当では、ある論理区画の仮想ＣＰＵに対して物理ＣＰＵ４１０〜４１２を割当てている時間の、全ＬＰＡＲにＣＰＵを割当てている時間に対する割合を、仮想ＣＰＵの割当率と呼ぶ（％で表す。値は０〜１００の間）。
【００４１】
仮想化ソフトウェア３００の仮想−物理ＣＰＵ割当制御部３４０が管理する仮想−物理ＣＰＵ割当表３４１は、図３で示すように、物理ＣＰＵ４１０〜４１２のそれぞれについて割り当てられている仮想ＣＰＵの識別子と割り当て率が格納される。
【００４２】
図３において、仮想−物理ＣＰＵ割当表３４１は、物理ＣＰＵ４１０〜４１２の識別子を格納する物理ＣＰＵ番号３４１０と、物理ＣＰＵ番号３４１０で特定される物理ＣＰＵの動作状態を格納する動作状態３４１１と、複数の仮想ＣＰＵの情報を格納する仮想ＣＰＵリストから１つのエントリが構成される。仮想ＣＰＵリストは、物理ＣＰＵ番号３４１０で特定される物理ＣＰＵに割り当てられている仮想ＣＰＵの識別子を格納する仮想ＣＰＵ番号３４１２と、仮想ＣＰＵ番号３４１２で特定される仮想ＣＰＵの割り当て率を格納する割り当て率３４１３で構成され、仮想ＣＰＵの数に応じて仮想ＣＰＵ番号３４１２と割り当て率３４１３が繰り返して格納される。
【００４３】
例えば、図３の物理ＣＰＵ番号３４１０＝１のエントリには、物理ＣＰＵの動作状態３４１１が通常の稼動状態（例えば、クロック周波数及び供給電圧が定格）であることが示されており、この物理ＣＰＵには、仮想ＣＰＵ番号が１の仮想ＣＰＵが割り当て率４０％で割り当てられ、さらに、仮想ＣＰＵ番号が３の仮想ＣＰＵが割り当て率２０％で割り当てられていることを示す。この物理ＣＰＵ番号＝１の物理ＣＰＵは、残りの４０％の割り当て率で仮想ＣＰＵを割り当てることが可能であることを示している。仮想ＣＰＵリストには、当該物理ＣＰＵ番号３４１０に割り当てられた仮想ＣＰＵの数に応じた仮想ＣＰＵ番号３４１２と割り当て率３４１３がペアで格納される。
【００４４】
なお、図３と図１との対応関係は、物理ＣＰＵ４１０〜４１２が物理ＣＰＵ番号＝１〜３に対応し、仮想ＣＰＵ２０１，２０２，２１１，２１２が、仮想ＣＰＵ番号＝１〜４に対応する。
【００４５】
また、本第１実施形態では、物理ＣＰＵの動作状態３４１１は、定格で動作する「通常」と、低消費電力状態である「スリープ」の何れかに設定され、「スリープ」は上記ＡＣＰＩで定義されるＣ１以上（Ｃ１〜Ｃ３）またはＳ１以上（Ｓ１〜Ｓ３）の状態であればよい。なお、以下の説明においても、スリープ状態は上記ＡＣＰＩのプロセッサの動作モードＣ１〜Ｃ３（またはＳ１〜Ｓ３）を指すものである。
【００４６】
仮想ＣＰＵ制御部３２０が管理する論理区画対応表３４２は、図４で示すように構成される。図４において、論理区画対応表３４２は、論理区画の識別子を格納する論理区画番号３４２０と、論理区画番号３４２０で特定される論理区画に割り当てられている仮想ＣＰＵの識別子を格納する仮想ＣＰＵリストから構成される。仮想ＣＰＵリストは、論理区画番号３４２０で特定され論理区画に割り当てられている仮想ＣＰＵの識別子を格納する仮想ＣＰＵ番号３４２１で構成され、ひとつの論理区画に複数の仮想ＣＰＵが割り当てられている場合には、仮想ＣＰＵ番号３４２１も複数設定される。図示の例では、論理区画番号３４０２＝１の論理区画２０１には、２つの仮想ＣＰＵ＃１と＃２が割り当てられ、論理区画番号３４０２＝２の論理区画２１０には、２つの仮想ＣＰＵ＃３と＃４が割り当てられている状態を示している。
【００４７】
＜仮想化ソフトウェアの動作＞
次に、仮想化ソフトウェア３００で行われる処理の一例について、以下に説明する。図５は、仮想化ソフトウェア３００で行われる仮想サーバ（または仮想ＣＰＵ）を生成する処理の一例を示すフローチャートである。このフローチャートは、仮想化ソフトウェア３００が管理コンソール５００から指定された論理区画２００，２１０に仮想サーバ（または仮想ＣＰＵ）を生成する操作指令を受け付けたときに実行される処理である。なお、この処理を実行する以前に、管理コンソール５００からの操作指令によって既に仮想化ソフトウェア３００が論理区画２０１，２０２を設定したものとする。
【００４８】
仮想化ソフトウェア３００は、管理コンソール５００から仮想サーバ（または仮想ＣＰＵ）を生成する論理区画と仮想ＣＰＵの数と割り当て率を受け付けると、ステップＳ１で仮想−物理ＣＰＵ割当表３４１を参照し、仮想ＣＰＵを実行可能な動作状態の物理ＣＰＵ４１０〜４１２を参照する。ステップＳ２では、上記ステップＳ１で取得した動作状態３４１１が「通常」となっている物理ＣＰＵ４１０〜４１２が存在するか否かを判定する。動作状態３４１１が「通常」の物理ＣＰＵが存在すればステップＳ３へ進み、存在しなければステップＳ６に進む。
【００４９】
次に、ステップＳ３では、動作状態３４１１が「通常」の物理ＣＰＵの中から、管理コンソール５００から要求された仮想ＣＰＵを割り当て可能であるか否かを判定する。この判定は、動作状態３４１１が「通常」となっている物理ＣＰＵのうち、ひとつの物理ＣＰＵに割り当てられている仮想ＣＰＵの割り当て率の総和を１００％から差し引いた値が、生成する仮想ＣＰＵの割り当て率以上であれば、管理コンソール５００から要求された仮想ＣＰＵを当該物理ＣＰＵで割り当て可能と判定してステップＳ４に進む。一方、当該物理ＣＰＵに割り当てられている仮想ＣＰＵの割り当て率の総和を１００％から差し引いた値が、生成する仮想ＣＰＵの割り当て率未満であれば、管理コンソール５００から要求された仮想ＣＰＵを当該物理ＣＰＵに割り当て不能と判定してステップＳ５に進む。ステップＳ５では、要求された仮想ＣＰＵを割り当てる対象の物理ＣＰＵを他の物理ＣＰＵに切り替えてからステップＳ２に戻り、再度仮想ＣＰＵを割り当て可能な物理ＣＰＵを判定する。なお、ステップＳ５〜Ｓ２のループは、仮想−物理ＣＰＵ割当表３４１のエントリ毎に順次判定を行うようにすればよい。
【００５０】
ステップＳ４では、ステップＳ３で選択した物理ＣＰＵに管理コンソール５００から要求された仮想ＣＰＵを割指定された論理区画に割り当てて、論理区画対応表３４２の該当する論理区画に仮想ＣＰＵの識別子を書き込む。そして、仮想化ソフトウェア３００は、仮想−物理ＣＰＵ割当表３４１の該当物理ＣＰＵのエントリに、新たに割り当てる仮想ＣＰＵの番号と割り当て率を書き込んで更新してから、新たな仮想ＣＰＵを起動する。
【００５１】
一方、上記ステップＳ２の判定で、動作状態３４１１が「通常」で、かつ新たな仮想ＣＰＵを割り当て可能な物理ＣＰＵがない場合のステップＳ６では、仮想−物理ＣＰＵ割当表３４１を参照して動作状態３４１１が「スリープ」となっている物理ＣＰＵがあるか否かを判定する。動作状態３４１１が「スリープ」の物理ＣＰＵがある場合には、ステップＳ７へ進んで、当該物理ＣＰＵの動作状態３４１１を「通常」に変更して起動する。そして、当該起動した物理ＣＰＵを仮想ＣＰＵを割り当てる対象としてステップＳ４に進み、上記と同様に割り当てを実施する。
【００５２】
上記ステップＳ６の判定で、動作状態３４１１が「スリープ」の物理ＣＰＵがない場合には、仮想ＣＰＵを割り当てる物理ＣＰＵが存在しないため、仮想化ソフトウェア３００は管理コンソール５００に対して新たな仮想ＣＰＵを割り当てる計算機資源が不足したことを示す警告を通知する。
【００５３】
以上の処理により、管理コンソール５００から新たな仮想ＣＰＵの生成要求があると、仮想化ソフトウェア３００は、まず、動作状態３４１１が「通常」の稼動中の物理ＣＰＵから割当先を探索し、稼動中の物理ＣＰＵに仮想ＣＰＵを割り当てることができないときにのみ動作状態３４１１が「スリープ」の物理ＣＰＵを起動して新たな仮想ＣＰＵを割り当てる。これにより、仮想ＣＰＵを割り当てるのに必要最小限の物理ＣＰＵのみを「通常」の動作状態３４１１で稼動させて、動作状態３４１１が「スリープ」の物理ＣＰＵを再起動させるのを極力抑制することで、物理計算機４００の消費電力が増大するのを抑制できる。
【００５４】
図６は、仮想化ソフトウェア３００が管理コンソール５００から、指定された仮想サーバ（または仮想ＣＰＵ）を削除する操作指令を受け付けたときに実行される処理の一例を示すフローチャートである。
【００５５】
仮想化ソフトウェア３００は、管理コンソール５００から仮想サーバ（または仮想ＣＰＵ）を削除する仮想ＣＰＵの識別子を受け付けると、ステップＳ１１で仮想−物理ＣＰＵ割当表３４１を参照し、指定された仮想ＣＰＵを実行している物理ＣＰＵのエントリから該当する仮想ＣＰＵの識別子と割当率を削除する。また、仮想化ソフトウェア３００は、論理区画対応表３４２を参照し、管理コンソール５００から指定された仮想ＣＰＵの識別子があれば当該識別子を削除する。
【００５６】
ステップＳ１２では、上記ステップＳ１１で仮想ＣＰＵの識別子と割当率を削除した物理ＣＰＵのエントリで、割り当てられている仮想ＣＰＵがあるか否かを判定する。仮想ＣＰＵが存在する場合には処理を終了し、割り当てられている仮想ＣＰＵが存在しなければステップＳ１３に進む。
【００５７】
ステップＳ１３では、ステップＳ１１で仮想ＣＰＵの識別子を削除した物理ＣＰＵの動作状態をスリープ状態とするよう物理ＣＰＵ制御部３３０に指令してから処理を終了する。
【００５８】
以上の処理により、仮想ＣＰＵの削除時には、仮想ＣＰＵの割り当てがなくなった物理ＣＰＵをスリープ状態にして物理計算機４００の消費電力を低減することができる。
【００５９】
このように、本発明の第１の実施形態によれば、サーバの仮想化を行う仮想計算機システムにおいて、仮想ＣＰＵと物理ＣＰＵの対応付けを制御して、仮想ＣＰＵが割り当てられていない物理ＣＰＵをスリープ状態へ移行させることで、仮想計算機システム全体の消費電力の低減を図ることができる。
【００６０】
なお、上記第１実施形態では、マルチコアの物理ＣＰＵ４１０〜４１２に仮想ＣＰＵを割り当てる際に、物理ＣＰＵ毎に仮想ＣＰＵを割り当てる例を示したが、プロセッサコア毎に仮想ＣＰＵを割り当ててもよい。
【００６１】
＜第２実施形態＞
図７〜図９は第２の実施形態を示し、前記第１実施形態に示した物理ＣＰＵ制御部３３０が物理ＣＰＵ４１０〜４１２の動作クロックを制御し、さらに、仮想−物理ＣＰＵ割当制御部３４０が、仮想ＣＰＵを削除する際に、スリープ状態の物理ＣＰＵの数を最大にするよう仮想ＣＰＵの割り当てを制御するものである。物理計算機４００の構成は前記第１実施形態と同様であり、仮想化ソフトウェア３００は、仮想−物理ＣＰＵ割当制御部３４０と物理ＣＰＵ制御部３３０の機能の一部が前記第１実施形態と異なり、仮想−物理ＣＰＵ割当表３４１Ａの構成の一部が前記第１実施形態と異なる。
【００６２】
図７は、仮想−物理ＣＰＵ割当制御部３４０が管理する仮想−物理ＣＰＵ割当表３４１Ａの構成を示す説明図である。本第２実施形態の仮想−物理ＣＰＵ割当表３４１Ａは、前記第１実施形態の図３に示した仮想−物理ＣＰＵ割当表３４１に物理ＣＰＵ４１０〜４１２の動作クロックの周波数を格納する動作周波数３４１４を加えたもので、その他は前記第１実施形態と同様である。動作周波数３４１４は、物理ＣＰＵ４１０〜４１２の定格動作時のクロック周波数に対する実際に設定された動作クロックの周波数の比率を百分率で表した値である。
【００６３】
物理ＣＰＵ４１０〜４１２は、前記第１実施形態の図２で示したように、クロック供給部４４０から供給されたクロックを制御するクロック・電力制御部４１０４を備えて、動作クロックの周波数を変更可能に構成される。物理ＣＰＵ４１０〜４１２の動作クロック周波数の変更は、物理ＣＰＵ割当制御部３４０が物理ＣＰＵ４１０〜４１２のクロック・電力制御部４１０４に指示する周波数の値を変更することで実現される。
【００６４】
また、図２において、プロセッサコア４１０１，４１０２毎に動作クロックの周波数を独立して制御する場合には、仮想−物理ＣＰＵ割当表３４１Ａのエントリを物理ＣＰＵ４１０〜４１２のプロセッサコア毎に設けてもよい。
【００６５】
次に、仮想−物理ＣＰＵ割当制御部３４０は、物理ＣＰＵ４１０〜４１２に仮想−物理ＣＰＵを割り当てる際に、仮想ＣＰＵの割り当て率に応じて動作クロックの周波数を設定し、物理ＣＰＵ制御部３３０に動作クロックの周波数を指令する。この動作クロックの周波数の設定は、例えば、物理ＣＰＵ４１０〜４１２に割り当てられている仮想ＣＰＵの割り当て率の合計値を動作周波数３４１４として設定することができる。つまり、図７において、物理ＣＰＵ番号３４１０が「１」のエントリでは、仮想ＣＰＵ＃１の割り当て率３４１３が４０％で、仮想ＣＰＵ＃３の割り当て率３４１３が２０％の場合、割り当て率３４１３の合計値である６０％を物理ＣＰＵ＃１の動作周波数３４１４とすればよい。さらに、物理ＣＰＵ４１０〜４１２の動作クロックの周波数を変更する条件として、当該物理ＣＰＵに割り当てられている仮想ＣＰＵの割り当て率３４１３の合計値が所定の第１の閾値（例えば、９０％）未満であれば、動作クロックの周波数を変更することができる。なお、第１の閾値の値は、ゲストＯＳ１００，１１０や、アプリケーションの特性などに応じて適宜設定すればよい。
【００６６】
また、仮想−物理ＣＰＵ割当制御部３４０は、後述するように、仮想ＣＰＵを削除する際には、スリープ状態となる物理ＣＰＵ４１０〜４１２の数が最大となるよう、仮想ＣＰＵの割り当てを変更し、物理計算機４００の消費電力が最小となるよう仮想ＣＰＵの割り当てを最適化する。
【００６７】
図８は、仮想化ソフトウェア３００で行われる仮想サーバ（または仮想ＣＰＵ）を生成する処理の一例を示すフローチャートである。このフローチャートは、前記第１実施形態の図５と同様に、仮想化ソフトウェア３００が管理コンソール５００から指定された論理区画２００，２１０に仮想サーバ（または仮想ＣＰＵ）を生成する操作指令を受け付けたときに実行される処理である。なお、この処理を実行する以前に、管理コンソール５００からの操作指令によって既に仮想化ソフトウェア３００が論理区画２０１，２０２を設定したものとする。なお、前記第１実施形態の図５と同様の処理については、同一の符号を付した。
【００６８】
本第２実施形態の図８は、前記第１実施形態の図５に示したステップＳ３とＳ４の間に、物理ＣＰＵ４１０〜４１２の動作クロックの周波数を変更するステップＳ２１とステップＳ２２を加えたものであり、その他の構成は前記図５と同様である。
【００６９】
管理コンソール５００から新たな仮想ＣＰＵの生成要求があると、仮想化ソフトウェア３００は、まず、ステップＳ１〜Ｓ３で、仮想−物理ＣＰＵ割当表３４１Ａを参照して動作状態３４１１が「通常」の稼動中の物理ＣＰＵから割当先を探索し、稼動中の物理ＣＰＵに仮想ＣＰＵを割り当てることができないときにのみステップＳ６、Ｓ７で動作状態３４１１が「スリープ」の物理ＣＰＵを起動して新たな仮想ＣＰＵを割り当てる。また、スリープ状態の物理ＣＰＵがない場合にはステップＳ８で警告を通知する。
【００７０】
ステップＳ３またはステップＳ７で指定された仮想ＣＰＵを割り当てる物理ＣＰＵ４１０〜４１２が決定すると、ステップＳ２１に進んで当該物理ＣＰＵ４１０〜４１２の動作クロックの周波数を変更するか否かを判定する。すなわち、仮想化ソフトウェア３００は、仮想−物理ＣＰＵ割当表３４１Ａを参照し、選択した物理ＣＰＵに既に割り当てられている仮想ＣＰＵの割り当て率３４１３の合計と、管理コンソール５００から指令された新たな仮想ＣＰＵの割り当て率との和が所定の第１の閾値（例えば、９０％）未満であるか否かを判定する。前記和の値が第１の閾値未満であれば物理ＣＰＵ４１０〜４１２の動作クロックの周波数の変更を実施すると判定してステップＳ２２へ進む。一方、前記和の値が第１の閾値以上であれば物理ＣＰＵ４１０〜４１２の動作クロックの周波数を変更しないと判定してステップＳ４へ進む。
【００７１】
ステップＳ２２では、上述したように、対象の物理ＣＰＵに割り当てる仮想ＣＰＵの割り当て率の合計値を当該物理ＣＰＵの動作クロックの周波数の定格時に対する比率として設定する。そして、仮想化ソフトウェア３００は、この周波数の比率に対応する周波数となるよう物理ＣＰＵに動作クロックの周波数を変更するよう指令する。これにより、物理ＣＰＵへ新たに仮想ＣＰＵを割り当てると、割り当て率の和の増加に応じて動作クロックの周波数を増加させることができ、仮想ＣＰＵの実行に必要な最小限の消費電力で物理ＣＰＵを動作させることが可能となって、物理計算機４００の消費電力を抑制することができる。
【００７２】
そして、ステップＳ４では、上記ステップＳ３またはＳ７で選択した物理ＣＰＵに対応する仮想−物理ＣＰＵ割当表３４１Ａのエントリに、新たに割り当てた仮想ＣＰＵの識別子と割り当て率を仮想ＣＰＵ番号３４１２と割り当て率３４１３に書き込み、ステップＳ２２で設定した動作クロックの周波数の比率を動作周波数３４１４に格納して処理を終了する。
【００７３】
以上の処理により、仮想ＣＰＵの生成時には、物理ＣＰＵ４１０〜４１２にそれぞれ割り当てられている仮想ＣＰＵの割り当て率等に応じて物理ＣＰＵ４１０〜４１２の動作クロックの周波数を変更することができ、物理計算機４００の消費電力をさらに抑制することが可能となる。
【００７４】
次に、図９は、仮想化ソフトウェア３００が管理コンソール５００から、指定された仮想サーバ（または仮想ＣＰＵ）を削除する操作指令を受け付けたときに実行される処理の一例を示すフローチャートである。この処理は、前記第１実施形態の図６に示したフローチャートにステップＳ３１〜Ｓ３３の処理を追加したもので、ステップＳ１１〜Ｓ１３は前記第１実施形態の図６と同様である。
【００７５】
ステップＳ１１〜Ｓ１３の処理では、前記第１実施形態の図６と同様にして、仮想ＣＰＵの削除時には、仮想ＣＰＵの割り当てがなくなった物理ＣＰＵをスリープ状態にして物理計算機４００の消費電力を低減する。
【００７６】
さらに、ステップＳ１２の判定で管理コンソール５００から指令された仮想ＣＰＵを削除した物理ＣＰＵに、他の仮想ＣＰＵが割り当てられている場合にはステップＳ３１へ進む。
【００７７】
ステップＳ３１では、仮想−物理ＣＰＵ割当表３４１Ａを参照して、動作状態３４１１が「通常」となっている稼動中の物理ＣＰＵが他にあるか否かを判定する。他の物理ＣＰＵが通常の動作状態で稼働中であればステップＳ３２へ進み、他に通常の動作状態の物理ＣＰＵ４１０〜４１２がなければそのまま処理を終了する。なお、動作状態３４１１が「通常」とは、前記第１実施形態では物理ＣＰＵ４１０〜４１２が定格で動作している状態を示したが、本第２実施形態では、動作クロックの周波数を変更して仮想ＣＰＵを実行している状態も「通常」に含む。
【００７８】
次に、ステップＳ３２では、仮想ＣＰＵを削除した現在の物理ＣＰＵに割り当てられている残りの全ての仮想ＣＰＵを割り当て可能な物理ＣＰＵがあるか否かを、仮想−物理ＣＰＵ割当表３４１を参照して判定する。つまり、仮想ＣＰＵを削除した物理ＣＰＵに残っている全ての仮想ＣＰＵの割り当て率の和と、他の物理ＣＰＵに割り当てられている仮想ＣＰＵの割り当て率の和を加算した値が１００％以下である物理ＣＰＵがあれば、この物理ＣＰＵを、仮想ＣＰＵの移動対象として選択し、ステップＳ３３の処理へ進む。一方、前記加算した値が１００％を超えた場合には仮想ＣＰＵの移動ができないので、そのまま処理を終了する。
【００７９】
ステップＳ３３では、仮想ＣＰＵを削除した物理ＣＰＵの仮想ＣＰＵを、ステップＳ３２で選択した物理ＣＰＵに割り当て先を移動して、仮想−物理ＣＰＵ割当表３４１を更新する。さらに、仮想ＣＰＵの移動によって、割り当てられていた仮想ＣＰＵがなくなった物理ＣＰＵをスリープ状態に設定し、仮想−物理ＣＰＵ割当表３４１を更新してから処理を終了する。
【００８０】
以上の処理により、仮想ＣＰＵの削除によって割り当てられている仮想ＣＰＵがなくなった物理ＣＰＵがスリープ状態に移行するのに加え、仮想ＣＰＵを削除した物理ＣＰＵに割り当てられている残りの仮想ＣＰＵを他の物理ＣＰＵで割り当て可能な場合には、これらの残っている仮想ＣＰＵを、他の物理ＣＰＵへ移動させて割り当て先を変更する。そして、仮想ＣＰＵの移動によって割り当てられている仮想ＣＰＵがなくなった物理ＣＰＵをスリープ状態に移行させることで、物理計算機４００で全体の仮想ＣＰＵを実行するのに必要な最小限の物理ＣＰＵのみを通常の動作状態で稼動させ、他の物理ＣＰＵをスリープ状態に移行させることで、スリープ状態の物理ＣＰＵの数を最大にして物理計算機４００の消費電力を大幅に低減できるように仮想ＣＰＵの割り当て状態を最適化することができるのである。
【００８１】
例えば、図７に示した仮想−物理ＣＰＵ割当表３４１を、物理ＣＰＵと仮想ＣＰＵの割り当て率で表現すると図１０のようになる。図１０では、物理ＣＰＵ＃３（４１２）に割り当てられている仮想ＣＰＵ＃４（２１２）を削除する場合を示しており、図中上段が削除前を示し、下段が削除後の状態を示す。
【００８２】
物理ＣＰＵ＃１に割り当てられている仮想ＣＰＵ＃１、＃３の割り当て率はそれぞれ４０％、２０％であり、物理ＣＰＵ＃３に割り当てられている仮想ＣＰＵ＃４、＃２の割り当て率はそれぞれ２０％、４０％である。また、物理ＣＰＵ＃２は、スリープ状態となっている。
【００８３】
ここで、物理ＣＰＵ＃３の仮想ＣＰＵ＃２を削除すると、物理ＣＰＵ＃３に残った仮想ＣＰＵは割り当て率が２０％の仮想ＣＰＵ＃４のみとなる。ここで、割り当て率＝２０％の仮想ＣＰＵ＃４を割り当て可能な物理ＣＰＵを仮想−物理ＣＰＵ割当表３４１から検索すると、全仮想ＣＰＵの割り当て率＝６０％の物理ＣＰＵ＃１に、仮想ＣＰＵ＃３の割り当て率＝２０％を加算した値は８０％となり、所定の閾値未満である９０％以下であるので、仮想ＣＰＵ＃３を物理ＣＰＵ＃１へ移動することができる。なお、本実施形態では、動作クロックの周波数を変更する閾値を、仮想ＣＰＵの割り当て率３４１３の合計値を判定する閾値として代用したが、これらの閾値を独立して設定してもよい。
【００８４】
仮想化ソフトウェア３００は、物理ＣＰＵ＃３の仮想ＣＰＵ＃３を物理ＣＰＵ＃１に移動して割り当て先を変更する。そして、割り当てられている仮想ＣＰＵのなくなった物理ＣＰＵ＃３をスリープ状態にする。
【００８５】
以上のように、仮想ＣＰＵの削除時には、仮想ＣＰＵを削除した物理ＣＰＵ上に残った仮想ＣＰＵの割り当て率の和と、通常の動作状態の他の物理ＣＰＵの割り当て率の和とを加算した値が、所定の閾値未満となる物理ＣＰＵを順次検索し、２つの物理ＣＰＵ上の仮想ＣＰＵの割り当て率の和が所定の閾値未満であれば、ひとつの物理ＣＰＵに仮想ＣＰＵを再配置することで、仮想ＣＰＵを割り当てない物理ＣＰＵを生成してスリープ状態に移行させ、物理計算機４００の消費電力を低減させることができる。
【００８６】
さらに、物理ＣＰＵに割り当てる仮想ＣＰＵの割り当て状態が変更されたときには、物理ＣＰＵに割り当てられている仮想ＣＰＵの割り当て率の和に応じて動作クロックの周波数を増減するので、物理計算機４００の消費電力を最小限に抑制することが可能となる。
【００８７】
なお、上記第２実施形態において、仮想化ソフトウェア３００は仮想ＣＰＵの削除の指示を受け付けたときに、物理ＣＰＵに対する仮想ＣＰＵの割り当てを変更する例を示したが、仮想ＣＰＵの作成時や所定の周期で物理ＣＰＵ毎の割り当て状態を監視して、上記図９のステップＳ１２〜Ｓ３３を実行するようにしてもよい。
【００８８】
なお、上記では物理ＣＰＵ４１０〜４１２の動作クロックの周波数を変更する例を示したが、物理ＣＰＵ４１０〜４１２のクロック・電力制御部４１０４に電圧を変更するように指令しても良く、例えば、動作クロックの周波数を低下させる場合には、プロセッサコア４１０１，４１０２に供給する電圧も低下するように指令することができる。なお、動作クロックの周波数と供給電圧を変更する手法は、公知または周知の手法を用いればよい。
【００８９】
＜第３実施形態＞
図１１は第３の実施形態を示し、前記第２実施形態の図９に示した仮想化ソフトウェア３００が行う仮想ＣＰＵの削除処理フローチャートの一部を変更したもので、その他の構成は、前記第２実施形態と同様である。
【００９０】
図１１のフローチャートは、図９のフローチャートに示したステップＳ３２とステップＳ３３の間に、物理ＣＰＵ４１０〜４１２の動作クロックの周波数を変更するステップＳ４０を加えたものである。
【００９１】
ステップＳ４０では、前記第２実施形態の図８のステップＳ２１及びＳ２２で示したように、現在着目している物理ＣＰＵ４１０〜４１２の動作クロックを変更できるか否かを判定し、変更可能な場合には新たな割り当て時に応じて動作クロックの周波数を変更するものである。
【００９２】
すなわち、図１０において、物理ＣＰＵ＃３に割り当てられている仮想ＣＰＵ＃４を削除し、この物理ＣＰＵ＃３に割り当てられている仮想ＣＰＵ＃３を物理ＣＰＵ＃１へ移動した場合、物理ＣＰＵ＃１の動作クロックの周波数を、新たな割り当て率の和に応じて変更するものである。そして、前記第２実施形態と同様に、仮想ＣＰＵの割り当て率の和と閾値（例えば、９０％）を比較して、割り当て率の和が閾値未満であれば和の値に応じた動作クロックの周波数に設定することができる。
【００９３】
これにより、仮想ＣＰＵを纏めた物理ＣＰＵの動作クロックの周波数を割り当て率の和に応じて低減することで、物理計算機４００の処理能力を確保しながら消費電力の増大を抑制することができる。
【００９４】
また、上記物理ＣＰＵ４１０〜４１２の動作クロックの周波数の変更は、前記第１実施形態の図６に示した仮想ＣＰＵの削除時に適用しても良い。この場合、図１２のように、ステップＳ１２の判定処理がＹｅｓの場合にステップＳ４１を実行させる。
【００９５】
ステップＳ４１では、上記図１１のステップＳ４０と同様に、現在着目している物理ＣＰＵ４１０〜４１２の動作クロックを変更できるか否かを判定し、変更可能な場合には新たな割り当て時に応じて動作クロックの周波数を変更するものである。すなわち、仮想ＣＰＵを削除した物理ＣＰＵに残っている仮想ＣＰＵの割り当て率の和に応じて動作クロックの周波数を変更する。このとき、仮想ＣＰＵの割り当て率の和と所定の閾値を比較し、割り当て率の和が閾値未満のときに動作クロックの周波数の変更を行うようにしても良い。
【００９６】
これにより、仮想ＣＰＵを実行するのに必要な動作クロックの周波数を設定でき、物理計算機４００の消費電力をさらに低減できるのである。
【００９７】
＜第４実施形態＞
図１３は、第４の実施形態を示し、前記第１実施形態のゲストＯＳ１００、１１０上で、ゲストＯＳ毎の仮想ＣＰＵの使用率（以下、稼働率とする）を監視して仮想化ソフトウェア３００へ通知する稼働率監視ミドルウェア５００，５１０を実行し、仮想化ソフトウェア３００の仮想−物理ＣＰＵ割当制御部３４０では、仮想ＣＰＵの稼働率に応じて物理ＣＰＵに対する仮想ＣＰＵの割り当てを制御する。
【００９８】
仮想−物理ＣＰＵ割当制御部３４０は、図１４で示すように、前記第１実施形態の図３に示した仮想−物理ＣＰＵ割当表に稼働率３４１５と実使用率３４１６を加えた仮想−物理ＣＰＵ割当表３４１Ｂを管理する。
【００９９】
ここで、仮想−物理ＣＰＵ割当制御部３４０は、仮想−物理ＣＰＵ割当表３４１Ｂの稼働率３４１５に、各ゲストＯＳ１００，１１０が利用している各仮想ＣＰＵの稼働率を格納する。また、仮想−物理ＣＰＵ割当制御部３４０は、仮想−物理ＣＰＵ割当表３４１Ｂの実使用率３４１６には、各仮想ＣＰＵの割り当て率に稼働率を乗じた値を、各仮想ＣＰＵが実際に利用している物理ＣＰＵの利用率を格納する。
【０１００】
仮想ＣＰＵを割り当てる際には、前記第１実施形態と同様に、管理コンソール５００からの操作指令に応じた論理区画２００，２１０に仮想ＣＰＵを割り当てる。仮想ＣＰＵを割り当てた論理区画２００、２１０ではゲストＯＳ１００，１１０がそれぞれ起動し、さらに、稼働率監視ミドルウェア５００、５１０が起動して所定の周期などでゲストＯＳ１００，１１０が使用する各仮想ＣＰＵの稼働率を仮想化ソフトウェア３００へ通知する。
【０１０１】
仮想化ソフトウェア３００は、管理コンソール５００から指定された仮想ＣＰＵを削除の操作指令を受け付けると、図１５に示すフローチャートを実行し、不要な物理ＣＰＵ４１０〜４１２をスリープ状態に移行させ、さらに、各仮想ＣＰＵの稼働率に応じて仮想ＣＰＵを再配置する。
【０１０２】
図１５のフローチャートは、前記第２実施形態の図９に示した処理のうち、ステップＳ３２の処理を新たなステップＳ５０，Ｓ５１に置き換えたものであり、その他の構成は前記第２実施形態と同様である。ステップＳ１１、Ｓ１２では、上述のとおり指定された仮想ＣＰＵを削除し、仮想−物理ＣＰＵ割当表３４１Ｂを更新する。そして、仮想ＣＰＵを削除した物理ＣＰＵに他の仮想ＣＰＵが残っていれば、ステップＳ３１で当該物理ＣＰＵの他に通常の動作状態の物理ＣＰＵがあるかを判定する。他の物理ＣＰＵが通常の動作状態であれば、ステップＳ５０に進んで、物理計算機４００で稼動中の仮想ＣＰＵの稼働率を取得する。
【０１０３】
ステップＳ５０では、稼働率監視ミドルウェア５００、５１０が通知した仮想ＣＰＵの稼働率のうち最新の値を取得するか、または各仮想ＣＰＵ毎の稼働率の平均値を演算する。そして、仮想化ソフトウェア３００は、取得した各仮想ＣＰＵの割り当て率を仮想−物理ＣＰＵ割当表３４１Ｂの稼働率３４１５に書き込んで更新する。さらに、仮想化ソフトウェア３００は、仮想−物理ＣＰＵ割当表３４１Ｂの割り当て率３４１３に稼働率３４１５を乗じた値を各仮想ＣＰＵが実際に利用している物理ＣＰＵの使用率３４１６として求め、この値を実使用率３４１６に書き込んで更新する。
【０１０４】
次に、ステップＳ５１では、仮想ＣＰＵを削除した現在の物理ＣＰＵに割り当てられている残りの全ての仮想ＣＰＵを割り当て可能な物理ＣＰＵがあるか否かを、仮想−物理ＣＰＵ割当表３４１Ｂを参照して判定する。つまり、仮想ＣＰＵを削除した物理ＣＰＵに残っている全ての仮想ＣＰＵの実使用率３４１６の和と、他の物理ＣＰＵに割り当てられている仮想ＣＰＵの実使用率３４１６の和を加算した値が所定の第２の閾値（例えば、１００％）以下である物理ＣＰＵがあれば、この物理ＣＰＵを、仮想ＣＰＵの移動対象として選択し、ステップＳ３３の処理へ進む。一方、前記加算した値が第２の閾値を超えた場合には仮想ＣＰＵの移動ができないので、そのまま処理を終了する。
【０１０５】
ステップＳ３３では、仮想ＣＰＵを削除した物理ＣＰＵの仮想ＣＰＵを、ステップＳ５１で選択した物理ＣＰＵに割り当て先を移動して、仮想−物理ＣＰＵ割当表３４１Ｂを更新する。さらに、仮想ＣＰＵの移動によって、割り当てられていた仮想ＣＰＵがなくなった物理ＣＰＵをスリープ状態に設定し、仮想−物理ＣＰＵ割当表３４１Ｂを更新してから処理を終了する。
【０１０６】
以上の処理を図１４の仮想−物理ＣＰＵ割当表３４１Ｂに示した仮想ＣＰＵ＃４を削除する例を、図１６に示す。
【０１０７】
図１６は、図１４の仮想−物理ＣＰＵ割当表３４１Ｂから仮想ＣＰＵ＃２を削除した状態を図中上部の割当変更前に示し、仮想ＣＰＵの割り当て変更後の状態を図中下部に示し、図中斜線の部分が仮想ＣＰＵの実使用率３４１６を示す。
【０１０８】
物理ＣＰＵ＃１には、仮想ＣＰＵ＃１，＃３がそれぞれ５０％と３０％の割り当て率で割り当てられており、物理ＣＰＵ＃３には仮想ＣＰＵ＃４が４０％の割り当て率で割り当てられている。なお、物理ＣＰＵ＃２はスリープ状態である。
【０１０９】
仮想化ソフトウェア３００は、各仮想ＣＰＵの稼働率３４１５を稼働率監視ミドルウェア５００から取得し、仮想−物理ＣＰＵ割当表３４１Ｂの割り当て率３４１３に稼働率３４１５を乗じた値の百分立を物理ＣＰＵの実使用率３４１６として求める。この結果、実使用率３４１６は、仮想ＣＰＵ＃１が２５％、仮想ＣＰＵ＃３が９％、仮想ＣＰＵ＃４が８％となる。仮想化ソフトウェア３００は、今回、仮想ＣＰＵを削除した物理ＣＰＵ＃３の仮想ＣＰＵの実使用率３４１６の合計値と、他の物理ＣＰＵのうち通常の動作状態のものをひとつ選択して、この物理ＣＰＵ（この例では、物理ＣＰＵ＃１）の実使用率３４１６の合計値を求める。ここで、物理ＣＰＵ＃１を選択すると、仮想ＣＰＵ＃１と仮想ＣＰＵ＃３の実使用率３４１６の和＝３４％に、仮想ＣＰＵを削除した物理ＣＰＵ＃３の実使用率３４１６の和＝８％を加算した値＝４２％が第２の閾値（例えば、１００％）未満であるか否かを判定する。
【０１１０】
この例では、選択した物理ＣＰＵ＃１と物理ＣＰＵ＃３の実使用率３４１６の和は、４２％となって第２の閾値未満であるので、仮想化ソフトウェア３００は物理ＣＰＵ＃３の仮想ＣＰＵ＃４を物理ＣＰＵ＃１へ移動可能と判定する。そして、仮想化ソフトウェア３００は、仮想−物理ＣＰＵ割当表３４１Ｂを図１７で示すように更新し、物理ＣＰＵ＃３のエントリを仮想ＣＰＵの割り当てなしに更新し、物理ＣＰＵ＃１のエントリに仮想ＣＰＵ＃４の識別子と割り当て率３４１３、稼働率３４１５、実使用率３４１６を書き込んで更新する。この後、仮想化ソフトウェア３００は、物理ＣＰＵ＃３をスリープ状態に移行させて処理を終了する。
【０１１１】
上記仮想ＣＰＵの再配置の結果、図１６の下部に示すように、物理ＣＰＵ＃１には３つの仮想ＣＰＵ＃１，＃３、＃４が割り当てられて、割り当て率３４１３の和は１２０％となって、物理ＣＰＵ＃１のリソースの最大値を示す１００％を超えているが、各仮想ＣＰＵの実使用率３４１６の和は１００％未満の４２％であるので、物理ＣＰＵ＃１は各仮想ＣＰＵを円滑に実行できる。
【０１１２】
このように、仮想ＣＰＵを削除して仮想ＣＰＵの再配置を行う際に、仮想ＣＰＵが実際に利用している物理ＣＰＵの実使用率３４１６を、稼働率監視ミドルウェア５００から取得した値に基づいて求め、２つの物理ＣＰＵ上の仮想ＣＰＵの実使用率３４１６の和が第２の閾値未満であれば、ひとつの物理ＣＰＵに仮想ＣＰＵを再配置することで、仮想ＣＰＵを割り当てない物理ＣＰＵを生成してスリープ状態に移行させ、物理計算機４００の消費電力を低減させることができる。
【０１１３】
さらに、論理区画２００，２１０では各ゲストＯＳ１００，１１０上で稼働率監視ミドルウェア５００，５１０を稼動させて仮想化ソフトウェア３００へ各ゲストＯＳ１００，１１０の仮想ＣＰＵの使用率を通知するようにしたので、既存のＯＳをそのままゲストＯＳ１００，１１０として利用しながら仮想化ソフトウェア３００では仮想ＣＰＵの稼働率に応じた割り当て制御が可能となる。
【０１１４】
なお、上記では第２の閾値を１００％とした例を示したが、各ゲストＯＳ１００，１１０の負荷変動を考慮した場合、第２の閾値を８０％などの１００％未満の値に設定することで、負荷変動による実使用率の急増に対応することができる。
【０１１５】
また、通常の動作状態の物理ＣＰＵが複数ある場合に、仮想化ソフトウェア３００は、上記ステップＳ５１の処理で、仮想ＣＰＵを削除した物理ＣＰＵの実使用率を、他の物理ＣＰＵの実使用率と順次比較し、第２の閾値未満となる物理ＣＰＵを検索すればよい。
【０１１６】
なお、上記各実施形態では、物理ＣＰＵ４１０〜４１２として複数のプロセッサコアを備えたホモジニアスのマルチコア・マルチプロセッサに本発明を適用した例を示したが、異種のプロセッサコアを備えたヘテロジニアスのマルチコア・マルチプロセッサに本発明を適用することができる。
【産業上の利用可能性】
【０１１７】
以上のように、本発明では、複数の物理ＣＰＵを備えて複数の仮想ＣＰＵを実行する仮想計算機システム及び仮想化ソフトウェアに適用することができる。
【図面の簡単な説明】
【０１１８】
【図１】第１の実施形態を示し、本発明を適用する仮想計算機システムの構成を示すブロック図。
【図２】第１の実施形態を示し、物理ＣＰＵの構成を示すブロック図。
【図３】第１の実施形態を示し、仮想化ソフトウェアが管理する仮想−物理ＣＰＵ割当表の一例を示す説明図。
【図４】第１の実施形態を示し、仮想化ソフトウェアが管理する論理区画対応表の一例を示す説明図。
【図５】第１の実施形態を示し、仮想化ソフトウェアが行う仮想ＣＰＵの生成処理の一例を示すフローチャート。
【図６】第１の実施形態を示し、仮想化ソフトウェアが行う仮想ＣＰＵの削除処理の一例を示すフローチャート。
【図７】第２の実施形態を示し、仮想化ソフトウェアが管理する仮想−物理ＣＰＵ割当表の一例を示す説明図。
【図８】第２の実施形態を示し、仮想化ソフトウェアが行う仮想ＣＰＵの生成処理の一例を示すフローチャート。
【図９】第２の実施形態を示し、仮想化ソフトウェアが行う仮想ＣＰＵの削除処理の一例を示すフローチャート。
【図１０】第２の実施形態を示し、仮想ＣＰＵの削除処理による仮想ＣＰＵの再配置の様子を示す説明図で、図中上部が割り当て変更前の状態を示し、図中下部が割り当て変更後の状態を示す。
【図１１】第３の実施形態を示し、仮想化ソフトウェアが行う仮想ＣＰＵの削除処理の一例を示すフローチャート。
【図１２】第３の実施形態を示し、仮想化ソフトウェアが行う仮想ＣＰＵの削除処理の他の例を示すフローチャート。
【図１３】第４の実施形態を示し、仮想計算機システムの構成を示すブロック図。
【図１４】第４の実施形態を示し、仮想化ソフトウェアが管理する仮想−物理ＣＰＵ割当表の一例を示す説明図。
【図１５】第４の実施形態を示し、仮想化ソフトウェアが行う仮想ＣＰＵの削除処理の一例を示すフローチャート。
【図１６】第４の実施形態を示し、仮想ＣＰＵの削除処理による仮想ＣＰＵの再配置の様子を示す説明図で、図中上部が割り当て変更前の状態を示し、図中下部が割り当て変更後の状態を示す。
【図１７】第４の実施形態を示し、仮想化ソフトウェアが管理する仮想−物理ＣＰＵ割当表で、仮想ＣＰＵの削除処理後の一例を示す説明図。
【符号の説明】
【０１１９】
１００、１１０  ゲストＯＳ
２００，２１０  論理区画
２０１，２０２、２１１，２１２  仮想ＣＰＵ
３００  仮想化ソフトウェア
３１０  ＬＰＡＲ制御部
３２０  仮想ＣＰＵ制御部
３３０  物理ＣＰＵ制御部
３４０  仮想−物理ＣＰＵ割当制御部
４００  物理計算機
４１０  物理ＣＰＵ
【図１】
0005433837.tif 000002
【図２】
0005433837.tif 000003
【図３】
0005433837.tif 000004
【図４】
0005433837.tif 000005
【図５】
0005433837.tif 000006
【図６】
0005433837.tif 000007
【図７】
0005433837.tif 000008
【図８】
0005433837.tif 000009
【図９】
0005433837.tif 000010
【図１０】
0005433837.tif 000011
【図１１】
0005433837.tif 000012
【図１２】
0005433837.tif 000013
【図１３】
0005433837.tif 000014
【図１４】
0005433837.tif 000015
【図１５】
0005433837.tif 000016
【図１６】
0005433837.tif 000017
【図１７】
0005433837.tif 000018