説明

パフォーマンスカウンタの仮想化

【課題】 パフォーマンスカウンタを仮想化する。
【解決手段】 パフォーマンスカウンタを仮想化するための装置、方法およびシステムの実施形態を開示する。一実施形態によると、当該装置は、カウンタと、カウンタイネーブル格納位置と、カウンタイネーブルロジックと、仮想マシン制御ロジックとを備える。カウンタイネーブル格納位置はカウンタイネーブルインジケータを格納する。カウンタイネーブルロジックは、カウンタイネーブルインジケータに基づいてカウンタをイネーブルする。仮想マシン制御ロジックは装置の制御をゲストに移行させる。仮想マシン制御ロジックは、ゲストへの制御の移行に応じて、仮想マシン制御構造のゲスト値を前記カウンタイネーブル格納位置へとロードさせるゲスト状態ロードロジックを有する。

【発明の詳細な説明】
【技術分野】
【0001】
本開示内容は、情報処理分野に関し、特に仮想化環境におけるパフォーマンスカウンタの利用に関する。
【背景技術】
【0002】
一般的に、情報処理システムにおける仮想化の概念によって、各OSは単一の情報処理システムおよび当該システムのリソースに対して全体的且つ直接的な制御を行うように設計されているにもかかわらず、当該情報処理システムにおいて1以上のオペレーティングシステム(OS)の複数のインスタンスを実行することが可能となる。仮想化は通常、ソフトウェア(例えば、仮想マシンモニタ(VMM))を用いて実装され、仮想リソースを持つ「仮想マシン(VM)」を各OSに対して提示する。仮想リソースは、例えば1以上の仮想プロセッサ等であり、各OSによって全体的且つ直接的に制御するとしてもよい。ここで、VMMは、VM間での共有化および/または物理リソースの割り当て等、仮想化ポリシーを実装するべくシステム環境を維持する(「仮想化環境」)。VMで実行される各OSおよびその他のソフトウェアを「ゲスト」または「ゲストソフトウェア」とよび、仮想化環境の外で実行されるVMMのようなソフトウェアを「ホスト」または「ホストソフトウェア」と呼ぶ。
【0003】
情報処理システムに含まれる物理プロセッサは、例えば、VMにおける仮想プロセッサ(つまり、VMMによって制限された物理プロセッサ)でゲストを実行するべく、仮想化環境を開始させる命令をサポートすることによって仮想化をサポートし得る。仮想化環境において、外部割込みまたは特権レジスタまたはリソースへのアクセス試み等のあるイベント、処理および状況がインターセプト(intercept)される場合がある。つまり、あるイベント、処理および状況によってプロセッサが仮想化環境を離脱して、VMMは例えば仮想化ポリシーを実施するべく動作する。物理プロセッサはまた、仮想化環境を維持するほかの命令をサポートするとしてもよく、物理プロセッサの仮想化能力を指定または制御するメモリまたはレジスタビットを有するとしてもよい。
【0004】
仮想化環境をサポートする物理プロセッサは、パフォーマンス監視情報を記録するためのパフォーマンスカウンタを有するとしてもよい。各パフォーマンスカウンタは通常、当該カウンタに対応付けられる、1以上の制御または構成レジスタ、もしくは1以上の制御または構成レジスタの一部によって制御され得る。これらのパフォーマンスカウンタを仮想化するためには、ゲストとホスト間または2つのゲスト間で移行を実施する度に通常、カウンタすべておよび当該カウンタに対応付けられている制御レジスタの状態を保存して、カウンタすべておよび当該カウンタに対応付けられている制御レジスタについて新しい状態をロードする必要がある。
【図面の簡単な説明】
【0005】
本発明は、添付図面に図示される例に基づいて説明するが、添付図面の内容は本発明を限定するものではない。
【0006】
【図1】仮想化アーキテクチャにおける本発明の実施形態を示す図である。
【0007】
【図2A】パフォーマンスカウンタを仮想化する方法における本発明の実施形態を示す図である。
【図2B】パフォーマンスカウンタを仮想化する方法における本発明の実施形態を示す図である。
【0008】
【図3】仮想化アーキテクチャにおける本発明の別の実施形態を示す図である。
【0009】
【図4】パフォーマンスカウンタを仮想化する方法における本発明の別の実施形態を示す図である。
【発明を実施するための最良の形態】
【0010】
パフォーマンスカウンタを仮想化するための装置、方法およびシステムの実施形態を以下で説明する。以下の説明では、本発明を十分に説明するべく、構成要素およびシステム構成等具体的且つ詳細な内容を数多く挙げるが、当業者であればそのような具体的且つ詳細な内容以外でも本発明を実施できることに想到するであろう。また、一部の公知の構造および回路等については、本発明が不必要に不明確となるのを避けるべく、詳細な説明を省略している。
【0011】
仮想化環境のパフォーマンスは、ホスト−ゲスト間およびゲスト間での移行において保存およびロードされる必要がある状態情報の量を低減することによって、改善され得る。本発明の実施形態を用いることによって、カウンタおよび当該カウンタに対応付けられる制御レジスタの内容を保存およびロードすることなく、パフォーマンスカウンタまたはその他のカウンタを仮想化し得る。このため、カウンタおよび当該カウンタに対応付けられる制御レジスタの内容が移行において保存される仮想化環境に比べて、パフォーマンスを向上させることができる。本発明の実施形態によれば、ホストおよびゲストの数に関わらずパフォーマンスカウンタを効率よくイネーブルまたはディセーブルすることが可能となり、ホストまたはゲストの専用使用に対してパフォーマンスカウンタを割り当てることが可能となり、ホストおよび/またはゲストの間でその数に関わらずパフォーマンスカウンタを共有化することが可能となる。
【0012】
図1は、仮想化アーキテクチャ100における本発明の実施形態を示す図である。図1において、ベアプラットフォームハードウェア110は、任意のOSまたはVMMソフトウェアを実行できるデータ処理装置であればどのようなものであってもよい。例えば、ベアプラットフォームハードウェアは、パーソナルコンピュータ、メインフレームコンピュータ、ポータブルコンピュータ、ハンドヘルドデバイス、セットトップボックス、サーバ等の演算システムに含まれるものであってよい。ベアプラットフォームハードウェア110は、プロセッサ120およびメモリ130を有する。
【0013】
プロセッサ120はどのような種類のプロセッサであってもよく、汎用マイクロプロセッサであってもよく、例えば、Intel(登録商標)Corporation社のIntel(登録商標)Pentium(登録商標)プロセッサファミリー、Itanium(登録商標)プロセッサファミリー、またはその他のプロセッサファミリーに属するプロセッサ、または別の会社製の別のプロセッサ、またはデジタルシグナルプロセッサ、またはマイクロコントローラであってもよい。図1に示すプロセッサ120は1つのみであるが、ベアプラットフォームハードウェア110が有するプロセッサの数は任意であるとしてもよく、それぞれが任意の数の実行コアを含む任意の数のマルチコアプロセッサを含み、それぞれが任意の数のスレッドを含む任意の数のマルチスレッドプロセッサを含むとしてもよい。
【0014】
メモリ130は、スタティックランダムアクセスメモリまたはダイナミックランダムアクセスメモリ、半導体ベースのリードオンリーメモリまたはフラッシュメモリ、磁気または光学ディスクメモリ、プロセッサ120が読み出し可能なその他の種類の媒体、またはこのような媒体の組み合わせであってよい。プロセッサ120およびメモリ130は、任意の公知の方法に従って互いに接続または通信させられるとしてよく、該方法としては、1以上のバスを介して直接的または間接的に接続または通信させる方法、ポイント・ツー・ポイント方式、またはその他の有線接続方法または無線接続方法がある。ベアプラットフォームハードウェア110には、任意の数のデバイスまたは接続を追加するとしてもよい。
【0015】
図1では、ベアプラットフォームハードウェア100に加え、VMM140、VM150および160、ゲストオペレーティングシステム152および162、ならびにアプリケーション154、155、164および165が図示されている。
【0016】
VMM140は、ゲストに対してVM、つまりベアプラットフォームハードウェア110の抽象化を提示するべく、またはVMを形成および管理して仮想化ポリシーを実装するべく、ベアプラットフォームハードウェア110にインストールされているか、またはベアプラットフォームハードウェア110にアクセス可能な任意のソフトウェア、ファームウェアまたはハードウェアのホストであってもよい。ほかの実施形態によると、ホストは、任意のVMM、ハイパバイザ、OS、またはベアプラットフォームハードウェア110を制御できるその他のソフトウェア、ファームウェアまたはハードウェアであってよい。ゲストは、任意のOS、VMM140の別のインスタンスを含む任意のVMM、任意のハイパバイザ、または任意のアプリケーションもしくは別のソフトウェアであってよい。
【0017】
各ゲストは、VMにおいて提示されるプロセッサおよびプラットフォームのアーキテクチャに応じて、ベアプラットフォームハードウェア110の物理リソース、例えばプロセッサおよびプラットフォームレジスタ、メモリおよび入出力デバイスに対して、アクセスするものと考えられる。図1では2つのVM150および160が図示されており、VM150にはゲストOS152ならびにゲストアプリケーション154および155がインストールされ、VM160にはゲストOS162ならびにゲストアプリケーション164および165がインストールされている。図1に図示されているVMは2つのみでVM毎のアプリケーションも2つのみであるが、本発明の範囲内では、形成されるVMの数はいくつであってもよく、各VMにおいて実行されるアプリケーションの数もいくつであってもよい。
【0018】
ゲストがアクセス可能なリソースは、「特権」リソースまたは「非特権」リソースに分類され得る。特権リソースの場合は、VMM140は、当該リソースに対する最終制御を保持しつつ、ゲストが所望する機能を提供する。非特権リソースの場合は、VMM140による制御を受ける必要はなくゲストが直接アクセスし得る。
【0019】
また、各ゲストOSは、例外(例えば、ページフォールトおよび一般保護違反)、割り込み(例えば、ハードウェア割り込みおよびソフトウェア割り込み)、およびプラットフォームイベント(例えば、初期化およびシステム管理割り込み)等、さまざまなイベントを処理するものと考えられる。このような例外、割り込みおよびプラットフォームイベントは、本明細書において、「仮想化イベント」と総合的または個別に呼称される。このような仮想化イベントの一部は、VM150および160を適切に動作させ、ゲストからVMM140を保護し、およびお互いから各ゲストを保護するべく、VMM140が処理する必要があるので、「特権イベント」と呼ばれる。
【0020】
任意の時点において、プロセッサ120がVMM140または任意のゲストからの命令を実行しているとすると、VMM140または当該ゲストは、プロセッサ120上で実行されているか、プロセッサ120を制御し得る。特権イベントが発生するか、またはゲストが特権リソースへのアクセスを試みると、制御がゲストからVMM140に移行され得る。ゲストからVMM140への制御の移行を、本明細書では、「VMエグジット(exit)」と呼ぶ。イベントの処理またはリソースへのアクセスの提供が適切に終了すると、VMM140は制御をゲストに戻すとしてもよい。VMM140からゲストへの制御の移行を、本明細書では、「VMエントリ(entry)」と呼ぶ。
【0021】
図1に示す実施形態によると、プロセッサ120は、仮想マシン制御構造(VMCS)132に格納されているデータに従ってVM150および160の動作を制御する。VMCS132は、1または複数のゲストの状態、VMM140の状態、VMM140がどのように1または複数のゲストの動作を制御するかを示す実行管理情報、VMの終了および開始に関する情報、およびその他の任意の情報を含み得る構造である。プロセッサ120は、VMCS132から情報を読み出して、VMの実行環境を決定して当該VMの行動を制限する。本実施形態において、VMCS132はメモリ130に格納されている。一部の実施形態によると、複数のVMをサポートするべく複数のVMCSを利用する。図1ではVMCS132がメモリ130に格納される構成を示しているが、メモリ内にVMCSを格納する構成は本発明において必須ではない。
【0022】
プロセッサ120はカウンタ171、173、175および177を含む。本実施形態によると、カウンタ171、173、175および177は、プロセッサ120で実行されるソフトウェアによってプログラミングされてパフォーマンス監視情報を記録するパフォーマンスカウンタである。しかし、他の実施形態では、任意の数のカウンタおよび/または任意の種類およびサイズのカウンタを含むとしてよい。例えば、パフォーマンスカウンタ171、173、175または177のいずれかが、選択されるイベントの発生毎にインクリメントするべく、または選択されるイベント中の各クロックサイクル毎にインクリメントするべく、プログラミングされるとしてもよい。イベントは、プロセッサ120上でのプログラムコードの実行に関する多岐にわたるイベントのいずれを含むとしてもよい。そのようなイベントには、分岐予測ミス、キャッシュヒット、キャッシュミス、変換索引バッファヒット、変換索引バッファミス等がある。このため、パフォーマンスカウンタ171、173、175および177に基づいて、プロセッサ120において可能な限り最高のパフォーマンスを実現するようにプログラムコードを調整または設計するとしてもよい。
【0023】
プロセッサ120はさらに、カウンタ171、173、175および177にそれぞれ対応する、カウンタ制御格納位置172、174、176および178を含む。カウンタ制御格納位置172、174、176および178は、任意のサイズのレジスタまたはその他の構造、もしくは1以上のレジスタまたはその他の構造の一部分であってよく、カウンタ171、173、175および177をそれぞれ制御または構成する情報を格納し得る。カウンタ制御格納位置172、174、176および178は、カウンタ171、173、175および177をそれぞれ制御または構成する情報を格納するようにプログラミングされるとしてもよい。当該情報は例えば、カウンタをイネーブルする情報、カウント対象のイベントを選択する情報、カウント方法を選択する情報(例えば、発生回数またはイベント持続時間)、カウント条件を選択する情報(例えば、イベントが検出された場合のソフトウェア実行の特権レベルに基づく)、およびその他の制御変数、構成変数またはその他の変数を設定するための情報である。
【0024】
プロセッサ120はさらに、総合カウンタイネーブル格納位置121を含む。総合カウンタイネーブル格納位置121は、制御レジスタ、構成レジスタ、モデル依存レジスタ、または総合カウンタイネーブルインジケータを格納するその他の格納位置内の1以上のビットであってもよい。一実施形態によると、総合カウンタイネーブル格納位置121はプログラム可能レジスタの1ビットであって、当該ビットが論理値「1」に設定されると総合カウンタイネーブルインジケータが「イネーブル」値に設定され、論理値「0」に設定されると総合カウンタイネーブルインジケータが「ディセーブル」値に設定される。
【0025】
別の実施形態によると、総合カウンタイネーブル格納位置は、パフォーマンスカウンタ毎に1ビットを持ち、各ビットが論理値「1」に設定されると、対応するパフォーマンスカウンタ用の個別カウンタイネーブルインジケータが「イネーブル」値に設定されるとしてもよい。その他の実施形態によると、総合カウンタイネーブル格納位置の単一のビットまたはフィールドは、任意の数のパフォーマンスカウンタを含む群に対応するとしてもよい。このような実施形態ではいずれの場合も、総合イネーブル格納位置は、任意の数のパフォーマンスカウンタに対応する任意の数のビットまたはフィールドを含むとしてよく、より直接的にパフォーマンスカウンタを制御する任意の数のビットまたはフィールドを制御するべく利用され得る1以上の追加イネーブルインジケータをさらに含むとしてもよいし、またはそのような追加イネーブルインジケータに対応付けられるとしてもよい。例えば、格納位置は、「カウンタイネーブルベクトル」を格納するためのフィールドを含むとしてもよい。当該フィールドはカウンタ毎に1ビットを持つ。この格納位置の内部またはプロセッサ120または仮想化アーキテクチャ100における別の格納位置またはデータ構造に設けられる追加ビットを用いて、当該カウンタイネーブルベクトルをイネーブルまたはディセーブルするとしてもよい。このようにすることで、VMCSに格納されているカウンタイネーブルベクトルに応じて、各カウンタをゲストが個別に制御するとしてもよいが、追加ビットのデフォルト値は、カウンタイネーブルベクトルモデルをサポートしないプロセッサ用に設計されているVMMまたはその他のホストソフトウェアを実行する場合には個別カウンタ制御が自動的にディセーブルされるように設定されるとしてもよい。
【0026】
総合カウンタイネーブルインジケータの値は、カウンタ制御格納位置172、174、176および178に格納されているほかの関連情報と共に、カウンタ171、173、175および177の動作を制御するべくカウンタイネーブルロジック170によって使用される。総合カウンタイネーブルインジケータが「イネーブル」値に設定されている場合には、各カウンタは個別制御および構成情報に応じて動作する。例えば、カウンタ171はキャッシュヒットに応じてインクリメントされるとしてもよい。これは、カウンタ制御格納位置172の内容に、「イネーブル」値に設定された個別カウンタイネーブルビットおよびキャッシュヒットをカウントするように設定されたイベント選択フィールドが含まれているためである。一方、カウンタ173はインクリメントされないとしてもよい。これは、カウンタ制御格納位置174の内容には「ディセーブル」値に設定されている個別カウンタイネーブルビットが含まれているためである。しかし、総合カウンタイネーブルインジケータが「ディセーブル」値に設定されている場合には、すべてのカウンタ171、173、175および177がディセーブルされ、それぞれの個別制御および構成情報に応じては動作しない。カウンタ171を例に挙げて説明すると、カウンタ制御格納位置172の内容に、「イネーブル」値に設定されている個別カウンタイネーブルビットおよびキャッシュヒットをカウントするように設定されているイベント選択フィールドが含まれているとしても、キャッシュヒットに応じてインクリメントされない。
【0027】
また、プロセッサ120は、カウンタ171、173、175および177の仮想化を含む仮想化をサポートするべく、制御ロジック180を含む。制御ロジック180は、プロセッサ120に含まれるマイクロコード、プログラム可能ロジック、ハードコードロジック、またはその他の形式の制御ロジックであってよい。他の実施形態によると、制御ロジック180は、プロセッサ、またはメモリ130のように、プロセッサがアクセス可能な素子または読み出し可能な媒体において、プロセッサ抽象化層のように、ハードウェア、ソフトウェアまたはファームウェアのうちどの形式で実装されるとしてもよい。
【0028】
制御ロジック180は、本発明に係る方法の実施形態をプロセッサ120に実行させる。例えば、図2Aおよび図2Bを参照しつつ以下で説明する方法の実施形態を実行させる。一例を挙げると、プロセッサ120に、例えば仮想化をサポートする1以上のマイクロ処理の実行を、ホストまたはゲストからの仮想化命令またはその他の命令に対する応答の中に含ませる。
【0029】
制御ロジック180は、ホストからゲストへプロセッサ120の制御を移行させる(つまりVMエントリ)VMエントリロジック181と、ゲストからホストへプロセッサ120の制御を移行させる(つまりVMエグジット)VMエグジットロジック182とを含む。一部の実施形態によると、制御はさらに、ゲストからゲストへ、またはホストからホストへと移行されるとしてもよい。例えば、層状仮想化をサポートする実施形態では、プロセッサ120上のVMで実行されるソフトウェアはゲストであると同時にホストである(例えば、あるVMで実行されるVMMは、当該VMを制御するVMMに対してゲストであり、自身が制御するVMで実行されるゲストに対してはホストである)。
【0030】
制御ロジック180はさらに、ゲスト状態ロードロジック183、ホスト状態ロードロジック184、およびゲスト状態格納ロジック185を含む。ゲスト状態ロードロジック183は、VMエントリに応じて、VMCS132からプロセッサ120にゲスト状態をロードする。ホスト状態ロードロジック184は、VMエグジットに応じて、VMCS132からプロセッサ120に対してホスト状態をロードする。ゲスト状態格納ロジック185は、VMエグジットに応じて、プロセッサ120からVMCS132に対してゲスト状態を格納する。一部の実施形態によると、制御ロジック180はさらに、ゲスト状態ロードロジック183によるプロセッサ120へのゲスト状態のロードに先立って、VMエントリに応じて、プロセッサ120からVMCS132に対してホスト状態を格納するホスト状態格納ロジック186を含む。一部の実施形態によると、制御ロジック180は、入出力デバイスおよびメモリコントローラ等の、他のシステム構成要素に存在する状態をロードおよび格納するとしてもよい。
【0031】
VMCS132は、仮想化をサポートするフィールド、制御ビットまたはその他のデータ構造を含むとしてもよい。これらのデータ構造は、制御ロジック180によってチェックまたは参照されて、VM環境をどのように管理するか決定するために利用され得る。例えば、VMエントリに応じて、ゲスト状態格納位置137から総合カウンタイネーブル格納位置121にゲスト値をゲスト状態ロードロジック183がロードするように、ゲスト状態ロードイネーブルインジケータ133を設定するとしてもよく、VMエグジットに応じて、ホスト状態格納位置138から総合カウンタイネーブル格納位置121にホスト値をホスト状態ロードロジック184がロードするようにホスト状態ロードイネーブルインジケータ134を設定するとしてもよく、ゲスト状態格納イネーブルインジケータ135は、ゲスト状態格納ロジック185が総合イネーブル格納位置121の内容をゲスト状態格納位置137に格納するように、設定されるとしてもよく、ホスト状態格納イネーブルインジケータ136は、ホスト状態格納ロジック186が総合イネーブル格納位置121の内容をホスト状態格納位置138に格納するように、設定されるとしてもよい。これらの処理はすべて以下で説明する。本実施形態の以下の説明では、インジケータは所望の効果をイネーブルまたは発生させるように設定される制御ビットであり、「設定」とはビットに論理値「1」を書き込むことを意味するが、本発明の範囲においてはどのような論理方式または論理用語を利用するとしてもよい。
【0032】
本明細書で説明する機構に基づいて、VMMは、ゲストが実行されている間のみ、VMMが実行されている間のみ、またはVMMおよびゲストが実行されている間に発生するイベントのカウントをイネーブルするとしてもよい。また、VMMは、ゲスト毎に、ゲストとVMMとの間での移行(つまりVMエントリまたはVMエグジット)の一部として、パフォーマンスカウンタをイネーブルまたはディセーブルするとしてもよい。このような機構によって、VMMは、自身がパフォーマンスカウンタに及ぼす影響を、ゲストに対して「隠す」ことが可能となる。または、このような機構によって、ゲストが使用するVMM内でのイベントのカウント、またはVMMが使用するゲスト内でのイベントのカウントが可能となる。
【0033】
図2Aおよび図2Bは、方法200における本発明の実施形態を示す図である。方法200は、パフォーマンスカウンタを仮想化する方法である。方法の実施形態はこれに限定されるわけではないが、図2Aおよび図2Bに示す方法の実施形態を説明する際には図1に示す仮想化アーキテクチャ100を参照する。
【0034】
図2Aのボックス210において、第1のパフォーマンスカウンタを構成して第1のイベントの発生回数をカウントさせる。例えば、カウンタ制御格納位置172をプログラミングすることによって、カウンタ171を構成して、キャッシュミスをカウントさせるとしてもよい。ボックス212において、第2のパフォーマンスカウンタを構成して第2のイベントの発生回数をカウントさせる。例えば、カウンタ制御格納位置174をプログラミングすることによって、カウンタ173を構成して、休止していないサイクルをカウントさせる。他の実施形態によると、パフォーマンスカウンタは、任意のほかのイベント、例えば変換索引バッファミス、分岐予測ミス等の発生回数をカウントするように構成されるとしてもよい。
【0035】
図2Aのボックス220では、図1に示したVMM140がVM用にVMCS(例えば、VMCS132)を生成する。ボックス222から226では、VMM140はカウンタ171、173、175および177を仮想化するためのサポートを実装するようにVMCS132を構成する。ボックス222において、ゲスト状態ロードイネーブルインジケータ133は、VMエントリに応じてゲスト状態格納位置137から総合カウンタイネーブル格納位置121にゲスト値をゲスト状態ロードロジック183がロードするように、設定される。ボックス224において、ホスト状態ロードイネーブルインジケータ134は、VMエグジットに応じて、ホスト状態格納位置138から総合カウンタイネーブル格納位置121にホスト値をホスト状態ロードロジック184がロードするように、設定される。ボックス226において、ゲスト状態格納イネーブルインジケータ135は、ゲスト状態格納ロジック185が総合イネーブル格納位置121の内容をゲスト状態格納位置136に格納するように、設定される。
【0036】
ボックス230において、ホスト(つまり、VMM140)からゲストへのプロセッサ120の制御の移行が開始される。例えば、VMMはVMエントリを開始させるとしてもよい。VMエントリは、VMエントリロジック181がプロセッサ120にホスト状態を保存してゲスト状態をロードするための処理またはマイクロ処理を実行させることを含むとしてもよい。ボックス232では、VMエントリロジックが、ゲスト状態ロードイネーブルインジケータ133に基づいて、ゲスト状態格納位置137から総合カウンタイネーブル格納位置121へとゲスト値をロードするか否か判断する。ゲスト状態ロードイネーブルインジケータ133が設定されている場合には、ボックス234において、ゲスト状態ロードロジック183がゲスト状態格納位置137からゲスト値を総合カウンタイネーブル格納位置121へとロードさせる。設定されていない場合は、ボックス234は実行されない。ボックス236では、VMエントリが完了してゲストに制御が移行する。ボックス238ではゲストの実行が開始または継続される。
【0037】
ボックス239において、カウンタイネーブルロジック170は総合カウンタイネーブルインジケータが設定されているか否か判断する。設定されていない場合は、方法200はボックス258に進む。設定されている場合は、方法200はボックス240に進む。ボックス240において、第1のイベントが発生したか否か判断する。発生している場合、ボックス244において、第1のパフォーマンスカウンタは構成されたように動作して、つまり本実施形態の場合は、ボックス210においてキャッシュミスをカウントするべく構成されており、それにしたがって動作して、第1のパフォーマンスカウンタがインクリメントされる。ボックス250では、第2のイベントが発生したか否か判断する。発生している場合、ボックス254では、第2のパフォーマンスカウンタが構成されたように動作して、つまり本実施形態の場合は、ボックス212において第2のイベントの発生回数をカウントするように構成されており、それにしたがって動作して、第2のパフォーマンスカウンタがインクリメントされる。
【0038】
ボックス258において、仮想化イベントが発生したか否か判断する。発生していなければ、方法200はボックス238に進む。発生していれば、ボックス260において、ゲストからホストへのプロセッサ120の制御の移行が開始される。VMエグジットは、VMエグジットロジック182がプロセッサ120にゲスト状態を保存してホスト状態をロードするための処理またはマイクロ処理を実行させることを含むとしてもよい。
【0039】
ボックス262において、VMエグジットロジックは、ゲスト状態格納イネーブルインジケータ135に基づいて、総合カウンタイネーブル格納位置121の内容をゲスト状態格納位置137に格納するか否か判断する。ゲスト状態格納イネーブルインジケータ135が設定されていれば、ボックス264において、ゲスト状態格納ロジック185は総合カウンタイネーブル格納位置121の内容をゲスト状態格納位置137に格納する。設定されていなければ、ボックス264は実行されない。一部の実施形態においては、ゲスト状態格納イネーブルインジケータ135が設けられない。一部の実施形態によると、ゲスト状態格納ロジック185は常に、総合カウンタイネーブル格納位置121の内容をゲスト状態格納位置137に格納する。他の実施形態によると、ゲスト状態格納ロジック185は、VMエグジット処理の一部として総合カウンタイネーブル格納位置121の内容をゲスト状態格納位置137に格納することは決して行わない。一部の実施形態によると、ゲストソフトウェアによる総合カウンタイネーブル格納位置121に対するアクセスの試みによって、VMエグジットが発生するとしてもよい。ここで、ソフトウェア構成によってVMエグジットが発生するとしてもよいし(例えば、VMMは、総合カウンタイネーブル格納位置121へのアクセス時にVMエグジットが発生するように、VMCS内の制御を適切に設定しなければならない)、プロセッサに基づいてそのようなVMエグジットを強制するとしてもよい。
【0040】
ボックス266において、VMエグジットロジックは、ホスト状態ロードイネーブルインジケータ134に基づいて、ホスト状態格納位置138から総合カウンタイネーブル格納位置121にホスト値をロードするか否かを判断する。ホスト状態格納イネーブルインジケータ134が設定されていれば、ボックス268において、ホスト状態ロードロジック184はホスト状態格納位置138から総合カウンタイネーブル格納位置121へとホスト値をロードさせる。設定されていなければ、ボックス268は実行されない。
【0041】
ボックス270において、VMエグジットが完了して制御はホストに移行される。ボックス272において、ホストの実行が開始または継続される。
【0042】
ボックス275において、カウンタイネーブルロジック170は総合カウンタイネーブルインジケータが設定されているか否か判断する。設定されていない場合は、方法200はボックス298に進む。設定されている場合は、方法200はボックス280に進む。ボックス280において、第1のイベントが発生したか否か判断する。発生している場合、ボックス284において、第1のパフォーマンスカウンタは構成されたように動作して、つまり本実施形態の場合は、ボックス210においてキャッシュミスをカウントするべく構成されており、それにしたがって動作して、第1のパフォーマンスカウンタがインクリメントされる。ボックス290では、第2のイベントが発生したか否か判断する。発生している場合、ボックス294では、第2のパフォーマンスカウンタが構成されたように動作して、つまり本実施形態の場合は、ボックス212において第2のイベントの発生回数をカウントするように構成されており、それにしたがって動作して、第2のパフォーマンスカウンタがインクリメントされる。
【0043】
ボックス298において、VMエントリが発生するか否か判断する。発生する場合、方法200はボックス230に進む。発生しない場合、方法200はボックス299に進む。ボックス299において、停止またはその他の同様の命令が実行されるか否か判断する。実行されない場合、方法200はボックス272に進み、実行される場合、方法200は終了する。
【0044】
図3は、ベアプラットフォームハードウェア310における本発明の別の実施形態を示す図である。当該実施形態は、仮想化アーキテクチャ100または別の仮想化アーキテクチャにおいて利用され得る。明記されていない限り、ベアプラットフォームハードウェアおよびその構成要素の説明は、ベアプラットフォームハードウェア310およびその対応する構成要素にも当てはまる。ベアプラットフォームハードウェア310は、プロセッサ320およびメモリ330を有する。
【0045】
プロセッサ320は、カウンタ371、373、375および377を含む。プロセッサ320はさらに、カウンタ371、373、375および377にそれぞれ対応する、カウンタ制御格納位置372、374、376および378を含む。カウンタ制御格納位置372、374、376および378はそれぞれ、他の制御または構成情報と共に、対応するカウンタをイネーブルまたはディセーブルするためのカウンタ有効インジケータを格納するカウンタ有効格納位置を含む。またさらに、プロセッサ320は、カウンタ371、373、375および377にそれぞれ対応する、カウンタ識別子格納位置391、393、395および397を含む。カウンタ識別子格納位置391、393、395および397は、任意のサイズのレジスタもしくはその他の構造、または1以上のレジスタまたは他の構造の一部分であってよく、カウンタ371、373、375および377それぞれを識別または分類するための情報を格納する。カウンタ識別子格納位置391、393、395および397は、カウンタ371、373、375および377を一意的にまたは重複して(つまり、2つのカウンタ識別子格納位置が同じ値にプログラミングされることもあり得る)識別する識別子を格納するようにプログラミングされるとしてもよい。
【0046】
VMCS332はカウンタ識別子フィールド333を有する。当該カウンタ識別子フィールド333は、本実施形態によると、カウンタ識別子格納位置391、393、395および397のそれぞれとビット数が同じであるが、他の実施形態によると、任意のビット数であってよい。他の実施形態では、カウンタ識別子フィールドが追加されるとしても良い。カウンタ識別子フィールド333は、VMCS332を生成するVMMまたはその他の任意のソフトウェアによって、カウンタ識別子格納位置391、393、395および397に格納されている値のうち1以上と一致する値または一致しない値を格納するようにプログラミングされるとしてもよい。
【0047】
プロセッサ320はさらに、比較ロジック322を有する。比較ロジック322は、任意の公知の方法に従って実装され、各カウンタに対して、対応するカウンタ識別子格納位置の内容とカウンタ識別子フィールド333の内容とを比較した結果に基づいて、カウンタ一致信号を生成するとしてもよい。本実施形態によると、各カウンタのカウンタ一致信号は、対応するカウンタ識別子格納位置の内容とカウンタ識別子フィールド333の内容が一致している場合に、アサートされる。本実施形態によると、各カウンタのカウンタ一致信号は、対応するカウンタ識別子格納位置の内容が値0に等しい場合には、カウンタ識別子フィールド333の内容に関わらず、アサートされる。これは、本発明の特徴であるカウンタ識別子を利用しないソフトウェアに、カウンタ識別子の特徴を有するハードウェアで所望通りの動作を実行させるためである。別の実施形態によると、カウンタ一致ロジックは、「一致」の判断を、少なくとも部分的にVMCS内の別のフィールドの内容といったほかの要因に基づいて行うとしてもよい。例えば、インテルアーキテクチャ内のCR0、CR3またはCR4レジスタといったさまざまな制御レジスタの値を参照するとしてもよい。または、カウンタ一致ロジックは、現在実行されているソフトウェアがVMMであるかゲストであるかを判断することを含み、ゲストソフトウェアが現在実行されている場合に限ってVMCS内の1以上の制御ビットに基づいてカウンタをイネーブルするとしてもよい。
【0048】
実施形態は、比較ロジックをディセーブルすることによって、またはその他の任意の所望の方法によって、カウンタ一致特徴をイネーブルまたはディセーブルするための「カウンタ一致イネーブル」制御ビットまたはフィールドを1以上含むとしてもよい。例えば、カウンタ一致イネーブルビットが設定されている場合、上述したように比較が行われる。しかし、カウンタ一致イネーブルビットがクリアされている場合、カウンタは常にイネーブルされて比較は行われず、カウンタ識別子格納位置に格納されている「0」の値は上述したような特別処理を必要としない。
【0049】
各カウンタ用のカウンタ一致信号は、カウンタ制御格納位置372、374、376および378に格納されている任意のほかの関連情報と共に、カウンタ371、373、375および377の処理を制御するべくカウンタイネーブルロジック370によって使用される。あるカウンタのカウンタ一致信号がアサートされている場合、当該カウンタはその制御および構成情報に従って動作する。例えば、カウンタ制御格納位置372の内容には、「イネーブル」値に設定されている個別カウンタ有効ビットとキャッシュヒットをカウントするように設定されているイベント選択フィールドとが含まれている場合、カウンタ371はキャッシュヒットに応じてインクリメントされるとしてもよい。しかし、あるカウンタのカウンタ一致信号がアサートされていない場合、カウンタはディセーブルされてその個別制御および構成情報に従って動作しない。例えば、カウンタ制御格納位置372の内容に、「イネーブル」値に設定されている個別カウンタ有効ビットとキャッシュヒットをカウントするように設定されているイベント選択フィールドとが含まれていても、カウンタ371はキャッシュヒットに応じてインクリメントされない。
【0050】
また、プロセッサ320は、カウンタ371、373、375および377の仮想化を含む仮想化をサポートする制御ロジック380を含む。制御ロジック380は、本発明に係る方法の実施形態をプロセッサ320に実行させる。例えば、図4を参照しつつ以下で説明する方法の実施形態を実行させる。一例を挙げると、プロセッサ320に、例えば仮想化をサポートする1以上のマイクロ処理の実行を、ホストまたはゲストからの仮想化命令またはその他の命令に対する応答の中に含ませる。
【0051】
図4は、方法400における本発明の実施形態を示す図である。方法400は、パフォーマンスカウンタを仮想化する別の方法である。方法の実施形態はこれに限定されるわけではないが、図4に示す方法の実施形態を説明する際には図1から図3の内容を参照する。
【0052】
図4のボックス410において、イベントの発生回数をカウントするようにパフォーマンスカウンタを構成する。例えば、カウンタ制御格納位置372をプログラミングすることによって、キャッシュミスをカウントするようにカウンタ371を構成するとしてもよい。ボックス412において、所望のカウンタ識別値によってカウンタ識別子格納位置391をプログラミングする。
【0053】
ボックス420において、ホストがVM用にVMCS(例えばVMCS332)を生成する。ボックス422において、ホストは、カウンタ371、373、375および377の仮想化に対するサポートを実装するようにVMCS332を構成する。具体的には、ボックス412で利用されるカウンタ識別値に等しい値でカウンタ識別子フィールド333をプログラミングする。本実施形態によると、任意の数のほかのゲストまたはホストに対応する、VMCS332またはその他の任意のVMCS内の任意の数のほかのカウンタ識別子フィールドもまた、同じ値でプログラミングして、任意の数のゲストまたはホストが1以上のカウンタを共有できるようにするとしてもよい。
【0054】
ボックス430においては、プロセッサ320の制御がホストからゲストへと移行される。ボックス432では、ゲストの実行が開始または継続される。ボックス434では、カウンタ識別子格納位置391とカウンタ識別子フィールド333との比較に基づいてカウンタ一致信号を生成する。本実施形態によると、カウンタ識別子格納位置の内容がカウンタ識別子フィールドの内容と一致している場合に、カウンタ一致信号がアサートされる。
【0055】
ボックス440において、イベントの発生、つまり本実施形態ではキャッシュミスが認識される。ボックス442において、カウンタイネーブルロジック370は、カウンタ一致信号と対応するカウンタ制御格納位置(例えば、カウンタ制御格納位置372)におけるカウンタ有効格納位置の内容とに基づいてパフォーマンスカウンタをインクリメントするか否か判断する。
【0056】
カウンタ一致信号がアサートされていてカウンタのカウンタ有効インジケータが設定されていない場合、ボックス444では、パフォーマンスカウンタは構成通りに動作し、つまり本実施形態によると、ボックス410においてキャッシュミスをカウントするように構成されており、これにしたがって動作して、パフォーマンスカウンタはインクリメントされる。カウンタ一致信号がアサートされていない場合、またはカウンタの有効インジケータが設定されていない場合、ボックス444は実行されない。
【0057】
本発明の範囲内では、図2Aおよび図2Bならびに図4に図示されている方法は、異なる順序で実行されるとしてもよいし、図示されているボックスを省略して実行されるとしてもよいし、ボックスを追加して実行されるとしてもよいし、または、ボックスの並び替え、削除または追加を組み合わせて実行されるとしてもよい。例えば、VMCSはVMCSをどの順序で構成するとしてもよい。例えば、ボックス222から226はどのような順序で並び替えられるとしてもよい。
【0058】
プロセッサ120、または本発明の実施形態に応じて設計されるその他の任意の構成要素または構成要素の一部分は、生成、シミュレーション、製造といったさまざまな段階で設計され得る。設計を表現するデータは、多くの方式で設計を表現し得る。まず、シミュレーションで利用し易いように、ハードウェアはハードウェア記述言語またはその他の機能記述言語を用いて表現されるとしてもよい。このような構成に加えて、またはこのような構成に代えて、設計プロセスのある段階において、ロジックおよび/またはトランジスタゲートを備える回路レベルのモデルを形成するとしてもよい。さらに、大半の設計では、ある段階において、さまざまなデバイスの物理的配置を表すデータによって設計をモデルかし得るレベルに到達する。従来の半導体プロセス技術が用いられる場合、デバイス配置モデルを表現するデータは、集積回路を製造するために用いられるマスクを形成する複数の異なるマスク層におけるさまざまな特徴の有無を特定するデータであってもよい。
【0059】
設計をどのように表現する場合であっても、データは機械可読媒体の任意の形式で格納され得る。機械可読媒体とは、情報を送信するべく変調または生成される光波または電波、メモリ、もしくはディスク等の磁気または光学格納媒体であってよい。このような媒体はいずれも、設計または本発明の実施形態で用いられるほかの情報を「搬送」、または「指し示す」としてよい。当該情報を指し示すまたは搬送する搬送電波が送信されると、電気信号の複写、バッファリング、または再送が実行される限り、新しい複写が作成される。このように、通信業者またはネットワークプロバイダの仕事は、本発明に係る技術を実施する物品、例えば搬送波の複写を作成することを含むとしてよい。
【0060】
以上に、パフォーマンスカウンタを仮想化する装置、方法およびシステムを開示した。任意の実施形態を説明し添付図面で図示しているが、本開示内容を参照することで当業者は他のさまざまな変形例に想到すると思われるので、上述の実施形態は単に例示を目的としたもので多岐にわたる本発明を限定するものではなく、本発明は図示および説明された具体的な構成および配置に限定されるものではないと理解されたい。成長速度が速く今後の発展の予測が簡単ではないこのような技術分野においては、開示された実施形態は、その配置および詳細な内容を、本開示内容の原則または特許請求の範囲から離れることなく、技術の進歩を可能にすることによって支援されて、容易に変形可能であるとしてもよい。

【特許請求の範囲】
【請求項1】
装置であって、
複数のカウンタと、
前記複数のカウンタのそれぞれと対応する複数のカウンタイネーブルインジケータを格納するカウンタイネーブル格納位置と、
総合カウンタイネーブルインジケータを格納する総合イネーブル格納位置と、
対応する前記カウンタイネーブルインジケータがイネーブルに設定されており、前記総合カウンタイネーブルインジケータがイネーブルに設定されている場合に、前記カウンタをイネーブルし、
対応する前記カウンタイネーブルインジケータがイネーブルに設定されており、前記総合カウンタイネーブルインジケータがディセーブルに設定されている場合に、前記カウンタをディセーブルし、
対応する前記カウンタイネーブルインジケータがディセーブルに設定されており、前記総合カウンタイネーブルインジケータがイネーブルに設定されている場合に、前記カウンタをイネーブルし、
対応する前記カウンタイネーブルインジケータがディセーブルに設定されており、前記総合カウンタイネーブルインジケータがディセーブルに設定されている場合に、前記カウンタをディセーブルするカウンタイネーブルロジックと、
前記装置の制御をゲストに移行させる仮想マシン制御ロジックと
を備え、
前記仮想マシン制御ロジックは、前記ゲストへの制御の移行に応じて、仮想マシン制御構造のゲスト値を前記総合イネーブル格納位置へとロードさせるゲスト状態ロードロジックを有する
装置。
【請求項2】
仮想マシンモニタをさらに備え、
前記仮想マシンモニタは、ゲスト毎に、前記ゲストと前記仮想マシンモニタとの間での移行の一部として、前記複数のカウンタをイネーブルまたはディセーブルにする
請求項1に記載の装置。
【請求項3】
前記複数のカウンタは、パフォーマンス監視情報を記録する
請求項1または2に記載の装置。
【請求項4】
前記仮想マシン制御ロジックはさらに、
前記装置の制御を前記ゲストからホストへと移行させ、
前記ゲストから前記ホストへの制御の移行に応じて、前記仮想マシン制御構造のホスト値を前記総合イネーブル格納位置へとロードさせるホスト状態ロードロジックを有する
請求項1から3のいずれか1項に記載の装置。
【請求項5】
前記仮想マシン制御ロジックはさらに、前記ゲストから前記ホストへの制御の移行に応じて、前記総合イネーブル格納位置の内容を前記仮想マシン制御構造に格納させるゲスト状態格納ロジックを有する
請求項4に記載の装置。
【請求項6】
前記仮想マシン制御ロジックはさらに、前記仮想マシン制御構造内のゲスト状態ロードイネーブルインジケータに基づいて前記ゲスト状態ロードロジックをイネーブルする仮想マシンエントリロジックを有する
請求項1から5のいずれか1項に記載の装置。
【請求項7】
前記仮想マシン制御ロジックはさらに、前記仮想マシン制御構造内のホスト状態ロードイネーブルインジケータに基づいて前記ホスト状態ロードロジックをイネーブルする仮想マシンエグジットロジックを有する
請求項4に記載の装置。
【請求項8】
前記仮想マシン制御ロジックはさらに、前記仮想マシン制御構造内のゲスト状態格納イネーブルインジケータに基づいて前記ゲスト状態格納ロジックをイネーブルする仮想マシンエグジットロジックを有する
請求項5に記載の装置。
【請求項9】
総合カウンタイネーブルインジケータを総合イネーブル格納位置に格納する段階と、
プロセッサ内の複数のカウンタを構成して、第1のイベント及び第2のイベントの発生回数をカウントする段階と、
前記プロセッサの制御のゲストへの移行を開始させる段階と、
前記ゲストへの制御の移行に応じて、仮想マシン制御構造から前記総合イネーブル格納位置へゲスト値をロードする段階と、
前記プロセッサの制御の前記ゲストへの移行を完了させる段階と、
前記総合イネーブル格納位置の内容と、前記第1のイベントの第1の発生と、前記第2のイベントの第1の発生とに基づいて、前記複数のカウンタのカウント回数を変更するか否か判断する段階と
を備える方法。
【請求項10】
前記複数のカウンタのそれぞれと対応する複数のカウンタイネーブルインジケータのうちの、対応するカウンタイネーブルインジケータがイネーブルに設定されており、前記総合カウンタイネーブルインジケータがイネーブルに設定されている場合に、前記カウンタをイネーブルし、
対応する前記カウンタイネーブルインジケータがイネーブルに設定されており、前記総合カウンタイネーブルインジケータがディセーブルに設定されている場合に、前記カウンタをディセーブルし、
対応する前記カウンタイネーブルインジケータがディセーブルに設定されており、前記総合カウンタイネーブルインジケータがイネーブルに設定されている場合に、前記カウンタをイネーブルし、
対応する前記カウンタイネーブルインジケータがディセーブルに設定されており、前記総合カウンタイネーブルインジケータがディセーブルに設定されている場合に、前記カウンタをディセーブルする段階
をさらに備える請求項9に記載の方法。
【請求項11】
ゲスト毎に、前記ゲストと仮想マシンモニタとの間での移行の一部として、前記複数のカウンタをイネーブルまたはディセーブルにする
請求項9または10に記載の方法。
【請求項12】
前記プロセッサの制御の前記ゲストからホストへの移行を開始させる段階と、
前記仮想マシン制御構造から前記総合イネーブル格納位置へとホスト値をロードする段階と、
前記ゲストから前記ホストへの前記プロセッサの制御の移行を完了させる段階と、
前記総合イネーブル格納位置の内容と、前記第1のイベントの第2の発生と、前記第2のイベントの第2の発生とに基づいて、前記複数のカウンタのカウント回数を変更するか否か判断する段階と
をさらに備える請求項9に記載の方法。
【請求項13】
前記ゲストから前記ホストへの前記プロセッサの制御の移行を開始させた後で、前記仮想マシン制御構造に前記総合イネーブル格納位置の内容を格納する段階
をさらに備える請求項12に記載の方法。
【請求項14】
前記仮想マシン制御構造内のゲスト状態ロードイネーブルインジケータに基づいて、前記プロセッサに前記ゲスト値をロードさせる段階
をさらに備える請求項9に記載の方法。
【請求項15】
前記仮想マシン制御構造内のホスト状態ロードイネーブルインジケータに基づいて、前記プロセッサに前記ホスト値をロードさせる段階
をさらに備える請求項12に記載の方法。
【請求項16】
前記仮想マシン制御構造内のゲスト状態格納イネーブルインジケータに基づいて、前記プロセッサに前記総合イネーブル格納位置の内容を格納させる段階
をさらに備える請求項12に記載の方法。
【請求項17】
仮想マシンを制御するためのデータ構造を格納するメモリと、
プロセッサと
を備えるシステムであって、
前記プロセッサは、
複数のカウンタと、
総合カウンタイネーブルインジケータを格納する総合イネーブル格納位置と、
前記総合カウンタイネーブルインジケータに基づいて前記複数のカウンタをイネーブルするカウンタイネーブルロジックと、
前記プロセッサの制御をゲストへ移行させる仮想マシン制御ロジックと
を有し、
前記仮想マシン制御ロジックは、前記ゲストへの制御の移行に応じて、前記データ構造のゲスト値を前記総合イネーブル格納位置へとロードさせるゲスト状態ロードロジックを含む
システム。
【請求項18】
前記カウンタイネーブルロジックは、前記複数のカウンタのそれぞれと対応する複数のカウンタイネーブルインジケータのうちの、対応するカウンタイネーブルインジケータがイネーブルに設定されており、前記総合カウンタイネーブルインジケータがイネーブルに設定されている場合に、前記カウンタをイネーブルし、
対応する前記カウンタイネーブルインジケータがイネーブルに設定されており、前記総合カウンタイネーブルインジケータがディセーブルに設定されている場合に、前記カウンタをディセーブルし、
対応する前記カウンタイネーブルインジケータがディセーブルに設定されており、前記総合カウンタイネーブルインジケータがイネーブルに設定されている場合に、前記カウンタをイネーブルし、
対応する前記カウンタイネーブルインジケータがディセーブルに設定されており、前記総合カウンタイネーブルインジケータがディセーブルに設定されている場合に、前記カウンタをディセーブルする
請求項17に記載のシステム。
【請求項19】
前記複数のカウンタはパフォーマンス監視情報を記録する
請求項18に記載のシステム。
【請求項20】
前記メモリはダイナミックランダムアクセスメモリである
請求項18に記載のシステム。

【図1】
image rotate

【図2A】
image rotate

【図2B】
image rotate

【図3】
image rotate

【図4】
image rotate


【公開番号】特開2013−109777(P2013−109777A)
【公開日】平成25年6月6日(2013.6.6)
【国際特許分類】
【出願番号】特願2013−22629(P2013−22629)
【出願日】平成25年2月7日(2013.2.7)
【分割の表示】特願2009−523936(P2009−523936)の分割
【原出願日】平成19年8月6日(2007.8.6)
【出願人】(591003943)インテル・コーポレーション (1,101)