(58)【調査した分野】(Int.Cl.,DB名)
ホストコンピュータシステムの複数の物理CPU上で実行する仮想マシンの複数の仮想CPUのスケジュールと、前記ホストコンピュータシステムの複数の物理CPU上での実行からの前記仮想マシンの前記複数の仮想マシンのスケジュール解除とを管理する仮想化層によりホストコンピュータシステム上で実行される方法であって、
現在のシステム負荷に基づいて仮想マシンによって要求される仮想CPUの数に等しい仮想CPUの要求数を決定すること、
前記仮想マシンが付与された仮想CPUの数である仮想CPUの付与数を決定すること、
前記仮想マシンに対する仮想CPUの目標数は、前記仮想CPUの要求数と前記仮想CPUの付与数とのうち少ない方として決定すること、
前記仮想CPUの目標数を前記仮想マシンに通知すること、
前記仮想CPUの目標数と前記仮想マシン用に活性化されている仮想CPUの現在の数とを比較すること、
比較結果に基づいて、1つ以上の仮想CPUをスケジューリングするかまたはスケジュール解除して、前記仮想マシン用に活性化される仮想CPUの目標数を達成すること、を備える方法。
前記仮想CPUの要求数は、前記仮想マシンの前記複数の仮想CPUに対する全要求と、前記仮想マシンの前記複数の仮想CPUの予想利用率とに基づいて決定される、請求項1に記載の方法。
各仮想CPUの準備時間は、前記複数の物理CPUが他の仮想CPUを実行するのにビジーであるので、仮想CPUが実行可能であるが物理CPU上で実行するようにスケジュールされていない時間の量である、請求項3に記載の方法。
前記仮想プロセッサの要求数は、前記仮想マシンの前記複数の仮想プロセッサに対する全要求と、前記仮想マシンの前記複数の仮想プロセッサの予想利用率とに基づいて決定される、請求項8に記載のコンピュータシステム。
前記仮想プロセッサの付与数は、前記仮想マシンに設定された仮想プロセッサの数と、前記仮想プロセッサの準備時間の量とに基づいて決定される、請求項9に記載のコンピュータシステム。
前記準備時間は、前記複数の物理プロセッサが他の仮想プロセッサを実行するのにビジーであるので、仮想プロセッサが実行可能であるが物理プロセッサ上で実行するようにスケジュールされていない時間の量である、請求項10に記載のコンピュータシステム。
【発明を実施するための形態】
【0009】
本開示の態様はプロセス、装置、システム、デバイス、コンピュータ読み取り可能媒体上の方法など多くの方法で実施されることができるということを理解すべきである。本開示のいくつかの実施形態について以下に説明する。
【0010】
図1は、実施形態が実施され得る仮想化コンピュータアーキテクチャを表すコンピュータシステム100のブロック図を描写する。図示のように、コンピュータシステム100は、共通のハードウェアプラットホーム102上で実行し共通のハードウェアプラットホーム102を共有する複数の仮想マシン(VM)118
1〜118
Nをホストする。ハードウェアプラットホーム102は、1つまたは複数の中央処理装置(CPU : central processing unit)104、ランダムアクセスメモリ(RAM : random access memory)106、1つまたは複数のネットワークインタフェース108、および固定記憶装置110など従来のコンピュータハードウェアの構成要素を含む。
【0011】
以下では、ハイパーバイザ111と呼ばれる仮想化ソフトウェア層が、ハードウェアプラットホーム102上に設けられる。ハイパーバイザ111は、1つまたは複数のVM118
1〜118
Nの並列インスタンス化と実行を可能にする。VM118とハイパーバイザ111との相互作用は、仮想マシンモニタ(VMM : virtual machine monitor)により容易にされる。各VMM134
1〜134
Nは、対応するVM118
1〜118
Nに割り当てられ、対応するVM118
1〜118
Nを監視する。一実施形態では、ハイパーバイザ111は、米国カリフォルニア州パロアルトのVMware(商標)社から入手可能なVMwareのvSphere(登録商標)仮想化製品の商品として実装されるVMkernel(商標)であり得る。別の実施形態では、ホストオペレーティングシステムは、ハイパーバイザ111とハードウェアプラットホーム102との間に設けられる。このような実施形態では、ハイパーバイザ111は、ホストオペレーティングシステムにより提供される抽象化レベル上で動作する。
【0012】
インスタンス化(instantiation)後、各VM118
1〜118
Nは、ハイパーバイザ111の制御下で実行される物理的コンピュータプラットホームを隠蔽する(encapsulate)。VM118の仮想デバイス(virtual device)は、これらに限定しないが、1つまたは複数の仮想中央処理装置(virtual CPU)(vCPU)122
1〜122
N、仮想ランダムアクセスメモリ(vRAM)124、仮想ネットワークインタフェースアダプタ(vNIC)126、および仮想記憶装置(vStorage)128からなる仮想ハードウェアプラットホーム120内に具現される。仮想ハードウェアプラットホーム120は、アプリケーション132を実行することができるゲストオペレーティングシステム(ゲストOS)130の実装(installation)を支援する。ゲストOS130の例としては、マイクロソフトウインドウズ(登録商標)、リナックス(登録商標)などの周知の汎用オペレーティングシステムの任意のものが挙げられる。
【0013】
図1に示す実施形態では、ゲストOS130は、複数のコンピュータタスク(プロセスと呼ばれる)が同じ期間中に行われ共通の処理資源を共有する方法であるマルチタスキング(multitasking)を支援するスケジューラ部品(ゲストスケジューラ133として描写される)を含む。ゲストスケジューラ133は、様々なアルゴリズム(例えばラウンドロビン(round-robin)、ファーストインファーストアウト、プリエンプティブスケジューリング(pre-emptive scheduling)など)を同時に使用することにより実行しコンピュータ資源(例えばvCPU122)にアクセスする複数のプロセスをスケジューリングしディスパッチするように構成される。例えば、ゲストスケジューラ133は、高い実行優先順位を有するプロセスが低い優先順位を有するプロセスよりも多くの時間を許可されるように、プロセスの優先順位を考慮することによりvCPU122へのアクセスを管理し得る。別の例では、マルチプロセッサ環境(例えば複数のvCPU122を有するVM)では、ゲストスケジューラ133は、他のvCPUよりビジー状態でないvCPU122へプロセスをディスパッチし得る。
【0014】
上述のように、コンピュータシステム100内で実行するVM118は、1乃至多数のvCPU122
1〜122
Nを有するように構成することができる(N個のvCPUを有するVMはN−ウェイ・仮想マシンと呼ばれることもある)。論述のために、本明細書で使用される「大きな」仮想マシンは多くのvCPUを有する仮想マシンを指し、本明細書で使用される「小さな」仮想マシンはわずかなvCPUを有する仮想マシンを指す。一実施形態では、VM118は、最大64のvCPUを有するように構成され得る。しかし、いくつかの場合には、多くのvCPU122を有するVM118は、内在する物理的CPU104の利用率、スループット、他の性能メトリックという点で、少ないvCPU122を有するVM118よりも低効率で動作し得る。多くの要因が、大きなN−ウェイ・VMの非効率に寄与し得る。未使用vCPUは、いくつかのゲストオペレーティングシステムにおいてタイマー割り込み(timer interrupt)を依然として実行し続ける。ゲストスケジューラ133は、シングルスレッド作業負荷を複数のvCPU間で不必要に移動し得、これによりキャッシュ局所性(cache locality)を失う。ゲストOS130は、非活性の期間中に、そうでなければ他の使用のために利用可能な資源を消費することになるアイドルループを実行し得る。VM内で実行するすべてのvCPUの仮想メモリについての一貫した見方を維持することは、ゲストOS130と内在するハイパーバイザ111の両方において追加資源を消費する可能性がある。このような問題のために、システム管理者は、最近のコンピュータアプリケーションの要求がより厳しくなり、ますます大きな仮想マシンを必要としたとしても、2−ウェイVMを超えるものを提供することに乗り気でないこともある。このVMサイジング問題は、VM効率(例えば、ユーザに8−ウェイ・VMを与えることで効率問題を引き起こす)とVM機能との間の矛盾を引き起こす(例えば、ユーザに2−ウェイ・VMを与えることで、大きなVMを必要とするハイエンドアプリケーションを要求する用途を排除する)。したがって、本開示の実施形態は、VMにより必要とされないvCPUを動的に「非活性化する」技術(本明細書ではCPUバルーニング(CPU ballooning)と呼ぶ)を提供する。これは、多くの仮想CPUを有する仮想マシンを実行する効率費用を発生することなく大きなN−ウェイ・仮想マシンを提供する。
【0015】
本開示の実施形態は、ホストであってホスト上で実行する仮想マシンを有するホスト内のCPU資源を管理するためのCPUバルーニングとして知られた方法またはシステムを提供する。
図1は、ゲストOS130下において設けられたバルーンドライバ131を描写する。一実施形態では、バルーンドライバ131は、ゲストOS130下で実行するデバイスドライバである。いくつかの実施形態では、バルーンドライバ131は定期的に実行する、すなわち、バルーンドライバ131はタイマーイベントによりトリガされるまでアイドル状態のままである。実行後、バルーンドライバ131は別のタイマーイベントにより再びトリガされるまでアイドル状態に戻る。タイマーイベントの頻度は管理者により設定され得る。バルーンドライバ131は、VM118による使用のために利用可能なvCPU122の数を調整するためにカーネルスケジューラ113から情報を得る。バルーンドライバ131は、VM118用に活性化されたvCPUの現在数のカウントを維持するように構成される。例えば、VM(例えばVM118
1)が最初に開始されると、バルーンドライバ131は、VM118
1に割り振られたvCPUの数と等しいvCPUの現在数のカウントを設定し、この設定にしたがって、以下に述べられる動作中にカウントをインクリメントおよびディクリメントする。
【0016】
図1にさらに示すように、カーネルスケジューラ113は、ハイパーバイザ111の構成要素である。カーネルスケジューラ113は、所定時間にコンピュータシステム100上で実行する様々なプロセス間に物理的CPU104を割り振ることに関与する。本明細書で使用されるプロセスは、コンピュータプログラムを実行することである。例えば、カーネルスケジューラ113は、どのプロセスがCPU104(またはマルチプロセッサコンプレックスにおける多くのCPUのうちの任意のものの)上で実行されるべきかと、このようなプロセスが実行される順序と、どの実行プロセスが高い優先順位を有するプロセスによりプリエンプトされる(preempted)べきかとを判定し得る。そのスケジューリングの判定をなすために、カーネルスケジューラ113は、実行の準備ができている一組のプロセスと、現在実行中のプロセスのそれぞれの優先順位と、1つまたは複数のシステム資源を現在待っている一組のプロセスとを含む特定データを使用し得る。
【0017】
物理的CPU104へのアクセスの管理に加えて、カーネルスケジューラ113は、本明細書に記載のいくつかの実施形態では、特定のVM118が所与時点で使用すべきvCPU122の目標数である目標vCPUサイズを決定するように構成される。この目標vCPUサイズは、例えばバックドア(backdoor)インタフェースに対する呼び出しを使用することによりゲストOS130のバルーンドライバ131へ伝達される(方向線114により描写される)。次に、バルーンドライバ131は、以下にさらに詳細に説明されるように、ゲストスケジューラ133がプロセスをディスパッチするvCPU122の数を調整するためにこの推奨(recommendation)を利用する。例えば、VM118が自由に有するvCPU122が十分に利用されない場合、バルーンドライバ131はVM118による使用のために利用可能なvCPU122の数を低減する。対照的に、カーネルスケジューラ113がVM118により使用されるvCPUの数を超えるVM118の目標vCPUサイズを与えると、バルーンドライバ131は、VM118による使用のために利用可能なvCPU122の数を増加しようと試みる。
【0018】
図1の構成要素を説明するために使用される様々な用語、層、カテゴリ化は、それらの機能または本開示の精神または範囲から逸脱することなく異なる方法で参照され得るということを認識すべきである。例えば、VMM134
1〜134
Nは、インスタンス化されたVM毎に別個のVMMが存在するのでVM118
1〜118
Nとハイパーバイザ111間の別個の仮想化部品と考えられ得る。または、このようなVMMが仮想マシンのハードウェアエミュレーションの要素を含むので、各VMMは、その対応する仮想マシンの要素であると考えられ得る。このような代替概念では、例えば、仮想ハードウェアプラットホーム120として説明された概念的層はVMM134にマージされ得る。
【0019】
図2は、特定のVMの目標vCPUサイズを決定する際にカーネルスケジューラ113により実行される工程を描写する流れ図である。
図2に示すように、工程200では、VMにより要求されたvCPUの数がコンピュータシステム100の現在のシステム負荷に基づき決定される。一実施形態では、カーネルスケジューラ113は、式1に示すように、vCPUの要求数を決定する。
【0020】
【数1】
vCPUの要求数(すなわちdemanded
vcpus)は、(1)VM118に関連付けられたすべてのvCPU122の全要求(すなわちdemand
VM)と、(2)VM118に関連付けられたすべてのvCPU122の予想利用率(すなわちexpectedUtilRatio
VM)とに基づく。
【0021】
一実施形態では、vCPUの要求は、「奪われた」時間(stolen time)が無い場合にvCPUが消費することができる時間である。vCPUの奪われた時間は、準備時間、オーバーラップサイクル、パワーマネージメントに対する時間損失、ハイパースレッディング(Hyper-threading)により奪われた時間、および他の変数を含む。準備時間は、システムが他のvCPUを実行するのにビジーであるので、vCPUは実行可能であるが物理的vCPU上で実行するようにスケジュールされていない時間の量である。オーバーラップサイクルは、割り込みと、このvCPUの実行をプリエンプトしたボトムハーフ(BHs:bottom halves)とにより奪われた時間の量である。パワーマネージメントによる損失時間は、周波数スケーリングのための効率損失を表す。例えば、周波数が公称周波数の20パーセントまで落ちると、CPUの80パーセントが奪われたと考えられる。ハイパースレッディング(hyper-threading)に対する時間損失は、パートナーである物理的CPU上で実行する作業負荷により奪われた時間を表す。
【0022】
vCPUの要求は、実際に使用されるサイクルの量と、「奪われた」サイクルが無い場合にvCPUが使用していたであろうサイクルの量とに基づき推定され得る。一実施形態によると、VM118に関連付けられたvCPUの全要求(すなわちdemand
VM)は、式2のように計算される。
【0023】
【数2】
式2が示すように、vCPU122の要求は、(1)所定期間内にVM118内で実行するvCPU122により使用されるサイクルの百分率(すなわちCyclesUsed
vcpu)、(2)所定期間にVM118内で実行するvCPU122から「奪われた」サイクルの百分率(すなわちCyclesStolen
vcpu)、および(3)同じ期間に実行するための容量をvCPU122が有するサイクルの百分率(すなわちCyclesCapacity
vcpu)に基づく。vCPU122により使用されるサイクルは、当該vCPU122が命令を実行するサイクルである。対照的に、vCPU122から奪われたサイクルは、vCPU122が実行すべき命令を有するサイクルであるが、例えばシステム負荷のためにそれらの命令を実行することからプリエンプトされる。奪われたサイクルの例としては、vCPU122は実行準備されたが、他のVMのプロセスを実行するコンピュータシステム100のためにディスパッチされなかったサイクルと、vCPU122が外部割り込みを処理するコンピュータシステム100によりプリエンプトされたサイクルとが挙げられる。最後に、vCPU122の容量(すなわちCyclesCapacity
vcpu)は、vCPU122が「奪われた」サイクルが無い場合に所定期間にわたって消費する能力を有するサイクルの百分率である。さらに、VM118の要求(すなわちdemand
VM)は、VM118内で実行するvCPU122の要求の合計である。
【0024】
式2に示すように、使用されるサイクルの百分率(CyclesUsed
vcpu)は、vCPU122の奪われたサイクルの百分率(CyclesStolen
vcpu)とvCPUの所定期間にわたる容量(CycleCapacity
vcpu)の積に加算され、その結果はvCPUの現在の要求(demand
vcpu)として使用される。例えば、所定期間にわたるVM118内で実行するvCPU122により使用されるサイクルの百分率が30であり、所定期間にわたるvCPU122から奪われたサイクルの百分率が50であり、単一vCPU122の容量がその同じ期間にわたって40パーセントである場合、vCPU122の現在の要求は30+50×40%となり、50パーセントに等しい。
【0025】
予想利用率(すなわちexpectedUtilRatio
VM)は、ハイパーバイザ111によりインスタンス化されたVM毎に構成可能な値であり、VM118のvCPU122が有すべきかつ、許容可能な性能を依然として提供すべき利用率(百分率表現)を表す。予想利用率は、管理者によりVM118が構成されるときに設定され、VM118の実行中に変更され得る。例えば、予想利用率は、システム利用が70%以下のときにVM内で実行するアプリケーションが十分に動作し続け得るという判定に基づき、70%として構成され得る。
【0026】
VM118上の現在の要求(demand
VM)とVM118の予想利用率(expectedUtilRatio
VM)が決定されると、カーネルスケジューラ113は、vCPU122の要求数(すなわちdemanded
vcpus)を式1のように計算する。例えば、VM118が110%の現在要求と70%の予想利用率を有すると、vCPU122の要求数は2となる([110/70]=2であるので)。
【0027】
工程210では、カーネルスケジューラ113は、VM用に構成されたvCPUの数とvCPUの準備時間の量とに基づき、所与のVMに付与されるvCPUの数を決定する。所与のVMの有効なCPU資源権利は、例えばVMを実行するシステムがオーバーコミットされた場合、またはVMの資源割振りが小さい場合、またはその両方の場合、その要求よりも小さくてもよい。したがって、このような場合には少ないvCPUを有するVMを実行する方が効率的であり得ると判定された。一実施形態では、カーネルスケジューラ113は、残りのvCPUが少ない準備時間を有するようにVM用の低減された数のvCPUを決定し、これにより、より効率的に実行する。
【0028】
一実施形態では、カーネルスケジューラ113は、VM118に付与されるvCPUの有効数(すなわちentitled
vcpus)を下記の式3により決定する。
【0029】
【数3】
いくつかの実施形態では、カーネルスケジューラ113は、VM118用に定義されるvCPU122の数(すなわちnum
vcpus)(VM118が構成された時点で設定される)を最初に記録することにより、VM118に付与されるvCPU122の数(すなわちentitled
vcpus)を決定する。次に、カーネルスケジューラ113は、VMのすべてのvCPUの準備時間の量を決定する。上述のように、準備時間は、VMが実行したいが実行するための物理的CPU資源が提供されていない時間である。一実施形態では、準備時間は百分率形式で表され得る、例えば、5%(すなわち0.05)の準備時間を有するVMは、利用可能なCPU資源を待つその最後のサンプル期間の5%をVMが費やしたことを意味する。したがって、一例では、8−ウェイ・VMがレディ(READY)状態に時間の200パーセントを費やせば、権利を付与されるCPUの数は6である(8−|2.00|=6であるので)。
【0030】
工程220では、カーネルスケジューラ113は、vCPUの要求数(式1において計算されるdemanded
vcpus)と特定のVMのvCPUの付与数(式3において計算されるentitled
vcpus)とのうちの少ない方に基づいて、式4に記載されるように、特定のVM118の目標vCPUサイズ(すなわちtarget
vcpus)を決定する。
【0031】
【数4】
図3は、その周期的実行サイクルのうちの1サイクル中にバルーンドライバ131により実行される工程を示す流れ図である。最初に、バルーンドライバ131はタイマーイベントによりトリガされた後「ウェイクアップする(wake up)」。工程300では、バルーンドライバ131は、ハイパーバイザ111(特にカーネルスケジューラ113を有する)と通信し、カーネルスケジューラ113がVM118用に計算した目標vCPUサイズを受信する。この目標vCPUサイズは、カーネルスケジューラ113の見積もりの際にVM118がその仮想ハードウェアプラットホーム120において使用すべきvCPU122の数を表す。次に、工程305では、バルーンドライバ131は、この目標vCPUサイズとVM118が現在使用しているvCPU122の数とを比較する。VM118が現在使用しているvCPU122の数が目標vCPUサイズを超える場合、工程320においてバルーンドライバ131は、受信された目標vCPUサイズに基づき1つまたは複数のバルーンスレッド(balloon thread)を立ち上げる。工程325では、バルーンドライバ131は、バルーンスレッドが実行することになる1つまたは複数のvCPU122を規定する(すなわち、バルーンドライバ131がスレッドをvCPU122に「ピン留めする(pin)」)。このとき、各バルーンスレッドは1つのvCPU122にピン留めされる。
【0032】
一実施形態では、バルーンスレッドは、ゲストOS130のゲストスケジューラ133がvCPU122
1をスケジューリング目的のために利用不能と認識するように、特定のvCPU(例えばvCPU1)を占有するように構成されるスレッドである。いくつかの実施形態では、バルーンスレッドは、ゲストスケジューラ133が特定のvCPU上のバルーンスレッドの実行をプリエンプトも中断もし得ないように、ゲストOS130内で実行する他の処理に比べて高いプロセス優先順位を有する優先プロセススレッドである。いくつかの実施形態では、バルーンスレッドは、カーネルスレッド、軽量プロセス(LWP : lightweight process)、またはゲストOS130内で実行する他のプロセスであり得る。バルーンドライバ131はさらに、非活性化対象のvCPUへ「ピン留めされる」バルーンスレッドを構成し得る。例えば、バルーンドライバ131は、バルーンスレッドが特定のvCPUに拘束されるべきであるということをゲストスケジューラ133にシグナリングするプロセッサ親和性設定(processor affinity setting)をバルーンスレッドに対し設定し得る。バルーンスレッドは終了するまで実行を継続するように構成される。
【0033】
一実施形態では、バルーンスレッドがピン留めされた特定のvCPU122はスケジュール解除されるべきであるということをハイパーバイザ111へ伝達するために、バルーンスレッドはさらに、アイドル命令を実行するように構成され得る。したがって、ハイパーバイザ111は、特定のvCPU122を維持するオーバーヘッドを発生しない。一例では、優先プロセススレッド(バルーンスレッド)は停止命令を含む。1つの特定の実施形態では、バルーンスレッドは、より多くの仕事を行う必要があるまで処理装置(例えばvCPU122)を停止させるコンピュータ命令を有し得る。これにより、処理装置は停止状態(すなわちレディ状態)に移行する。x86コンピュータアーキテクチャのバルーンスレッドの実施形態の例を以下の表1に擬似コードとして示す。
【0034】
【表1】
表1 バルーンスレッドのサンプル擬似コード
示されるように、バルーンスレッドは、HLT命令(より多くの仕事を行う必要があるまで処理装置を停止させるアセンブリ言語命令)を繰り返し発行するループとして(例えば、割り込み駆動型プロセッサ内で次の外部割り込みが発射されるまで)実施され得る。他の実施形態では、バルーンスレッドは、スリープモード、MONITOR、MWAITまたは他の機能的に等価な命令を含み得る。いくつかの実施形態では、ハイパーバイザ111は、アイドル命令を実行しているVM118上で実行する任意のゲストプロセスを検知し、アイドル命令が実行されている任意のvCPUを、物理的CPU上での実行からスケジュール解除するように構成される。これらの実施形態では、バルーンスレッド内のHLT命令は、バルーンスレッドを実行する特定のvCPU122がスケジュール解除され得るということをハイパーバイザ111のカーネルスケジューラ113へ伝達する役目を果たす。したがって、ゲストスケジューラ133の観点からは、立ち上げられたバルーンスレッドはvCPUを生じない高優先順位スレッドである。その一方で、カーネルスケジューラ113の観点からは、vCPUはバルーンスレッドのアイドルループにより停止され、物理的CPUからスケジュール解除され得る。
【0035】
一実施形態では、バルーンドライバ131は、vCPUの目標数とvCPUの現在数との差を満たすためにある数のバルーンスレッドを立ち上げる。各バルーンスレッドを立ち上げ、ピン留めした後、バルーンドライバは、仮想マシン用に活性化されたvCPUの現在数のカウントを更新する。例えば、バルーンドライバ131は、立ち上げられたバルーンスレッド毎のVM用に活性化された仮想CPUの現在数のカウントをディクリメントし得る。
【0036】
工程330では、バルーンドライバ131が、カーネルスケジューラ113から、VM118により現在使用中のvCPU122の数を超えるvCPU122の目標数を受信すると、工程340において、バルーンドライバ131は、以前に立ち上げられたバルーンスレッドがvCPU122の1つへピン留めされたかどうかを判定する。このようなバルーンスレッドが立ち上げられ、vCPU122上で現在実行中であれば、工程345において、バルーンドライバ131は、ゲストOS130内のバルーンスレッドの実行を停止(kill)する。この停止は、ゲストスケジューラ133の観点からは他のプロセスをスケジューリングするために当該vCPU122を解放することになる。さらに、バルーンドライバ131は、プロセススケジューリングのための追加のvCPU122を解放するために可能な限り多くのバルーンスレッドの実行を停止する。一実施形態では、バルーンスレッドを停止することに応答して、バルーンドライバは、仮想マシン用に活性化されたvCPUの現在数のカウントを更新する。例えば、バルーンドライバ131は、停止されたバルーンスレッド毎にVM用に活性化された仮想CPUの現在数のカウントをインクリメントし得る。
【0037】
前述の工程を実行した後、バルーンドライバ131は、タイマー割り込みにより再びトリガされるまで、アイドル状態(すなわち「スリープ」)に戻る。
図4Aは、プロセスがゲストスケジューラ133によりスケジュールされ且つディスパッチされる4つの割り振られたvCPU122
1〜122
4を有するVM118
1のブロック図である。ゲストOS130のゲストスケジューラ133は、1つまたは複数のvCPU122
1〜122
N上でコンピュータ命令を実行するプロセス(すなわちスレッド)に時間を割り振る。
図4Aに描写された領域402は、命令を実行する各vCPUにより費やされた時間の一部としての、各vCPUに関連付けられた要求の量を表す。示された例では、vCPUはプロセスとスレッドを実行するために使用される要求とサイクルの量が変化し得るということを認識すべきであるが、複数のvCPU間の負荷バランスはゲストスケジューラ133により行われ、各vCPUに対する同様な要求量を生じる。
【0038】
図4Bは、4つのvCPU122
1〜122
4を有するVM118
1のブロック図である。4つのvCPU122
1〜122
4上では、VM118
1がハイパーバイザ111により推奨されたvCPU122の目標数よりも多くのvCPU122を利用しているとバルーンドライバ131が判定した場合、プロセスはゲストスケジューラ133によりスケジュールされてvCPU122
1〜122
4のうちの1つまたは複数へディスパッチされる。この例示では、バルーンドライバ131は、線408により描写するようにハイパーバイザ111と通信し(例えばバックドアコールを介し)、VM118
1が利用すべきvCPU122の目標数を受信する。バルーンドライバ131は、vCPU122のこの目標数と、VM118
1により活性化され且つVM118
1による使用のために利用可能であるvCPU122の現在数とを比較する。バルーンドライバ131は、使用中のvCPU122の現在数がvCPU122の目標数を超える場合、1つまたは複数のバルーンスレッド404を立ち上げる。示された例では、バルーンドライバ131は、VMのvCPUの目標数が3つのvCPUである(vCPUの現在数(例えば、初めに割り振られた「4」)よりも少ない)と判定し、1つのバルーンスレッド404を立ち上げる。
【0039】
バルーンドライバ131は、非活性化対象の特定のvCPU(例えばvCPU122
4)に対するバルーンスレッド404のプロセッサ親和性を規定し、これによりバルーンスレッドをこのvCPUにピン留めする。さらに、バルーンスレッド404は、ゲストOS130上で実行する他のプロセスとスレッドに比較して高優先順位を有するカーネルスレッドであり得、したがって特定のvCPU122
4上の他のすべてのプロセスをプリエンプトする。したがって、ゲストスケジューラ133は、規定優先順位を有するvCPU122
4上にバルーンスレッド404をディスパッチする。いくつかの実施形態では、ゲストスケジューラ133は、vCPU4上に他のプロセスをディスパッチし得ないということを認識すべきである。バルーンスレッド404によるvCPU122
4の占有(これによってバルーンスレッド404がvCPU122
4のCPUサイクルのすべてを利用する)は
図4Bでは領域406により描写される。ゲストスケジューラ133は、vCPU122
4上で前に実行していたそれらのプロセスとスレッドを含むプロセスとスレッドを残りの利用可能なvCPU122
1〜122
3上にディスパッチし再スケジュールする。
図4Bに描写された領域410は、もはや利用可能でないvCPU122
4の結果としての各vCPU122
1、122
2、122
3に対する要求の増加を表す。したがって、本開示の実施形態は、VMをシャットダウンするかまたはオフラインにする必要無く、要求に基づきvCPUを効果的に非活性化した。
【0040】
1つまたは複数の実施形態が理解の明確のために少し詳しく本明細書では説明されたが、いくつかの変更と修正が本開示の精神から逸脱することなくなされ得るということを認識すべきである。例えば、いくつかの実施形態では、ゲストオペレーティングシステム130は、オンラインおよびオフラインの動的CPUを支援するように構成され得る。このような実施形態では、バルーンスレッドを立ち上げるのではなく、バルーンドライバ131は、ゲストOS130内のVMのvCPUの数を調整するように構成され得る。一実施形態では、バルーンドライバ131は、目標vCPUサイズをデバイスドライバファイルシステム(例えばsysfs)へ書き込むこと(/sys/devices/system/cpu/cupid/online sysノードに対する変更など)により、リナックスゲストオペレーティングシステムを実行するVMのvCPUの数を調整し得る。
【0041】
本明細書に記載の様々な実施形態は、コンピュータシステム内に格納されたデータに関わる様々なコンピュータ実施型動作を採用し得る。例えば、これらの動作は物理量の物理的操作を必要とし得る。通常、必ずしもではないが、これらの量は電気的または磁気的信号の形式を取り得、これらまたはその表現は格納され、転送され、合成され、比較され、またはそうでなければ操作されることができる。さらに、このような操作は、生成、付与、識別、判定、または比較などの用語でしばしば参照される。本開示の1つまたは複数の実施形態の一部をなす本明細書に記載の任意の動作は、有用な機械操作であり得る。加えて、本開示の1つまたは複数の実施形態はまた、これらの動作を実行するためのデバイスまたは装置に関する。上記装置は、特別に必要な目的のために特に構築され得る、またはコンピュータ内に格納されたコンピュータプログラムにより選択的に活性化または構成される汎用コンピュータデバイスであり得る。特に、様々な汎用マシンは本明細書の教示に従って書かれたコンピュータプログラムと共に使用され得るか、または必要な動作を実行するためにより専用化された装置を構築することがより便利な場合もある。
【0042】
本明細書に記載の様々な実施形態は、携帯型デバイス、マイクロプロセッサシステム、マイクロプロセサベースまたはプログラム可能民生電子機器、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピュータシステム構成と共に実施され得る。
【0043】
本開示の1つまたは複数の実施形態は、1つまたは複数のコンピュータプログラム、または1つまたは複数のコンピュータ読み取り可能媒体内に具現化された1つまたは複数のコンピュータプログラムモジュールとして実施され得る。用語「コンピュータ読み取り可能媒体」は、その後コンピュータシステムに入力されることができるデータを格納することができる任意のデータ記憶装置を指す。コンピュータ読み取り可能媒体は、コンピュータプログラムをコンピュータにより読まれることを可能にする方法で具現する任意の既存技術または今後開発される技術に基づき得る。コンピュータ読み取り可能媒体の例としては、ハードディスク駆動装置、ネットワーク付属記憶装置(NAS : network attached storage)、読み取り専用メモリ、ランダムアクセスメモリ(例えばフラッシュメモリ装置)、CD(コンパクトディスク)、CD−ROM、CD−RまたはCD−RW、DVD(デジタルバーサタイルディスク)、磁気テープ、他の光学的および非光学的データ記憶装置が挙げられる。コンピュータ読み取り可能媒体はまた、コンピュータ可読コードが分散された方法で格納され実行されるように、ネットワーク結合されたコンピュータシステム上に分散されることができる。
【0044】
本開示の1つまたは複数の実施形態は理解の明確のために少し詳しく説明されたが、いくつかの変更と修正が本開示の範囲内でなされ得るということは明らかである。したがって、記載の実施形態は例示的であって限定的ではないと考えるべきであり、特許請求の範囲は本明細書に記載された詳細に限定されず、請求項の範囲と均等物のなかで修正され得る。特許請求の範囲において、要素および/または工程は特許請求の範囲に明示的に示されない限り動作の任意の特定の順序を意味しない。
【0045】
様々な実施形態による仮想化システムは、ホストされた実施形態、ホストされない実施形態、またはこれら2つの差異をあいまいにする傾向がある実施形態として実施されてもよく、すべて想定される。さらに、様々な仮想化動作は、ハードウェアで完全にまたは部分的に実施され得る。例えば、ハードウェア実施形態は、非ディスクデータを安全にするために記憶装置アクセス要求の修正のための参照テーブルを採用し得る。
【0046】
仮想化の程度にかかわらず、多くの変形、修正、追加、改良が可能である。したがって、仮想化ソフトウェアは、仮想化機能を実行するホスト、コンソール、またはゲストオペレーティングシステムの部品を含むことができる。単一インスタンスとして本明細書に記載の部品、動作、または構造に対し複数のインスタンスが設けられ得る。最後に、様々な部品、動作、データ記憶装置間の境界は多少任意的であり、特定の動作は特定の例示的構成の文脈の中で示されている。機能の他の割り振りが想定され、本開示の範囲に入り得る。一般的に、例示的構成において別個の部品として提示された構造と機能は組み合わせられた構造または部品として実現され得る。同様に、単一構成部品として提示された構造と機能は別々の部品として実現され得る。これらおよび他の変形形態、修正形態、追加形態、改良形態は添付特許請求の範囲に入り得る。