(57)【要約】ホストコンピュータは、複数のコンテナの実行をサポートする１つ又は複数の物理的中央演算処理装置（ＣＰＵ）を有し、コンテナはそれぞれ１つ又は複数のプロセスを含む。コンテナの各プロセスは、対応するコンテナが待ち時間の影響を受けやすいと判断される場合、対応する物理的ＣＰＵで排他的に実行されるように割り当てられる。対応する物理的ＣＰＵでの排他的実行へのプロセスの割り当ては、対応する物理的ＣＰＵからホストシステムの１つ又は複数の他の物理的ＣＰＵへのタスクの移行と、１つ又は複数の他の物理的ＣＰＵにタスク及び割り込み処理を向けることとを含む。次に、コンテナに対応するプロセスのタスクは、対応する物理的ＣＰＵで実行される。
2016529613.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンテナの実行をサポートする１つ又は複数の物理的中央演算処理装置（ＣＰＵ）を有するホストコンピュータにおいて、前記複数のコンテナの各々は、１つ又は複数のプロセスを含み、前記ホストコンピュータは、対応する物理的中央演算処理装置への排他的アフィニティを有するように、前記１つ又は複数のプロセスのうちの少なくとも１つを割り当てる方法を実行するようにプログラムされ、前記方法は、
第１のコンテナが待ち時間の影響を受けやすいと判断するステップと、
前記判断するステップに応答して、１つ又は複数の対応する物理的中央演算処理装置への排他的アフィニティを有するように前記第１のコンテナの１つ又は複数のプロセスの各々を割り当てるステップとを含み、
前記割り当てるステップは、
前記１つ又は複数の対応する物理的中央演算処理装置上で実行中のタスクをホストシステムの１つ又は複数の他の物理的中央演算処理装置に移行するステップと、
前記１つ又は複数の対応する物理的中央演算処理装置のキュータスク及び割り込み処理を前記１つ又は複数の他の物理的中央演算処理装置に実行させるステップと、
前記１つ又は複数のプロセスが排他的アフィニティを有する前記１つ又は複数の対応する物理的中央演算処理装置で前記第１のコンテナの１つ又は複数のプロセスの各々のタスクを実行するステップとを含む、方法。
【請求項２】
システムであって、
メモリと、複数のコンテナの実行をサポートする１つ又は複数の物理的中央演算処理装置（ＣＰＵ）とを有するホストコンピュータを備え、前記複数のコンテナの各々は、１つ又は複数のプロセスを含み、前記ホストコンピュータは、対応する物理的中央演算処理装置への排他的アフィニティを有するように、前記１つ又は複数のプロセスのうちの少なくとも１つを割り当てる方法を実行するようにプログラムされ、前記方法は、
第１のコンテナが待ち時間の影響を受けやすいと判断するステップと、
前記判断するステップに応答して、１つ又は複数の対応する物理的中央演算処理装置への排他的アフィニティを有するように前記第１のコンテナの１つ又は複数のプロセスの各々を割り当てるステップとを含み、
前記割り当てるステップは、
前記１つ又は複数の対応する物理的中央演算処理装置上で実行中のタスクをホストシステムの前記１つ又は複数の他の物理的中央演算処理装置に移行するステップと、
前記１つ又は複数の対応する物理的中央演算処理装置のキュータスク及び割り込み処理を前記１つ又は複数の他の物理的中央演算処理装置に実行させるステップと、
前記プロセスが排他的アフィニティを有する前記１つ又は複数の対応する物理的中央演算処理装置で前記第１のコンテナの１つ又は複数のプロセスの各々のタスクを実行するステップとを含む、システム。
【請求項３】
前記第１のコンテナは、第１の仮想マシンであり、
前記第１のコンテナに含まれる前記１つ又は複数のプロセスのそれぞれは、仮想中央演算処理装置であり、
少なくとも１つの仮想中央演算処理装置は、対応する物理的中央演算処理装置への排他的アフィニティを有するように割り当てられる、請求項２に記載のシステム。
【請求項４】
前記方法は、
前記第１の仮想マシンの状態への変更を検出するステップを更に備え、
前記第１の仮想マシンの状態への変更を検出するステップは、
前記第１の仮想マシンの状態が電源オフから電源オンに変更されたことを検出するステップを含む、請求項３に記載のシステム。
【請求項５】
前記第１の仮想マシンの状態への変更を検出するステップは、
前記第１の仮想マシンの待ち時間感度インジケータが変更されたことを検出するステップを含む、請求項４に記載のシステム。
【請求項６】
前記方法は、
前記少なくとも１つの仮想中央演算処理装置への割り当てに先立ち、前記ホストコンピュータが、前記少なくとも１つの仮想中央演算処理装置が割り当てられる十分な数の物理的中央演算処理装置を有すると判断するステップを更に備える、請求項３に記載のシステム。
【請求項７】
前記方法は、
前記ホストコンピュータの所定数の物理的中央演算処理装置を、前記第１の仮想マシンに対応しないタスクを処理するために確保するステップを更に備える、請求項６に記載のシステム。
【請求項８】
前記第１の仮想マシンが待ち時間の影響を受けやすいと判断するステップは、
前記第１の仮想マシンの待ち時間感度インジケータを読み出すステップと、
前記第１の仮想マシンの中央演算処理装置エンタイトルメント値を読み出すステップと、
前記待ち時間感度インジケータが所定値を有すると判断するステップと、
前記中央演算処理装置エンタイトルメント値が最大値であると判断するステップとを含む、請求項３に記載のシステム。
【請求項９】
前記中央演算処理装置エンタイトルメント値の最大値は、前記第１の仮想マシンの各仮想中央演算処理装置が、前記１つ又は複数の物理的中央演算処理装置のうちの１つの全処理能力を消費する許可を有することを示す、請求項８に記載のシステム。
【請求項１０】
前記プロセスを前記１つ又は複数の対応する物理的中央演算処理装置から移行するステップは、
前記１つ又は複数の対応する物理的中央演算処理装置のうちの１つによって現在実行中のタスクを中止するステップと、
前記１つ又は複数の他の物理的中央演算処理装置のうちの１つの実行キューに、中止されたタスクを配置するステップとを含む、請求項３に記載のシステム。
【請求項１１】
前記プロセスを前記１つ又は複数の対応する物理的中央演算処理装置から移行するステップは、
タスクを前記１つ又は複数の対応する物理的中央演算処理装置のうちの１つの実行キューから前記１つ又は複数の他の物理的中央演算処理装置のうちの１つの実行キューにコピーするステップと、
前記対応する物理的中央演算処理装置の実行キューから前記タスクを削除するステップとを更に含む、請求項１０に記載のシステム。
【請求項１２】
前記方法は、
前記１つ又は複数の対応する物理的中央演算処理装置のそれぞれの周波数スケーリングをディセーブルするステップを更に備える、請求項３に記載のシステム。
【請求項１３】
ホストコンピュータによって実行可能な命令を含む非一時的なコンピュータ可読媒体であって、前記ホストコンピュータは、複数のコンテナの実行をサポートする１つ又は複数の物理的中央演算処理装置（ＣＰＵ）を有し、前記複数のコンテナの各々は１つ又は複数のプロセスを含み、前記命令は、実行されると、対応する物理的中央演算処理装置で排他的に実行されるようにプロセスを割り当てる方法を前記ホストコンピュータに実行させ、前記方法は、
第１のコンテナが待ち時間の影響を受けやすいと判断するステップと、
前記判断するステップに応答して、１つ又は複数の対応する物理的中央演算処理装置への排他的アフィニティを有するように前記第１のコンテナの前記１つ又は複数のプロセスのそれぞれを割り当てるステップとを含み、前記割り当てるステップは、
前記１つ又は複数の対応する物理的中央演算処理装置上で実行中のタスクをホストシステムの前記１つ又は複数の他の物理的中央演算処理装置に移行するステップと、
前記１つ又は複数の対応する物理的中央演算処理装置のキュータスク及び割り込み処理を前記１つ又は複数の他の物理的中央演算処理装置に実行させるステップと、
前記プロセスが排他的アフィニティを有する前記１つ又は複数の対応する中央演算処理装置で前記第１のコンテナの前記１つ又は複数のプロセスのそれぞれのタスクを実行するステップとを含む、コンピュータ可読媒体。
【請求項１４】
前記第１のコンテナは、第１の仮想マシンであり、
前記第１のコンテナに含まれる前記１つ又は複数のプロセスのそれぞれは、仮想中央演算処理装置であり、
少なくとも１つの仮想中央演算処理装置は、対応する物理的中央演算処理装置への排他的アフィニティを有するように割り当てられる、請求項１３に記載のコンピュータ可読媒体。
【請求項１５】
前記方法は、
前記第１の仮想マシンの状態への変更を検出するステップを更に備え、
前記第１の仮想マシンの状態への変更を検出するステップは、
前記第１の仮想マシンの状態が電源オフから電源オンに変更されたことを検出するステップを含む、請求項１４に記載のコンピュータ可読媒体。
【請求項１６】
前記第１の仮想マシンの状態への変更を検出するステップは、
前記第１の仮想マシンの待ち時間感度インジケータが変更されたことを検出するステップを更に含む、請求項１５に記載のコンピュータ可読媒体。
【請求項１７】
前記方法は、
前記少なくとも１つの仮想中央演算処理装置への割り当てに先立ち、前記ホストコンピュータが、前記少なくとも１つの仮想中央演算処理装置が割り当てられる十分な数の物理的中央演算処理装置を有すると判断するステップを更に備える、請求項１４に記載のコンピュータ可読媒体。
【請求項１８】
前記方法は、
前記ホストコンピュータの所定数の物理的中央演算処理装置を、待ち時間の影響を受けやすい仮想マシンに対応しないタスクを処理するために確保するステップを更に備える、請求項１７に記載のコンピュータ可読媒体。
【請求項１９】
前記第１の仮想マシンが待ち時間の影響を受けやすいと判断するステップは、
前記第１の仮想マシンの待ち時間感度インジケータを読み出すステップと、
前記第１の仮想マシンの中央演算処理装置エンタイトルメント値を読み出すステップと、
前記待ち時間感度インジケータが所定値を有すると判断するステップと、
前記中央演算処理装置エンタイトルメント値が最大値であると判断するステップとを含む、請求項１４に記載のコンピュータ可読媒体。
【請求項２０】
前記中央演算処理装置エンタイトルメント値の最大値は、前記第１の仮想マシンの各仮想中央演算処理装置が、前記１つ又は複数の物理的中央演算処理装置のうちの１つの全処理能力を消費する許可を有することを示す、請求項１９に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
「待ち時間の影響を受けやすい（ｌａｔｅｎｃｙ  ｓｅｎｓｉｔｉｖｅ：待ち時間感度）」ものとして特徴付けられたアプリケーションは通常、アプリケーションが実行されるコンピューティング環境によってもたらされる実行遅延及びジッタ（すなわち、予測不能性）の影響を非常に受けやすい。待ち時間の影響を受けやすいアプリケーションの例としては金融取引システムが挙げられ、金融取引システムは通常、証券価格設定又は取引の実行及び決済等の機能を実行する際、瞬時応答時間を必要とする。
【発明の概要】
【発明が解決しようとする課題】
【０００２】
実行遅延及びジッタが、多くの場合、コンピュータハードウェア構成要素によって導入される。例えば、アプリケーションは、望ましくない待ち時間を導入し得るデータ記憶デバイスからデータを読み出すか、又はデータを書き込む入／出力（Ｉ／Ｏ）要求を発行し得る。さらに、低速又は不確実なネットワーク接続が遅延及び／又はジッタを生じさせ得る。幾つかの場合、特に、アプリケーションを実行中の仮想マシンが他の仮想マシン及び他のシステムタスクと処理リソースを共有する仮想化システムにおいて、ホストで実行されるオペレーティングシステムソフトウェアがそれ自体、遅延又はジッタの遅延源であり得る。第１に、仮想マシンは、処理リソースが不十分である場合、実行前に待つことを強いられ得る。さらに、仮想マシンが即時実行にスケジュールされている場合であっても、前に実行されていたプロセスを中止し、後で実行するためにキューに再び入れる必要があり、遅延がもたらされる。仮想マシンが他の（優先度のより高い）システムタスク又はハードウェア割り込みによってプリエンプトされる（preempted）状況もあり得る。最後に、ハイパースレッド処理又は周波数スケーリング（システム負荷に基づいて物理的プロセッサの動作速度の調整を提供する）等の特定のシステム特徴は、更なる遅延源であり得る。
【課題を解決するための手段】
【０００３】
複数のコンテナの実行をサポートする１つ又は複数の物理的中央演算処理装置（ＣＰＵ）を有するホストコンピュータにおいて、コンテナはそれぞれ１つ又は複数のプロセスを含み、対応する物理的ＣＰＵへの排他的アフィニティを有するようプロセスの少なくとも１つを割り当てる方法が提供される。本方法は、第１のコンテナが待ち時間の影響を受けやすいと判断するステップと、判断に応答して、１つ又は複数の対応する物理的ＣＰＵへの排他的アフィニティを有するように第１のコンテナのプロセスのそれぞれを割り当てるステップとを含む。割り当てるステップは、対応する物理的ＣＰＵ上で実行中のタスクをホストシステムの１つ又は複数の他の物理的ＣＰＵに移行するステップと、対応する物理的ＣＰＵのキュータスク及び割り込み処理を１つ又は複数の他の物理的ＣＰＵに向けるステップと、プロセスが排他的アフィニティを有する１つ又は複数の対応するＣＰＵで第１のコンテナのプロセスのそれぞれのタスクを実行するステップとを含む。
【０００４】
更なる実施形態は、実行されると、上記方法の１つ又は複数の態様をホストコンピュータに実施させる命令を含む非一時的コンピュータ可読媒体及び上記方法の１つ又は複数の態様を実施するようにプログラムされたコンピュータシステムを提供する。
【図面の簡単な説明】
【０００５】
【図１】１つ又は複数の実施形態を実施し得る仮想化コンピューティング環境を示す図である。
【図２】実施形態による、待ち時間感度情報を記憶するテーブルを示すブロック図である。
【図３Ａ】実施形態による、待ち時間高感度仮想マシンの仮想ＣＰＵに物理的ＣＰＵを割り振るカーネルスケジューラを示す図である。
【図３Ｂ】実施形態による、待ち時間高感度仮想マシンの仮想ＣＰＵに物理的ＣＰＵを割り振るカーネルスケジューラを示す図である。
【図４】実施形態による、待ち時間高感度仮想マシンの仮想ＣＰＵに１つ又は複数の物理的ＣＰＵへの排他的アフィニティを認める方法を示す流れ図である。
【図５】実施形態による、カーネルスケジューラが１つ又は複数の待ち時間高感度仮想マシンを実行するコンピュータホストでのタスクの実行をスケジュールする方法を示す流れ図である。
【発明を実施するための形態】
【０００６】
図１は、１つ又は複数の実施形態を実施し得る仮想化コンピューティング環境を示す。示されるように、コンピューティング環境は、ホストコンピュータ１００と、仮想マシン（ＶＭ）管理サーバ１５０とを含む。ＶＭ管理サーバ１５０は、ローカル接続を介して、又は代替的にはリモートネットワーク接続（図示せず）を介してホストコンピュータ１００と通信する。
【０００７】
ホストコンピュータ１００は、実施形態では、オペレーティングシステム及び１つ又は複数のアプリケーションプログラムの実行をサポートする汎用コンピュータである。仮想化計算プラットフォームを含む様々な構成要素を実行するために、ホストコンピュータ１００は通常、サーバクラスのコンピュータである。しかし、ホストコンピュータ１００は、デスクトップ又はラップトップコンピュータであってもよい。
【０００８】
図１に示されるように、ホストコンピュータ１００は、３つの異なる構成要素に論理的に分割される。第１に、実行空間１２０は、ユーザレベル（すなわち、非カーネルレベル）プログラムの実行をサポートする。ユーザレベルプログラムは非特権であり、特権命令の実行又はシステムメモリの特定の保護領域へのアクセス等の特定の特権機能を実行することができないことを意味する。実行空間１２０がサポートするプログラムは、特に、仮想マシン及びユーザプログラムである。
【０００９】
仮想マシンは、物理的計算デバイスのソフトウェア実施であり、物理的コンピュータと略同じようにプログラムを実行する。実施形態では、仮想マシンは、ソフトウェアにおいて、ゲストオペレーティングシステム（ＯＳ）の制御下でソフトウェアアプリケーションの実行をサポートする計算プラットフォームを実施する。したがって、仮想マシンは通常、特定の計算アーキテクチャをエミュレートする（emulate）。図１では、実行空間１２０はＶＭ１１０１〜１１０Ｎを含む。示される各ＶＭ１１０は１つ又は複数のアプリケーション１１１の実行をサポートし、各アプリケーション１１１は特定のゲストＯＳ１１２の制御下で実行される。アプリケーション１１１は、例えば、ワードプロセッサ又はスプレッドシートプログラム（spreadsheet programs）等のユーザレベル（非カーネル）プログラムである。示される各ゲストＯＳ１１２は、マイクロソフト社（Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．）からの任意のバージョンのウィンドウズ（Ｗｉｎｄｏｗｓ)（登録商標）オペレーティングシステム、リナックス（Ｌｉｎｕｘ）（登録商標）オペレーティングシステム、又はアップル社（Ａｐｐｌｅ，  Ｉｎｃ．）からのＭａｃ  ＯＳ（登録商標）Ｘ等のよく知られた市販のオペレーティングシステムの１つであり得る。アプリケーション及びゲストＯＳがＶＭ毎に異なり得ることに留意されたい。したがって、ＶＭ１１０１内のアプリケーション１１１１は、ゲストＯＳ１１２１としてウィンドウズ（Ｗｉｎｄｏｗｓ）（登録商標）７の制御下で実行されるマイクロソフト（Ｍｉｃｒｏｓｏｆｔ）のワード（Ｗｏｒｄ）（登録商標）及びエクセル（Ｅｘｃｅｌ）（登録商標）アプリケーションを含み得る。これとは対照的に、ＶＭ１１０Ｎ内のアプリケーション１１１Ｎは、ゲストＯＳ１１２ＸとしてＭａｃＯＳ（登録商標）Ｘの制御下で実行されるサファリ（Ｓａｆａｒｉ）（登録商標）ウェブブラウザを含み得る。
【００１０】
仮想マシン１１０１〜１１０Ｎに加えて、実行空間１２０は１つ又は複数のユーザプログラム１１５を含む。実施形態では、ユーザプログラム１１５は、任意の仮想マシンから独立して実行されるソフトウェア構成要素である。ユーザプログラム１１５の例としては、カーネルとの通信の促進、ディレクトリサービスの提供等の様々なシステム指向機能（system-oriented functions）を実行するユーティリティが挙げられる。そのようなプログラムは、仮想マシンのように、ユーザレベルで実行され、これらのプログラムが特定の特権（カーネルレベル）機能を実行することができないことを意味する。図１に示されるように、各ＶＭ１１０１〜１１０Ｎ及びユーザプログラム１１５は、本明細書ではハイパーバイザ１３０と呼ばれるハイパーバイザ構成要素と通信する。
【００１１】
ハイパーバイザ１３０は、図１に示されるように、コンピュータホスト１００でプロセスを実行するためのオペレーティングシステムプラットフォームを提供する。ハイパーバイザ１３０は、コンピュータホスト１００内の全てのハードウェアデバイスを制御し、そこで実行される全てのアプリケーションのシステムリソースを管理する。ハイパーバイザ１３０が提供するコア機能は、特に、コンソールサービス、ファイルシステムサービス、デバイスドライバ、及びリソーススケジューリングである。さらに、ハイパーバイザ１３０は、ホストコンピュータでの１つ又は複数の仮想マシンのインスタンス化を提供するソフトウェア構成要素を実施する。
【００１２】
図１の実施形態に示されるように、ハイパーバイザ１３０は仮想マシンモニタ（ＶＭＭ）１３１１〜１３１Ｎを含む。各ＶＭＭ１３１は実行中のＶＭ１１０に対応する。したがって、ＶＭＭ１３１１はＶＭ１１０１に対応し、ＶＭＭ１３１２はＶＭ１１０２に対応し、以下同様である。各ＶＭＭ１３１は、対応する仮想マシンのゲストＯＳに仮想ハードウェアプラットフォームを提供するソフトウェアレイヤである。対応するＶＭが、ハイパーバイザ１３０のカーネル構成要素（図１ではカーネル１３６として示される）によって提供されるサービスにアクセスするのは、特定のＶＭＭ１３１を通してである。カーネル１３６によって実行される機能は、特に、メモリ管理、ネットワーキング及び記憶スタックの提供、及びプロセススケジューリングである。
【００１３】
図１での各ＶＭＭ１３１は、対応するＶＭ１１０の仮想ハードウェアプラットフォームを実施する。実施される仮想ハードウェアプラットフォームの構成要素は、特に、１つ又は複数の仮想中央演算処理装置（又はＶＣＰＵ）１２５である。したがって、ＶＭＭ１３１１は第１の組のＶＣＰＵ１２５１を実施し、ＶＭＭ１３１２は第２の組のＶＣＰＵ１２５２を実施し、以下同様である。各ＶＣＰＵ１２５は、対応するＶＭ１１０で実行されるアプリケーション１１１及びゲストＯＳ１１２の観点から、物理的ＣＰＵとして見える。このようにして、仮想マシン内で実行される仮想化ゲストオペレーティングシステムは、コンピュータホストで直接実行されるオペレーティングシステムが（すなわち、非仮想化的に）、物理的ＣＰＵでの実行に向けてプロセスをスケジュールしディスパッチするのと同じように、１つ又は複数の仮想ＣＰＵでの実行に向けてプロセスをスケジュールし、ディスパッチし得る。しかし、ハイパーバイザ１３０の観点から（典型的な実施形態では、コンピュータホスト１００で直接実行される）、各ＶＣＰＵ１２５は、コンピュータホスト１００の物理的ＣＰＵでスケジュールされディスパッチされるプロセスである。
【００１４】
１つ又は複数の実施形態では、カーネル１３６は、コンピュータホスト１００のＶＭ１１０と物理的ハードウェアとの連絡部として機能する。カーネル１３６は、中央オペレーティングシステム構成要素であり、ホスト１００で直接実行される。実施形態では、カーネル１３６は、メモリを割り振り、物理的ＣＰＵへのアクセスをスケジュールし、コンピュータホスト１００に接続された物理的ハードウェアデバイスへのアクセスを管理する。
【００１５】
図１に示されるように、カーネル１３６は１つ又は複数のカーネルスレッド１３２を実行する。カーネルスレッド１３２は、メモリ及びデバイスの管理等のオペレーティングシステム機能を実行し、（非特権モードで実行される、上述したユーザプログラム１１５とは対照的に）特権モードで実行されるプロセスである。カーネル１３６は割り込みモジュール１３３も含む。実施形態によれば、割り込みモジュール１３３（割り込みハンドラと呼ばれることもある）は、１つ又は複数のオペレーティングシステム機能を含み、その実行は、ハードウェアデバイスによって生成される等の割り込みの検出によってトリガーされる。割り込みモジュール１３３は、特定のハードウェアデバイス又はソフトウェアモジュールによって生成される割り込みに応答する幾つかのタイプの割り込みハンドラを含む。割り込みモジュール１３３内の各割り込みハンドラは、カーネルスレッド１３２と略同じように、カーネルレベルのプロセスとして実行される。
【００１６】
カーネル１３６はカーネルスケジューラ１３５も含む。カーネルスケジューラ１３５は、コンピュータホスト１００の物理的ＣＰＵでの実行に向けてタスクをスケジュールすることを担う。コンピュータホスト１００で実行される全てのタスクが、基本となるハードウェアリソースを共有しなければならないことに留意されたい。これは、ランダムアクセスメモリ、外部ストレージ、及び物理的ＣＰＵでの処理時間を含む。したがって、カーネルスケジューラ１３５が処理に向けてスケジュールするタスクは、ＶＣＰＵ１２５（ＶＭを実行する仮想ＣＰＵである）と、ユーザプログラム１１５と、カーネルスレッド１３２と、割り込みモジュール１３３の一環として実行される割り込みハンドラとを含む。実際に、図１に示されるように、これらのプロセスタイプのそれぞれは、カーネルスケジューラ１３５に供給されるものとして示されている。実施形態では、カーネルスケジューラ１３５は、各物理的ＣＰＵ（図示せず）に別個の実行キューを保持する。すなわち、カーネルスケジューラ１３５は、プロセスを特定の物理的ＣＰＵの実行キューに配置することにより、その特定の物理的ＣＰＵでの実行に向けてそのプロセスをスケジュールする。通常、物理的ＣＰＵは、それ自体のキューから実行するプロセスを選択するだけである。
【００１７】
しかし、他の物理的ＣＰＵが対応する実行キュー内で待機中のジョブを有する間、ある物理的ＣＰＵがアイドルにあることが生じ得る。したがって、周期的に、カーネルスケジューラ１３５はキューをリバランスする。すなわち、特定の物理的ＣＰＵの実行キューが長い場合、カーネルスケジューラ１３５は、その実行キュー内のタスクの幾つかを、あまり忙しくない物理的ＣＰＵの実行キューに移す。カーネルスケジューラ１３５が、個々の物理的ＣＰＵの実行キューを保持しリバランスするプロセスについて、より十分に以下に説明する。
【００１８】
図１は、コンピュータホスト１００の別の構成要素であるハードウェアプラットフォーム１４０も示す。ハードウェアプラットフォーム１４０は、コンピュータホスト１００の全ての物理的なデバイス、チャネル、及びアダプタを含む。ハードウェアプラットフォーム１４０は、ネットワーク通信用のネットワークアダプタ（図示せず）と、外部記憶デバイスへの通信を可能にするホストバスアダプタ（ＨＢＳ：ｈｏｓｔ  ｂｕｓ  ａｄａｐｔｅｒ）（図示せず）とを含む。さらに、ハードウェアプラットフォーム１４０は、コンピュータホスト１００の物理的ＣＰＵ（本明細書ではＰＣＰＵと呼ばれる）を含む。図１に示されるように、コンピュータホスト１００はＭ  ＰＣＰＵ１４５１〜１４５Ｍを有する。図に示されるように、カーネルスケジューラ１３５は、１つ又は複数のＰＣＰＵ１４５での実行に向けてタスクをスケジュールしディスパッチする。
【００１９】
ハードウェアプラットフォーム１４０はランダムアクセスメモリ（ＲＡＭ）１４１も含み、ＲＡＭ１４１は、特に、現在実行中のプログラム及びそのようなプログラムに必要とされるデータを記憶する。さらに、カーネルスケジューラ１３５が各ＰＣＰＵに保持する実行キューは通常、ＲＡＭ１４１内に保持される。
【００２０】
待ち時間高感度仮想マシンの実行に必要な構成、識別、及びスケジューリングの変更をサポートするために、図１に示される実施形態はＶＭ管理サーバ１５０を含む。ＶＭ管理サーバ１５０は、実施形態では、コンピュータホスト１００内又はコンピュータホスト１００からリモートに（図１に示されるように）実行されるサーバアプリケーションである。ＶＭ管理サーバ１５０の実施形態は、システム管理者が１つ又は複数のホストコンピュータでの実行に向けて仮想マシンを定義し、構成し、展開できるようにするインターフェース（グラフィカルユーザインターフェース（又はＧＵＩ）等）を提供する。
【００２１】
さらに、ＶＭ管理サーバ１５０は待ち時間高感度仮想マシンとしての仮想マシンの構成を提供する。１つ又は複数の実施形態によれば、ＶＭ管理サーバ１５０は待ち時間感度テーブル１５５を保持し、このテーブルは、仮想マシンの待ち時間感度特徴を定義する。待ち時間感度テーブル１５５については、更に詳細に以下に説明する。
【００２２】
図１に示されるように、ＶＭ管理サーバ１５０は、直接ローカル接続又はコンピュータネットワークを介してコンピュータホスト１００と通信する。そのような通信を促進するために、ＶＭ管理エージェント１３４はコンピュータホスト１００で実行される。ＶＭ管理エージェント１３４はカーネル１３６の一部分ではないが、ＶＭ管理エージェントの実施形態はハイパーバイザ１３０内でハイパーバイザレベルで実行される。しかし、他の実施形態では、ＶＭ管理エージェント１３４は、実行空間１２０内でユーザプログラムとして実行され得る。ＶＭ管理エージェント１３４のプロセスもカーネルスケジューラ１３５によって実行に向けてスケジュールされることに留意されたい。
【００２３】
ＶＭ管理エージェント１３４は、命令をＶＭ管理サーバ１５０から受信し、ＶＭ管理サーバ１５０の代理としてタスクを実行する。ＶＭ管理エージェント１３４によって実行されるタスクとは、特に、仮想マシンの構成及びインスタント化である。仮想マシンの構成の一態様は、仮想マシンが待ち時間高感度であるか否かである。したがって、ＶＭ管理エージェント１３４は、待ち時間感度テーブル１５５のコピーを受信し、基本データを待ち時間感度データ１４３としてＲＡＭ１４１内に保存する。図１に示されるように、待ち時間感度データ１４３がＲＡＭに保存されると、カーネルスケジューラ１３５はその情報にアクセスして、どの仮想マシンが待ち時間高感度であるかを判断する。１つ又は複数の仮想マシンが待ち時間高感度であると判断されると、カーネルスケジューラ１３５は特定のスケジュール変更を行い、これらの仮想マシンのニーズに応える。
【００２４】
図２は、待ち時間感度テーブル１５５の一実施形態を示すブロック図である。図に示されるように、待ち時間感度テーブル１５５は複数行（multiple rows）のデータを記憶し、各行はホスト１００内の特定の仮想マシンに対応する。各仮想マシンは、一意のＶＭ  ＩＤ２１０によってホスト上で識別される。ＶＭ  ＩＤ２１０は、仮想マシンに関連付けられた任意の一意の二進値又は英数値であり得る。図２に示されるように、待ち時間感度テーブル１５５は、図１に示されるＮ個の仮想マシンＶＭ１１０１〜１１０Ｎに対応するＮ個のエントリ（ＶＭ  ＩＤ２１０１〜２１０Ｎの）を有する。
【００２５】
ＶＭ  ＩＤ２１０毎に、待ち時間感度テーブル１５５は２つの値を記憶する。第１の値は待ち時間感度インジケータである。このインジケータは２つの別個の値（Ｙ又はＮ等）を有し、この値は、対応する仮想マシンが待ち時間高感度であるか否かを示す。他の実施形態では、待ち時間感度インジケータは３つ以上の値（例えば、高、中、低、又は普通）を有し、対応する仮想マシンの異なる程度の待ち時間感度の指定を提供する。図２では、ＶＭ  ＩＤ２１０１（ＶＭ１１０１に対応する）は、待ち時間感度インジケータがＹに設定されているため、待ち時間高感度の仮想マシンを識別する。他方、（ＶＭ１１０２及び１１０Ｎにそれぞれ対応する）ＶＭ  ＩＤ２１０２及びＶＭ  ＩＤ２１０Ｎは、対応する待ち時間感度インジケータがＮに設定されているため、待ち時間高感度仮想マシンではない仮想マシンを識別する。例えば、ＶＭ１１０１は、リアルタイム金融取引アプリケーションを実行する仮想マシンであり、一方、ＶＭ１１０２及び１１０Ｎは、通常、瞬時応答時間を必要とせず、一般に、仮想化コンピューティング環境で生じ得るジッタによる影響を受けないバッチ処理アプリケーション（課金システム等）を実行する仮想マシンであり得る。
【００２６】
待ち時間感度テーブル１５５が記憶する第２の値は、「エンタイトルメント（entitlement）」値である。仮想マシンのＣＰＵリソースエンタイトルメントは、ＣＰＵ確保値、ＣＰＵ制限値、及びＣＰＵ共有値を指定することによって調整し得る。ＣＰＵ確保値は、仮想マシンへのＣＰＵリソースの保証された最小割り振りを表す。逆に、ＣＰＵ制限値は、仮想マシンへのＣＰＵリソースの最大割り振りを表す。最後に、ＣＰＵ共有値は、他の仮想マシンに割り振られたＣＰＵリソースの量に相対して仮想マシンに割り振られるＣＰＵリソース量を表す。したがって、ＣＰＵが割り振りを共有する場合、仮想マシンのＣＰＵエンタイトルメントは、他の仮想マシンが電源オン（powered-on）、電源オフ（powered-off）、又は各自のＣＰＵ共有値が構成される際、動的に変更され得る。
【００２７】
図２に示される実施形態では、エンタイトルメント値は割合である。この実施形態では、エンタイトルメント値は、所与のＶＭの仮想ＣＰＵのＣＰＵリソースの確保割合（すなわち、ＣＰＵ確保値）を表す。すなわち、エンタイトルメント値によって表される確保は、対応する仮想マシンに保証された最小割り振りを指定する。実施形態によれば、仮想マシンは、その仮想マシンの確保を満たすために十分な未確保ＣＰＵリソースが利用可能な場合のみ、電源オンされ得る。エンタイトルメント値が割合として表現されることに限定されないことに留意されたい。他の実施形態では、エンタイトルメント値は、確保されたＣＰＵサイクル数（ギガヘルツ（ＧＨｚ）単位でのプロセッサの速度の特定の部分等）として表現され得る。
【００２８】
図２では、（ＶＭ  ＩＤ２１０１によって識別されるように）ＶＭ１１０１は、１００パーセント（％）のエンタイトルメント値を有し、物理的ＣＰＵの１００％がＶＭ１１０１に関連付けられたＶＣＰＵ（すなわち、ＶＣＰＵ１２５１）に確保されることを意味する。この例では、ＶＭ１１０１が１つのみのＶＣＰ１２５を有すると仮定されることに留意されたい。しかし、ＶＭ１１０１が２つ以上のＶＣＰＵを有する場合、それらのＶＣＰＵのそれぞれは、１つの物理的ＣＰＵの確保容量の１００％を共有する。
【００２９】
図２を参照すると、（ＶＭ  ＩＤ２１０２によって識別されるように）ＶＭ１１０２は、１００％の対応するエンタイトルメント値を有する。したがって、（Ｎに設定された待ち時間感度インジケータによって示されるように）ＶＭ１１０２は待ち時間高感度ではないが、ホストは、物理的ＣＰＵの容量の１００％をＶＭ１１０２に確保する。さらに、（ＶＭ  ＩＤ２１０Ｎによって識別されるように）ＶＭ１１０Ｎは、５０％というエンタイトルメント値を有し、物理的ＣＰＵの容量の５０％が、その仮想マシンの仮想ＣＰＵ（すなわち、ＶＣＰＵ１２５Ｎ）の実行に確保されることを意味する。
【００３０】
１つ又は複数の実施形態によれば、仮想マシンが待ち時間高感度であり、且つ最大エンタイトルメント値を有する場合、その仮想マシンには、１つ又は複数の物理的ＣＰＵへの排他的アフィニティ（exclusive affinity）が認められる。例えば、ＶＭ１１０１が１つの仮想ＣＰＵ  ＶＣＰＵ１２５１を有すると仮定すると、ＶＭ１１０１（又は同等に、ＶＣＰＵ１２５１）には、コンピュータホスト１００内の１つの物理的ＣＰＵ（すなわち、ＰＣＰＵ１４５１〜１４５Ｍの１つ）への排他的アフィニティが付与される。他方、ＶＭ１１０１が２つの仮想ＣＰＵを有する場合、両方の仮想ＣＰＵに物理的ＣＰＵへの排他的アフィニティが付与されるように、ＶＭ  ＩＤ２１０１の待ち時間感度テーブル１５５内のエンタイトルメント値は、２００％に設定される（すなわち、ＶＭ１１０１に対応する１組のＶＣＰＵ１２５１内の各仮想ＣＰＵに１００％を確保）。
【００３１】
仮想マシンの仮想ＣＰＵが物理的ＣＰＵへの排他的アフィニティを有する場合、物理的ＣＰＵは、効率的に、その特定の仮想ＣＰＵの実行専用である。すなわち、カーネルスケジューラ（すなわち、カーネルスケジューラ１３５）は、物理的ＣＰＵがアイドル状態であっても、仮想ＣＰＵが排他的アフィニティを有する物理的ＣＰＵでのいかなるプロセスの実行のスケジュールも避ける。さらに、カーネルスケジューラ１３５は、物理的ＣＰＵでの大半の割り込み処理のスケジュールも割ける。その代わり、仮想ＣＰＵが他の物理的ＣＰＵへの排他的アフィニティを有さない場合、割り込み処理はそのような他の物理的ＣＰＵでスケジュールされディスパッチされる。
【００３２】
さらに、実行中の仮想マシンが、Ｙに動的に設定された待ち時間感度インジケータを有するとともに、最大割合値に動的に設定されたエンタイトルメントを有する場合、カーネルスケジューラ１３５はそれらの構成変更を検出する（又はそれらの構成変更が通知される）。さらに、カーネルスケジューラ１３５は、待ち時間感度インジケータが以前はＹに設定され、エンタイトルメントが以前は最大割合に設定されていた仮想マシンが電源投入されたときを検出する（又はそのときが通知される）。何れの場合でも、カーネルスケジューラ１３５は、所要数の物理的ＣＰＵを仮想マシンの仮想ＣＰＵに割り振るステップをとる。したがって、仮想マシンの電源投入時（又は代替的には、仮想マシンの待ち時間感度インジケータ及びエンタイトルメントが変更されたとき）に、全ての物理的ＣＰＵがタスクを実行中である場合、カーネルスケジューラ１３５は、実行中のタスクをある物理的ＣＰＵから別の物理的ＣＰＵに移行する。カーネルスケジュールは、仮想マシンの仮想ＣＰＵの数と同じ数の物理的ＣＰＵに対してこの移行を実行する。したがって、仮想マシンの仮想ＣＰＵが、実行する必要があるタスクを有する場合、それらのタスクは、いかなるスケジューリングオーバーヘッド又はコンテキスト切り換えオーバーヘッドを発生させずに、割り振られた物理的ＣＰＵで直接実行される。さらに、実施形態によれば、カーネルスケジューラ１３５は、最小数の物理的ＣＰＵが非待ち時間高感度仮想マシンのタスクの処理に利用可能なことを保証する。これらの実施形態では、待ち時間高感度仮想マシンに電源が投入され、幾つかの物理的ＣＰＵが割り振られると、結果として、非待ち時間高感度タスクの処理に利用可能な物理的ＣＰＵの数はこの最小数未満になり、その場合、その仮想マシンは電源投入されない。
【００３３】
仮想マシンが、最大確保割合に設定されたエンタイトルメント値（すなわち、その仮想マシンの仮想ＣＰＵのそれぞれについて１００％）を有し得るが、いかなる特定の物理的ＣＰＵにも排他的アフィニティをまだ有さないことを留意されたい。この事例の例は、待ち時間感度テーブル１５５内のＶＭ  ＩＤ２１０２で図２に示されている。ＶＭ  ＩＤ２１０２は、１００％のエンタイトルメント値を有する（これは、ＶＭ１１０２が１つの仮想ＣＰＵを有すると仮定して、最大確保割合である）。しかし、図２に示されるように、ＶＭ  ＩＤ２１０２は、Ｎに設定された待ち時間感度インジケータを有し、ＶＭ１１０２が待ち時間高感度ではないことを意味する。この場合、カーネルスケジューラ１３５は、ＶＭ１１０２の仮想ＣＰＵ（すなわち、ＶＣＰＵ１２５２）に、所与の物理的ＣＰＵの全（すなわち、１００％）割り振りが付与されることを保証する。しかし、この場合、ＶＣＰＵ１２５２は、物理的ＣＰＵへの排他的アクセスを有さない。すなわち、ＶＣＰＵ１２５２に割り振られた物理的ＣＰＵがアイドルになる場合、カーネルスケジューラ１３５は、他のタスクをこの物理的ＣＰＵにスケジュールする。ＶＣＰＵ１２５２がアクティブになる場合、これらの他のタスクは（最終的に）プリエンプトされ、ＶＣＰＵ１２５２のタスクは、その物理的ＣＰＵでの処理に向けてスケジュールされる。しかし、これは、ＶＣＰＵ１２５１が所与の物理的ＣＰＵに対して有する排他的アフィニティとは異なり、その理由は、ＶＣＰＵ１２５２の場合では、その物理的ＣＰＵがアイドルになったとき、スケジューリングオーバーヘッドが、その物理的ＣＰＵでの他のタスクのスケジューリング、実行、及びプリエンプトによって生じるためである。上述したように、物理的ＣＰＵに対して排他的アフィニティを有する仮想マシン（待ち時間高感度ＶＭ１１０１等）の場合、このスケジューリングオーバーヘッドは効率的になくなる。
【００３４】
待ち時間高感度仮想マシンに、１つ又は複数の特定の物理的ＣＰＵへの排他的アフィニティが付与されるが、別のプロセス（仮想マシンの仮想ＣＰＵに関連しない）が、希であるが、１つ又は複数の特定の物理的ＣＰＵで実行されることが可能なことにも留意されたい。これらの例外的状況について、更に詳細に以下に説明する。
【００３５】
図３Ａ及び図３Ｂは、１つ又は複数の実施形態による、待ち時間高感度仮想マシンの仮想ＣＰＵへの物理的ＣＰＵの割り振りを示す概念図である。図３Ａでは、ＶＭ１１０は、（待ち時間感度テーブル１５５内のエントリによって前に定義されたように）待ち時間高感度仮想マシンであり、十分なエンタイトルメント値（すなわち、仮想ＣＰＵのそれぞれに１００％の確保）を有する。図３ＡのＶＭ１１０は１つのＶＣＰＵ１２５を有し、（単に例示を目的として）これはＶＭ１１０の部分であるものとして示されている。
【００３６】
図３Ａでは、カーネルスケジューラ１３５は、まず、タスクをタスクプール３１０から受信することによってそれらのタスクをスケジュールし、タスクプール３１０は、物理的ＣＰＵでの実行時間を必要とするタスクを含む。図３Ａでは、１つのみの未スケジューリングタスク（タスク３００９）がタスクプール３１０内にある。次に、カーネルスケジューラ１３５は、各タスクを実行キュー３２０に入れ、各実行キュー３２０は物理的ＣＰＵ（ＰＣＰＵ）１４５に対応する。図３Ａの実施形態が３つのＰＣＰＵ１４５１〜１４５３を有することに留意されたい。したがって、実行キュー３２０１はＰＣＰＵ１４５１のタスクを入れ、実行キュー３２０２はＰＣＰＵ１４５２のタスクを入れ、実行キュー３２０３はＰＣＰＵ１４５３のタスクを入れる。
【００３７】
図中、カーネルスケジューラ１３５は、ＶＭ１１０の電源投入又は代替として、ＶＭ１１０に対応する待ち時間感度インジケータの変更を検出する（又は通知される）。次に、カーネルスケジューラ１３５は、（待ち時間感度テーブル１５５内の対応するエントリを調べることを通して）ＶＭ１１０が待ち時間高感度であると判断するとともに、ＶＭ１１０（又はより正確にはＶＣＰＵ１２５）が排他的アフィニティを有するべき１つの物理的ＣＰＵが割り振られるべきであると判断する。示される実施形態では、カーネルスケジューラ１３５は、ＶＣＰＵ１２５への割り振りにＰＣＰＵ１４５１を選択する。しかし、示されるように、ＰＣＰＵ１４５１はタスク３００７を実行中である。さらに、実行キュー３２０１（ＰＣＰＵ１４５１の実行キュー）は、内部に入った３つのタスク（すなわち、タスク３００１、３００２、及び３００３）を有する。したがって、ＶＣＰＵ１２５にＰＣＰＵ１４５１への排他的アフィニティが認められる前に、カーネルスケジューラ１３５は、これらのタスクを他の物理的ＣＰＵに移行する。例えば、図３Ａに示されるように、タスク３００７（現在、ＰＣＰＵ１４５１で実行されている）は、ＰＣＰＵ１４５２で実行されるように直接移行される。タスク３００７が、ＰＣＰＵ１４５３に直接実行されるように移行されてもよく、又は代替的に、実行キュー３２０２若しくは実行キュー３２０３の何れのプロセッサのキューに入れてもよいことに留意されたい。
【００３８】
カーネルスケジューラ１３５は、実行キュー３２０１内で実行待機中のタスクも移行する。したがって、図３Ａに示されるように、タスク３００１は実行キュー３２０２に移行され、タスク３００２及び３００３は実行キュー３２０１から実行キュー３２０３に移行される。このようにして、タスク移行が完了すると、ＰＣＰＵ１４５１は、ＶＣＰＵ１２５のタスクの実行専用にし得る。
【００３９】
図３Ｂに示されるように、ＶＣＰＵ１２５がＶＭ１１０のタスクを実行開始する場合、これらのタスクはＰＣＰＵ１４５１で直接実行される。すなわち、カーネルスケジューラ１３５は一般に、ＶＣＰＵ１２５に関連しない任意のタスクをＰＣＰＵ１４５１で実行することを控える。これは、ＰＣＰＵ１４５１に対応する実行キューがないことによって示されている。しかし、カーネルスケジューラ１３５は、タスクプール３１０からタスクを引き続き受信し、これらのタスクを実行キュー３１０２及び３１０３でスケジュールする。さらに、カーネルスケジューラ１３５は、ＰＣＰＵ１４５２と１４５３との間で負荷バランシングを実行する。すなわち、これらのＰＣＰＵの何れかがアイドルになる場合、カーネルスケジューラ１３５は、他のＰＣＰＵの実行キューからタスクを除去し、アイドルＰＣＰＵの実行キューに移す。しかし、仮にＰＣＰＵ１４５１（ＶＣＰＵ１２５が排他的アフィニティを有する）がアイドルになる場合、カーネルスケジューラ１３５は、そのＰＣＰＵにスケジュールされるべきいかなるタスクも移行しない。
【００４０】
図４は、実施形態による、待ち時間高感度仮想マシンの仮想ＣＰＵに１つ又は複数の物理的ＣＰＵを割り振る方法４００を示す流れ図である。実施形態では、方法４００は、本明細書に記載されるカーネルスケジューラ１３５等のカーネルスケジューラによって実行される。
【００４１】
方法４００はステップ４０５において開始され、カーネルスケジューラは、仮想マシンの状態変化を検出する（又は通知される）。１つ又は複数の実施形態では、カーネルスケジューラが検出する状態変化は、以前は電源オフ状態であった仮想マシンの電源投入である。他の実施形態では、カーネルスケジューラが検出する状態変化は、仮想マシンの待ち時間感度に関連する仮想マシンの構成設定の変化である。次に、ステップ４１０において、カーネルスケジューラは、仮想マシンが待ち時間高感度であるか否かを判断する。上述したように、カーネルスケジューラ１３５の１つ又は複数の実施形態は、待ち時間感度情報を記憶したＲＡＭ内のテーブル（又は同様のデータ構造）を調べて、仮想マシンが、（ａ）Ｙ（又は仮想マシンの待ち時間感度を示す何らかの値）に設定された待ち時間感度インジケータを有するか否か、及び（ｂ）（待ち時間感度テーブル１５５内のエンタイトルメント値によって図２に表されるように）仮想ＣＰＵに十分なＣＰＵエンタイトルメントが設定されているか否かを判断する。本明細書に記載される実施形態では、十分なＣＰＵエンタイトルメントは、１００％で乗算された仮想ＣＰＵ数として表され得る。すなわち、仮想マシンが１つの仮想ＣＰＵを有する場合、十分なＣＰＵエンタイトルメントは１００％である。仮想マシンが２つの仮想ＣＰＵを有する場合、十分なＣＰＵエンタイトルメントは２００％であり、以下同様である。図２に示される実施形態では、エンタイトルメント値が、上述したように、ＣＰＵ確保（すなわち、保証された最小ＣＰＵ割り振り量）を表すことに留意されたい。
【００４２】
ステップ４０５において、カーネルスケジューラ１３５が、仮想マシンが待ち時間高感度ではないと判断する場合、方法４００は終了する。すなわち、仮想マシンの仮想ＣＰＵのプロセスは、非待ち時間高感度仮想マシンに対してカーネルスケジューラによって実施されるスケジューリングポリシーに従ってスケジュールされる。しかし、カーネルスケジューラが、仮想マシンが待ち時間高感度であると判断する場合、方法４００はステップ４１５に進む。
【００４３】
ステップ４１５において、カーネルスケジューラ１３５は、コンピュータホストが、仮想マシンの全ての仮想ＣＰＵの排他的アフィニティをサポートするために十分な数の物理的ＣＰＵを有するか否かを判断する。例えば、コンピュータホスト１００が６つの物理的ＣＰＵを有し、仮想マシンが５つの仮想ＣＰＵを有する場合、カーネルスケジューラ１３５は、仮想マシンの排他的アフィニティをサポートするために不十分な物理的ＣＰＵがあると判断する。これは、非待ち時間高感度タスクに少なくとも２つの物理的ＣＰＵを保持するというポリシーを仮定する。しかし、仮想マシンが４つ以下の仮想ＣＰＵを有する場合、カーネルスケジューラ１３５は、仮想マシンの全ての仮想ＣＰＵの排他的アフィニティをサポートするために十分な物理的ＣＰＵリソースがあると判断する。さらに、利用可能な物理的ＣＰＵのプールは、他の待ち時間高感度仮想マシンに既に割り振られた物理的ＣＰＵの任意の数だけ低減される。
【００４４】
ステップ４１５において、カーネルスケジューラ１３５が、仮想マシンの排他的アフィニティをサポートするために不十分な物理的ＣＰＵリソースがあると判断する場合、方法４００は終了する。しかし、カーネルスケジューラ１３５が、仮想マシンに割り振る十分な物理的ＣＰＵがあると判断する場合、方法４００はステップ４２０に進む。
【００４５】
ステップ４２０において、カーネルスケジューラ１３５は、次の仮想ＣＰＵ（すなわち、仮想マシンの仮想ＣＰＵの１つ）及び（コンピュータホスト１００上の物理的ＣＰＵの１つに対応する）次の物理的ＣＰＵの両方を設定する。カーネルスケジューラ１３５が、ＣＰＵ速度、プロセッサがアイドルであるか否か、物理的ＣＰＵのキューに現在入っているタスク数、及び仮想マシンの非均一メモリアクセス（non-uniform memory access：ＮＵＭＡ）ホームノード割り当て等の様々な要因に基づいて物理的ＣＰＵの選択を行うことに留意されたい。次に、ステップ４２５において、カーネルスケジューラ１３５は、次の物理的ＣＰＵへの排他的アフィニティを有するように、次の仮想ＣＰＵを割り当てる。カーネルスケジューラ１３５は、仮想ＣＰＵと物理的ＣＰＵとを関連付けるメモリ（図示せず）内のデータ構造を更新することにより、この割り当てを行い得る。
【００４６】
ステップ４３０において、カーネルスケジューラ１３５は、次の物理的ＣＰＵで実行中の任意のタスクを中止し、このタスクを別の物理的ＣＰＵに移行する。ターゲット物理的ＣＰＵは、「非排他的」物理的ＣＰＵであり、任意の他の仮想マシンの仮想ＣＰＵは、ターゲット物理的ＣＰＵへの排他的アフィニティを有さない。移行は、カーネルスケジューラが移行されたタスクをそれ自体の実行キューに配置することによってターゲット物理的ＣＰＵのキューに入れることによって行うことができる。幾つかの実施形態では、カーネルスケジューラは、前に実行中であったタスクの優先度又は状態を特定し、優先度に応じて、ターゲット物理的ＣＰＵでの任意の実行中のタスクをプリエンプトし、移行されたタスクをターゲット物理的ＣＰＵで即座に実行開始し得る。
【００４７】
次に、ステップ４３５において、カーネルスケジューラ１３５は、次の物理的ＣＰＵのキューに入れられたタスクを１つ又は複数の他の物理的ＣＰＵに移行する。これらの他のターゲット物理的ＣＰＵは、任意の１つの特定の仮想ＣＰＵのタスク実行専用ではない。換言すれば、任意の他の仮想マシンの仮想ＣＰＵは、ターゲット物理的ＣＰＵのいずれにも排他的アフィニティを有さない。実施形態では、カーネルスケジューラ１３５は、移行されたタスクを次の物理的ＣＰＵの実行キューから除去し、１つ又は複数の実行キュー内に移行タスクを配置することにより、移行タスクをキューに入れ、１つ又は複数の実行キューのそれぞれは、ターゲット物理的ＣＰＵの１つに対応する。仮想マシンに次の物理的ＣＰＵへの排他的アフィニティが認められている場合であっても、次の物理的ＣＰＵから移行することができない幾つかのタスクがあることに留意されたい。これらの例外的タスクについて、更に十分に以下に説明する。次に、方法４００はステップ４３５に進む。
【００４８】
ステップ４４０において、カーネルスケジューラ１３５は、略全てのマシン割り込み処理を次の物理的ＣＰＵからターゲット「非排他的」物理的ＣＰＵに移行する。したがって、次の物理的ＣＰＵが待ち時間高感度仮想マシンの仮想ＣＰＵに割り当てられると、ハードウェア割り込み（通常、対応するデバイスへの割り込みハンドラによってインターセプトされる）は、次の物理的ＣＰＵ以外の物理的ＣＰＵで処理される。例えば、割り込みは、物理的ネットワークアダプタで行われ得る。次に、これに応答して、ハイパーバイザ１３０は、ネットワークアダプタの対応する割り込みハンドラを呼び出し得る。割り込みハンドラは、全てのタスクのように、ＣＰＵ実行サイクルを必要とする。しかし、カーネルスケジューラ１３５は、そのような処理を次の物理的ＣＰＵ（すなわち、待ち時間高感度仮想マシンに割り当てられた物理的ＣＰＵ）から離れて、むしろ、１つ又は複数の「非排他的」物理的ＣＰＵ（すなわち、仮想ＣＰＵが排他的アフィニティを有さない物理的ＣＰＵ）に向ける。ハードウェア割り込み処理の大半は、次の物理的ＣＰＵにスケジュールされないが、移行されない幾つかのハードウェア割り込みがある。そのような割り込みは、ローカルアドバンスト割り込みプログラムコントローラ（ＡＰＩＣ：ａｄｖａｎｃｅｄ  ｉｎｔｅｒｒｕｐｔ  ｐｒｏｇｒａｍ  ｃｏｎｔｒｏｌｌｅｒ）割り込み、プロセッサ間割り込み（ＩＰＩ：ｉｎｔｅｒ−ｐｒｏｃｅｓｓｏｒ  ｉｎｔｅｒｒｕｐｔ）、及び特定のボトムハーフ（ＢＨ：ｂｏｔｔｏｍ−ｈａｌｆ）ハンドラを含み、これらは全て、次の物理的ＣＰＵでローカライズされ、それにより処理されなければならない。
【００４９】
カーネルスケジューラ１３５が次の物理的ＣＰＵから離れて割り込み処理を実施すると、方法４００はステップ４４５に進む。ステップ４４５において、カーネルスケジューラ１３５は、次の物理的ＣＰＵの周波数スケーリングをオフにする。１つ又は複数の実施形態では、周波数スケーリングは、ＣＰＵの負荷要件に応じて、物理的ＣＰＵの周波数の動的切り換えを提供する。したがって、プロセッサが低負荷要件である場合、その周波数は下方調整されて、より低い電力を消費するようにＣＰＵを動作させる。例えば、プロセッサは、２ＧＨｚから６００メガヘルツ（ＭＨｚ）に調整された動作周波数を有し得る。しかし、物理的ＣＰＵの動作周波数の調整は、システム負荷の常時モニタリングを必要とし、これは、実行待ち時間の一因となる処理サイクルを消費する。したがって、排他的アフィニティを有する仮想マシンに割り当てられた物理的ＣＰＵの場合、周波数スケーリングはディセーブルされる。ディセーブルは、実施形態によれば、Ｐ０等の特定の性能状態（「Ｐ状態」）でプロセッサにおいて実行されることにより、達成し得る。この状態は、待ち時間高感度仮想マシンが、周波数スケーリングがディセーブルされる物理的ＣＰＵに排他的アフィニティを有する限り、維持される。
【００５０】
ステップ４５０において、カーネルスケジューラ１３５は、仮想マシンが、１つ又は複数の他のプロセッサへの排他的アフィニティを要求する追加の仮想ＣＰＵを有するか否かを判断する。仮想マシンが更なる仮想ＣＰＵを有さない場合、方法４００は終了する。しかし、仮想マシンが追加の仮想ＣＰＵを有する場合、方法４００はステップ４２０に戻り、カーネルスケジューラ１３５は次の仮想ＣＰＵ及び次の物理的ＣＰＵを設定する。次に、方法４００は、仮想マシンが有する追加の仮想ＣＰＵの数と同じだけ、ステップ４２５〜４５０を繰り返す。仮想マシンの全ての仮想ＣＰＵに、物理的ＣＰＵへの排他的アフィニティが付与されると、方法は終了する。
【００５１】
図５は、１つ又は複数の実施形態による、１つ又は複数の待ち時間高感度仮想マシンの実行をサポートするコンピュータホストにおいてタスクをスケジュールする方法５００を示す流れ図である。方法５００は、上述したカーネルスケジューラ１３５等のコンピュータホストで実行されるカーネルスケジューラによって実行される。
【００５２】
方法５００はステップ５１０において開始され、カーネルスケジューラ１３５は、コンピュータホストで実行されるべきタスクを受信する。図３Ａ及び図３Ｂに示されるように、処理サイクルを必要とするタスクは、タスクプール３１０等のタスクプールから受信し得る。次に、ステップ５２０において、カーネルスケジューラは、実行されるべきタスクが待ち時間高感度仮想ＣＰＵに関連付けられているか否かを判断する。１つ又は複数の実施形態では、カーネルスケジューラ１３５は、タスクが仮想マシンの実行中の仮想ＣＰＵであると判断し、仮想マシンに特定の物理的ＣＰＵへの排他的アフィニティが認められているか否かを更に判断することにより、この判断を行う。カーネルスケジューラ１３５が、仮想マシンが待ち時間高感度であり、したがって、その仮想ＣＰＵが特定の仮想ＣＰＵに対して排他的アフィニティを有すると判断する場合、カーネルスケジューラ１３５は、ステップ５３０において、仮想ＣＰＵが排他的アフィニティを有する物理的ＣＰＵでタスクを即座に実行する。物理的ＣＰＵが既に、スケジュール中の同じ仮想ＣＰＵに対応するタスクを実行中である場合、カーネルスケジューラ１３５が、受信したタスクをその物理的ＣＰＵのキューに入れることに留意されたい。さらに、物理的ＣＰＵが別のタスクを実行中である（例えば、後述するように、「アダプションモード（adoption mode）」で実行中の仮想マシン）場合、カーネルスケジューラ１３５はそのタスクをプリエンプトして、現在受信タスクを実行する。タスクが物理的ＣＰＵに対して実行される（又は実行のためにキューに入れられる）と、方法５００はステップ５７０に進み、カーネルスケジューラ１３５は、スケジュールすべきタスクがまだあるか否かを判断する。
【００５３】
ステップ５２０において、カーネルスケジューラ１３５が、受信タスクが待ち時間高感度仮想ＣＰＵに対応しないと判断する場合、方法５００はステップ５４０に進む。ステップ５４０において、カーネルスケジューラ１３５は、受信タスクが、待ち時間高感度仮想マシンの仮想ＣＰＵが排他的アフィニティを既に有する物理的ＣＰＵに非排他的アフィニティを有する仮想マシンに対応するか否かを判断する。幾つかの実施形態では、マルチプロセッサホストコンピュータ内の１つ又は複数のＣＰＵに対してアフィニティ（affinity）を有するように、仮想マシンを設定することが可能である。そのような実施形態では、そのような仮想マシンは、アフィニティを有すると指定されているプロセッサで実行されることに制限される。しかし、このアフィニティ設定は、排他的アフィニティと異なる。上述したように、排他的アフィニティは、他の（非待ち時間高感度）仮想マシン及びユーザプログラムのタスク及び割り込み処理を専用物理的ＣＰＵから移行させる。さらに、物理的ＣＰＵがアイドルになる場合、スケジューラは、そのＣＰＵに他のタスクをスケジュールすることを避ける。逆に、仮想マシンが物理的ＣＰＵに対して非排他的アフィニティを有する場合、物理的ＣＰＵがアイドルになるとき、カーネルスケジューラはその物理的ＣＰＵに対してタスクをスケジュールする。さらに、特定の仮想ＣＰＵへの非排他的アフィニティが認められている仮想マシンは、その物理的ＣＰＵでのみ実行されなければならない。したがって、仮想マシンに、待ち時間高感度仮想マシンが排他的なアフィニティが認められている物理的ＣＰＵに対して非排他的アフィニティが認められている場合、仮想マシン間の競合が生じる。
【００５４】
この競合を解決するために、カーネルスケジューラ１３５は、物理的ＣＰＵでの実行に向けて、非排他的アフィニティを有する仮想マシンのタスクを「アダプション」モードでスケジュールする。タスクがアダプションモードで実行される場合、待ち時間高感度仮想マシンが排他的アフィニティを有する物理的ＣＰＵを共有することが可能である。しかし、待ち時間高感度仮想マシンの性能を最大化するために、カーネルスケジューラ１３５は、待ち時間高感度仮想マシンを非待ち時間感度仮想マシンよりも高い優先度で実行する。さらに、カーネルスケジューラ１３５は、待ち時間高感度仮想が長期アイドル状態になったときを検出することにより、物理的ＣＰＵで２つの仮想マシン間でのコンテキスト切り換え数を最小化するように動作し得る。それらのときのみ、物理的ＣＰＵで非待ち時間高感度仮想マシンがディスパッチされ実行される。
【００５５】
再び図５を参照すると、カーネルスケジューラが、ステップ５４０において、待ち時間高感度仮想マシンが排他的アフィニティを有する物理的ＣＰＵに、受信タスクが非排他的アフィニティを有すると判断する場合、方法５００はステップ５５０に進み、タスクはその物理的ＣＰＵのキューに入れられ、アダプションモードで実行される。代替的には、幾つかの実施形態では、カーネルスケジューラ１３５は、（物理的ＣＰＵに対して排他的アフィニティを有する）待ち時間高感度仮想ＣＰＵが長期アイドル状態であることを検出し得る。そのような場合、受信タスクは、物理的ＣＰＵで即座に実行され得る。ステップ５５０の後、方法５００はステップ５７０に進み、カーネルスケジューラ１３５は、スケジュールすべきタスクがまだあると判断する。
【００５６】
しかし、カーネルスケジューラ１３５が、ステップ５４０において、待ち時間高感度仮想マシンの仮想ＣＰＵが排他的アフィニティを有する物理的ＣＰＵに、受信タスクが非排他的アフィニティを有さないと判断する場合、方法５００はステップ５６０に進む。ステップ５６０において、カーネルスケジューラ１３５は、仮想ＣＰＵが排他的アフィニティを有さない物理的ＣＰＵで受信タスクを実行する（又はキューに入れる）。ステップ５６０の後、方法５００はステップ５７０に進み、カーネルスケジューラ１３５は、スケジュールすべきタスクがまだあるか否かを判断する。
【００５７】
ステップ５７０において、カーネルスケジューラ１３５が、スケジュールすべきタスクがまだあると判断する場合、方法５００はステップ５１０に戻り、次のタスクが受信される。スケジュールすべきタスクが残っていない場合、方法５００は終了する。
【００５８】
上述した特定の実施形態は、ホストコンピュータの上にハードウェア抽象化レイヤを含む。ハードウェア抽象化レイヤにより、複数のコンテナ（container）がハードウェアリソースを共有することが可能になる。これらのコンテナは、互いから分離され、少なくともユーザアプリケーションが実行される。したがって、ハードウェア抽象化レイヤは、コンテナ間でのリソース分離及び割り振りという利点を提供する。上記実施形態では、仮想マシンはコンテナの例として使用され、ハイパーバイザはハードウェア抽象化レイヤの例として使用される。上述したように、各仮想マシンは、少なくとも１つのアプリケーションが実行されるゲストオペレーティングシステムを含む。これらの実施形態が、本明細書では「ＯＳレスコンテナ（ＯＳ−ｌｅｓｓ  ｃｏｎｔａｉｎｅｒ）」（例えば、ｗｗｗ．ｄｏｃｋｅｒ．ｃｏｍ参照）と呼ばれる、ゲストオペレーティングシステムを含まないコンテナ等のコンテナの他の例にも適用可能なことに留意されたい。ＯＳレスコンテナは、オペレーティングシステムレベル仮想化を実施し、抽象化レイヤは、ホストコンピュータ上のオペレーティングシステムのカーネルの上に提供される。抽象化レイヤは複数のＯＳレスコンテナをサポートし、各ＯＳレスコンテナはアプリケーション及び従属性を含む。各ＯＳレスコンテナは、ホストオペレーティングシステムのユーザ空間で分離プロセスとして実行され、他のコンテナとカーネルを共有する。ＯＳレスコンテナはカーネルの機能に頼り、リソース分離（ＣＰＵ、メモリ、ブロックＩ／Ｏ、ネットワーク等）及び別個の名前空間を利用するとともに、動作環境のアプリケーションビューを完全に分離する。ＯＳレスコンテナを使用することにより、リソースは分離することができ、サービスは制限することができ、プロセスは、各自のプロセスＩＤ空間、ファイルシステム構造、及びネットワークインターフェースを有するオペレーティングシステムのプライベートビューを有するようにプロビジョニングすることができる。複数のコンテナは、同じカーネルを共有することができるが、各コンテナは、ＣＰＵ、メモリ、及びＩ／Ｏ等の定義された量のみのリソースを使用するように制限されることができる。
【００５９】
１つ又は複数の実施形態について、理解を明確にするために本明細書において幾らか詳細に説明したが、本開示の趣旨から逸脱せずに、特定の変更及び変形が行われ得ることを認識されたい。本明細書に記載される様々な実施形態は、コンピュータシステムに記憶されたデータを含む様々なコンピュータ実施動作を利用し得る。例えば、これらの動作は、物理的数量の物理的操作を必要とし得、必ずしもではないが通常、これらの数量は電気信号又は磁気信号の形態を取り得、電気信号又は磁気信号又はそれらの表現は、記憶、転送、結合、比較、又は他の様式での操作が可能である。さらに、そのような操作は、多くの場合、用語に関して、製造、生成、識別、特定、又は比較等と呼ばれる。本開示の１つ又は複数の実施形態の一部をなす本明細書に記載される任意の動作は、有用なマシン動作であり得る。さらに、本開示の１つ又は複数の実施形態は、これらの動作を実行するデバイス又は装置にも関する。装置は特に、特定の所要目的に向けて構築されてもよく、又はコンピュータに記憶されたコンピュータプログラムによって選択的にアクティブ化若しくは構成される汎用コンピュータであってもよい。特に、様々な汎用マシンが、本明細書での教示に従って書かれたコンピュータプログラムと併用され得、又は必要とされる動作を実行するより専用化された装置を構築することがより好都合であり得る。
【００６０】
本明細書に記載される様々な実施形態は、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベース又はプログラマブル消費者電子装置、ミニコンピュータ、メインフレームコンピュータ等を含め、他のコンピュータシステム構成を用いて実施し得る。
【００６１】
本開示の１つ又は複数の実施形態は、１つ若しくは複数のコンピュータプログラムとして、又は１つ若しくは複数のコンピュータ可読媒体で実施される１つ若しくは複数のコンピュータプログラムモジュールとして実施され得る。コンピュータ可読媒体という用語は、データを記憶することができる任意のデータ記憶デバイスを指し、データは後にコンピュータシステムに入力することができ、コンピュータ可読媒体は、コンピュータにより読み出し可能にするようにコンピュータプログラムを実施する任意の既存又は後に開発される技術に基づき得る。コンピュータ可読媒体の例としては、ハードドライブ、ネットワーク接続ストレージ（ＮＡＳ：ｎｅｔｗｏｒｋ  ａｔｔａｃｈｅｄ  ｓｔｏｒａｇｅ）、読み取り専用メモリ、ランダムアクセスメモリ（例えば、フラッシュメモリデバイス）、ＣＤ（コンパクトディスク）−−ＣＤ−ＲＯＭ、ＣＤ−Ｒ、又はＣＤ−ＲＷ、ＤＶＤ（デジタル多用途ディスク）、磁気テープ、並びに他の光学及び非光学データ記憶デバイスが挙げられる。コンピュータ可読媒体は、ネットワーク結合されたコンピュータシステムに分散することもでき、それにより、コンピュータ可読コードは分散して記憶され実行される。
【００６２】
本開示の１つ又は複数の実施形態について、理解を明確にするために幾らか詳細に説明したが、特許請求の範囲内で特定の変更及び変形が行われ得ることが明らかであろう。したがって、記載される実施形態は、限定ではなく例示として見なされるべきであり、特許請求の範囲は、本明細書に付与される詳細に限定されるべきではなく、特許請求の範囲及び均等物内で変更が可能である。特許請求の範囲では、要素及び／又はステップは、特許請求の範囲において明示的に記載される場合を除き、いかなる特定の順序の動作も暗示しない。
【００６３】
多くの変形、変更、追加、及び改善が可能である。複数のインスタンスが、１つのインスタンスとして本明細書に記載される構成要素、動作、又は構造に提供され得る。様々な構成要素、動作、及びデータストア間の境界は幾らか任意のものであり、特定の動作は、特定の例示的な構成の文脈で示されている。機能の他の割り振りが考えられ、本開示の範囲内にあり得る。一般に、例示的な構成において別個の構成要素として提示される構造及び機能は、結合された構造又は構成要素として実施され得る。同様に、１つの構成要素として提示される構造及び機能は、別個の構成要素として実施され得る。これら及び他の変形、変更、追加、及び改善は、添付の特許請求の範囲内にあり得る。
【図１】
2016529613.tif 000003
【図２】
2016529613.tif 000004
【図３Ａ】
2016529613.tif 000005
【図３Ｂ】
2016529613.tif 000006
【図４】
2016529613.tif 000007
【図５】
2016529613.tif 000008
【国際調査報告】
2016529613.tif 000009
2016529613.tif 000010
2016529613.tif 000011