(57)【要約】  一実施例では、方法は、仮想マシン・モニタ(vmm)から仮想マシン(vm)に制御を遷移させる旨の要求を受信する工程と、オフセット値を算出する工程と、vmの処理中にタイマの現行値に対する要求を受信する工程と、オフセット値に基づいて時間の現行値を調節する工程と、調節されたタイマ値をvmに供給する工程とを含む。
2008518367.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
仮想マシン・モニタ(VMM)から仮想マシン(VM)に制御を遷移させる旨の要求を受信する工程と、
オフセット値を算出する工程と、
前記VMの処理中にタイマの現行値に対する要求を受信する工程と、
前記オフセット値に基づいて前記タイマの前記現行値を調節する工程と、
前記調節されたタイマ値を前記VMに供給する工程とを備える方法。
【請求項２】
請求項１記載の方法であって、
前記要求を前記VMMから受信すると制御を前記VMに遷移させる工程を更に備え、前記遷移させる工程が、前記オフセット値を算出する工程を備える方法。
【請求項３】
請求項１記載の方法であって、前記オフセット値を算出する工程が、
制御を前記VMに遷移させる旨の前記要求を受信すると読み取られるタイマ値と、前記VMから前記VMMへの制御の遷移に関連した先行イベントを検出すると保存されるタイマ値との間の差を判定する工程と、
タイマ・オフセット・フィールドの値から前記差を減算する工程とを備える方法。
【請求項４】
請求項３記載の方法であって、前記算出されたタイマ・オフセット値を前記タイマ・オフセット・フィールドに格納する工程を更に備える方法。
【請求項５】
請求項3記載の方法であって、前記差を判定する前に、タイマ・オフセット調節インディケータが、イネーブルされた値にセットされることを判定する工程を更に備える方法。
【請求項６】
請求項１記載の方法であって、
タイマ・オフセット調節インディケータが、ディセーブルされた値にセットされることを判定する工程と、
タイマ・オフセット・フィールドを読み取る工程であって、前記タイマ・オフセット・フィールドの値が前記オフセット値として後に用いられる工程とを更に備える方法。
【請求項７】
請求項３記載の方法であって、前記タイマ値は、タイマ保存インディケータがイネーブルされた場合に、前記VMMへの制御の前記遷移に関連した前記先行イベントを検出すると保存される方法。
【請求項８】
請求項１記載の方法であって、
タイマ・アクセス制御インディケータをイグジット値にセットすることを判定する工程と、
前記要求に応答して前記VMMに制御を遷移させる工程とを更に備える方法。
【請求項９】
請求項１記載の方法であって、
前記タイマのオフセットがディセーブルされたことを判定する工程と、
オフセット・レジスタに0をロードする工程とを更に備える方法。
【請求項１０】
装置であって、
仮想マシン・モニタ（VMM）と、
前記VMMによって制御されるデータ構造であって、仮想マシン（VM）のオフセット値を格納するデータ構造と、 
前記VMMから前記VMに制御を遷移させる旨の要求を受信すると前記オフセット値を算出し、前記VMの処理中に前記VMにタイマの値を供給するためのタイマ・アクセス・ロジックであって、前記タイマの値が前記オフセット値に基づいて調節されるタイマ・アクセス・ロジックとを備える装置。
【請求項１１】
請求項１０記載の装置であって、前記タイマ・アクセス・ロジックは、更に、前記VMMからの前記要求を受信すると前記VMに制御を遷移させるものとし、前記遷移は、前記オフセット値の算出を備える装置。
【請求項１２】
請求項１０記載の装置であって、前記タイマ・アクセス・ロジックは、前記VMに制御を遷移させる旨の前記要求を受信すると読み取られるタイマ値と、前記VMから前記VMMへの制御の遷移に関連した先行イベントの検出によって保存されるタイマ値との差を判定することによって前記オフセット値を算出し、タイマ・オフセット・フィールドの値から前記差を減算するものとする装置。
【請求項１３】
請求項１２記載の装置であって、前記データ構造は更に、前記算出タイマ・オフセット値を格納するタイマ・オフセット・フィールドを含めるものとする装置。
【請求項１４】
請求項１２記載の装置であって、前記データ構造は更に、タイマ・オフセット調節インディケータを含めるものとする装置。
【請求項１５】
請求項１４記載の装置であって、前記タイマ・アクセス・ロジックは更に、前記差を判定する前に、前記タイマ・オフセット調節インディケータが、イネーブルされた値にセットされることを判定するものとする装置。
【請求項１６】
請求項１２記載の装置であって、前記タイマ・アクセス・ロジックは更に、タイマ・オフセット調節インディケータが、ディセーブルされた値にセットされることを判定し、タイマ・オフセット・フィールドを読み取るものとし、前記タイマ・オフセット・フィールドの値は、前記オフセット値として後に用いられる装置。
【請求項１７】
請求項１２記載の装置であって、前記データ構造は、前記VMMへの制御の前記遷移に関連した前記先行イベントの検出によって前記タイマ値を保存するか否かを判定するために前記タイマ・アクセス・ロジックによって用いられるタイマ保存インディケータを格納するものとする装置。
【請求項１８】
請求項１０記載の装置であって、
前記オフセット値を格納するためのオフセット・レジスタを更に備える装置。
【請求項１９】
システムであって、
仮想マシン（VM）のタイマ・オフセットに関連したフィールド組を格納するためのメモリと、
前記メモリに結合され、タイマ・オフセットに関連した前記フィールド組を用いてオフセット値を算出し、タイマの現行値に対する前記VMの要求に応答して前記VMに、前記オフセット値に基づいて調節されたタイマ値を前記VMの処理中に供給するためのプロセッサとを備えるシステム。
【請求項２０】
請求項１９記載のシステムであって、前記プロセッサは、前記VMに制御を遷移させる場合に前記オフセット値を算出するものとするシステム。
【請求項２１】
請求項１９記載のシステムであって、前記プロセッサは更に、オフセット・レジスタに前記オフセット値をロードするものとするシステム。
【請求項２２】
請求項１９記載のシステムであって、前記プロセッサは、前記VMに制御を遷移させる旨の前記要求を受信すると読み取られるタイマ値と、前記VMからVMMへの制御の遷移に関連した先行イベントの検出によって保存されるタイマ値との差を判定し、タイマ・オフセット・フィールドの値から前記差を減算することによって前記オフセット値を算出するものとするシステム。
【請求項２３】
請求項２２記載のシステムであって、前記プロセッサは、タイマ・オフセット調節インディケータがイネーブルされた場合に前記VMに制御を遷移させる旨の前記要求を受信すると前記タイマ値を読み取るものとするシステム。
【請求項２４】
請求項２２記載のシステムであって、前記プロセッサは、タイマ保存インディケータがイネーブルされた場合に、前記VMMへの制御の前記遷移に関連した前記先行イベントを検出すると前記タイマ値を保存するシステム。
【請求項２５】
処理システムによって実行されると方法を前記処理システムに行わせる命令を含むマシン読み取り可能媒体であって、前記方法は、
仮想マシン・モニタ(VMM)から仮想マシン(VM)に制御を遷移させる旨の要求を受信する工程と、
オフセット値を算出する工程と、
前記VMの処理中にタイマの現行値に対する要求を受信する工程と、
前記オフセット値に基づいて前記タイマの前記現行値を調節する工程と、
前記調節されたタイマ値を前記VMに供給する工程とを備えるマシン読み取り可能媒体。
【請求項２６】
請求項２５記載のマシン読み取り可能媒体であって、前記方法は、
前記要求を前記VMMから受信すると制御を前記VMに遷移させる工程を更に備え、前記遷移させる工程が、前記オフセット値を算出する工程を更に備えるマシン読み取り可能媒体。
【請求項２７】
請求項２５記載のマシン読み取り可能媒体であって、前記オフセット値を算出する工程が、
制御を前記VMに遷移させる旨の前記要求を受信すると読み取られるタイマ値と、前記VMから前記VMMへの制御の遷移に関連した先行イベントを検出すると保存されるタイマ値との間の差を判定する工程と、
タイマ・オフセット・フィールドの値から前記差を減算する工程とを備えるマシン読み取り可能媒体。
【請求項２８】
請求項２７記載のマシン読み取り可能媒体であって、前記タイマ値は、タイマ・オフセット調節インディケータがイネーブルされた場合に前記VMに制御を遷移させる旨の前記要求を受信すると読み取られるマシン読み取り可能媒体。
【請求項２９】
請求項２７記載のマシン読み取り可能媒体であって、前記タイマ値は、タイマ保存インディケータがイネーブルされた場合に、前記VMMへの制御の前記遷移に関連した前記先行イベントを検出すると保存されるマシン読み取り可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施例は一般に仮想マシンに関し、特に、仮想マシン環境におけるタイマ・オフセット機構に関する。
【背景技術】
【０００２】
タイマは通常、活動をスケジューリングするためにオペレーティング・システム及びアプリケーション・ソフトウェアによって用いられる。例えば、オペレーティング・システム・カーネルは、タイマを用いて、複数のユーザレベル・アプリケーションがシステム・リソース（例えば、中央処理装置（CPU））をタイムシェアすることを可能にすることができる。パソコン（PC）プラットフォーム上で用いられるタイマの例には、８２５４プログラマブル・インターバル・タイマがある。このタイマは、特定の間隔後に、又は周期的に割り込みを出すよう構成され得る。
【０００３】
タイマの別の例には、インテル（登録商標）社のペンティアム（登録商標）４の命令セット・アーキテクチャ（本明細書ではIA-32  ISAとして表す）において用いられるタイムスタンプ・カウンタ（TSC）である。TSCは、プロセッサのハードウェア・リセットに続いて0にセットされ、次いで、プロセッサがHLT命令によって停止させられてもプロセッサ・クロック・サイクル毎に増やされる64ビット・カウンタである。TSCを用いて割り込みを生成することは可能でない。これは、時間基準に過ぎず、時間間隔の測定に有用である。IA-32  ISAは、TSCの値を読み取る旨の命令（RDTSC）及びTSCに書き込む旨の命令（WRMSR）を備える。WRMSRを用いてタイムスタンプ・カウンタに書き込む場合、３２の下位ビットのみを書き込みことができる。上位の３２ビットは0にクリアされる。前述の書き込み制限のために、ソフトウェアは一般に、TSCを任意値に前方にも後方にもセットすることが可能でない。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
マルチプロセッサ（MP）システムでは、TSCを用いて、プロセッサを適切に同期化させ、処理を適切にスケジューリングする。ブート時には、全プロセッサ上のTSCの値が同期化させられ、大半のオペレーティング・システムは、TSCがその場合、同じレートでカウントするものとみなす。TSC値がプロセッサ間でドリフトした（例えば、１つのプロセッサがその他のプロセッサとは異なるレートでカウントした）場合、オペレーティング・システムによる処理のスケジューリングは、混乱させられ得る。
【課題を解決するための手段】
【０００５】
仮想マシンのアクセスを制御する方法及び装置を説明する。以下の記載では、説明の目的で、数多くの特定の詳細を表して、本発明が徹底的に分かるようにしている。しかし、前述の特定の詳細なしで本発明を実施することが可能であることは当業者には明らかであろう。
【発明を実施するための最良の形態】
【０００６】
本発明は、添付図面の図において、限定ではなく例として示す。同じ参照符号は同じ構成要素を示す。
【実施例】
【０００７】
以下の詳細な説明の一部は、コンピュータ・システムのレジスタ内又はメモリ内のデータ・ビットに対する演算のアルゴリズム及び記号表現によって提示している。前述のアルゴリズムの記述及び表現は、当該技術分野における他の当業者に自らの成果の本質を効果的に伝えるうえでデータ処理技術分野における当業者によって用いられる手段である。アルゴリズムは本明細書では、かつ一般には、所望の結果につながる筋の通った一連の演算であるように考えられる。演算とは、物理的数量の物理的操作を必要とするものである。必然的ではないが通常は、前述の数量は、記憶、転送、合成、比較、及びその他の方法で操作することができる電気信号又は磁気信号の形式を呈する。ビット、値、構成要素、記号、文字、項、数字又は同様なものとして前述の信号を主に慣用の理由で場合によっては表すことが好都合であることが明らかになった。
【０００８】
しかし、前述及び同様な語は全て、適切な物理的数量と関連付けられるものとし、前述の数量に付される好都合なラベルに過ぎない。以下の記載から明らかなように別途明記しない限り、本発明を通して、「processing」、「computing」、「calculating」、「determining」や同様なものなどの語を利用した記載は、コンピュータ・システムのメモリ内、レジスタ内やその他のそうした情報記憶装置内、情報伝送装置内や情報表示装置内の物理的数量として同様に表す他のデータにコンピュータ・システムのレジスタ内及びメモリ内の物理的（電子的）数量として表すデータを操作し、変換する、コンピュータ・システム、又は同様な電子計算装置の動作及び処理を表し得る。
【０００９】
本願実施例の以下の詳細な説明では、本発明を実施することができる特定の実施例を例証によって示す添付図面を参照する。添付図面では、同様な符号は、いくつかの図を通して、実質的に同じ構成部分を表す。前述の実施例は、当業者が本発明を実施することを可能にするのに十分詳細に説明する。他の実施例を利用することができ、構造的、論理的及び電気的変更を本発明の範囲から逸脱することなく行うことができる。更に、本発明の種々の実施例は、異なっているが、必ずしも相互排他的でない。例えば、一実施例において説明する特定の特徴、構造又は特性は、他の実施例内に含めることができる。以下の詳細な説明はよって、限定的な意味合いで解されないものとし、本発明の範囲は、特許請求の範囲、及び、前述の特許請求の範囲に権利が与えられる均等物の完全な範囲によってのみ規定される。
【００１０】
以下の例は、実行回路及び論理回路の意味合いで、仮想マシンのタイマへのアクセスの制御を表し得るが、本発明の他の実施例はソフトウェアによって達成することが可能である。例えば、特定の実施例では、本発明は、本発明による処理を行うようコンピュータ（やその他の電子装置）をプログラムするのに用いることができる命令を上に記憶させたマシン又はコンピュータ読み取り可能媒体を含み得るコンピュータ・プログラム又はソフトウェアとして提供することができる。他の実施例では、本発明の処理は、処理を行うための配線ロジックを含む特定のハードウェア構成部分によって、又は、プログラムされたコンピュータ構成部分及びカスタムのハードウェア構成部分の何れかの組み合わせによって行うことができる。
【００１１】
よって、マシン読み取り可能な媒体は、マシン（例えば、コンピュータ）によって読み取り可能な形式での情報を記憶又は伝送する何れかの機構（すなわち、フロッピー（登録商標）・ディスケット、光ディスク、コンパクト・ディスク、リードオンリ―・メモリ（CD-ROM）及び光磁気ディスク、リードオンリー・メモリ（ROM）、ランダム・アクセス・メモリ（RAM）、消去可能なプログラム可能リードオンリー・メモリ（EPROM）、電気的に消去可能なプログラム可能リードオンリー・メモリ（EEPROM）、磁気カード又は光カード、フラッシュ・メモリ、インターネットを介した伝送、伝搬信号（例えば、搬送波、赤外線信号、ディジタル信号等）の電気的、光学的、音響的又はその他の形式や同様なもの（しかし、前述に限定されない）を含み得る。
【００１２】
更に、設計は、作成、シミュレーションから製造までの種々の段階を経ることがあり得る。設計を表すデータは、いくつかのやり方において設計を表すことができる。まず、シミュレーションにおいて有用であるように、ハードウェアは、ハードウェア記述言語又は別の機能的記述言語を用いて表すことができる。更に、論理ゲート及び／又はトランジスタ・ゲートを有する、回路レベルのモデルを設計処理の特定の段階で生成することができる。更に、特定の段階では、大半の設計は、ハードウェア・モデル内の種々の装置の物理的な配置を表すデータのレベルに達する。通常の半導体製造手法が用いられる場合、ハードウェア・モデルを表すデータは、集積回路を生産するのに用いるマスクの種々のマスク・レイヤ上の種々の特徴の有無を規定するデータであり得る。設計の何れの表現においても、データは、マシン読み取り可能媒体の何れかの形式に記憶することが可能である。前述の情報を伝送するよう変調又は他の方法で生成される光波若しくは電波、メモリ、又は磁気記憶装置若しくは光記憶装置（ディスクなど）は、マシン読み取り可能媒体であり得る。前述の媒体は何れも、設計情報又はソフトウェア情報を「担持する」か、又は「示す」ことができる。コード若しくは設計を示すか、又は担持する電気的搬送波が、電気信号の複製、バファリング又は再送信が行われる程度に送信される場合、新たな複製が行われる。よって、通信プロバイダ又はネットワーク・プロバイダは、本発明の手法を実施する対象（搬送波）の複製を行うことができる。
【００１３】
図１は、本発明が動作することができる仮想マシン環境１００の一実施例を示す。この実施例では、単なるプラットフォーム・ハードウェア１１６は、例えば標準オペレーティング・システム（OS）又は仮想マシン・モニタ（VMM）（VMM１１２など）を実行できることがあり得るコンピューティング・プラットフォームを備える。
【００１４】
VMM１１２は、通常、ソフトウェアで実現されるが、単なるマシン・インタフェースをより高いレベルのソフトウェアにエミュレートし、エクスポートすることができる。前述のより高いレベルのソフトウェアは、標準OS又はリアルタイムOSを備え得るものであり、限定されたオペレーティング・システム機能を備える非常に限定的な動作環境であり得るものであり、伝統的なＯＳファシリティを含んでいないことがあり得る、等である。あるいは、例えば、ＶＭＭ１１２は、別のＶＭＭ内で、又は別のＶＭＭの上で実行させることができる。ＶＭＭは、例えば、ハードウェア、ソフトウェア、ファームウェアで実現するか、又は種々の手法の組み合わせによって実現することができる。
【００１５】
プラットフォーム・ハードウェア１１６は、パソコン（ＰＣ）、メインフレーム、ハンドヘルド装置、ポータブル・コンピュータ、セットトップ・ボックス、又は何れかの他のコンピューティング・システムのものであり得る。プラットフォーム・ハードウェア１１６は、プロセッサ１１８及びメモリ１２０を含む。
【００１６】
プロセッサ１１８は、ソフトウェア（マイクロプロセッサ、ディジタル信号プロセッサ、マイクロコントローラや同様なものなど）を実行することができる何れかのタイプのプロセッサであり得る。プロセッサ１１８は、本発明の方法の実施例の実行を行うマイクロコード、プログラム可能ロジック又はハードコードされたロジックを含み得る。図１は前述のプロセッサ１１８を１つのみ示しているが、システム内に１つ又は複数のプロセッサがあり得る。
【００１７】
メモリ１２０は、プロセッサ１１８によって読み取り可能なハード・ディスク、フロッピー（登録商標）・ディスク、ランダム・アクセス・メモリ（RAM）、リードオンリー・メモリ（ROM）、フラッシュ・メモリ、上記装置の何れかの組み合わせ、又は何れかの他のタイプのマシン媒体であり得る。メモリ１２０は、本発明の方法実施例の実行を行うための命令及び／又はデータを記憶し得る。
【００１８】
VMM１１２は、1つ又は複数の仮想マシン（VM）の抽象化を他のソフトウェア（すなわち、「ゲスト」ソフトウェア」）に提示する。それによって、同じ抽象化又は異なる抽象化が種々のゲストに供給され得る。図１は２つのVM１０２及び１１４を示す。各VM上で実行するゲスト・ソフトウェアは、ゲストOS（ゲストOS１０４や１０６など）並びに種々のゲスト・ソフトウェア・アプリケーション１０８及び１１０を含み得る。ゲストOS１０４及び１０６それぞれは、ゲストOS１０４又は１０６がその上で実行しているVM１０２内及びVM１１４内の物理リソース（例えば、プロセッサ・レジスタ、メモリ装置やI／O装置）をアクセスすることが想定される。例えば、ゲストOS１０４及び１０６は、VM１０２及び１１４において提示されるプロセッサ及びプラットフォームのアーキテクチャによって、レジスタ、キャッシュ、構造、I／O装置、メモリ及び同様なもの全てへのアクセスを有することが想定される。ゲスト・ソフトウェアによってアクセスすることが可能なリソースは、「特権的」又は「非特権的」として分離することができる。特権的リソースの場合、VMM１１２は、前述の特権的リソースに対する最終的な制御を維持する一方で、ゲスト・ソフトウェアによって望まれる機能を容易にする。非特権的リソースは、VMM１１２によって制御されなくてよく、ゲスト・ソフトウェアによってアクセスすることが可能である。
【００１９】
更に、各ゲストOSは種々の障害イベント（例外（例えば、ページ障害、一般的な保護障害等）、割り込み（例えば、ハードウェア割り込み、ソフトウェア割り込み）など）及びプラットフォーム・イベント（例えば、初期化（INIT）やシステム管理割り込み（SMI））を扱うことが想定される。前述の障害イベントの一部は「特権的」である。それらは、VM１０２及び１１４の適切な動作を確実にするために、かつ、ゲスト・ソフトウェアからの保護及びゲスト・ソフトウェア間の保護のためにVMM１１２によって扱われなければならないからである。
【００２０】
特権的障害イベントが生起するか、又はゲスト・ソフトウェアが特権的リソースをアクセスしようとする場合、制御はVMM１１２に移行され得る。ゲスト・ソフトウェアからVMM１１２に制御が移行されることは本明細書ではVMエグジットとして表す。リソース・アクセスを容易にした後、又はイベントを適切に扱った後、VMM１１２はゲスト・ソフトウェアに制御を戻し得る。VMM１１２からゲスト・ソフトウェアへの制御の移行はVMエントリとして表す。
【００２１】
一実施例では、プロセッサ１１８は、仮想マシン制御構造（VMCS）に格納されたデータによってVM１０２及び１１４の動作を制御する。VMCS１２４は、ゲスト・ソフトウェアの状態、VMM１１２の状態、ゲスト・ソフトウェアの動作をVMM１１２がどのようにして制御したいかを示す実行制御情報、VMM１１２とVMとの間の遷移を制御する情報等を含み得る構造である。プロセサ１１８はVMCS１２４から情報を読み出してVMの実行環境を判定し、その特性を制限する。一実施例では、VMCSはメモリ１２０に格納される。特定の実施例では、複数のVMCS構造を用いて複数のVMをサポートする。
【００２２】
VMM１１２は、リソースをスケジューリングし、サービス品質を実現し、セキュリティを保証し、その他の機能を行うためにタイマを用いる必要があり得る。例えば、（IA-32  ISAとして本明細書において表す）インテル（登録商標）社のペンティアム（登録商標）４の命令セット・アーキテクチャ（ISA）では、VMM１１２は、タイムスタンプ・カウンタ（TSC）を用いて前述の機能を行うことができる。VM102及び114それぞれは、タイマを用いてタイミング・ループを校正し、性能最適化を行う必要もあり得る。VM102及び114は互いのこともVMM１１２のことも分からないので、VM１０２又は１１４に供給されるタイマ値は、ゲストOS１０４又は１０６が仮想プラットフォーム上ではなく専用ハードウェア・プラットフォーム上で実行しているという錯覚を与えるよう調節する必要があり得る。タイマを適切に仮想化し、よって、ゲストOS１０４及び１０６についての錯覚を維持するようタイマ・オフセット機構が実現される。一実施例では、タイマ・オフセット機構は、タイマ・オフセット構成モジュール１２６及びタイミング・アクセス・ロジック１２２を含む。
【００２３】
タイマ・オフセット構成モジュール１２６は、VM１０２又は１１４への制御の遷移を要求する前に、タイマ・オフセットに関連したフィールドの値を供給する役割を果たす。一実施例では、前述の値は、タイマ値をVM１０２又は１１４に供給する場合に、プロセッサ１１８によって用いる対象のオフセットを規定するオフセット値、及び、タイミング・オフセットがVM１０２又は１１４についてイネーブルされたか否かを規定するタイマ・オフセット・インディケータを含み得る。一実施例では、タイマ・オフセット値は、実際のハードウェア・タイマ値未満又は以上のタイマ値をVMM１１２がゲスト・ソフトウェアに提示することを可能にする符号付き値である。一実施例では、タイマ・オフセット値は、VM１０２又は１１４に値を戻す前にタイマ値に加えられる。一実施例では、タイマ・オフセットに関連したフィールドは、タイマをアクセスする旨のVM要求がVMMへの制御の遷移に関連しているか否か（例えば、タイマをアクセスする旨の要求がVMエグジットをもたらすか否か）を規定するタイマ・アクセス制御インディケータも含む。
【００２４】
一実施例では、VM１０２又は１１４のオフセット値は、このVMがVMM１１２及びその他のVMの実行のために実行していなかった時間間隔の合算を補正する。例えば、タイマ値が１０００度数の場合、タイマの値が１０００であることをVM１０２が想定するものとする。更に、１５００度数では、VM１０２はVMエグジットによって中断され得る。次いで、VMM１１２が１００度数、実行される（１６００度数のタイマ値）。その後、VMM１１２は、VM１１４に入る旨を要求し得る。VM１１４は次いで、VMエグジットまで６００度数、実行することができる（２２００度数のタイマ値）。それによって、VMM１１２が200度数、実行されることがもたらされる（２４００のタイマ値）。それによって、次いで、VM１０２にもう一度入る旨を要求し得る。もう一度入る時点で、VM１０２は、１５００度数の値をタイマが有することを想定している。かわりに、この時点での実際のタイマ値は２４００度数である。VM１０２についてVMM１１２によって供給されるオフセット値は９００度数になる。これは、VM１１２が、VM１１４及びVMM１１２の実行のために実行していなかった時間間隔の合算である。よって、VMM１１２は、９００のオフセット値をタイマ・オフセット・フィールドに格納するので、VM１０２がタイマを読み取ろうとする場合、VM１０２に供給される値は、現行タイマ値を９００減らすことによって計算される。オフセット値は、実際のタイマ値と、VM１０２によって想定されるタイマ値との間の差を計算することによって算出することもできる。別の実施例では、タイマを読み取ろうとする場合にVM１０２に供給される値は、VMM１１２によって構成されるオフセット値に現行タイマ値を加算することによって計算される。この実施例では、VMMによって格納されるオフセット値は負の数である。前述の例では、格納される値は−９００である。
【００２５】
前述の通り、一実施例では、オフセット値はVMM１１２によって判定される。別の実施例では、オフセット値はプロセッサ１１８によって判定され、タイマ・オフセットに関連したフィールド及び制御は、タイマ・オフセット・インディケータ、オフセット調節インディケータ、ゲスト・タイマ・フィールド、タイマ保存インディケータ、及びタイマ・オフセット・フィールドを含み得る。一実施例では、３つのインディケータ値を種々のやり方で組み合わせることができる。例えば、オフセット調節インディケータ及びタイマ保存インディケータは、以下に更に詳細に説明するように同じ制御であり得る（すなわち、タイマ・オフセットの調節を可能にすることは暗黙的にタイマの保存を可能にする）。特定の実施例では、上記インディケータの一部は存在しないことがあり得る。例えば、以下に更に詳細に説明するように、タイマ・オフセット・インディケータは存在しないことがあり得るものであり、タイマ・オフセットは、常にイネーブルされたものとみなされる。
【００２６】
一実施例では、タイマ・オフセットに関連したフィールド及び制御はVMCS１２４に格納される。あるいは、タイマ・オフセットに関連したフィールド及び制御は、プロセッサ１１８において、メモリ１２０及びプロセッサ１１８の組み合わせにおいて、又は何れかの他の１つ若しくは複数の格納場所において存在し得る。一実施例では、タイマ・オフセットに関連した別個のフィールド及び制御を、VM１０２及び１１４それぞれについて維持する。あるいは、タイマ・オフセットに関連した同じフィールド及び制御が、VM１０２及び１４４について維持され、各VMエントリ前にVMM１１２によって更新される。
【００２７】
システム１００が複数のプロセッサ、複数のコア又はマルチスレッド・プロセッサを含む一実施例では、複数の論理プロセッサそれぞれは、タイマ・オフセットに関連した別個のフィールド及び制御と関連付けられ、VMM１１２は、複数の論理プロセッサ毎に、タイマ・オフセットに関連したフィールド及び制御を構成する。
【００２８】
一実施例では、プロセッサ１１８は、タイマ・オフセット値に基づいて、VM１０２及び１１４のタイマへのアクセスを仮想化する役割を果たすタイマ・アクセス・ロジック１２２を含む。特に、タイマ・アクセス・ロジック１２２は、タイマ・オフセットがイネーブルされたことを判定した場合、調節されたタイマ値をVM１０２又は１１４に供給する。一実施例では、タイマ・アクセス・ロジック１２２は、タイマ・オフセット・インディケータ値を検査することによって、タイマ・オフセットがイネーブルされたかを判定する。一実施例では、タイマ・アクセス・ロジック１２２は、タイマの現行値に対する要求をVM１０２又は１１４から受信した場合、タイマの現行値を読み取り、オフセット値をタイマの現行値に加算し、結果として生じる値をVM１０２又は１１４に戻し、それによって、専用ハードウェア・プラットフォーム上で実行しているという錯覚をVM１０２又は１１４に提示する。一実施例では、オフセット値は符号付き値である。
【００２９】
オフセット値は、VM１０２及び１１４についてVMM１１２によって（例えば、タイマ・オフセット構成モジュール１２６によって）判定することができる。VMM１１２によってオフセット値を判定する処理の一実施例は、図３及び図４に関して以下に更に詳細に説明する。あるいは、オフセット値は、プロセッサ１１８によって（例えば、タイマ・アクセス・ロジック１２２によって）判定される。プロセッサ１１８によってオフセット値を判定する処理の一実施例を図５に関して以下に詳細に説明する。
【００３０】
図２は、タイマへのVMのアクセスを制御する処理２００の一実施例のフロー図である。処理は、ハードウェア（例えば、回路、専用ロジック、プログラム可能ロジック、マイクロコード等）、ソフトウェア（汎用コンピュータ・システム上若しくは専用マシン上で実行するものなど）、又は両方の組み合わせを備え得る処理ロジックによって行うことができる。一実施例では、処理２００は、図１のタイマ・アクセス・ロジック１２２によって行われる。
【００３１】
図２を参照すれば、処理２００は、処理ロジックが、VMMからVMに制御を遷移させる旨の要求（すなわち、VMエントリの要求）を受信すること（処理ブロック２０２）によって始まる。一実施例では、VMエントリ要求は、VMMによって実行されるVMエントリ命令を介して受信される。
【００３２】
次に、処理ロジックは、タイマ・オフセットがイネーブルされたか否かが判定される（処理ブロック２０４）。一実施例では、処理ロジックはこの判定をVMへの遷移の一部として行う（例えば、VMCSに格納されたVM状態及び実行制御情報を検査し、ロードする場合）。一実施例では、この判定は、入る対象のVMについてVMCSに格納されたタイマ・オフセット・インディケータの現行値に基づいている。
【００３３】
タイマ・オフセットがイネーブルされた場合、処理ロジックは、現行タイマ値に対するVMの要求に応答する場合にタイマ・オフセット値を用いる。一実施例では、タイマ・オフセット値は、このVMに制御を遷移させる旨の要求を出す前にVMMによって判定される。VMMによってオフセット値を判定する処理の一実施例は、図３及び図４に関して以下に更に詳細に説明する。あるいは、オフセット値は、制御をこのVMに遷移させる際にプロセッサによって自動的に判定される。プロセッサによってオフセット値を判定する処理の一実施例を図５に関して以下に更に詳細に説明する。
【００３４】
一実施例では、タイマ・オフセットがイネーブルされた場合、処理ロジックは、オフセット・レジスタに、VMCSに格納されたタイマ・オフセット値をロードする（処理ブロック２０６）。あるいは、タイマ・オフセットがディセーブルされた場合、処理ロジックはオフセット・レジスタに0をロードする（処理ブロック２０６）。次に、処理ロジックは、VMにおける実行を開始する（処理ブロック２１０）。
【００３５】
VMの実行中に、処理ロジックは、タイマの現行値に対するVM要求を受信し得る。例えば、IA-32  ISAでは、VMは、TSCを読み取る旨のRDMSR命令又はRDTSC命令を実行することによってTSCの現行値に対する要求を出し得る。
【００３６】
処理ボックス２１２では、処理ロジックは、VMがタイマの現行値を要求するか否かを判定する。肯定の場合、一実施例では、処理ロジックは、この要求が、VMMへの制御の遷移に関連しているか否かを判定する（処理ボックス２１４）。一実施例では、タイマ・アクセス制御インディケータを「エグジット」値にセットして、タイマをアクセスする旨のVMの各要求の時点でVMエグジットを引き起こし得る。例えば、一実施例では、タイマ・アクセス制御インディケータは単一ビットである。これは、１にセットされた場合、タイマにアクセスする旨のVM要求によってVMエグジットが引き起こされることを示す。一実施例では、このインディケータはVMCSに格納され得る。要求が、VMMへの制御の遷移に関連していない場合、処理ロジックは処理ブロック２１６に進む。要求が、VMMへの制御の遷移に関連している場合、処理ロジックは、タイマをアクセスしようとすることによってVMエグジットが引き起こされた旨をVMMに示して、制御をVMMに遷移させる（処理ブロック２２０）。一実施例では、制御をVMMに遷移させる前に、処理ロジックはオフセット・レジスタに0をロードして（処理ブロック２１８）、VMMがタイマの実際値を得ることを可能にする。
【００３７】
別の実施例では、タイマ・アクセス制御インディケータは用いられず、処理ロジックは、タイマの現行値に対するVM要求に応答してVMMへの制御の遷移を求めて検査するものでない。代わりに、処理ロジックは処理ブロック２１４を飛ばし、直接、処理ブロック２１６に進む。
【００３８】
処理ブロック２１６では、処理ロジックは、タイマの現行値を読み取り、オフセット値をタイマの現行値に加算し、結果をVMに戻す。一実施例では、タイマ・オフセット値は、符号付き加算を用いてタイマの中身と組み合わせられた符号付き値である。
【００３９】
VMの実行中に、VMエグジットに関連した種々の他のイベント（例えば、ページ障害、割り込み等）が生起し得る。一実施例では、処理ロジックが、VMエグジットに関連したイベントを検出した場合（処理ボックス２２２）、処理ロジックはオフセット・レジスタに0をロードし（処理ブロック２１８）、処理ブロック２２２において検出されたVMエグジットの原因を示して、制御をVMMに遷移させる（処理ブロック２２０）。処理ロジックは、VMエグジットに関連したイベントを何ら検出しない場合、処理ボックス２１２に戻る。
【００４０】
図３は、タイマ・オフセットに関連したフィールドを構成するための、処理３００の一実施例のフロー図である。処理は、ハードウェア（例えば、回路、専用ロジック、プログラム可能ロジック、マイクロコード等）、ソフトウェア（汎用コンピュータ・システム上若しくは専用マシン上で実行するものなど）、又は両方の組み合わせを備え得る処理ロジックによって行うことができる。一実施例では、処理３００は、図１のタイマ・オフセット構成モジュール１２６によって行われる。
【００４１】
図３を参照すれば、処理３００は、VMへの制御の遷移が必要であることを決定する処理ロジックから始まる。VMに制御を遷移させる旨の要求を出す前に、処理ロジックは、VMのタイマ・オフセット値を判定し（処理ブロック３０２）、タイマ・オフセット値をVMCSに格納する（処理ブロック３０４）。一実施例では、タイマ・オフセット値は、入る対象のVMが、VMM及びその他のVMの実行のために実行していなかった時間間隔の合算である。タイマ・オフセット値を算出する処理の一実施例は、図４に関して以下に更に詳細に説明する。
【００４２】
次に、処理ロジックは、タイマ・オフセット・インディケータをイネーブル値にセットし（処理ブロック３０６）、制御をVMに遷移させる旨の要求（例えば、VMエントリ要求）を出す（処理ブロック３０８）。
【００４３】
後に、VMからのVMエグジットが生成されると、処理ロジックに制御が戻され（処理ブロック３１０）、タイマの現行値が判定され（処理ブロック３１２）、必要に応じてVMエグジットが扱われる（例えば、VMエグジットの原因に対処する処理を行う）（処理ブロック３１４）。後述の通り、制御をVMに戻す前に、VMエグジットにおけるタイマの値を用いてタイマ・オフセットを算出し得る。
【００４４】
図４は、（例えば、図３の処理ブロック３０２において参照されるように）VMのタイマ・オフセット値を算出する処理４００の一実施例のフロー図である。処理は、ハードウェア（例えば、回路、専用ロジック、プログラム可能ロジック、マイクロコード等）、ソフトウェア（汎用コンピュータ・システム上若しくは専用マシン上で実行するものなど）、又は両方の組み合わせを備え得る処理ロジックによって行うことができる。一実施例では、処理400は、図１のタイマ・オフセット構成モジュール１２６によって行われる。
【００４５】
図４を参照すれば、処理４００は、処理ロジックが、最後のVMエントリ後にこのVMにおいて費やされた時間を算出すること（処理ブロック４０２）から始まる。一実施例では、この時間は、VMエントリ時間（すなわち、VMに入る旨の要求を出す直前のタイマ値）及びVMエグジット時間（例えば、VMから戻される制御を受ける時点でのタイマ値）を判定し、VMエントリ時間をVMエグジット時間から減算することによって算出される。
【００４６】
処理ブロック４０４では、処理ロジックは、先行して算出された累積時間に、最後のエントリ中にVMにおいて費やされた時間を加算することによって、VMにおいて費やされた累積時間を算出する。一実施例では、処理ロジックは、VMから戻される制御を受ける時点でVMにおいて費やされた累積時間を算出する。あるいは、処理ロジックは、VMにおいて費やされた累積時間を、制御をこのVMに戻す旨の要求を出す時点で算出する。
【００４７】
処理ロジックは、制御をVMに戻すことにすると、タイマの現行値を読み取り（処理ブロック４０６）、VMにおいて費やされた累積時間と、タイマの現行値との間の差としてのタイマ・オフセット値とを算出する（処理ブロック４０８）。一実施例では、タイマ・オフセット値は符号付き値である。
【００４８】
図５は、VMのタイマ・オフセット値を算出する処理の別の実施例のフロー図である。処理は、ハードウェア（例えば、回路、専用ロジック、プログラム可能ロジック、マイクロコード等）、ソフトウェア（汎用コンピュータ・システム上若しくは専用マシン上で実行するものなど）、又は両方の組み合わせを備え得る処理ロジックによって行うことができる。一実施例では、処理500は、図１のタイマ・オフセット・ロジック１２２によって行われる。
【００４９】
図５を参照すれば、処理５００は、処理ロジックが、VM１からVMMへの制御の遷移に関連したイベントを検出すること（処理ブロック５０２）から始まる。
【００５０】
処理ブロック５０４では、処理ロジックは、タイマ保存インディケータがイネーブルされたか否かを判定する。一実施例では、タイマ保存インディケータは、VMMによって構成され、VMCSに格納される。
【００５１】
タイマ保存インディケータがイネーブルされた場合、処理ロジックは現行タイマ値をVM1タイマ値としてゲスト・タイマ・フィールドに保存し（処理ブロック５０６）、処理ブロック５０８に進む。一実施例では、ゲスト・タイマ・フィールドはVMCSに格納される。
【００５２】
タイマ保存インディケータがディセーブルされた場合、処理ロジックは処理ブロック５０６を飛ばし、処理ブロック５０８に直接進む。
【００５３】
処理ブロック５０８では、処理ロジックは制御をVMMに遷移させる。
【００５４】
後に、処理ブロック５１０では、処理ロジックは、制御をVM1に戻す旨の要求を受信する。これに応答して、処理ロジックは、オフセット調節インディケータがイネーブルされたか否かを判定する（処理ブロック５１２）。一実施例では、タイマ調節インディケータは、VMMによって構成され、VMCSに格納される。別の実施例では、タイマ保存インディケータ及びオフセット調節インディケータは、処理ブロック５０４及び５１２において検査される同じインディケータによって表される。別の実施例では、タイマ・オフセット・インディケータを評価して、タイマ・オフセットを用いるべきかを判定することができる。一実施例では、タイマ・オフセット・インディケータは、VMMによって構成され、VMCSに格納される。
【００５５】
オフセット調節インディケータがイネーブルされた場合、処理ロジックは現行タイマ値を読み取り（処理ブロック５１４）、保存VM1タイマ値を現行タイマ値から減算することによって、現行タイマ値と、処理ブロック５０６において保存されたVM1タイマ値との間の差を判定する（処理ブロック５１６）。更に、処理ロジックは、この差をタイマ・オフセット・フィールド内のタイマ・オフセット値から減算することによって、調節されたタイマ・オフセット値を算出する（処理ブロック５１８）。一実施例では、この調節されたタイマ・オフセット値はタイマ・オフセット・フィールドに格納される。次に、処理ロジックは、VM1に制御を遷移させる（処理ブロック５２０）。
【００５６】
オフセット調節インディケータがディセーブルされた場合、一実施例では、処理ロジックは処理ブロック５１４乃至５１８を飛ばし、処理ブロック５２０に直接進む。別の実施例では、調節オフセット・インディケータがディセーブルされた場合、処理ロジックは、調節されたタイマ・オフセット値として用いるためにタイマ・オフセット・フィールドの値を取り出し、次いで、処理ブロック５２０に進む。
【００５７】
別の実施例では、VMエグジット時に、（現行タイマ・オフセット値と、タイマの現行値との和を計算することによって）仮想ゲスト・タイマ値が算出され、仮想ゲスト・タイマ・フィールドに格納される。一実施例では、仮想ゲスト・タイマ・フィールドがVMCSに格納される。後に、VMエントリ時に、オフセット値が、VMエントリ時のタイマ値を仮想ゲスト・タイマ値から減算することによって計算される。VMの実行中に、タイマを読み取るようにすることによって、オフセット値によって調節されるタイマの現行値が戻される。
【００５８】
よって、タイマへのVMのアクセスを制御する方法及び装置を説明した。なお、上記記載は、限定的であることを意図するものでなく、例証的であることを意図するものである。多くの他の実施例は、当業者には、上記記載を読み、理解することによって明らかであろう。本発明の範囲はよって、特許請求の範囲、及び前述の特許請求の範囲に権利が与えられる均等物の完全な範囲を参照して判定するものとする。 
【図面の簡単な説明】
【００５９】
【図１】本発明が動作することができる仮想マシン環境の一実施例を示す図である。
【図２】タイマへのVMのアクセスを制御する処理の一実施例のフロー図である。
【図３】タイマのオフセットに関連したフィールドを構成する処理の一実施例のフロー図である。
【図４】VMのタイマ・オフセット値を算出する処理の別の実施例のフロー図である。
【図５】VMのタイマ・オフセット値を算出する処理の別の実施例のフロー図である。
【図１】
2008518367.tif 000003
【図２】
2008518367.tif 000004
【図３】
2008518367.tif 000005
【図４】
2008518367.tif 000006
【図５】
2008518367.tif 000007
【国際調査報告】
2008518367.tif 000008
2008518367.tif 000009