【文献】
山田真大、林 和宏、鈴木章浩、岡本幸太、小林良岳、本田晋也、高田広章,CPU affinityによる汎用OSのリアルタイム性向上手法,情報処理学会研究報告 [online],日本,一般社団法人情報処理学会,2013年 7月24日,Vol.2013-OS-126,No.18,pp.1-7
(58)【調査した分野】(Int.Cl.,DB名)
複数のコンテナの実行をサポートする1つ又は複数の物理的中央演算処理装置(CPU)を有するホストコンピュータにおいて、前記複数のコンテナの各々は、1つ又は複数のプロセスを含み、前記ホストコンピュータは、対応する物理的中央演算処理装置への排他的アフィニティを有するように、前記1つ又は複数のプロセスのうちの少なくとも1つを割り当てる方法を実行するようにプログラムされ、前記方法は、
第1のコンテナが待ち時間の影響を受けやすいと判断するステップと、
前記判断するステップに応答して、1つ又は複数の対応する物理的中央演算処理装置への排他的アフィニティを有するように前記第1のコンテナの1つ又は複数のプロセスの各々を割り当てるステップとを含み、
前記割り当てるステップは、
前記1つ又は複数の対応する物理的中央演算処理装置上で実行中のタスクをホストシステムの1つ又は複数の他の物理的中央演算処理装置に移行するステップと、
前記1つ又は複数の対応する物理的中央演算処理装置のキュータスク及び割り込み処理を前記1つ又は複数の他の物理的中央演算処理装置に実行させるステップと、
前記1つ又は複数のプロセスが排他的アフィニティを有する前記1つ又は複数の対応する物理的中央演算処理装置で前記第1のコンテナの1つ又は複数のプロセスの各々のタスクを実行するステップとを含む、方法。
前記中央演算処理装置エンタイトルメント値の最大値は、前記第1の仮想マシンの各仮想中央演算処理装置が、前記1つ又は複数の物理的中央演算処理装置のうちの1つの全処理能力を消費する許可を有することを示す、請求項8に記載のシステム。
ホストコンピュータによって実行可能な命令を含む非一時的なコンピュータ可読媒体であって、前記ホストコンピュータは、複数のコンテナの実行をサポートする1つ又は複数の物理的中央演算処理装置(CPU)を有し、前記複数のコンテナの各々は1つ又は複数のプロセスを含み、前記命令は、実行されると、対応する物理的中央演算処理装置で排他的に実行されるようにプロセスを割り当てる方法を前記ホストコンピュータに実行させ、前記方法は、
第1のコンテナが待ち時間の影響を受けやすいと判断するステップと、
前記判断するステップに応答して、1つ又は複数の対応する物理的中央演算処理装置への排他的アフィニティを有するように前記第1のコンテナの前記1つ又は複数のプロセスのそれぞれを割り当てるステップとを含み、前記割り当てるステップは、
前記1つ又は複数の対応する物理的中央演算処理装置上で実行中のタスクをホストシステムの前記1つ又は複数の他の物理的中央演算処理装置に移行するステップと、
前記1つ又は複数の対応する物理的中央演算処理装置のキュータスク及び割り込み処理を前記1つ又は複数の他の物理的中央演算処理装置に実行させるステップと、
前記プロセスが排他的アフィニティを有する前記1つ又は複数の対応する中央演算処理装置で前記第1のコンテナの前記1つ又は複数のプロセスのそれぞれのタスクを実行するステップとを含む、コンピュータ可読媒体。
前記中央演算処理装置エンタイトルメント値の最大値は、前記第1の仮想マシンの各仮想中央演算処理装置が、前記1つ又は複数の物理的中央演算処理装置のうちの1つの全処理能力を消費する許可を有することを示す、請求項19に記載のコンピュータ可読媒体。
【発明を実施するための形態】
【0006】
図1は、1つ又は複数の実施形態を実施し得る仮想化コンピューティング環境を示す。示されるように、コンピューティング環境は、ホストコンピュータ100と、仮想マシン(VM)管理サーバ150とを含む。VM管理サーバ150は、ローカル接続を介して、又は代替的にはリモートネットワーク接続(図示せず)を介してホストコンピュータ100と通信する。
【0007】
ホストコンピュータ100は、実施形態では、オペレーティングシステム及び1つ又は複数のアプリケーションプログラムの実行をサポートする汎用コンピュータである。仮想化計算プラットフォームを含む様々な構成要素を実行するために、ホストコンピュータ100は通常、サーバクラスのコンピュータである。しかし、ホストコンピュータ100は、デスクトップ又はラップトップコンピュータであってもよい。
【0008】
図1に示されるように、ホストコンピュータ100は、3つの異なる構成要素に論理的に分割される。第1に、実行空間120は、ユーザレベル(すなわち、非カーネルレベル)プログラムの実行をサポートする。ユーザレベルプログラムは非特権であり、特権命令の実行又はシステムメモリの特定の保護領域へのアクセス等の特定の特権機能を実行することができないことを意味する。実行空間120がサポートするプログラムは、特に、仮想マシン及びユーザプログラムである。
【0009】
仮想マシンは、物理的計算デバイスのソフトウェア実施であり、物理的コンピュータと略同じようにプログラムを実行する。実施形態では、仮想マシンは、ソフトウェアにおいて、ゲストオペレーティングシステム(OS)の制御下でソフトウェアアプリケーションの実行をサポートする計算プラットフォームを実施する。したがって、仮想マシンは通常、特定の計算アーキテクチャをエミュレートする(emulate)。
図1では、実行空間120はVM110
1〜110
Nを含む。示される各VM110は1つ又は複数のアプリケーション111の実行をサポートし、各アプリケーション111は特定のゲストOS112の制御下で実行される。アプリケーション111は、例えば、ワードプロセッサ又はスプレッドシートプログラム(spreadsheet programs)等のユーザレベル(非カーネル)プログラムである。示される各ゲストOS112は、マイクロソフト社(Microsoft Corp.)からの任意のバージョンのウィンドウズ(Windows)(登録商標)オペレーティングシステム、リナックス(Linux)(登録商標)オペレーティングシステム、又はアップル社(Apple, Inc.)からのMac OS(登録商標)X等のよく知られた市販のオペレーティングシステムの1つであり得る。アプリケーション及びゲストOSがVM毎に異なり得ることに留意されたい。したがって、VM110
1内のアプリケーション111
1は、ゲストOS112
1としてウィンドウズ(Windows)(登録商標)7の制御下で実行されるマイクロソフト(Microsoft)のワード(Word)(登録商標)及びエクセル(Excel)(登録商標)アプリケーションを含み得る。これとは対照的に、VM110
N内のアプリケーション111
Nは、ゲストOS112
XとしてMacOS(登録商標)Xの制御下で実行されるサファリ(Safari)(登録商標)ウェブブラウザを含み得る。
【0010】
仮想マシン110
1〜110
Nに加えて、実行空間120は1つ又は複数のユーザプログラム115を含む。実施形態では、ユーザプログラム115は、任意の仮想マシンから独立して実行されるソフトウェア構成要素である。ユーザプログラム115の例としては、カーネルとの通信の促進、ディレクトリサービスの提供等の様々なシステム指向機能(system-oriented functions)を実行するユーティリティが挙げられる。そのようなプログラムは、仮想マシンのように、ユーザレベルで実行され、これらのプログラムが特定の特権(カーネルレベル)機能を実行することができないことを意味する。
図1に示されるように、各VM110
1〜110
N及びユーザプログラム115は、本明細書ではハイパーバイザ130と呼ばれるハイパーバイザ構成要素と通信する。
【0011】
ハイパーバイザ130は、
図1に示されるように、コンピュータホスト100でプロセスを実行するためのオペレーティングシステムプラットフォームを提供する。ハイパーバイザ130は、コンピュータホスト100内の全てのハードウェアデバイスを制御し、そこで実行される全てのアプリケーションのシステムリソースを管理する。ハイパーバイザ130が提供するコア機能は、特に、コンソールサービス、ファイルシステムサービス、デバイスドライバ、及びリソーススケジューリングである。さらに、ハイパーバイザ130は、ホストコンピュータでの1つ又は複数の仮想マシンのインスタンス化を提供するソフトウェア構成要素を実施する。
【0012】
図1の実施形態に示されるように、ハイパーバイザ130は仮想マシンモニタ(VMM)131
1〜131
Nを含む。各VMM131は実行中のVM110に対応する。したがって、VMM131
1はVM110
1に対応し、VMM131
2はVM110
2に対応し、以下同様である。各VMM131は、対応する仮想マシンのゲストOSに仮想ハードウェアプラットフォームを提供するソフトウェアレイヤである。対応するVMが、ハイパーバイザ130のカーネル構成要素(
図1ではカーネル136として示される)によって提供されるサービスにアクセスするのは、特定のVMM131を通してである。カーネル136によって実行される機能は、特に、メモリ管理、ネットワーキング及び記憶スタックの提供、及びプロセススケジューリングである。
【0013】
図1での各VMM131は、対応するVM110の仮想ハードウェアプラットフォームを実施する。実施される仮想ハードウェアプラットフォームの構成要素は、特に、1つ又は複数の仮想中央演算処理装置(又はVCPU)125である。したがって、VMM131
1は第1の組のVCPU125
1を実施し、VMM131
2は第2の組のVCPU125
2を実施し、以下同様である。各VCPU125は、対応するVM110で実行されるアプリケーション111及びゲストOS112の観点から、物理的CPUとして見える。このようにして、仮想マシン内で実行される仮想化ゲストオペレーティングシステムは、コンピュータホストで直接実行されるオペレーティングシステムが(すなわち、非仮想化的に)、物理的CPUでの実行に向けてプロセスをスケジュールしディスパッチするのと同じように、1つ又は複数の仮想CPUでの実行に向けてプロセスをスケジュールし、ディスパッチし得る。しかし、ハイパーバイザ130の観点から(典型的な実施形態では、コンピュータホスト100で直接実行される)、各VCPU125は、コンピュータホスト100の物理的CPUでスケジュールされディスパッチされるプロセスである。
【0014】
1つ又は複数の実施形態では、カーネル136は、コンピュータホスト100のVM110と物理的ハードウェアとの連絡部として機能する。カーネル136は、中央オペレーティングシステム構成要素であり、ホスト100で直接実行される。実施形態では、カーネル136は、メモリを割り振り、物理的CPUへのアクセスをスケジュールし、コンピュータホスト100に接続された物理的ハードウェアデバイスへのアクセスを管理する。
【0015】
図1に示されるように、カーネル136は1つ又は複数のカーネルスレッド132を実行する。カーネルスレッド132は、メモリ及びデバイスの管理等のオペレーティングシステム機能を実行し、(非特権モードで実行される、上述したユーザプログラム115とは対照的に)特権モードで実行されるプロセスである。カーネル136は割り込みモジュール133も含む。実施形態によれば、割り込みモジュール133(割り込みハンドラと呼ばれることもある)は、1つ又は複数のオペレーティングシステム機能を含み、その実行は、ハードウェアデバイスによって生成される等の割り込みの検出によってトリガーされる。割り込みモジュール133は、特定のハードウェアデバイス又はソフトウェアモジュールによって生成される割り込みに応答する幾つかのタイプの割り込みハンドラを含む。割り込みモジュール133内の各割り込みハンドラは、カーネルスレッド132と略同じように、カーネルレベルのプロセスとして実行される。
【0016】
カーネル136はカーネルスケジューラ135も含む。カーネルスケジューラ135は、コンピュータホスト100の物理的CPUでの実行に向けてタスクをスケジュールすることを担う。コンピュータホスト100で実行される全てのタスクが、基本となるハードウェアリソースを共有しなければならないことに留意されたい。これは、ランダムアクセスメモリ、外部ストレージ、及び物理的CPUでの処理時間を含む。したがって、カーネルスケジューラ135が処理に向けてスケジュールするタスクは、VCPU125(VMを実行する仮想CPUである)と、ユーザプログラム115と、カーネルスレッド132と、割り込みモジュール133の一環として実行される割り込みハンドラとを含む。実際に、
図1に示されるように、これらのプロセスタイプのそれぞれは、カーネルスケジューラ135に供給されるものとして示されている。実施形態では、カーネルスケジューラ135は、各物理的CPU(図示せず)に別個の実行キューを保持する。すなわち、カーネルスケジューラ135は、プロセスを特定の物理的CPUの実行キューに配置することにより、その特定の物理的CPUでの実行に向けてそのプロセスをスケジュールする。通常、物理的CPUは、それ自体のキューから実行するプロセスを選択するだけである。
【0017】
しかし、他の物理的CPUが対応する実行キュー内で待機中のジョブを有する間、ある物理的CPUがアイドルにあることが生じ得る。したがって、周期的に、カーネルスケジューラ135はキューをリバランスする。すなわち、特定の物理的CPUの実行キューが長い場合、カーネルスケジューラ135は、その実行キュー内のタスクの幾つかを、あまり忙しくない物理的CPUの実行キューに移す。カーネルスケジューラ135が、個々の物理的CPUの実行キューを保持しリバランスするプロセスについて、より十分に以下に説明する。
【0018】
図1は、コンピュータホスト100の別の構成要素であるハードウェアプラットフォーム140も示す。ハードウェアプラットフォーム140は、コンピュータホスト100の全ての物理的なデバイス、チャネル、及びアダプタを含む。ハードウェアプラットフォーム140は、ネットワーク通信用のネットワークアダプタ(図示せず)と、外部記憶デバイスへの通信を可能にするホストバスアダプタ(HBS:host bus adapter)(図示せず)とを含む。さらに、ハードウェアプラットフォーム140は、コンピュータホスト100の物理的CPU(本明細書ではPCPUと呼ばれる)を含む。
図1に示されるように、コンピュータホスト100はM PCPU145
1〜145
Mを有する。図に示されるように、カーネルスケジューラ135は、1つ又は複数のPCPU145での実行に向けてタスクをスケジュールしディスパッチする。
【0019】
ハードウェアプラットフォーム140はランダムアクセスメモリ(RAM)141も含み、RAM141は、特に、現在実行中のプログラム及びそのようなプログラムに必要とされるデータを記憶する。さらに、カーネルスケジューラ135が各PCPUに保持する実行キューは通常、RAM141内に保持される。
【0020】
待ち時間高感度仮想マシンの実行に必要な構成、識別、及びスケジューリングの変更をサポートするために、
図1に示される実施形態はVM管理サーバ150を含む。VM管理サーバ150は、実施形態では、コンピュータホスト100内又はコンピュータホスト100からリモートに(
図1に示されるように)実行されるサーバアプリケーションである。VM管理サーバ150の実施形態は、システム管理者が1つ又は複数のホストコンピュータでの実行に向けて仮想マシンを定義し、構成し、展開できるようにするインターフェース(グラフィカルユーザインターフェース(又はGUI)等)を提供する。
【0021】
さらに、VM管理サーバ150は待ち時間高感度仮想マシンとしての仮想マシンの構成を提供する。1つ又は複数の実施形態によれば、VM管理サーバ150は待ち時間感度テーブル155を保持し、このテーブルは、仮想マシンの待ち時間感度特徴を定義する。待ち時間感度テーブル155については、更に詳細に以下に説明する。
【0022】
図1に示されるように、VM管理サーバ150は、直接ローカル接続又はコンピュータネットワークを介してコンピュータホスト100と通信する。そのような通信を促進するために、VM管理エージェント134はコンピュータホスト100で実行される。VM管理エージェント134はカーネル136の一部分ではないが、VM管理エージェントの実施形態はハイパーバイザ130内でハイパーバイザレベルで実行される。しかし、他の実施形態では、VM管理エージェント134は、実行空間120内でユーザプログラムとして実行され得る。VM管理エージェント134のプロセスもカーネルスケジューラ135によって実行に向けてスケジュールされることに留意されたい。
【0023】
VM管理エージェント134は、命令をVM管理サーバ150から受信し、VM管理サーバ150の代理としてタスクを実行する。VM管理エージェント134によって実行されるタスクとは、特に、仮想マシンの構成及びインスタント化である。仮想マシンの構成の一態様は、仮想マシンが待ち時間高感度であるか否かである。したがって、VM管理エージェント134は、待ち時間感度テーブル155のコピーを受信し、基本データを待ち時間感度データ143としてRAM141内に保存する。
図1に示されるように、待ち時間感度データ143がRAMに保存されると、カーネルスケジューラ135はその情報にアクセスして、どの仮想マシンが待ち時間高感度であるかを判断する。1つ又は複数の仮想マシンが待ち時間高感度であると判断されると、カーネルスケジューラ135は特定のスケジュール変更を行い、これらの仮想マシンのニーズに応える。
【0024】
図2は、待ち時間感度テーブル155の一実施形態を示すブロック図である。図に示されるように、待ち時間感度テーブル155は複数行(multiple rows)のデータを記憶し、各行はホスト100内の特定の仮想マシンに対応する。各仮想マシンは、一意のVM ID210によってホスト上で識別される。VM ID210は、仮想マシンに関連付けられた任意の一意の二進値又は英数値であり得る。
図2に示されるように、待ち時間感度テーブル155は、
図1に示されるN個の仮想マシンVM110
1〜110
Nに対応するN個のエントリ(VM ID210
1〜210
Nの)を有する。
【0025】
VM ID210毎に、待ち時間感度テーブル155は2つの値を記憶する。第1の値は待ち時間感度インジケータである。このインジケータは2つの別個の値(Y又はN等)を有し、この値は、対応する仮想マシンが待ち時間高感度であるか否かを示す。他の実施形態では、待ち時間感度インジケータは3つ以上の値(例えば、高、中、低、又は普通)を有し、対応する仮想マシンの異なる程度の待ち時間感度の指定を提供する。
図2では、VM ID210
1(VM110
1に対応する)は、待ち時間感度インジケータがYに設定されているため、待ち時間高感度の仮想マシンを識別する。他方、(VM110
2及び110
Nにそれぞれ対応する)VM ID210
2及びVM ID210
Nは、対応する待ち時間感度インジケータがNに設定されているため、待ち時間高感度仮想マシンではない仮想マシンを識別する。例えば、VM110
1は、リアルタイム金融取引アプリケーションを実行する仮想マシンであり、一方、VM110
2及び110
Nは、通常、瞬時応答時間を必要とせず、一般に、仮想化コンピューティング環境で生じ得るジッタによる影響を受けないバッチ処理アプリケーション(課金システム等)を実行する仮想マシンであり得る。
【0026】
待ち時間感度テーブル155が記憶する第2の値は、「エンタイトルメント(entitlement)」値である。仮想マシンのCPUリソースエンタイトルメントは、CPU確保値、CPU制限値、及びCPU共有値を指定することによって調整し得る。CPU確保値は、仮想マシンへのCPUリソースの保証された最小割り振りを表す。逆に、CPU制限値は、仮想マシンへのCPUリソースの最大割り振りを表す。最後に、CPU共有値は、他の仮想マシンに割り振られたCPUリソースの量に相対して仮想マシンに割り振られるCPUリソース量を表す。したがって、CPUが割り振りを共有する場合、仮想マシンのCPUエンタイトルメントは、他の仮想マシンが電源オン(powered-on)、電源オフ(powered-off)、又は各自のCPU共有値が構成される際、動的に変更され得る。
【0027】
図2に示される実施形態では、エンタイトルメント値は割合である。この実施形態では、エンタイトルメント値は、所与のVMの仮想CPUのCPUリソースの確保割合(すなわち、CPU確保値)を表す。すなわち、エンタイトルメント値によって表される確保は、対応する仮想マシンに保証された最小割り振りを指定する。実施形態によれば、仮想マシンは、その仮想マシンの確保を満たすために十分な未確保CPUリソースが利用可能な場合のみ、電源オンされ得る。エンタイトルメント値が割合として表現されることに限定されないことに留意されたい。他の実施形態では、エンタイトルメント値は、確保されたCPUサイクル数(ギガヘルツ(GHz)単位でのプロセッサの速度の特定の部分等)として表現され得る。
【0028】
図2では、(VM ID210
1によって識別されるように)VM110
1は、100パーセント(%)のエンタイトルメント値を有し、物理的CPUの100%がVM110
1に関連付けられたVCPU(すなわち、VCPU125
1)に確保されることを意味する。この例では、VM110
1が1つのみのVCP125を有すると仮定されることに留意されたい。しかし、VM110
1が2つ以上のVCPUを有する場合、それらのVCPUのそれぞれは、1つの物理的CPUの確保容量の100%を共有する。
【0029】
図2を参照すると、(VM ID210
2によって識別されるように)VM110
2は、100%の対応するエンタイトルメント値を有する。したがって、(Nに設定された待ち時間感度インジケータによって示されるように)VM110
2は待ち時間高感度ではないが、ホストは、物理的CPUの容量の100%をVM110
2に確保する。さらに、(VM ID210
Nによって識別されるように)VM110
Nは、50%というエンタイトルメント値を有し、物理的CPUの容量の50%が、その仮想マシンの仮想CPU(すなわち、VCPU125
N)の実行に確保されることを意味する。
【0030】
1つ又は複数の実施形態によれば、仮想マシンが待ち時間高感度であり、且つ最大エンタイトルメント値を有する場合、その仮想マシンには、1つ又は複数の物理的CPUへの排他的アフィニティ(exclusive affinity)が認められる。例えば、VM110
1が1つの仮想CPU VCPU125
1を有すると仮定すると、VM110
1(又は同等に、VCPU125
1)には、コンピュータホスト100内の1つの物理的CPU(すなわち、PCPU145
1〜145
Mの1つ)への排他的アフィニティが付与される。他方、VM110
1が2つの仮想CPUを有する場合、両方の仮想CPUに物理的CPUへの排他的アフィニティが付与されるように、VM ID210
1の待ち時間感度テーブル155内のエンタイトルメント値は、200%に設定される(すなわち、VM110
1に対応する1組のVCPU125
1内の各仮想CPUに100%を確保)。
【0031】
仮想マシンの仮想CPUが物理的CPUへの排他的アフィニティを有する場合、物理的CPUは、効率的に、その特定の仮想CPUの実行専用である。すなわち、カーネルスケジューラ(すなわち、カーネルスケジューラ135)は、物理的CPUがアイドル状態であっても、仮想CPUが排他的アフィニティを有する物理的CPUでのいかなるプロセスの実行のスケジュールも避ける。さらに、カーネルスケジューラ135は、物理的CPUでの大半の割り込み処理のスケジュールも割ける。その代わり、仮想CPUが他の物理的CPUへの排他的アフィニティを有さない場合、割り込み処理はそのような他の物理的CPUでスケジュールされディスパッチされる。
【0032】
さらに、実行中の仮想マシンが、Yに動的に設定された待ち時間感度インジケータを有するとともに、最大割合値に動的に設定されたエンタイトルメントを有する場合、カーネルスケジューラ135はそれらの構成変更を検出する(又はそれらの構成変更が通知される)。さらに、カーネルスケジューラ135は、待ち時間感度インジケータが以前はYに設定され、エンタイトルメントが以前は最大割合に設定されていた仮想マシンが電源投入されたときを検出する(又はそのときが通知される)。何れの場合でも、カーネルスケジューラ135は、所要数の物理的CPUを仮想マシンの仮想CPUに割り振るステップをとる。したがって、仮想マシンの電源投入時(又は代替的には、仮想マシンの待ち時間感度インジケータ及びエンタイトルメントが変更されたとき)に、全ての物理的CPUがタスクを実行中である場合、カーネルスケジューラ135は、実行中のタスクをある物理的CPUから別の物理的CPUに移行する。カーネルスケジュールは、仮想マシンの仮想CPUの数と同じ数の物理的CPUに対してこの移行を実行する。したがって、仮想マシンの仮想CPUが、実行する必要があるタスクを有する場合、それらのタスクは、いかなるスケジューリングオーバーヘッド又はコンテキスト切り換えオーバーヘッドを発生させずに、割り振られた物理的CPUで直接実行される。さらに、実施形態によれば、カーネルスケジューラ135は、最小数の物理的CPUが非待ち時間高感度仮想マシンのタスクの処理に利用可能なことを保証する。これらの実施形態では、待ち時間高感度仮想マシンに電源が投入され、幾つかの物理的CPUが割り振られると、結果として、非待ち時間高感度タスクの処理に利用可能な物理的CPUの数はこの最小数未満になり、その場合、その仮想マシンは電源投入されない。
【0033】
仮想マシンが、最大確保割合に設定されたエンタイトルメント値(すなわち、その仮想マシンの仮想CPUのそれぞれについて100%)を有し得るが、いかなる特定の物理的CPUにも排他的アフィニティをまだ有さないことを留意されたい。この事例の例は、待ち時間感度テーブル155内のVM ID210
2で
図2に示されている。VM ID210
2は、100%のエンタイトルメント値を有する(これは、VM110
2が1つの仮想CPUを有すると仮定して、最大確保割合である)。しかし、
図2に示されるように、VM ID210
2は、Nに設定された待ち時間感度インジケータを有し、VM110
2が待ち時間高感度ではないことを意味する。この場合、カーネルスケジューラ135は、VM110
2の仮想CPU(すなわち、VCPU125
2)に、所与の物理的CPUの全(すなわち、100%)割り振りが付与されることを保証する。しかし、この場合、VCPU125
2は、物理的CPUへの排他的アクセスを有さない。すなわち、VCPU125
2に割り振られた物理的CPUがアイドルになる場合、カーネルスケジューラ135は、他のタスクをこの物理的CPUにスケジュールする。VCPU125
2がアクティブになる場合、これらの他のタスクは(最終的に)プリエンプトされ、VCPU125
2のタスクは、その物理的CPUでの処理に向けてスケジュールされる。しかし、これは、VCPU125
1が所与の物理的CPUに対して有する排他的アフィニティとは異なり、その理由は、VCPU125
2の場合では、その物理的CPUがアイドルになったとき、スケジューリングオーバーヘッドが、その物理的CPUでの他のタスクのスケジューリング、実行、及びプリエンプトによって生じるためである。上述したように、物理的CPUに対して排他的アフィニティを有する仮想マシン(待ち時間高感度VM110
1等)の場合、このスケジューリングオーバーヘッドは効率的になくなる。
【0034】
待ち時間高感度仮想マシンに、1つ又は複数の特定の物理的CPUへの排他的アフィニティが付与されるが、別のプロセス(仮想マシンの仮想CPUに関連しない)が、希であるが、1つ又は複数の特定の物理的CPUで実行されることが可能なことにも留意されたい。これらの例外的状況について、更に詳細に以下に説明する。
【0035】
図3A及び
図3Bは、1つ又は複数の実施形態による、待ち時間高感度仮想マシンの仮想CPUへの物理的CPUの割り振りを示す概念図である。
図3Aでは、VM110は、(待ち時間感度テーブル155内のエントリによって前に定義されたように)待ち時間高感度仮想マシンであり、十分なエンタイトルメント値(すなわち、仮想CPUのそれぞれに100%の確保)を有する。
図3AのVM110は1つのVCPU125を有し、(単に例示を目的として)これはVM110の部分であるものとして示されている。
【0036】
図3Aでは、カーネルスケジューラ135は、まず、タスクをタスクプール310から受信することによってそれらのタスクをスケジュールし、タスクプール310は、物理的CPUでの実行時間を必要とするタスクを含む。
図3Aでは、1つのみの未スケジューリングタスク(タスク300
9)がタスクプール310内にある。次に、カーネルスケジューラ135は、各タスクを実行キュー320に入れ、各実行キュー320は物理的CPU(PCPU)145に対応する。
図3Aの実施形態が3つのPCPU145
1〜145
3を有することに留意されたい。したがって、実行キュー320
1はPCPU145
1のタスクを入れ、実行キュー320
2はPCPU145
2のタスクを入れ、実行キュー320
3はPCPU145
3のタスクを入れる。
【0037】
図中、カーネルスケジューラ135は、VM110の電源投入又は代替として、VM110に対応する待ち時間感度インジケータの変更を検出する(又は通知される)。次に、カーネルスケジューラ135は、(待ち時間感度テーブル155内の対応するエントリを調べることを通して)VM110が待ち時間高感度であると判断するとともに、VM110(又はより正確にはVCPU125)が排他的アフィニティを有するべき1つの物理的CPUが割り振られるべきであると判断する。示される実施形態では、カーネルスケジューラ135は、VCPU125への割り振りにPCPU145
1を選択する。しかし、示されるように、PCPU145
1はタスク300
7を実行中である。さらに、実行キュー320
1(PCPU145
1の実行キュー)は、内部に入った3つのタスク(すなわち、タスク300
1、300
2、及び300
3)を有する。したがって、VCPU125にPCPU145
1への排他的アフィニティが認められる前に、カーネルスケジューラ135は、これらのタスクを他の物理的CPUに移行する。例えば、
図3Aに示されるように、タスク300
7(現在、PCPU145
1で実行されている)は、PCPU145
2で実行されるように直接移行される。タスク300
7が、PCPU145
3に直接実行されるように移行されてもよく、又は代替的に、実行キュー320
2若しくは実行キュー320
3の何れのプロセッサのキューに入れてもよいことに留意されたい。
【0038】
カーネルスケジューラ135は、実行キュー320
1内で実行待機中のタスクも移行する。したがって、
図3Aに示されるように、タスク300
1は実行キュー320
2に移行され、タスク300
2及び300
3は実行キュー320
1から実行キュー320
3に移行される。このようにして、タスク移行が完了すると、PCPU145
1は、VCPU125のタスクの実行専用にし得る。
【0039】
図3Bに示されるように、VCPU125がVM110のタスクを実行開始する場合、これらのタスクはPCPU145
1で直接実行される。すなわち、カーネルスケジューラ135は一般に、VCPU125に関連しない任意のタスクをPCPU145
1で実行することを控える。これは、PCPU145
1に対応する実行キューがないことによって示されている。しかし、カーネルスケジューラ135は、タスクプール310からタスクを引き続き受信し、これらのタスクを実行キュー310
2及び310
3でスケジュールする。さらに、カーネルスケジューラ135は、PCPU145
2と145
3との間で負荷バランシングを実行する。すなわち、これらのPCPUの何れかがアイドルになる場合、カーネルスケジューラ135は、他のPCPUの実行キューからタスクを除去し、アイドルPCPUの実行キューに移す。しかし、仮にPCPU145
1(VCPU125が排他的アフィニティを有する)がアイドルになる場合、カーネルスケジューラ135は、そのPCPUにスケジュールされるべきいかなるタスクも移行しない。
【0040】
図4は、実施形態による、待ち時間高感度仮想マシンの仮想CPUに1つ又は複数の物理的CPUを割り振る方法400を示す流れ図である。実施形態では、方法400は、本明細書に記載されるカーネルスケジューラ135等のカーネルスケジューラによって実行される。
【0041】
方法400はステップ405において開始され、カーネルスケジューラは、仮想マシンの状態変化を検出する(又は通知される)。1つ又は複数の実施形態では、カーネルスケジューラが検出する状態変化は、以前は電源オフ状態であった仮想マシンの電源投入である。他の実施形態では、カーネルスケジューラが検出する状態変化は、仮想マシンの待ち時間感度に関連する仮想マシンの構成設定の変化である。次に、ステップ410において、カーネルスケジューラは、仮想マシンが待ち時間高感度であるか否かを判断する。上述したように、カーネルスケジューラ135の1つ又は複数の実施形態は、待ち時間感度情報を記憶したRAM内のテーブル(又は同様のデータ構造)を調べて、仮想マシンが、(a)Y(又は仮想マシンの待ち時間感度を示す何らかの値)に設定された待ち時間感度インジケータを有するか否か、及び(b)(待ち時間感度テーブル155内のエンタイトルメント値によって
図2に表されるように)仮想CPUに十分なCPUエンタイトルメントが設定されているか否かを判断する。本明細書に記載される実施形態では、十分なCPUエンタイトルメントは、100%で乗算された仮想CPU数として表され得る。すなわち、仮想マシンが1つの仮想CPUを有する場合、十分なCPUエンタイトルメントは100%である。仮想マシンが2つの仮想CPUを有する場合、十分なCPUエンタイトルメントは200%であり、以下同様である。
図2に示される実施形態では、エンタイトルメント値が、上述したように、CPU確保(すなわち、保証された最小CPU割り振り量)を表すことに留意されたい。
【0042】
ステップ405において、カーネルスケジューラ135が、仮想マシンが待ち時間高感度ではないと判断する場合、方法400は終了する。すなわち、仮想マシンの仮想CPUのプロセスは、非待ち時間高感度仮想マシンに対してカーネルスケジューラによって実施されるスケジューリングポリシーに従ってスケジュールされる。しかし、カーネルスケジューラが、仮想マシンが待ち時間高感度であると判断する場合、方法400はステップ415に進む。
【0043】
ステップ415において、カーネルスケジューラ135は、コンピュータホストが、仮想マシンの全ての仮想CPUの排他的アフィニティをサポートするために十分な数の物理的CPUを有するか否かを判断する。例えば、コンピュータホスト100が6つの物理的CPUを有し、仮想マシンが5つの仮想CPUを有する場合、カーネルスケジューラ135は、仮想マシンの排他的アフィニティをサポートするために不十分な物理的CPUがあると判断する。これは、非待ち時間高感度タスクに少なくとも2つの物理的CPUを保持するというポリシーを仮定する。しかし、仮想マシンが4つ以下の仮想CPUを有する場合、カーネルスケジューラ135は、仮想マシンの全ての仮想CPUの排他的アフィニティをサポートするために十分な物理的CPUリソースがあると判断する。さらに、利用可能な物理的CPUのプールは、他の待ち時間高感度仮想マシンに既に割り振られた物理的CPUの任意の数だけ低減される。
【0044】
ステップ415において、カーネルスケジューラ135が、仮想マシンの排他的アフィニティをサポートするために不十分な物理的CPUリソースがあると判断する場合、方法400は終了する。しかし、カーネルスケジューラ135が、仮想マシンに割り振る十分な物理的CPUがあると判断する場合、方法400はステップ420に進む。
【0045】
ステップ420において、カーネルスケジューラ135は、次の仮想CPU(すなわち、仮想マシンの仮想CPUの1つ)及び(コンピュータホスト100上の物理的CPUの1つに対応する)次の物理的CPUの両方を設定する。カーネルスケジューラ135が、CPU速度、プロセッサがアイドルであるか否か、物理的CPUのキューに現在入っているタスク数、及び仮想マシンの非均一メモリアクセス(non-uniform memory access:NUMA)ホームノード割り当て等の様々な要因に基づいて物理的CPUの選択を行うことに留意されたい。次に、ステップ425において、カーネルスケジューラ135は、次の物理的CPUへの排他的アフィニティを有するように、次の仮想CPUを割り当てる。カーネルスケジューラ135は、仮想CPUと物理的CPUとを関連付けるメモリ(図示せず)内のデータ構造を更新することにより、この割り当てを行い得る。
【0046】
ステップ430において、カーネルスケジューラ135は、次の物理的CPUで実行中の任意のタスクを中止し、このタスクを別の物理的CPUに移行する。ターゲット物理的CPUは、「非排他的」物理的CPUであり、任意の他の仮想マシンの仮想CPUは、ターゲット物理的CPUへの排他的アフィニティを有さない。移行は、カーネルスケジューラが移行されたタスクをそれ自体の実行キューに配置することによってターゲット物理的CPUのキューに入れることによって行うことができる。幾つかの実施形態では、カーネルスケジューラは、前に実行中であったタスクの優先度又は状態を特定し、優先度に応じて、ターゲット物理的CPUでの任意の実行中のタスクをプリエンプトし、移行されたタスクをターゲット物理的CPUで即座に実行開始し得る。
【0047】
次に、ステップ435において、カーネルスケジューラ135は、次の物理的CPUのキューに入れられたタスクを1つ又は複数の他の物理的CPUに移行する。これらの他のターゲット物理的CPUは、任意の1つの特定の仮想CPUのタスク実行専用ではない。換言すれば、任意の他の仮想マシンの仮想CPUは、ターゲット物理的CPUのいずれにも排他的アフィニティを有さない。実施形態では、カーネルスケジューラ135は、移行されたタスクを次の物理的CPUの実行キューから除去し、1つ又は複数の実行キュー内に移行タスクを配置することにより、移行タスクをキューに入れ、1つ又は複数の実行キューのそれぞれは、ターゲット物理的CPUの1つに対応する。仮想マシンに次の物理的CPUへの排他的アフィニティが認められている場合であっても、次の物理的CPUから移行することができない幾つかのタスクがあることに留意されたい。これらの例外的タスクについて、更に十分に以下に説明する。次に、方法400はステップ435に進む。
【0048】
ステップ440において、カーネルスケジューラ135は、略全てのマシン割り込み処理を次の物理的CPUからターゲット「非排他的」物理的CPUに移行する。したがって、次の物理的CPUが待ち時間高感度仮想マシンの仮想CPUに割り当てられると、ハードウェア割り込み(通常、対応するデバイスへの割り込みハンドラによってインターセプトされる)は、次の物理的CPU以外の物理的CPUで処理される。例えば、割り込みは、物理的ネットワークアダプタで行われ得る。次に、これに応答して、ハイパーバイザ130は、ネットワークアダプタの対応する割り込みハンドラを呼び出し得る。割り込みハンドラは、全てのタスクのように、CPU実行サイクルを必要とする。しかし、カーネルスケジューラ135は、そのような処理を次の物理的CPU(すなわち、待ち時間高感度仮想マシンに割り当てられた物理的CPU)から離れて、むしろ、1つ又は複数の「非排他的」物理的CPU(すなわち、仮想CPUが排他的アフィニティを有さない物理的CPU)に向ける。ハードウェア割り込み処理の大半は、次の物理的CPUにスケジュールされないが、移行されない幾つかのハードウェア割り込みがある。そのような割り込みは、ローカルアドバンスト割り込みプログラムコントローラ(APIC:advanced interrupt program controller)割り込み、プロセッサ間割り込み(IPI:inter−processor interrupt)、及び特定のボトムハーフ(BH:bottom−half)ハンドラを含み、これらは全て、次の物理的CPUでローカライズされ、それにより処理されなければならない。
【0049】
カーネルスケジューラ135が次の物理的CPUから離れて割り込み処理を実施すると、方法400はステップ445に進む。ステップ445において、カーネルスケジューラ135は、次の物理的CPUの周波数スケーリングをオフにする。1つ又は複数の実施形態では、周波数スケーリングは、CPUの負荷要件に応じて、物理的CPUの周波数の動的切り換えを提供する。したがって、プロセッサが低負荷要件である場合、その周波数は下方調整されて、より低い電力を消費するようにCPUを動作させる。例えば、プロセッサは、2GHzから600メガヘルツ(MHz)に調整された動作周波数を有し得る。しかし、物理的CPUの動作周波数の調整は、システム負荷の常時モニタリングを必要とし、これは、実行待ち時間の一因となる処理サイクルを消費する。したがって、排他的アフィニティを有する仮想マシンに割り当てられた物理的CPUの場合、周波数スケーリングはディセーブルされる。ディセーブルは、実施形態によれば、P0等の特定の性能状態(「P状態」)でプロセッサにおいて実行されることにより、達成し得る。この状態は、待ち時間高感度仮想マシンが、周波数スケーリングがディセーブルされる物理的CPUに排他的アフィニティを有する限り、維持される。
【0050】
ステップ450において、カーネルスケジューラ135は、仮想マシンが、1つ又は複数の他のプロセッサへの排他的アフィニティを要求する追加の仮想CPUを有するか否かを判断する。仮想マシンが更なる仮想CPUを有さない場合、方法400は終了する。しかし、仮想マシンが追加の仮想CPUを有する場合、方法400はステップ420に戻り、カーネルスケジューラ135は次の仮想CPU及び次の物理的CPUを設定する。次に、方法400は、仮想マシンが有する追加の仮想CPUの数と同じだけ、ステップ425〜450を繰り返す。仮想マシンの全ての仮想CPUに、物理的CPUへの排他的アフィニティが付与されると、方法は終了する。
【0051】
図5は、1つ又は複数の実施形態による、1つ又は複数の待ち時間高感度仮想マシンの実行をサポートするコンピュータホストにおいてタスクをスケジュールする方法500を示す流れ図である。方法500は、上述したカーネルスケジューラ135等のコンピュータホストで実行されるカーネルスケジューラによって実行される。
【0052】
方法500はステップ510において開始され、カーネルスケジューラ135は、コンピュータホストで実行されるべきタスクを受信する。
図3A及び
図3Bに示されるように、処理サイクルを必要とするタスクは、タスクプール310等のタスクプールから受信し得る。次に、ステップ520において、カーネルスケジューラは、実行されるべきタスクが待ち時間高感度仮想CPUに関連付けられているか否かを判断する。1つ又は複数の実施形態では、カーネルスケジューラ135は、タスクが仮想マシンの実行中の仮想CPUであると判断し、仮想マシンに特定の物理的CPUへの排他的アフィニティが認められているか否かを更に判断することにより、この判断を行う。カーネルスケジューラ135が、仮想マシンが待ち時間高感度であり、したがって、その仮想CPUが特定の仮想CPUに対して排他的アフィニティを有すると判断する場合、カーネルスケジューラ135は、ステップ530において、仮想CPUが排他的アフィニティを有する物理的CPUでタスクを即座に実行する。物理的CPUが既に、スケジュール中の同じ仮想CPUに対応するタスクを実行中である場合、カーネルスケジューラ135が、受信したタスクをその物理的CPUのキューに入れることに留意されたい。さらに、物理的CPUが別のタスクを実行中である(例えば、後述するように、「アダプションモード(adoption mode)」で実行中の仮想マシン)場合、カーネルスケジューラ135はそのタスクをプリエンプトして、現在受信タスクを実行する。タスクが物理的CPUに対して実行される(又は実行のためにキューに入れられる)と、方法500はステップ570に進み、カーネルスケジューラ135は、スケジュールすべきタスクがまだあるか否かを判断する。
【0053】
ステップ520において、カーネルスケジューラ135が、受信タスクが待ち時間高感度仮想CPUに対応しないと判断する場合、方法500はステップ540に進む。ステップ540において、カーネルスケジューラ135は、受信タスクが、待ち時間高感度仮想マシンの仮想CPUが排他的アフィニティを既に有する物理的CPUに非排他的アフィニティを有する仮想マシンに対応するか否かを判断する。幾つかの実施形態では、マルチプロセッサホストコンピュータ内の1つ又は複数のCPUに対してアフィニティ(affinity)を有するように、仮想マシンを設定することが可能である。そのような実施形態では、そのような仮想マシンは、アフィニティを有すると指定されているプロセッサで実行されることに制限される。しかし、このアフィニティ設定は、排他的アフィニティと異なる。上述したように、排他的アフィニティは、他の(非待ち時間高感度)仮想マシン及びユーザプログラムのタスク及び割り込み処理を専用物理的CPUから移行させる。さらに、物理的CPUがアイドルになる場合、スケジューラは、そのCPUに他のタスクをスケジュールすることを避ける。逆に、仮想マシンが物理的CPUに対して非排他的アフィニティを有する場合、物理的CPUがアイドルになるとき、カーネルスケジューラはその物理的CPUに対してタスクをスケジュールする。さらに、特定の仮想CPUへの非排他的アフィニティが認められている仮想マシンは、その物理的CPUでのみ実行されなければならない。したがって、仮想マシンに、待ち時間高感度仮想マシンが排他的なアフィニティが認められている物理的CPUに対して非排他的アフィニティが認められている場合、仮想マシン間の競合が生じる。
【0054】
この競合を解決するために、カーネルスケジューラ135は、物理的CPUでの実行に向けて、非排他的アフィニティを有する仮想マシンのタスクを「アダプション」モードでスケジュールする。タスクがアダプションモードで実行される場合、待ち時間高感度仮想マシンが排他的アフィニティを有する物理的CPUを共有することが可能である。しかし、待ち時間高感度仮想マシンの性能を最大化するために、カーネルスケジューラ135は、待ち時間高感度仮想マシンを非待ち時間感度仮想マシンよりも高い優先度で実行する。さらに、カーネルスケジューラ135は、待ち時間高感度仮想が長期アイドル状態になったときを検出することにより、物理的CPUで2つの仮想マシン間でのコンテキスト切り換え数を最小化するように動作し得る。それらのときのみ、物理的CPUで非待ち時間高感度仮想マシンがディスパッチされ実行される。
【0055】
再び
図5を参照すると、カーネルスケジューラが、ステップ540において、待ち時間高感度仮想マシンが排他的アフィニティを有する物理的CPUに、受信タスクが非排他的アフィニティを有すると判断する場合、方法500はステップ550に進み、タスクはその物理的CPUのキューに入れられ、アダプションモードで実行される。代替的には、幾つかの実施形態では、カーネルスケジューラ135は、(物理的CPUに対して排他的アフィニティを有する)待ち時間高感度仮想CPUが長期アイドル状態であることを検出し得る。そのような場合、受信タスクは、物理的CPUで即座に実行され得る。ステップ550の後、方法500はステップ570に進み、カーネルスケジューラ135は、スケジュールすべきタスクがまだあると判断する。
【0056】
しかし、カーネルスケジューラ135が、ステップ540において、待ち時間高感度仮想マシンの仮想CPUが排他的アフィニティを有する物理的CPUに、受信タスクが非排他的アフィニティを有さないと判断する場合、方法500はステップ560に進む。ステップ560において、カーネルスケジューラ135は、仮想CPUが排他的アフィニティを有さない物理的CPUで受信タスクを実行する(又はキューに入れる)。ステップ560の後、方法500はステップ570に進み、カーネルスケジューラ135は、スケジュールすべきタスクがまだあるか否かを判断する。
【0057】
ステップ570において、カーネルスケジューラ135が、スケジュールすべきタスクがまだあると判断する場合、方法500はステップ510に戻り、次のタスクが受信される。スケジュールすべきタスクが残っていない場合、方法500は終了する。
【0058】
上述した特定の実施形態は、ホストコンピュータの上にハードウェア抽象化レイヤを含む。ハードウェア抽象化レイヤにより、複数のコンテナ(container)がハードウェアリソースを共有することが可能になる。これらのコンテナは、互いから分離され、少なくともユーザアプリケーションが実行される。したがって、ハードウェア抽象化レイヤは、コンテナ間でのリソース分離及び割り振りという利点を提供する。上記実施形態では、仮想マシンはコンテナの例として使用され、ハイパーバイザはハードウェア抽象化レイヤの例として使用される。上述したように、各仮想マシンは、少なくとも1つのアプリケーションが実行されるゲストオペレーティングシステムを含む。これらの実施形態が、本明細書では「OSレスコンテナ(OS−less container)」(例えば、www.docker.com参照)と呼ばれる、ゲストオペレーティングシステムを含まないコンテナ等のコンテナの他の例にも適用可能なことに留意されたい。OSレスコンテナは、オペレーティングシステムレベル仮想化を実施し、抽象化レイヤは、ホストコンピュータ上のオペレーティングシステムのカーネルの上に提供される。抽象化レイヤは複数のOSレスコンテナをサポートし、各OSレスコンテナはアプリケーション及び従属性を含む。各OSレスコンテナは、ホストオペレーティングシステムのユーザ空間で分離プロセスとして実行され、他のコンテナとカーネルを共有する。OSレスコンテナはカーネルの機能に頼り、リソース分離(CPU、メモリ、ブロックI/O、ネットワーク等)及び別個の名前空間を利用するとともに、動作環境のアプリケーションビューを完全に分離する。OSレスコンテナを使用することにより、リソースは分離することができ、サービスは制限することができ、プロセスは、各自のプロセスID空間、ファイルシステム構造、及びネットワークインターフェースを有するオペレーティングシステムのプライベートビューを有するようにプロビジョニングすることができる。複数のコンテナは、同じカーネルを共有することができるが、各コンテナは、CPU、メモリ、及びI/O等の定義された量のみのリソースを使用するように制限されることができる。
【0059】
1つ又は複数の実施形態について、理解を明確にするために本明細書において幾らか詳細に説明したが、本開示の趣旨から逸脱せずに、特定の変更及び変形が行われ得ることを認識されたい。本明細書に記載される様々な実施形態は、コンピュータシステムに記憶されたデータを含む様々なコンピュータ実施動作を利用し得る。例えば、これらの動作は、物理的数量の物理的操作を必要とし得、必ずしもではないが通常、これらの数量は電気信号又は磁気信号の形態を取り得、電気信号又は磁気信号又はそれらの表現は、記憶、転送、結合、比較、又は他の様式での操作が可能である。さらに、そのような操作は、多くの場合、用語に関して、製造、生成、識別、特定、又は比較等と呼ばれる。本開示の1つ又は複数の実施形態の一部をなす本明細書に記載される任意の動作は、有用なマシン動作であり得る。さらに、本開示の1つ又は複数の実施形態は、これらの動作を実行するデバイス又は装置にも関する。装置は特に、特定の所要目的に向けて構築されてもよく、又はコンピュータに記憶されたコンピュータプログラムによって選択的にアクティブ化若しくは構成される汎用コンピュータであってもよい。特に、様々な汎用マシンが、本明細書での教示に従って書かれたコンピュータプログラムと併用され得、又は必要とされる動作を実行するより専用化された装置を構築することがより好都合であり得る。
【0060】
本明細書に記載される様々な実施形態は、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベース又はプログラマブル消費者電子装置、ミニコンピュータ、メインフレームコンピュータ等を含め、他のコンピュータシステム構成を用いて実施し得る。
【0061】
本開示の1つ又は複数の実施形態は、1つ若しくは複数のコンピュータプログラムとして、又は1つ若しくは複数のコンピュータ可読媒体で実施される1つ若しくは複数のコンピュータプログラムモジュールとして実施され得る。コンピュータ可読媒体という用語は、データを記憶することができる任意のデータ記憶デバイスを指し、データは後にコンピュータシステムに入力することができ、コンピュータ可読媒体は、コンピュータにより読み出し可能にするようにコンピュータプログラムを実施する任意の既存又は後に開発される技術に基づき得る。コンピュータ可読媒体の例としては、ハードドライブ、ネットワーク接続ストレージ(NAS:network attached storage)、読み取り専用メモリ、ランダムアクセスメモリ(例えば、フラッシュメモリデバイス)、CD(コンパクトディスク)−−CD−ROM、CD−R、又はCD−RW、DVD(デジタル多用途ディスク)、磁気テープ、並びに他の光学及び非光学データ記憶デバイスが挙げられる。コンピュータ可読媒体は、ネットワーク結合されたコンピュータシステムに分散することもでき、それにより、コンピュータ可読コードは分散して記憶され実行される。
【0062】
本開示の1つ又は複数の実施形態について、理解を明確にするために幾らか詳細に説明したが、特許請求の範囲内で特定の変更及び変形が行われ得ることが明らかであろう。したがって、記載される実施形態は、限定ではなく例示として見なされるべきであり、特許請求の範囲は、本明細書に付与される詳細に限定されるべきではなく、特許請求の範囲及び均等物内で変更が可能である。特許請求の範囲では、要素及び/又はステップは、特許請求の範囲において明示的に記載される場合を除き、いかなる特定の順序の動作も暗示しない。
【0063】
多くの変形、変更、追加、及び改善が可能である。複数のインスタンスが、1つのインスタンスとして本明細書に記載される構成要素、動作、又は構造に提供され得る。様々な構成要素、動作、及びデータストア間の境界は幾らか任意のものであり、特定の動作は、特定の例示的な構成の文脈で示されている。機能の他の割り振りが考えられ、本開示の範囲内にあり得る。一般に、例示的な構成において別個の構成要素として提示される構造及び機能は、結合された構造又は構成要素として実施され得る。同様に、1つの構成要素として提示される構造及び機能は、別個の構成要素として実施され得る。これら及び他の変形、変更、追加、及び改善は、添付の特許請求の範囲内にあり得る。