(57)【要約】【課題】  動的仮想マシンサイジングを提供する。【解決手段】  ホスト上で実行される仮想マシン（ＶＭ）１１８を有するホスト内のプロセッサ（ＣＰＵ）資源を管理するための技術に関する。ＶＭ１１８の目標サイズはその要求とＣＰＵ権利とに基づき決定される。ＶＭの現在のサイズが目標サイズを超える場合、ＶＭに利用可能な仮想ＣＰＵ１２２の数を増加または低減することにより、ホスト内のＶＭ１１８のサイズを動的に変更する。仮想ＣＰＵ１２２を非活性化するために、高優先順位バルーンスレッドが立ち上げられ非活動化対象の仮想ＣＰＵ１２２のうちの１つにピン留めされ、内在するハイパーバイザ１１１はそれに従って仮想ＣＰＵ１２２の実行をスケジュール解除する。仮想ＣＰＵ１２２を活性化し、ＶＭ１１８に利用可能な仮想ＣＰＵの数を増加するために立ち上げられたバルーンスレッドは停止される。【選択図】図１
2014219977.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムであって、
少なくとも１つのプロセッサを含むハードウェアプラットホームと、
前記ハードウェアプラットホームに設けられた仮想化層と、
前記仮想化層により支援される仮想マシンとを
含むコンピュータシステムにおいて、
前記仮想マシンは、複数の仮想プロセッサを含み、
前記仮想プロセッサは、該仮想プロセッサ上で実行するゲストオペレーティングシステムを有し、
前記ゲストオペレーティングシステムは、前記仮想マシン用に活性化される仮想プロセッサの現在数を超える前記仮想マシンによるプロセッサ要求に基づき、前記仮想マシンの仮想プロセッサの目標数を決定するように構成されるデバイスドライバを含み、
前記デバイスドライバはさらに、前記ゲストオペレーティングシステム内に優先プロセススレッドを立ち上げるように構成され、前記優先プロセススレッドは、前記複数の仮想プロセッサのうちの第１の仮想プロセッサに関連付けられ、且つ停止命令を含み、
前記ゲストオペレーティングシステムはさらに、前記複数の仮想プロセッサのうちの前記第１の仮想プロセッサを使用して前記優先プロセススレッドを実行するように構成され、
前記仮想化層は、前記仮想マシンの前記複数の仮想プロセッサの間の前記プロセッサの共有を管理するように構成され、前記仮想化層は、前記第１の仮想プロセッサが前記停止命令を実行していることを検知することに応答して、前記コンピュータシステムの前記プロセッサ上の前記第１の仮想プロセッサの実行をスケジュール解除するように構成される、コンピュータシステム。
【請求項２】
前記デバイスドライバはさらに、立ち上げられた優先プロセススレッドの量に基づき前記仮想マシン用に活性化された仮想プロセッサの前記現在数をディクリメントするように構成される、請求項１に記載のコンピュータシステム。
【請求項３】
前記優先プロセススレッドは、ＨＬＴ命令を有するカーネルスレッドを含む、請求項１に記載のコンピュータシステム。
【請求項４】
前記デバイスドライバはさらに、前記仮想マシンの仮想プロセッサの、前記仮想マシン用に活性化された仮想プロセッサの前記現在数よりも小さい第２の目標数を決定し、前記ゲストオペレーティングシステム内の前記優先プロセススレッドの実行を停止するように構成される、請求項１に記載のコンピュータシステム。
【請求項５】
仮想プロセッサの前記目標数は、前記仮想マシンの仮想プロセッサの要求数と前記仮想マシンの仮想プロセッサの付与数とのうち少ない方として決定される、請求項１に記載のコンピュータシステム。
【請求項６】
前記仮想マシン用の仮想プロセッサの前記要求数は、前記仮想マシンに割り振られた前記複数の仮想プロセッサに対する全要求と前記仮想マシンの予想利用率とに基づき決定される、請求項５に記載のコンピュータシステム。
【請求項７】
前記仮想マシンの仮想プロセッサの前記付与数は、前記仮想マシンに割り振られた仮想プロセッサの数と前記仮想マシンに関連付けられた準備時間の量とに基づき決定される、請求項５に記載のコンピュータシステム。
【請求項８】
前記デバイスドライバはさらに、バックドアコールを介し前記仮想化層から仮想プロセッサの前記目標数を受信するように構成される、請求項１に記載のコンピュータシステム。
【請求項９】
ホストコンピュータシステムを管理する方法であって、該ホストコンピュータシステムは、前記ホストコンピュータシステム上で実行する仮想マシンを有し、前記仮想マシンには複数の仮想中央処理装置が割り振られる、前記方法において、
前記仮想マシンによるプロセッサ要求に基づき、前記仮想マシン用に活性化された仮想中央処理装置の現在数よりも多い前記仮想マシン用の前記仮想中央処理装置の目標数を決定すること、
前記仮想マシンのゲストオペレーティングシステム内の優先プロセススレッドを立ち上げることであって、前記優先プロセススレッドは、前記複数の仮想中央処理装置のうちの第１の仮想中央処理装置に関連付けられ、且つ停止命令を含む、前記優先プロセススレッドを立ち上げること、
前記ゲストオペレーティングシステム内のゲストスケジューラの動作により、前記複数の仮想中央処理装置のうちの前記第１の仮想中央処理装置を使用して前記優先プロセススレッドを実行すること、
前記ホストコンピュータシステム内のハイパーバイザの動作により、前記第１の仮想中央処理装置が前記停止命令を実行していることを検出することに応答して、前記ホストコンピュータシステムの１つまたは複数の物理的中央処理装置上の前記第１の仮想中央処理装置の実行をスケジュール解除することを備える、方法。
【請求項１０】
立ち上げられた優先プロセススレッドの量に基づき前記仮想マシン用に活性化された仮想中央処理装置の前記現在数をディクリメントすることをさらに備える、請求項９に記載の方法。
【請求項１１】
前記優先プロセススレッドは、ＨＬＴ命令を有するカーネルスレッドを含む、請求項９に記載の方法。
【請求項１２】
前記仮想マシン用に活性化された仮想中央処理装置の前記現在数よりも小さい前記仮想マシンの仮想中央処理装置の第２の目標数を決定すること、
前記ゲストオペレーティングシステム内の前記優先プロセススレッドの実行を停止することをさらに備える、請求項９に記載の方法。
【請求項１３】
前記仮想マシンによるプロセッサ要求に基づき前記仮想マシンの仮想中央処理装置の前記目標数を決定することはさらに、
仮想中央処理装置の前記目標数を、前記仮想マシンの前記仮想中央処理装置の要求数と前記仮想マシンの仮想中央処理装置の付与数のうちの小さい方として決定することを含む、請求項９に記載の方法。
【請求項１４】
前記仮想マシンの仮想中央処理装置の前記要求数は、前記仮想マシンに割り振られた前記複数の仮想中央処理装置に対する全要求と前記仮想マシンの予想利用率とに基づき決定される、請求項１３に記載の方法。
【請求項１５】
前記仮想マシンの仮想中央処理装置の前記付与数は、前記仮想マシンに割り振られた仮想中央処理装置の数と前記仮想マシンに関連付けられた準備時間の量とに基づき決定される、請求項１３に記載の方法。
【請求項１６】
前記仮想マシンによるプロセッサ要求に基づき前記仮想マシンの仮想中央処理装置の前記目標数を決定することはさらに、
前記ゲストオペレーティングシステムにおいて実行するデバイスドライバの動作により、バックドアコールを介し前記ハイパーバイザから仮想中央処理装置の前記目標数を受信することを含む、請求項９に記載の方法。
【請求項１７】
ホストコンピュータデバイスを管理するためのコンピュータ可読プログラムコードを格納した非一時的コンピュータ可読記憶媒体であって、該ホストコンピュータデバイスは、前記ホストコンピュータデバイス上で実行する仮想マシンを有し、前記仮想マシンには複数の仮想中央処理装置が割り振られ、非一時的コンピュータ可読記憶媒体が、
前記仮想マシンによるプロセッサ要求に基づき、前記仮想マシン用に活性化された仮想中央処理装置の現在数よりも多い仮想マシン用の仮想中央処理装置の目標数を決定するコンピュータ可読プログラムコードと、
前記仮想マシンのゲストオペレーティングシステム内に優先プロセススレッドを立ち上げるコンピュータ可読プログラムコードであって、前記優先プロセススレッドは、前記複数の仮想中央処理装置のうちの第１の仮想中央処理装置に関連付けられ、且つ停止命令を含む、前記コンピュータ可読プログラムコードと、
前記ゲストオペレーティングシステム内のゲストスケジューラの動作により、前記複数の仮想中央処理装置のうちの前記第１の仮想中央処理装置を使用して前記優先プロセススレッドを実行するコンピュータ可読プログラムコードと、
前記ホストコンピュータデバイス内のハイパーバイザの動作により、前記第１の仮想中央処理装置が前記停止命令を実行していることを検出することに応答して、前記ホストコンピュータデバイスの１つまたは複数の物理的中央処理装置上の前記第１の仮想中央処理装置の実行をスケジュール解除するコンピュータ可読プログラムコードとを備える、非一時的コンピュータ可読記憶媒体。
【請求項１８】
前記非一時的コンピュータ可読記憶媒体は、
立ち上げられる優先プロセススレッドの量に基づき、前記仮想マシン用に活性化された仮想中央処理装置の前記現在数をディクリメントするコンピュータ可読プログラムコードをさらに備える、請求項１７に記載の非一時的コンピュータ可読記憶媒体。
【請求項１９】
前記優先プロセススレッドは、ＨＬＴ命令を有するカーネルスレッドを含む、請求項１７に記載の非一時的コンピュータ可読記憶媒体。
【請求項２０】
前記非一時的コンピュータ可読記憶媒体は、
前記仮想マシン用に活性化された仮想中央処理装置の前記現在数よりも小さい前記仮想マシンの仮想中央処理装置の第２の目標数を決定するコンピュータ可読プログラムコードと、
前記ゲストオペレーティングシステムにおける前記優先プロセススレッドの実行を停止するコンピュータ可読プログラムコードとをさらに備える、請求項１７に記載の非一時的コンピュータ可読記憶媒体。
【請求項２１】
前記仮想マシンによるプロセッサ要求に基づき前記仮想マシンの仮想中央処理装置の前記目標数を決定する前記コンピュータ可読プログラムコードはさらに、
仮想中央処理装置の前記目標数を、前記仮想マシンの前記仮想中央処理装置の要求数と前記仮想マシンの仮想中央処理装置の付与数のうちの小さい方として決定するコンピュータ可読プログラムコードを含む、請求項１７に記載の非一時的コンピュータ可読記憶媒体。
【請求項２２】
前記仮想マシンの仮想中央処理装置の前記要求数は、前記仮想マシンに割り振られた前記複数の仮想中央処理装置に対する全要求と前記仮想マシンの予想利用率とに基づき決定される、請求項２１に記載の非一時的コンピュータ可読記憶媒体。
【請求項２３】
前記仮想マシンの仮想中央処理装置の前記付与数は、前記仮想マシンに割り振られた仮想中央処理装置の数と前記仮想マシンに関連付けられた準備時間の量とに基づき決定される、請求項２１に記載の非一時的コンピュータ可読記憶媒体。
【請求項２４】
前記仮想マシンによるプロセッサ要求に基づき前記仮想マシンの仮想中央処理装置の前記目標数を決定する前記コンピュータ可読プログラムコードはさらに、
前記ゲストオペレーティングシステムにおいて実行するデバイスドライバの動作により、バックドアコールを介し前記ハイパーバイザから仮想中央処理装置の前記目標数を受信するコンピュータ可読プログラムコードを含む、請求項１７に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は概して、コンピュータとコンピュータシステムの分野に関する。いくつかの例では、本発明は、仮想コンピュータ環境における仮想マシンをホストする物理的コンピュータデバイスに関する。
【背景技術】
【０００２】
物理的コンピュータデバイス上に仮想コンピュータ環境を設けることが知られている。仮想コンピュータ環境は、複数の仮想マシン（VM : virtual machine）ゲストが単一物理的プラットホーム上で実行され物理資源を共有できるようにし得る。いくつかの仮想コンピュータ環境は、使用のためにＶＭにより指定されるプロセッサの総数がホスト上で利用可能な物理的プロセッサの実際の数より多くなる方法でＶＭを構成できるようにする。これはＣＰＵオーバーコミットメントと呼ばれ、より多くのＶＭを単一ホスト上に詰め込めるようにする。
【０００３】
さらに、仮想マシンには２つ以上の仮想ＣＰＵを割り振ることができ、ユーザに、複数のプロセスまたはマルチスレッドアプリケーションを生み出すアプリケーションを実行できるようにする。しかし、その作業負荷よりも多い仮想ＣＰＵ（ｖＣＰＵ）により仮想マシンを構成することは、オーバーヘッドのためより多くの資源を使用する可能性があり、これにより高負荷システムの性能に影響を与えることになる。このシナリオの例としては、複数のｖＣＰＵ仮想マシンにおいて実行するシングルスレッド作業負荷、または作業負荷が有効使用できるより多くのｖＣＰＵを有する仮想マシンにおいて実行するマルチスレッド作業負荷が挙げられる。
【０００４】
さらに、仮想マシンには通常、仮想マシンの配備時にＣＰＵ資源（およびメモリ資源）が割り振られ、これらの割り振りを変更することは通常、仮想マシンをオフラインにし、設定を再構成し、仮想マシンをオンラインに戻すことを含む。このプロセスはシステム管理者にとって時間がかかる可能性があり、仮想マシン上のサービスへのアクセスを妨げる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Ｃ．Ａ．ワルドスパージャー（C. A. Waldspurger）著、「ＶＭｗａｒｅ・ＥＳＸ・サーバーのメモリリソース管理（Memory Resource Management in Vmware ESX Server）」、ＯＳＤＩの第５回討論会の議事録（"ln Proceedings of the 5th Symposium on OSDI）、ボストン、マサチューセッツ州、２００２年１２月９〜１１日、インターネット＜http://www.usenix.org/events/osdiO2/tech/waldspurger.html＞、１５ページ
【非特許文献２】Ｚ．ムワイカンボ、他著（Z. Mwaikambo, et al.,）、「リナックスカーネルホットプラグＣＰＵサポート（Linux Kernel Hotplug CPU Support）」、オタワでのリナックス討論会（In Ottawa Linux Symposium）、第２巻、オタワ、オンタリオ州、カナダ、２００４年７月２１〜２４日、１６ページ
【非特許文献３】Ｋ．アダムスおよびＯ．アジェセン（K. Adams and O.Agesen）著、「ｘ８６仮想化のソフトウェア技術およびハードウェア技術の比較（A Comparison of Software and Hardware Techniques for x86 Virtualization）」、オペレーションシステムのレビュー（Operating Systems Review）、４０（５）：２−１３、２００６年１２月、ISSN O163-5980、１２ページ
【非特許文献４】VMware lnc.,、「ゲストオペレーティングシステム要求のタイマー割り込みのレート決定および変更（Determining and Changing the Rate of Timer lnterrupts a Guest Operating System Requests）」、インターネット＜http://kb.vmware.com/kb/1005802＞、更新：２０１１年１月２５日、４ページ
【非特許文献５】VMware lnc.,、「ＶＭｗａｒｅ・ｖＳｐｈｅｒｅ  ５．０  のベスト動作の実行（Performance Best Practices for VMware vSphere 5.0）」、インターネット＜http://www.vmware.com/pdf/Pert_Best_Practices_vSphere5.0.pdf＞、改訂：２０１１年８月２２日、７６ページ
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ここで、仮想コンピュータ環境を実現する際に物理的コンピュータプラットホームの資源をより効率的に使用することなど現在利用可能なコンピュータシステムを改善する要望がある。例示的実施形態の他の利点は以下に記載されるか、または本明細書の教示を実行することにより当業者らにより理解される。
【課題を解決するための手段】
【０００７】
本発明によると、添付の特許請求の範囲に記載されるコンピュータシステムと方法が提供される。本発明の他の特徴は従属請求項と以下の説明から明確になる。
本開示の実施形態は、ホストであってホスト上で実行する仮想マシンを有するホスト内のＣＰＵを管理する方法を提供する。仮想マシンには複数の仮想ＣＰＵが割り振られる。本方法は、仮想マシンによるプロセッサ要求に基づき、仮想マシン用に活性化された仮想ＣＰＵの現在数よりも多い仮想ＣＰＵの目標数を決定することを含む。本方法はさらに、仮想マシンのゲストオペレーティングシステム内の優先プロセススレッドを立ち上げることを含む。優先プロセススレッドは、複数の仮想ＣＰＵのうちの第１の仮想ＣＰＵに関連付けられ、且つ停止命令を含む。本方法は、ゲストオペレーティングシステム内のゲストスケジューラの動作により、複数の仮想ＣＰＵのうちの第１の仮想ＣＰＵを使用して優先プロセススレッドを実行することを含む。本方法はさらに、ホスト内のハイパーバイザの動作により、第１の仮想ＣＰＵが停止命令を実行していることを検出することに応答して、ホストの１つまたは複数の物理的ＣＰＵ上の第１の仮想ＣＰＵの実行をスケジュール解除することを含む。
【図面の簡単な説明】
【０００８】
【図１】実施形態が実施され得る仮想化コンピュータアーキテクチャを示すブロック図である。
【図２】仮想マシンの目標仮想ＣＰＵサイズを決定するために仮想化層により実行される工程を示す流れ図である。
【図３】カーネルスケジューラから目標仮想ＣＰＵサイズを受信することに応答して仮想マシンの目標仮想ＣＰＵサイズを実装するためにバルーンドライバにより実行される工程を示す流れ図である。
【図４Ａ】仮想ＣＰＵサイズがカーネルスケジューラから受信された目標仮想ＣＰＵサイズと同じである場合の、仮想マシンのゲストスケジューラによる仮想ＣＰＵへのスレッドのディスパッチングを示すブロック図である。
【図４Ｂ】仮想ＣＰＵサイズがカーネルスケジューラから受信された目標仮想ＣＰＵサイズを超えた場合の、スレッドを複数の仮想ＣＰＵへディスパッチし、バルーンスレッドを１つの仮想ＣＰＵへディスパッチする仮想マシンのゲストスケジューラを示すブロック図である。
【発明を実施するための形態】
【０００９】
本開示の態様はプロセス、装置、システム、デバイス、コンピュータ読み取り可能媒体上の方法など多くの方法で実施されることができるということを理解すべきである。本開示のいくつかの実施形態について以下に説明する。
【００１０】
図１は、実施形態が実施され得る仮想化コンピュータアーキテクチャを表すコンピュータシステム１００のブロック図を描写する。図示のように、コンピュータシステム１００は、共通のハードウェアプラットホーム１０２上で実行し共通のハードウェアプラットホーム１０２を共有する複数の仮想マシン（ＶＭ）１１８１〜１１８Ｎをホストする。ハードウェアプラットホーム１０２は、１つまたは複数の中央処理装置（CPU : central processing unit）１０４、ランダムアクセスメモリ（RAM : random access memory）１０６、１つまたは複数のネットワークインタフェース１０８、および固定記憶装置１１０など従来のコンピュータハードウェアの構成要素を含む。
【００１１】
以下では、ハイパーバイザ１１１と呼ばれる仮想化ソフトウェア層が、ハードウェアプラットホーム１０２上に設けられる。ハイパーバイザ１１１は、１つまたは複数のＶＭ１１８１〜１１８Ｎの並列インスタンス化と実行を可能にする。ＶＭ１１８とハイパーバイザ１１１との相互作用は、仮想マシンモニタ（VMM : virtual machine monitor）により容易にされる。各ＶＭＭ１３４１〜１３４Ｎは、対応するＶＭ１１８１〜１１８Ｎに割り当てられ、対応するＶＭ１１８１〜１１８Ｎを監視する。一実施形態では、ハイパーバイザ１１１は、米国カリフォルニア州パロアルトのＶＭｗａｒｅ（商標）社から入手可能なＶＭｗａｒｅのｖＳｐｈｅｒｅ（登録商標）仮想化製品の商品として実装されるＶＭｋｅｒｎｅｌ（商標）であり得る。別の実施形態では、ホストオペレーティングシステムは、ハイパーバイザ１１１とハードウェアプラットホーム１０２との間に設けられる。このような実施形態では、ハイパーバイザ１１１は、ホストオペレーティングシステムにより提供される抽象化レベル上で動作する。
【００１２】
インスタンス化（instantiation）後、各ＶＭ１１８１〜１１８Ｎは、ハイパーバイザ１１１の制御下で実行される物理的コンピュータプラットホームを隠蔽する（encapsulate）。ＶＭ１１８の仮想デバイス（virtual device）は、これらに限定しないが、１つまたは複数の仮想中央処理装置（virtual CPU）（ｖＣＰＵ）１２２１〜１２２Ｎ、仮想ランダムアクセスメモリ（ｖＲＡＭ）１２４、仮想ネットワークインタフェースアダプタ（ｖＮＩＣ）１２６、および仮想記憶装置（ｖＳｔｏｒａｇｅ）１２８からなる仮想ハードウェアプラットホーム１２０内に具現される。仮想ハードウェアプラットホーム１２０は、アプリケーション１３２を実行することができるゲストオペレーティングシステム（ゲストＯＳ）１３０の実装（installation）を支援する。ゲストＯＳ１３０の例としては、マイクロソフトウインドウズ（登録商標）、リナックス（登録商標）などの周知の汎用オペレーティングシステムの任意のものが挙げられる。
【００１３】
図１に示す実施形態では、ゲストＯＳ１３０は、複数のコンピュータタスク（プロセスと呼ばれる）が同じ期間中に行われ共通の処理資源を共有する方法であるマルチタスキング（multitasking）を支援するスケジューラ部品（ゲストスケジューラ１３３として描写される）を含む。ゲストスケジューラ１３３は、様々なアルゴリズム（例えばラウンドロビン（round-robin）、ファーストインファーストアウト、プリエンプティブスケジューリング（pre-emptive scheduling）など）を同時に使用することにより実行しコンピュータ資源（例えばｖＣＰＵ１２２）にアクセスする複数のプロセスをスケジューリングしディスパッチするように構成される。例えば、ゲストスケジューラ１３３は、高い実行優先順位を有するプロセスが低い優先順位を有するプロセスよりも多くの時間を許可されるように、プロセスの優先順位を考慮することによりｖＣＰＵ１２２へのアクセスを管理し得る。別の例では、マルチプロセッサ環境（例えば複数のｖＣＰＵ１２２を有するＶＭ）では、ゲストスケジューラ１３３は、他のｖＣＰＵよりビジー状態でないｖＣＰＵ１２２へプロセスをディスパッチし得る。
【００１４】
上述のように、コンピュータシステム１００内で実行するＶＭ１１８は、１乃至多数のｖＣＰＵ１２２１〜１２２Ｎを有するように構成することができる（Ｎ個のｖＣＰＵを有するＶＭはＮ−ウェイ・仮想マシンと呼ばれることもある）。論述のために、本明細書で使用される「大きな」仮想マシンは多くのｖＣＰＵを有する仮想マシンを指し、本明細書で使用される「小さな」仮想マシンはわずかなｖＣＰＵを有する仮想マシンを指す。一実施形態では、ＶＭ１１８は、最大６４のｖＣＰＵを有するように構成され得る。しかし、いくつかの場合には、多くのｖＣＰＵ１２２を有するＶＭ１１８は、内在する物理的ＣＰＵ１０４の利用率、スループット、他の性能メトリックという点で、少ないｖＣＰＵ１２２を有するＶＭ１１８よりも低効率で動作し得る。多くの要因が、大きなＮ−ウェイ・ＶＭの非効率に寄与し得る。未使用ｖＣＰＵは、いくつかのゲストオペレーティングシステムにおいてタイマー割り込み（timer interrupt）を依然として実行し続ける。ゲストスケジューラ１３３は、シングルスレッド作業負荷を複数のｖＣＰＵ間で不必要に移動し得、これによりキャッシュ局所性（cache locality）を失う。ゲストＯＳ１３０は、非活性の期間中に、そうでなければ他の使用のために利用可能な資源を消費することになるアイドルループを実行し得る。ＶＭ内で実行するすべてのｖＣＰＵの仮想メモリについての一貫した見方を維持することは、ゲストＯＳ１３０と内在するハイパーバイザ１１１の両方において追加資源を消費する可能性がある。このような問題のために、システム管理者は、最近のコンピュータアプリケーションの要求がより厳しくなり、ますます大きな仮想マシンを必要としたとしても、２−ウェイＶＭを超えるものを提供することに乗り気でないこともある。このＶＭサイジング問題は、ＶＭ効率（例えば、ユーザに８−ウェイ・ＶＭを与えることで効率問題を引き起こす）とＶＭ機能との間の矛盾を引き起こす（例えば、ユーザに２−ウェイ・ＶＭを与えることで、大きなＶＭを必要とするハイエンドアプリケーションを要求する用途を排除する）。したがって、本開示の実施形態は、ＶＭにより必要とされないｖＣＰＵを動的に「非活性化する」技術（本明細書ではＣＰＵバルーニング（CPU ballooning）と呼ぶ）を提供する。これは、多くの仮想ＣＰＵを有する仮想マシンを実行する効率費用を発生することなく大きなＮ−ウェイ・仮想マシンを提供する。
【００１５】
本開示の実施形態は、ホストであってホスト上で実行する仮想マシンを有するホスト内のＣＰＵ資源を管理するためのＣＰＵバルーニングとして知られた方法またはシステムを提供する。図１は、ゲストＯＳ１３０下において設けられたバルーンドライバ１３１を描写する。一実施形態では、バルーンドライバ１３１は、ゲストＯＳ１３０下で実行するデバイスドライバである。いくつかの実施形態では、バルーンドライバ１３１は定期的に実行する、すなわち、バルーンドライバ１３１はタイマーイベントによりトリガされるまでアイドル状態のままである。実行後、バルーンドライバ１３１は別のタイマーイベントにより再びトリガされるまでアイドル状態に戻る。タイマーイベントの頻度は管理者により設定され得る。バルーンドライバ１３１は、ＶＭ１１８による使用のために利用可能なｖＣＰＵ１２２の数を調整するためにカーネルスケジューラ１１３から情報を得る。バルーンドライバ１３１は、ＶＭ１１８用に活性化されたｖＣＰＵの現在数のカウントを維持するように構成される。例えば、ＶＭ（例えばＶＭ１１８１）が最初に開始されると、バルーンドライバ１３１は、ＶＭ１１８１に割り振られたｖＣＰＵの数と等しいｖＣＰＵの現在数のカウントを設定し、この設定にしたがって、以下に述べられる動作中にカウントをインクリメントおよびディクリメントする。
【００１６】
図１にさらに示すように、カーネルスケジューラ１１３は、ハイパーバイザ１１１の構成要素である。カーネルスケジューラ１１３は、所定時間にコンピュータシステム１００上で実行する様々なプロセス間に物理的ＣＰＵ１０４を割り振ることに関与する。本明細書で使用されるプロセスは、コンピュータプログラムを実行することである。例えば、カーネルスケジューラ１１３は、どのプロセスがＣＰＵ１０４（またはマルチプロセッサコンプレックスにおける多くのＣＰＵのうちの任意のものの）上で実行されるべきかと、このようなプロセスが実行される順序と、どの実行プロセスが高い優先順位を有するプロセスによりプリエンプトされる（preempted）べきかとを判定し得る。そのスケジューリングの判定をなすために、カーネルスケジューラ１１３は、実行の準備ができている一組のプロセスと、現在実行中のプロセスのそれぞれの優先順位と、１つまたは複数のシステム資源を現在待っている一組のプロセスとを含む特定データを使用し得る。
【００１７】
物理的ＣＰＵ１０４へのアクセスの管理に加えて、カーネルスケジューラ１１３は、本明細書に記載のいくつかの実施形態では、特定のＶＭ１１８が所与時点で使用すべきｖＣＰＵ１２２の目標数である目標ｖＣＰＵサイズを決定するように構成される。この目標ｖＣＰＵサイズは、例えばバックドア（backdoor）インタフェースに対する呼び出しを使用することによりゲストＯＳ１３０のバルーンドライバ１３１へ伝達される（方向線１１４により描写される）。次に、バルーンドライバ１３１は、以下にさらに詳細に説明されるように、ゲストスケジューラ１３３がプロセスをディスパッチするｖＣＰＵ１２２の数を調整するためにこの推奨（recommendation）を利用する。例えば、ＶＭ１１８が自由に有するｖＣＰＵ１２２が十分に利用されない場合、バルーンドライバ１３１はＶＭ１１８による使用のために利用可能なｖＣＰＵ１２２の数を低減する。対照的に、カーネルスケジューラ１１３がＶＭ１１８により使用されるｖＣＰＵの数を超えるＶＭ１１８の目標ｖＣＰＵサイズを与えると、バルーンドライバ１３１は、ＶＭ１１８による使用のために利用可能なｖＣＰＵ１２２の数を増加しようと試みる。
【００１８】
図１の構成要素を説明するために使用される様々な用語、層、カテゴリ化は、それらの機能または本開示の精神または範囲から逸脱することなく異なる方法で参照され得るということを認識すべきである。例えば、ＶＭＭ１３４１〜１３４Ｎは、インスタンス化されたＶＭ毎に別個のＶＭＭが存在するのでＶＭ１１８１〜１１８Ｎとハイパーバイザ１１１間の別個の仮想化部品と考えられ得る。または、このようなＶＭＭが仮想マシンのハードウェアエミュレーションの要素を含むので、各ＶＭＭは、その対応する仮想マシンの要素であると考えられ得る。このような代替概念では、例えば、仮想ハードウェアプラットホーム１２０として説明された概念的層はＶＭＭ１３４にマージされ得る。
【００１９】
図２は、特定のＶＭの目標ｖＣＰＵサイズを決定する際にカーネルスケジューラ１１３により実行される工程を描写する流れ図である。図２に示すように、工程２００では、ＶＭにより要求されたｖＣＰＵの数がコンピュータシステム１００の現在のシステム負荷に基づき決定される。一実施形態では、カーネルスケジューラ１１３は、式１に示すように、ｖＣＰＵの要求数を決定する。
【００２０】
【数１】
2014219977.tif 000003
ｖＣＰＵの要求数（すなわちｄｅｍａｎｄｅｄｖｃｐｕｓ）は、（１）ＶＭ１１８に関連付けられたすべてのｖＣＰＵ１２２の全要求（すなわちｄｅｍａｎｄＶＭ）と、（２）ＶＭ１１８に関連付けられたすべてのｖＣＰＵ１２２の予想利用率（すなわちｅｘｐｅｃｔｅｄＵｔｉｌＲａｔｉｏＶＭ）とに基づく。
【００２１】
一実施形態では、ｖＣＰＵの要求は、「奪われた」時間（stolen time）が無い場合にｖＣＰＵが消費することができる時間である。ｖＣＰＵの奪われた時間は、準備時間、オーバーラップサイクル、パワーマネージメントに対する時間損失、ハイパースレッディング（Hyper-threading）により奪われた時間、および他の変数を含む。準備時間は、システムが他のｖＣＰＵを実行するのにビジーであるので、ｖＣＰＵは実行可能であるが物理的ｖＣＰＵ上で実行するようにスケジュールされていない時間の量である。オーバーラップサイクルは、割り込みと、このｖＣＰＵの実行をプリエンプトしたボトムハーフ（BHs:bottom halves）とにより奪われた時間の量である。パワーマネージメントによる損失時間は、周波数スケーリングのための効率損失を表す。例えば、周波数が公称周波数の２０パーセントまで落ちると、ＣＰＵの８０パーセントが奪われたと考えられる。ハイパースレッディング（hyper-threading）に対する時間損失は、パートナーである物理的ＣＰＵ上で実行する作業負荷により奪われた時間を表す。
【００２２】
ｖＣＰＵの要求は、実際に使用されるサイクルの量と、「奪われた」サイクルが無い場合にｖＣＰＵが使用していたであろうサイクルの量とに基づき推定され得る。一実施形態によると、ＶＭ１１８に関連付けられたｖＣＰＵの全要求（すなわちｄｅｍａｎｄＶＭ）は、式２のように計算される。
【００２３】
【数２】
2014219977.tif 000004
式２が示すように、ｖＣＰＵ１２２の要求は、（１）所定期間内にＶＭ１１８内で実行するｖＣＰＵ１２２により使用されるサイクルの百分率（すなわちＣｙｃｌｅｓＵｓｅｄｖｃｐｕ）、（２）所定期間にＶＭ１１８内で実行するｖＣＰＵ１２２から「奪われた」サイクルの百分率（すなわちＣｙｃｌｅｓＳｔｏｌｅｎｖｃｐｕ）、および（３）同じ期間に実行するための容量をｖＣＰＵ１２２が有するサイクルの百分率（すなわちＣｙｃｌｅｓＣａｐａｃｉｔｙｖｃｐｕ）に基づく。ｖＣＰＵ１２２により使用されるサイクルは、当該ｖＣＰＵ１２２が命令を実行するサイクルである。対照的に、ｖＣＰＵ１２２から奪われたサイクルは、ｖＣＰＵ１２２が実行すべき命令を有するサイクルであるが、例えばシステム負荷のためにそれらの命令を実行することからプリエンプトされる。奪われたサイクルの例としては、ｖＣＰＵ１２２は実行準備されたが、他のＶＭのプロセスを実行するコンピュータシステム１００のためにディスパッチされなかったサイクルと、ｖＣＰＵ１２２が外部割り込みを処理するコンピュータシステム１００によりプリエンプトされたサイクルとが挙げられる。最後に、ｖＣＰＵ１２２の容量（すなわちＣｙｃｌｅｓＣａｐａｃｉｔｙｖｃｐｕ）は、ｖＣＰＵ１２２が「奪われた」サイクルが無い場合に所定期間にわたって消費する能力を有するサイクルの百分率である。さらに、ＶＭ１１８の要求（すなわちｄｅｍａｎｄＶＭ）は、ＶＭ１１８内で実行するｖＣＰＵ１２２の要求の合計である。
【００２４】
式２に示すように、使用されるサイクルの百分率（ＣｙｃｌｅｓＵｓｅｄｖｃｐｕ）は、ｖＣＰＵ１２２の奪われたサイクルの百分率（ＣｙｃｌｅｓＳｔｏｌｅｎｖｃｐｕ）とｖＣＰＵの所定期間にわたる容量（ＣｙｃｌｅＣａｐａｃｉｔｙｖｃｐｕ）の積に加算され、その結果はｖＣＰＵの現在の要求（ｄｅｍａｎｄｖｃｐｕ）として使用される。例えば、所定期間にわたるＶＭ１１８内で実行するｖＣＰＵ１２２により使用されるサイクルの百分率が３０であり、所定期間にわたるｖＣＰＵ１２２から奪われたサイクルの百分率が５０であり、単一ｖＣＰＵ１２２の容量がその同じ期間にわたって４０パーセントである場合、ｖＣＰＵ１２２の現在の要求は３０＋５０×４０％となり、５０パーセントに等しい。
【００２５】
予想利用率（すなわちｅｘｐｅｃｔｅｄＵｔｉｌＲａｔｉｏＶＭ）は、ハイパーバイザ１１１によりインスタンス化されたＶＭ毎に構成可能な値であり、ＶＭ１１８のｖＣＰＵ１２２が有すべきかつ、許容可能な性能を依然として提供すべき利用率（百分率表現）を表す。予想利用率は、管理者によりＶＭ１１８が構成されるときに設定され、ＶＭ１１８の実行中に変更され得る。例えば、予想利用率は、システム利用が７０％以下のときにＶＭ内で実行するアプリケーションが十分に動作し続け得るという判定に基づき、７０％として構成され得る。
【００２６】
ＶＭ１１８上の現在の要求（ｄｅｍａｎｄＶＭ）とＶＭ１１８の予想利用率（ｅｘｐｅｃｔｅｄＵｔｉｌＲａｔｉｏＶＭ）が決定されると、カーネルスケジューラ１１３は、ｖＣＰＵ１２２の要求数（すなわちｄｅｍａｎｄｅｄｖｃｐｕｓ）を式１のように計算する。例えば、ＶＭ１１８が１１０％の現在要求と７０％の予想利用率を有すると、ｖＣＰＵ１２２の要求数は２となる（［１１０／７０］＝２であるので）。
【００２７】
工程２１０では、カーネルスケジューラ１１３は、ＶＭ用に構成されたｖＣＰＵの数とｖＣＰＵの準備時間の量とに基づき、所与のＶＭに付与されるｖＣＰＵの数を決定する。所与のＶＭの有効なＣＰＵ資源権利は、例えばＶＭを実行するシステムがオーバーコミットされた場合、またはＶＭの資源割振りが小さい場合、またはその両方の場合、その要求よりも小さくてもよい。したがって、このような場合には少ないｖＣＰＵを有するＶＭを実行する方が効率的であり得ると判定された。一実施形態では、カーネルスケジューラ１１３は、残りのｖＣＰＵが少ない準備時間を有するようにＶＭ用の低減された数のｖＣＰＵを決定し、これにより、より効率的に実行する。
【００２８】
一実施形態では、カーネルスケジューラ１１３は、ＶＭ１１８に付与されるｖＣＰＵの有効数（すなわちｅｎｔｉｔｌｅｄｖｃｐｕｓ）を下記の式３により決定する。
【００２９】
【数３】
2014219977.tif 000005
いくつかの実施形態では、カーネルスケジューラ１１３は、ＶＭ１１８用に定義されるｖＣＰＵ１２２の数（すなわちｎｕｍｖｃｐｕｓ）（ＶＭ１１８が構成された時点で設定される）を最初に記録することにより、ＶＭ１１８に付与されるｖＣＰＵ１２２の数（すなわちｅｎｔｉｔｌｅｄｖｃｐｕｓ）を決定する。次に、カーネルスケジューラ１１３は、ＶＭのすべてのｖＣＰＵの準備時間の量を決定する。上述のように、準備時間は、ＶＭが実行したいが実行するための物理的ＣＰＵ資源が提供されていない時間である。一実施形態では、準備時間は百分率形式で表され得る、例えば、５％（すなわち０．０５）の準備時間を有するＶＭは、利用可能なＣＰＵ資源を待つその最後のサンプル期間の５％をＶＭが費やしたことを意味する。したがって、一例では、８−ウェイ・ＶＭがレディ（ＲＥＡＤＹ）状態に時間の２００パーセントを費やせば、権利を付与されるＣＰＵの数は６である（８−｜２．００｜＝６であるので）。
【００３０】
工程２２０では、カーネルスケジューラ１１３は、ｖＣＰＵの要求数（式１において計算されるｄｅｍａｎｄｅｄｖｃｐｕｓ）と特定のＶＭのｖＣＰＵの付与数（式３において計算されるｅｎｔｉｔｌｅｄｖｃｐｕｓ）とのうちの少ない方に基づいて、式４に記載されるように、特定のＶＭ１１８の目標ｖＣＰＵサイズ（すなわちｔａｒｇｅｔｖｃｐｕｓ）を決定する。
【００３１】
【数４】
2014219977.tif 000006
図３は、その周期的実行サイクルのうちの１サイクル中にバルーンドライバ１３１により実行される工程を示す流れ図である。最初に、バルーンドライバ１３１はタイマーイベントによりトリガされた後「ウェイクアップする（wake up）」。工程３００では、バルーンドライバ１３１は、ハイパーバイザ１１１（特にカーネルスケジューラ１１３を有する）と通信し、カーネルスケジューラ１１３がＶＭ１１８用に計算した目標ｖＣＰＵサイズを受信する。この目標ｖＣＰＵサイズは、カーネルスケジューラ１１３の見積もりの際にＶＭ１１８がその仮想ハードウェアプラットホーム１２０において使用すべきｖＣＰＵ１２２の数を表す。次に、工程３０５では、バルーンドライバ１３１は、この目標ｖＣＰＵサイズとＶＭ１１８が現在使用しているｖＣＰＵ１２２の数とを比較する。ＶＭ１１８が現在使用しているｖＣＰＵ１２２の数が目標ｖＣＰＵサイズを超える場合、工程３２０においてバルーンドライバ１３１は、受信された目標ｖＣＰＵサイズに基づき１つまたは複数のバルーンスレッド（balloon thread）を立ち上げる。工程３２５では、バルーンドライバ１３１は、バルーンスレッドが実行することになる１つまたは複数のｖＣＰＵ１２２を規定する（すなわち、バルーンドライバ１３１がスレッドをｖＣＰＵ１２２に「ピン留めする（pin）」）。このとき、各バルーンスレッドは１つのｖＣＰＵ１２２にピン留めされる。
【００３２】
一実施形態では、バルーンスレッドは、ゲストＯＳ１３０のゲストスケジューラ１３３がｖＣＰＵ１２２１をスケジューリング目的のために利用不能と認識するように、特定のｖＣＰＵ（例えばｖＣＰＵ１）を占有するように構成されるスレッドである。いくつかの実施形態では、バルーンスレッドは、ゲストスケジューラ１３３が特定のｖＣＰＵ上のバルーンスレッドの実行をプリエンプトも中断もし得ないように、ゲストＯＳ１３０内で実行する他の処理に比べて高いプロセス優先順位を有する優先プロセススレッドである。いくつかの実施形態では、バルーンスレッドは、カーネルスレッド、軽量プロセス（LWP : lightweight process）、またはゲストＯＳ１３０内で実行する他のプロセスであり得る。バルーンドライバ１３１はさらに、非活性化対象のｖＣＰＵへ「ピン留めされる」バルーンスレッドを構成し得る。例えば、バルーンドライバ１３１は、バルーンスレッドが特定のｖＣＰＵに拘束されるべきであるということをゲストスケジューラ１３３にシグナリングするプロセッサ親和性設定（processor affinity setting）をバルーンスレッドに対し設定し得る。バルーンスレッドは終了するまで実行を継続するように構成される。
【００３３】
一実施形態では、バルーンスレッドがピン留めされた特定のｖＣＰＵ１２２はスケジュール解除されるべきであるということをハイパーバイザ１１１へ伝達するために、バルーンスレッドはさらに、アイドル命令を実行するように構成され得る。したがって、ハイパーバイザ１１１は、特定のｖＣＰＵ１２２を維持するオーバーヘッドを発生しない。一例では、優先プロセススレッド（バルーンスレッド）は停止命令を含む。１つの特定の実施形態では、バルーンスレッドは、より多くの仕事を行う必要があるまで処理装置（例えばｖＣＰＵ１２２）を停止させるコンピュータ命令を有し得る。これにより、処理装置は停止状態（すなわちレディ状態）に移行する。ｘ８６コンピュータアーキテクチャのバルーンスレッドの実施形態の例を以下の表１に擬似コードとして示す。
【００３４】
【表１】
2014219977.tif 000007
表１  バルーンスレッドのサンプル擬似コード
示されるように、バルーンスレッドは、ＨＬＴ命令（より多くの仕事を行う必要があるまで処理装置を停止させるアセンブリ言語命令）を繰り返し発行するループとして（例えば、割り込み駆動型プロセッサ内で次の外部割り込みが発射されるまで）実施され得る。他の実施形態では、バルーンスレッドは、スリープモード、ＭＯＮＩＴＯＲ、ＭＷＡＩＴまたは他の機能的に等価な命令を含み得る。いくつかの実施形態では、ハイパーバイザ１１１は、アイドル命令を実行しているＶＭ１１８上で実行する任意のゲストプロセスを検知し、アイドル命令が実行されている任意のｖＣＰＵを、物理的ＣＰＵ上での実行からスケジュール解除するように構成される。これらの実施形態では、バルーンスレッド内のＨＬＴ命令は、バルーンスレッドを実行する特定のｖＣＰＵ１２２がスケジュール解除され得るということをハイパーバイザ１１１のカーネルスケジューラ１１３へ伝達する役目を果たす。したがって、ゲストスケジューラ１３３の観点からは、立ち上げられたバルーンスレッドはｖＣＰＵを生じない高優先順位スレッドである。その一方で、カーネルスケジューラ１１３の観点からは、ｖＣＰＵはバルーンスレッドのアイドルループにより停止され、物理的ＣＰＵからスケジュール解除され得る。
【００３５】
一実施形態では、バルーンドライバ１３１は、ｖＣＰＵの目標数とｖＣＰＵの現在数との差を満たすためにある数のバルーンスレッドを立ち上げる。各バルーンスレッドを立ち上げ、ピン留めした後、バルーンドライバは、仮想マシン用に活性化されたｖＣＰＵの現在数のカウントを更新する。例えば、バルーンドライバ１３１は、立ち上げられたバルーンスレッド毎のＶＭ用に活性化された仮想ＣＰＵの現在数のカウントをディクリメントし得る。
【００３６】
工程３００では、バルーンドライバ１３１が、カーネルスケジューラ１１３から、ＶＭ１１８により現在使用中のｖＣＰＵ１２２の数を超えるｖＣＰＵ１２２の目標数を受信すると、工程３４０において、バルーンドライバ１３１は、以前に立ち上げられたバルーンスレッドがｖＣＰＵ１２２の１つへピン留めされたかどうかを判定する。このようなバルーンスレッドが立ち上げられ、ｖＣＰＵ１２２上で現在実行中であれば、工程３４５において、バルーンドライバ１３１は、ゲストＯＳ１３０内のバルーンスレッドの実行を停止（kill）する。この停止は、ゲストスケジューラ１３３の観点からは他のプロセスをスケジューリングするために当該ｖＣＰＵ１２２を解放することになる。さらに、バルーンドライバ１３１は、プロセススケジューリングのための追加のｖＣＰＵ１２２を解放するために可能な限り多くのバルーンスレッドの実行を停止する。一実施形態では、バルーンスレッドを停止することに応答して、バルーンドライバは、仮想マシン用に活性化されたｖＣＰＵの現在数のカウントを更新する。例えば、バルーンドライバ１３１は、停止されたバルーンスレッド毎にＶＭ用に活性化された仮想ＣＰＵの現在数のカウントをインクリメントし得る。
【００３７】
前述の工程を実行した後、バルーンドライバ１３１は、タイマー割り込みにより再びトリガされるまで、アイドル状態（すなわち「スリープ」）に戻る。
図４Ａは、プロセスがゲストスケジューラ１３３によりスケジュールされ且つディスパッチされる４つの割り振られたｖＣＰＵ１２２１〜１２２４を有するＶＭ１１８１のブロック図である。ゲストＯＳ１３０のゲストスケジューラ１３３は、１つまたは複数のｖＣＰＵ１２２１〜１２２Ｎ上でコンピュータ命令を実行するプロセス（すなわちスレッド）に時間を割り振る。図４Ａに描写された領域４０２は、命令を実行する各ｖＣＰＵにより費やされた時間の一部としての、各ｖＣＰＵに関連付けられた要求の量を表す。示された例では、ｖＣＰＵはプロセスとスレッドを実行するために使用される要求とサイクルの量が変化し得るということを認識すべきであるが、複数のｖＣＰＵ間の負荷バランスはゲストスケジューラ１３３により行われ、各ｖＣＰＵに対する同様な要求量を生じる。
【００３８】
図４Ｂは、４つのｖＣＰＵ１２２１〜１２２４を有するＶＭ１１８１のブロック図である。４つのｖＣＰＵ１２２１〜１２２４上では、ＶＭ１１８１がハイパーバイザ１１１により推奨されたｖＣＰＵ１２２の目標数よりも多くのｖＣＰＵ１２２を利用しているとバルーンドライバ１３１が判定した場合、プロセスはゲストスケジューラ１３３によりスケジュールされてｖＣＰＵ１２２１〜１２２４のうちの１つまたは複数へディスパッチされる。この例示では、バルーンドライバ１３１は、線４０８により描写するようにハイパーバイザ１１１と通信し（例えばバックドアコールを介し）、ＶＭ１１８１が利用すべきｖＣＰＵ１２２の目標数を受信する。バルーンドライバ１３１は、ｖＣＰＵ１２２のこの目標数と、ＶＭ１１８１により活性化され且つＶＭ１１８１による使用のために利用可能であるｖＣＰＵ１２２の現在数とを比較する。バルーンドライバ１３１は、使用中のｖＣＰＵ１２２の現在数がｖＣＰＵ１２２の目標数を超える場合、１つまたは複数のバルーンスレッド４０４を立ち上げる。示された例では、バルーンドライバ１３１は、ＶＭのｖＣＰＵの目標数が３つのｖＣＰＵである（ｖＣＰＵの現在数を超えている（例えば、初めに割り振られた、４））と判定し、１つのバルーンスレッド４０４を立ち上げる。
【００３９】
バルーンドライバ１３１は、非活性化対象の特定のｖＣＰＵ（例えばｖＣＰＵ１２２４）に対するバルーンスレッド４０４のプロセッサ親和性を規定し、これによりバルーンスレッドをこのｖＣＰＵにピン留めする。さらに、バルーンスレッド４０４は、ゲストＯＳ１３０上で実行する他のプロセスとスレッドに比較して高優先順位を有するカーネルスレッドであり得、したがって特定のｖＣＰＵ１２２４上の他のすべてのプロセスをプリエンプトする。したがって、ゲストスケジューラ１３３は、規定優先順位を有するｖＣＰＵ１２２４上にバルーンスレッド４０４をディスパッチする。いくつかの実施形態では、ゲストスケジューラ１３３は、ｖＣＰＵ４上に他のプロセスをディスパッチし得ないということを認識すべきである。バルーンスレッド４０４によるｖＣＰＵ１２２４の占有（これによってバルーンスレッド４０４がｖＣＰＵ１２２４のＣＰＵサイクルのすべてを利用する）は図４Ｂでは領域４０６により描写される。ゲストスケジューラ１３３は、ｖＣＰＵ１２２４上で前に実行していたそれらのプロセスとスレッドを含むプロセスとスレッドを残りの利用可能なｖＣＰＵ１２２１〜１２２３上にディスパッチし再スケジュールする。図４Ｂに描写された領域４１０は、もはや利用可能でないｖＣＰＵ１２２４の結果としての各ｖＣＰＵ１２２１、１２２２、１２２３に対する要求の増加を表す。したがって、本開示の実施形態は、ＶＭをシャットダウンするかまたはオフラインにする必要無く、要求に基づきｖＣＰＵを効果的に非活性化した。
【００４０】
１つまたは複数の実施形態が理解の明確のために少し詳しく本明細書では説明されたが、いくつかの変更と修正が本開示の精神から逸脱することなくなされ得るということを認識すべきである。例えば、いくつかの実施形態では、ゲストオペレーティングシステム１３０は、オンラインおよびオフラインの動的ＣＰＵを支援するように構成され得る。このような実施形態では、バルーンスレッドを立ち上げるのではなく、バルーンドライバ１３１は、ゲストＯＳ１３０内のＶＭのｖＣＰＵの数を調整するように構成され得る。一実施形態では、バルーンドライバ１３１は、目標ｖＣＰＵサイズをデバイスドライバファイルシステム（例えばｓｙｓｆｓ）へ書き込むこと（／ｓｙｓ／ｄｅｖｉｃｅｓ／ｓｙｓｔｅｍ／ｃｐｕ／ｃｕｐｉｄ／ｏｎｌｉｎｅ  ｓｙｓノードに対する変更など）により、リナックスゲストオペレーティングシステムを実行するＶＭのｖＣＰＵの数を調整し得る。
【００４１】
本明細書に記載の様々な実施形態は、コンピュータシステム内に格納されたデータに関わる様々なコンピュータ実施型動作を採用し得る。例えば、これらの動作は物理量の物理的操作を必要とし得る。通常、必ずしもではないが、これらの量は電気的または磁気的信号の形式を取り得、これらまたはその表現は格納され、転送され、合成され、比較され、またはそうでなければ操作されることができる。さらに、このような操作は、生成、付与、識別、判定、または比較などの用語でしばしば参照される。本開示の１つまたは複数の実施形態の一部をなす本明細書に記載の任意の動作は、有用な機械操作であり得る。加えて、本開示の１つまたは複数の実施形態はまた、これらの動作を実行するためのデバイスまたは装置に関する。上記装置は、特別に必要な目的のために特に構築され得る、またはコンピュータ内に格納されたコンピュータプログラムにより選択的に活性化または構成される汎用コンピュータデバイスであり得る。特に、様々な汎用マシンは本明細書の教示に従って書かれたコンピュータプログラムと共に使用され得るか、または必要な動作を実行するためにより専用化された装置を構築することがより便利な場合もある。
【００４２】
本明細書に記載の様々な実施形態は、携帯型デバイス、マイクロプロセッサシステム、マイクロプロセサベースまたはプログラム可能民生電子機器、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピュータシステム構成と共に実施され得る。
【００４３】
本開示の１つまたは複数の実施形態は、１つまたは複数のコンピュータプログラム、または１つまたは複数のコンピュータ読み取り可能媒体内に具現化された１つまたは複数のコンピュータプログラムモジュールとして実施され得る。用語「コンピュータ読み取り可能媒体」は、その後コンピュータシステムに入力されることができるデータを格納することができる任意のデータ記憶装置を指す。コンピュータ読み取り可能媒体は、コンピュータプログラムをコンピュータにより読まれることを可能にする方法で具現する任意の既存技術または今後開発される技術に基づき得る。コンピュータ読み取り可能媒体の例としては、ハードディスク駆動装置、ネットワーク付属記憶装置（NAS : network attached storage）、読み取り専用メモリ、ランダムアクセスメモリ（例えばフラッシュメモリ装置）、ＣＤ（コンパクトディスク）、ＣＤ−ＲＯＭ、ＣＤ−ＲまたはＣＤ−ＲＷ、ＤＶＤ（デジタルバーサタイルディスク）、磁気テープ、他の光学的および非光学的データ記憶装置が挙げられる。コンピュータ読み取り可能媒体はまた、コンピュータ可読コードが分散された方法で格納され実行されるように、ネットワーク結合されたコンピュータシステム上に分散されることができる。
【００４４】
本開示の１つまたは複数の実施形態は理解の明確のために少し詳しく説明されたが、いくつかの変更と修正が本開示の範囲内でなされ得るということは明らかである。したがって、記載の実施形態は例示的であって限定的ではないと考えるべきであり、特許請求の範囲は本明細書に記載された詳細に限定されず、請求項の範囲と均等物のなかで修正され得る。特許請求の範囲において、要素および／または工程は特許請求の範囲に明示的に示されない限り動作の任意の特定の順序を意味しない。
【００４５】
様々な実施形態による仮想化システムは、ホストされた実施形態、ホストされない実施形態、またはこれら２つの差異をあいまいにする傾向がある実施形態として実施されてもよく、すべて想定される。さらに、様々な仮想化動作は、ハードウェアで完全にまたは部分的に実施され得る。例えば、ハードウェア実施形態は、非ディスクデータを安全にするために記憶装置アクセス要求の修正のための参照テーブルを採用し得る。
【００４６】
仮想化の程度にかかわらず、多くの変形、修正、追加、改良が可能である。したがって、仮想化ソフトウェアは、仮想化機能を実行するホスト、コンソール、またはゲストオペレーティングシステムの部品を含むことができる。単一インスタンスとして本明細書に記載の部品、動作、または構造に対し複数のインスタンスが設けられ得る。最後に、様々な部品、動作、データ記憶装置間の境界は多少任意的であり、特定の動作は特定の例示的構成の文脈の中で示されている。機能の他の割り振りが想定され、本開示の範囲に入り得る。一般的に、例示的構成において別個の部品として提示された構造と機能は組み合わせられた構造または部品として実現され得る。同様に、単一構成部品として提示された構造と機能は別々の部品として実現され得る。これらおよび他の変形形態、修正形態、追加形態、改良形態は添付特許請求の範囲に入り得る。
【符号の説明】
【００４７】
１００  コンピュータシステム
１０２  ハードウェアプラットホーム
１０４  ＣＰＵ
１０８  ネットワークインタフェース
１１０  記憶装置
１１１  ハイパーバイザ
１１３  カーネルスケジューラ
１１４  方向線
１１８  仮想マシン
１２０  仮想ハードウェアプラットホーム
１２２  仮想ＣＰＵ
１２４  仮想ランダムアクセスメモリ
１２６  仮想ネットワークインタフェースアダプタ
１２８  仮想記憶装置
１３０  ゲストオペレーティングシステム
１３１  バルーンドライバ
１３２  アプリケーション
１３３  ゲストスケジューラ
１３４  仮想マシンモニタ
２００、２１０、２２０、３００、３０５、３２０、３２５、３３０、３４０、３４５  工程
４０２  要求の量
４０４  バルーンスレッド
４０６  占有領域
４１０  要求の増加
４０８  線
【図１】
2014219977.tif 000008
【図２】
2014219977.tif 000009
【図３】
2014219977.tif 000010
【図４Ａ】
2014219977.tif 000011
【図４Ｂ】
2014219977.tif 000012