(57)【要約】【課題】ゲスト・オペレーティング・システムに現在割り当てられている、サブセットのホスト・リソースのトポロジについて、ゲスト・オペレーティング・システムに知らせることを提供すること。【解決手段】仮想マシン・ブート時に、ゲスト物理メモリおよびゲスト仮想プロセッサを仮想ノード中にグループ分けするために、スタティック・リソース・アフィニティ・テーブル（ＳＲＡＴ）がバーチャライザによって使用される。一実施形態においては、その後に仮想ノードの背後のホスト物理メモリは、必要に応じてこのバーチャライザが変更することができ、このバーチャライザは、このノード内のこれらの仮想プロセッサについての適切な物理プロセッサを提供することになる。【選択図】図６
2006178933.tif 000002
【特許請求の範囲】
【請求項１】
動的仮想プロセッサ・トポロジを有するコンピュータ・システム上で実行されるオペレーティング・システムの性能を最適化するための方法であって、
前記方法は、前記仮想プロセッサ・トポロジ中の少なくとも１つの変更を反映するための少なくとも１つのアップデートを用いて、スタートアップの後に前記オペレーティング・システムをアップデートするステップを備えることを特徴とする方法。
【請求項２】
前記オペレーティング・システムは、ゲスト・オペレーティング・システムであり、前記コンピュータ・システムは、仮想マシンであり、前記仮想マシンは、ホスト・コンピュータ・システムによって動的に割り付けられる１組のリソースに対する変更に基づいた動的仮想プロセッサ・トポロジを有することを特徴とする請求項１に記載の方法。
【請求項３】
前記アップデートするステップは、前記仮想マシンに関連つけられたバーチャライザが、前記ゲスト・オペレーティング・システムの少なくとも１つの内部テーブルを直接にアップデートすることによって遂行されることを特徴とする請求項２に記載の方法。
【請求項４】
前記アップデートするステップは、前記仮想マシンに関連つけられたバーチャライザが、開示（disclosure）を用いて共有メモリ・ロケーションをアップデートすることによって遂行され、前記ゲスト・オペレーティング・システムは、その後に前記共有メモリ・ロケーションにアクセスし、前記開示（disclosure）を取り出し、前記開示（disclosure）を適用することを特徴とする請求項２に記載の方法。
【請求項５】
前記ゲスト・オペレーティング・システムがその後に前記共有メモリ・ロケーションにアクセスする前記ステップは、スケジュールに従って実施されるか、または前記仮想マシン中の前記エミュレータが生成する割込みに応答して実施されることを特徴とする請求項４に記載の方法。
【請求項６】
前記ゲスト・オペレーティング・システムは、ヒントを用いて共有メモリ・ロケーションをアップデートすることにより前記バーチャライザに対してヒントを提供し、前記バーチャライザは、その後に前記共有メモリ・ロケーションにアクセスし、前記ヒントを取り出し、前記ヒントを適用することを特徴とする請求項４に記載の方法。
【請求項７】
前記方法の各エレメントを実装する手段を備えるハードウェア制御デバイスによって実装されることを特徴とする請求項２に記載の方法。
【請求項８】
動的仮想プロセッサ・トポロジを有するコンピュータ・システム上で実行されるオペレーティング・システムの性能を最適化するためのコンピュータ読取り可能命令を備えるコンピュータ読取り可能媒体であって、
前記コンピュータ読取り可能命令は、前記仮想プロセッサ・トポロジ中の少なくとも１つの変更を反映するための少なくとも１つのアップデートを用いて、スタートアップの後に前記オペレーティング・システムをアップデートする命令を備えることを特徴とするコンピュータ読取り可能媒体。
【請求項９】
前記オペレーティング・システムは、ゲスト・オペレーティング・システムであり、前記コンピュータ・システムは、仮想マシンであり、前記仮想マシンは、ホスト・コンピュータ・システムによって動的に割り付けられる１組のリソースに対する変更に基づいた動的仮想プロセッサ・トポロジを有することを特徴とする請求項８に記載のコンピュータ読取り可能媒体。
【請求項１０】
前記仮想マシンに関連つけられたバーチャライザが前記ゲスト・オペレーティング・システムの少なくとも１つの内部テーブルを直接に開示することによって、前記アップデートするステップを遂行する命令をさらに備えることを特徴とする請求項９に記載のコンピュータ読取り可能媒体。
【請求項１１】
前記仮想マシンに関連つけられたバーチャライザが開示を用いて共有メモリ・ロケーションをアップデートするによって前記アップデートするステップを遂行し、および前記ゲスト・オペレーティング・システムが、その後に前記共有メモリ・ロケーションにアクセスし、前記開示を取り出し、前記開示を適用する命令をさらに備えることを特徴とする請求項９に記載のコンピュータ読取り可能媒体。
【請求項１２】
前記ゲスト・オペレーティング・システムがその後に前記共有メモリ・ロケーションにアクセスする前記ステップを、スケジュールに従って実施するか、または前記仮想マシン中の前記エミュレータが生成する割込みに応答して実施するための命令をさらに備えることを特徴とする請求項１１に記載のコンピュータ読取り可能媒体。
【請求項１３】
前記ゲスト・オペレーティング・システムが、ヒントを用いて共有メモリ・ロケーションをアップデートすることにより前記バーチャライザに対してヒントを提供し、前記バーチャライザが、その後に前記共有メモリ・ロケーションにアクセスし、前記ヒントを取り出し、前記ヒントを適用するための命令をさらに備えることを特徴とする請求項１１に記載のコンピュータ読取り可能媒体。
【請求項１４】
前記コンピュータ読取り可能媒体は、通信媒体を介して伝送される電磁搬送波信号であることを特徴とする請求項９に記載のコンピュータ読取り可能媒体。
【請求項１５】
動的仮想プロセッサ・トポロジを有するコンピュータ・システム上で実行されるオペレーティング・システムの性能を最適化するためのシステムであって、
前記システムは、前記仮想プロセッサ・トポロジ中の少なくとも１つの変更を反映するための少なくとも１つのアップデートを用いて、スタートアップの後に前記オペレーティング・システムをアップデートする少なくとも１つのサブ・システムを備えることを特徴とするシステム。
【請求項１６】
前記オペレーティング・システムは、ゲスト・オペレーティング・システムであり、前記コンピュータ・システムは、仮想マシンであり、前記仮想マシンは、ホスト・コンピュータ・システムによって動的に割り付けられる１組のリソースに対する変更に基づいた動的仮想プロセッサ・トポロジを有することを特徴とする請求項１５に記載のシステム。
【請求項１７】
前記仮想マシンに関連するバーチャライザが前記ゲスト・オペレーティング・システムの少なくとも１つの内部テーブルを直接に開示することによって前記アップデートするステップを遂行するための少なくとも１つのサブ・システムをさらに備えることを特徴とする請求項１６に記載のシステム。
【請求項１８】
前記仮想マシンに関連するバーチャライザが開示を用いて共有メモリ・ロケーションをアップデートすることによって前記アップデートするステップを遂行し、前記ゲスト・オペレーティング・システムが、その後に前記共有メモリ・ロケーションにアクセスし、前記開示を取り出し、前記開示を適用するための少なくとも１つのサブ・システムをさらに備えることを特徴とする請求項１６に記載のシステム。
【請求項１９】
前記ゲスト・オペレーティング・システムがその後に前記共有メモリ・ロケーションにアクセスする前記ステップを、スケジュールに従って実施するか、または前記仮想マシン中の前記エミュレータが生成する割込みに応答して実施するための少なくとも１つのサブ・システムをさらに備えることを特徴とする請求項１８に記載のシステム。
【請求項２０】
前記ゲスト・オペレーティング・システムが、ヒントを用いて共有メモリ・ロケーションをアップデートすることにより前記バーチャライザに対してヒントを提供し、前記バーチャライザが、その後に前記共有メモリ・ロケーションにアクセスし、前記ヒントを取り出し、前記ヒントを適用するための少なくとも１つのサブ・システムをさらに備えることを特徴とする請求項１８に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に（「プロセッサ仮想化（processor virtualization）」としても知られている）仮想マシン（virtual machine）の分野、および仮想マシン環境において実行されるオペレーティング・システムに関する。より詳細には、本発明は、仮想マシンのプロセッサ・トポロジを、そのトポロジがホスト・コンピュータ・システム・プロセッサおよびメモリ・リソースの割付けに基づいて動的である仮想マシン上で実行されるゲスト・オペレーティング・システムに対して、エクスポーズする（公開する）ためのシステムおよび方法を対象としている。
【背景技術】
【０００２】
コンピュータは、汎用のＣＰＵ（central processing unit：中央演算処理装置）、または「プロセッサ」を含んでおり、これらは、特定の１組のシステム命令を実行するように設計されている。同様なアーキテクチャまたは設計仕様を有する１グループのプロセッサは、同じプロセッサ・ファミリのメンバであるものと考えることができる。現行のプロセッサ・ファミリの実施例には、アリゾナ州、フェニックス市のモトローラ社が製造するモトローラ６８０Ｘ０プロセッサ・ファミリ、カリフォルニア州、サニーベール市のインテル・コーポレーションが製造するインテル８０Ｘ８６プロセッサ・ファミリ、モトローラ社が製造し、カリフォルニア州、クパチーノ市のアップル・コンピュータ社が製造するコンピュータ中で使用されるパワーＰＣプロセッサ・ファミリが含まれる。１グループのプロセッサは、それらが同様なアーキテクチャおよび設計配慮がなされているので同じファミリ中に存在するが、ファミリ内のプロセッサは、それらのクロック速度および他の性能パラメータが広い範囲で異なっている。
【０００３】
マイクロ・プロセッサの各ファミリは、諸命令を実行するが、それらは、そのプロセッサ・ファミリに固有である。プロセッサまたはプロセッサ・ファミリが実行することができる集合的な１組の命令は、そのプロセッサの命令セット（instruction set）として知られている。一実施例として、インテル８０Ｘ８６プロセッサ・ファミリが使用する命令セットは、パワーＰＣプロセッサ・ファミリが使用する命令セットとは互換性がない。このインテル８０Ｘ８６命令セットは、ＣＩＳＣ（Complex Instruction Set Computer：複雑命令セット・コンピュータ）フォーマットに基づいている。モトローラのパワーＰＣ命令セットは、ＲＩＳＣ（Reduced Instruction Set Computer：縮小命令セット・コンピュータ）フォーマットに基づいている。ＣＩＳＣプロセッサは、多数の命令を使用しており、これらの命令の一部は、かなり複雑なファンクションを実施することができるが、これらの命令は、一般に実行するために多数のクロック・サイクルを必要とする。ＲＩＳＣプロセッサは、ずっと高速に実行されるさらに簡単な１組のファンクションを実施するさらに少ない数の使用可能な命令を使用する。
【０００４】
コンピュータ・システムの中でもとりわけ、このプロセッサ・ファミリの固有性により、一般的にコンピュータ・システムのハードウェア・アーキテクチャの他のエレメントの間の非互換性がもたらされることにもなる。インテル８０Ｘ８６プロセッサ・ファミリからのプロセッサを用いて製造されるコンピュータ・システムは、パワーＰＣプロセッサ・ファミリからのプロセッサを用いて製造されるコンピュータ・システムのハードウェア・アーキテクチャとは異なるハードウェア・アーキテクチャを有することになる。このプロセッサ命令セットおよびコンピュータ・システムのハードウェア・アーキテクチャの固有性のために、アプリケーション・ソフトウェア・プログラムは、一般的に、特定のオペレーティング・システムを実行する特定のコンピュータ・システム上で実行されるように書かれることになる。
【０００５】
仮想マシン
コンピュータ製造業者は、その製造業者のマーケットシェアを最大にするために、少ないアプリケーションではなくて、より多いアプリケーションがそのコンピュータ製造業者の製品ラインに関連するマイクロ・プロセッサ・ファミリ上で実行されるようにすることを望んでいる。あるコンピュータ・システム上で実行することができるオペレーティング・システムおよびアプリケーション・プログラムの数を増大させるために、ある技術分野が発展してきており、この技術分野においては、ホストと呼ばれる、ある１つのタイプのＣＰＵを有する所与のコンピュータがバーチャライザ・プログラム（virtualizer program）を含み、これは、ゲストと呼ばれる無関係のタイプのＣＰＵの命令をそのホスト・コンピュータがエミュレートできるようにする。この結果、このホスト・コンピュータは、所与のゲスト命令に応答して１つまたは複数のホスト命令が呼び出されるようにするアプリケーションを実行することになり、この場合、このホスト・コンピュータは、それ自体のハードウェア・アーキテクチャ用に設計されたソフトウェアも、無関係のハードウェア・アーキテクチャを有するコンピュータ用に書かれたソフトウェアも、共に実行することができる。
【０００６】
より具体的な実施例としては、アップル・コンピュータが製造するコンピュータ・システムは、例えばＰＣベースのコンピュータ・システム用に書かれたオペレーティング・システムおよびプログラムを実行することができる。バーチャライザ・プログラムを使用して、１つのＣＰＵ上で複数の互換性のないオペレーティング・システムを同時に実行することも可能にすることができる。この後者の構成においては、各オペレーティング・システムは、互いに互換性がないが、バーチャライザ・プログラムは、いくつかのオペレーティング・システムのそれぞれをホストすることができ、それによって、他の方法では互換性のないオペレーティング・システムが、同じホスト・コンピュータ・システム上で同時に実行することができるようになる。
【０００７】
ゲスト・コンピュータ・システムがホスト・コンピュータ・システム上でエミュレートされるときに、このゲスト・コンピュータ・システムが、１つの特定のハードウェア・アーキテクチャのオペレーションについての純粋なソフトウェア表現として、このホスト・コンピュータ・システム中に存在するにすぎないので、このゲスト・コンピュータ・システムは、「仮想マシン」であると言われる。バーチャライザ、エミュレータ、ダイレクト−イグゼキュタ（direct-executor）、仮想マシン、およびプロセッサ・エミュレーションという用語は、当業者によって知られ理解されている１つまたは複数のアプローチを使用した機能で、コンピュータ・システム全体のハードウェア・アーキテクチャを模倣またはエミュレートする機能、を指し示すために、時に、区別せずに（交換可能に）使用される。さらに、どのような形式であれ、用語「エミュレーション」のすべての使用は、この広範な意味を伝えることを意図しており、この仮想マシンにおけるオペレーティング・システム命令の直接実行に対してエミュレーションの命令実行概念を区別することを意図してはいない。したがって、例えば、カリフォルニア州、サンマテオ市のＣｏｎｎｅｃｔｉｘ  Ｃｏｒｐｏｒａｔｉｏｎが作成したＶｉｒｔｕａｌ  ＰＣソフトウェアは、（命令実行エミュレーションおよび／または直接実行により）インテル８０Ｘ８６ペンティアム（登録商標）プロセッサおよび様々なマザーボード・コンポーネントとカードを含むコンピュータ全体を「エミュレート」し、これらのコンポーネントのオペレーションは、このホスト・マシン上で実行されている仮想マシン内で「エミュレート」される。パワーＰＣプロセッサを有するコンピュータ・システムなどのホスト・コンピュータのオペレーティング・システム・ソフトウェアおよびハードウェア・アーキテクチャ上で実行されるバーチャライザ・プログラムは、このゲスト・コンピュータ・システム全体のオペレーションを模倣する。
【０００８】
このバーチャライザ・プログラムは、このホスト・マシンのハードウェア・アーキテクチャと、このエミュレートされた環境内で実行されるソフトウェア（例えば、オペレーティング・システム、アプリケーションなど）が伝送する命令との間の置き換えとしての役割を果たす。このバーチャライザ・プログラムは、ＨＯＳ（host operating system：ホスト・オペレーティング・システム）とすることができ、このＨＯＳは、この物理コンピュータ・ハードウェア上で直接に実行されるオペレーティング・システムである（また、このＨＯＳは、本明細書中において以下でより詳細に説明するハイパーバイザ（hypervisor）を含むこともできる）。代わりに、このエミュレートされた環境はまた、ＶＭＭ（virtual machine monitor：仮想マシン・モニタ）とすることもでき、このＶＭＭは、多くの場合このホスト・オペレーティング・システムと並行して実行され、連動して動作する、このハードウェア上で直接に実行されるソフトウェア・レイヤであり、またこのＶＭＭは、このＶＭＭが仮想化しているハードウェアと同じインターフェースをエクスポーズする（公開する）ことにより、このホスト・マシンのすべてのリソース（ならびにある種の仮想リソース）を仮想化することができる。この仮想化により、このバーチャライザ（ならびにこのホスト・コンピュータ・システムそれ自体）は、それについて実行中のオペレーティング・システム・レイヤから気付かれずに済むことができるようになる。
【０００９】
要約すると、プロセッサ・エミュレーションは、ゲスト・オペレーティング・システムが、物理ハードウェアとホスト・オペレーティング・システムの両方を含むホスト・コンピュータ・システム上で実行されるバーチャライザによって作成される仮想マシン上で実行することが可能になる。
【００１０】
プロセッサおよびメモリのトポロジ
性能を最大にするため、現代のオペレーティング・システムのスケジューラは、このマシンのプロセッサとメモリのトポロジを考慮に入れている。これは、通常はスタートアップにおいて行われ、物理ハードウェア上で実行されるオペレーティング・システムでは、これは、物理ハードウェアのプロセッサ・トポロジが不変のままであるので通常は十分である。Ｗｉｎｄｏｗｓ（登録商標）オペレーティング・システム（Ｗｉｎｄｏｗｓ（登録商標）  ＸＰ、Ｗｉｎｄｏｗｓ（登録商標）  ２００３）および他のオペレーティング・システムは、一般的にこのシステムのトポロジをブート時に２つの方法で、すなわち（ａ）ＢＩＯＳ  ＳＲＡＴ（Static Resource Affinity Table：スタティック・リソース・アフィニティ・テーブル）中のメモリおよびプロセッサのノード・トポロジ情報を調べること、また（ｂ）自己完結型のプロセッサ識別データ（ｘ８６／ｘ６４プロセッサにおけるＣＰＵＩＤ）を読み取って、特定のＳＭＴ（Simultaneous Multithreading：同時マルチ・スレッディング、別名ハイパー・スレッディング（hyperthreading））およびマルチコア（multicore）トポロジを決定すること、により決定している。
【００１１】
本明細書中で使用しているように、この用語「プロセッサ・トポロジ」には、このプロセッサおよび関連するメモリの物理的特性を、またオペレーティング・システムによって知られている場合には、理論的に、オペレーティング・システムがこれらの関連するプロセッサ・リソースをより良好に利用できるようにすることが可能な、このプロセッサおよび関連するメモリの物理的特性を、意味するように広い意味をもたせている。プロセッサ・トポロジは、それだけには限定されないが、ＳＭＴ、マルチコア、ＢＩＯＳのＳＲＡＴのデータおよび／または情報などの静的プロセッサ情報と、プロセッサ、メモリ、Ｉ／Ｏリソース構成などの静的ＮＵＭＡ情報と、前述のものに対するどのような変更も含むことができる。
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかし、仮想マシン環境においては、「ホスト・エージェント（hosting agent）」（ホスト・オペレーティング・システム、仮想マシン・モニタ、および／またはハイパーバイザ）についての物理プロセッサ・トポロジは、不変のままであるが、バーチャライザに割り当てられた物理リソース、したがってこの仮想マシンは、時間と共に急速に変化し、この仮想マシン上で実行されるゲスト・オペレーティング・システムによって行われるトポロジの条件（assumption）を不的確に、したがって非効率的にしてしまう可能性がある。
【００１３】
このトポロジの動的性質は、仮想プロセッサ用のこの同じ物理プロセッサの割当てを常に使用することにより、またはこれらの割当を特定のノードだけに制限することによって緩和することができるが、この動的性質は、すべてのホスト・リソースを最大限に活用するバーチャライザの機能に深刻な悪影響を与えることになる。したがって、すべてのホスト・リソースを最大限に活用するバーチャライザの機能に悪影響を与えることのない、変化する仮想トポロジの非効率を正す（矯正する）手段が、当技術分野において必要になっている。
【課題を解決するための手段】
【００１４】
本発明の様々な実施形態は、ゲスト・オペレーティング・システムに対して現在割り当てられている、サブセットのホスト・リソースのトポロジについて、ゲスト・オペレーティング・システムに知らせる（気付かせる）ためのシステムおよび方法を対象としている。ある種のこれらの実施形態では、仮想マシン・ブート時に、スタティック・リソース・アフィニティ・テーブル（ＳＲＡＴ）をバーチャライザが使用して、ゲスト物理メモリおよびゲスト仮想プロセッサを仮想ノード中にグループ分けすることになる。その後に仮想ノードの背後のホスト物理メモリは、必要に応じてこのバーチャライザが変更することができ、このバーチャライザは、このノード内のこれらの仮想プロセッサについての適切な物理プロセッサを提供することになる。
【発明を実施するための最良の形態】
【００１５】
前述の概要、ならびに以下の好ましい実施形態の詳細な説明については、添付図面を併せ読むときにより良好に理解されよう。本発明を例証する目的で、これらの図面中には本発明の例示の構成が示されているが、本発明は、開示された特定の方法および手段だけには限定されない。
【００１６】
本発明の主題については、法令によって定められた要件を満たすように具体性をもって説明している。しかし、この説明それ自体が、本特許の範囲を限定することは意図していない。そうではなくて、本発明者は、この請求された主題を別の方法で実施して、他の現在または将来の技術と組み合わせて、この文書中で説明されるステップと同様な異なるステップ、またはステップの組合せを含むようにすることもできることを企図している。さらに、本明細書中では、用語「ステップ」を使用して、使用される方法の異なるエレメントを暗示しているが、この用語は、個別のステップの順序が明示的に説明されない限り、また明示的に説明される場合以外は、本明細書中で開示する様々なステップの間のどのような特定の順序も示唆するとは解釈すべきではない。
【００１７】
コンピュータ環境
本発明の多数の実施形態は、コンピュータ上で実行することができる。図１および以下の説明では、本発明を実施することができる適切なコンピューティング環境の一般的な簡潔な説明を提供することを意図している。必要ではないが、本発明については、クライアント・ワークステーションやサーバなどのコンピュータによって実行されるプログラム・モジュールなどコンピュータ実行可能命令の一般的な文脈で説明することにする。一般的に、プログラム・モジュールは、特定のタスクを実施し、または特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含んでいる。さらに、本発明は、ハンドヘルド・デバイス、マルチ・プロセッサ・システム、マイクロ・プロセッサ・ベースのまたはプログラマブルな大衆消費電子製品、ネットワークＰＣ、ミニ・コンピュータ、メインフレーム・コンピュータなどを含めて他のコンピュータ・システム・コンフィギュレーションを用いて実行することもできることが当業者には理解されよう。本発明は、分散コンピューティング環境中において実行することもでき、ここでは、タスクは、通信ネットワークを介してリンクされたリモート処理デバイスによって実施される。分散コンピューティング環境においては、プログラム・モジュールは、ローカル・メモリ・ストレージ・デバイス中にもリモート・メモリ・ストレージ・デバイス中にも配置することができる。
【００１８】
図１に示すように、例示の汎用コンピューティング・システムは、処理装置２１、システム・メモリ２２、およびこのシステム・メモリを含めて様々なシステム・コンポーネントを処理装置２１に結合するシステム・バス２３を含めて、従来のパーソナル・コンピュータ２０などを含んでいる。このシステム・バス２３は、メモリ・バスまたはメモリ・コントローラ、ペリフェラル・バス、および様々なバス・アーキテクチャのうちのどれかを使用したローカル・バスを含めて、いくつかのタイプのバス構造のうちのいずれかにすることもできる。このシステム・メモリは、ＲＯＭ（read only memory：読取り専用メモリ）２４およびＲＡＭ（random access memory：ランダム・アクセス・メモリ）２５を含んでいる。起動中などにパーソナル・コンピュータ２０内のエレメント間で情報を転送する助けをする基本ルーチンを含むＢＩＯＳ（basic input/output system：基本入出力システム）２６は、ＲＯＭ２４に記憶される。パーソナル・コンピュータ２０は、図示していないハードディスクから情報を読み取りそれに情報を書き込むハードディスク・ドライブ２７、着脱可能な磁気ディスク２９から情報を読み取りそれに情報を書き込む磁気ディスク・ドライブ２８、およびＣＤ−ＲＯＭや他の光媒体など着脱可能な光ディスク３１から情報を読み取りそれに情報を書き込む光ディスク・ドライブ３０をさらに含むことができる。ハードディスク・ドライブ２７、磁気ディスク・ドライブ２８、および光ディスク・ドライブ３０は、それぞれハードディスク・ドライブ・インターフェース３２、磁気ディスク・ドライブ・インターフェース３３、および光ドライブ・インターフェース３４によってシステム・バス２３に接続される。これらのドライブおよびこれらの関連するコンピュータ読取り可能媒体は、パーソナル・コンピュータ２０のためのコンピュータ読取り可能命令、データ構造、プログラム・モジュールおよび他のデータの不揮発性ストレージを提供する。本明細書中で説明している例示の環境は、ハードディスク、着脱可能磁気ディスク２９、および着脱可能光ディスク３１を使用しているが、磁気カセット、フラッシュ・メモリカード、デジタル・ビデオ・ディスク、ベルヌーイ・カートリッジ（Bernoulli cartridge）、ランダム・アクセス・メモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）などコンピュータによってアクセス可能なデータを記憶することができる、他のタイプのコンピュータ読取り可能媒体をこの例示の動作環境中において使用することもできることを当業者には理解されたい。
【００１９】
オペレーティング・システム３５、１つまたは複数のアプリケーション・プログラム３６、他のプログラム・モジュール３７およびプログラム・データ３８を含めて、いくつかのプログラム・モジュールをこのハードディスク、磁気ディスク２９、光ディスク３１、ＲＯＭ２４またはＲＡＭ２５に記憶することができる。ユーザは、キーボード４０やポインティング・デバイス４２など入力デバイスを介してパーソナル・コンピュータ２０中にコマンドおよび情報を入力することができる。他の入力デバイス（図示せず）は、マイクロフォン、ジョイスティック、ゲームパッド、サテライト・ディスク、スキャナなどを含むことができる。これらおよび他の入力デバイスはしばしば、このシステム・バスに結合されるシリアル・ポート・インターフェース４６を介して処理装置２１に接続されるが、パラレルポート、ゲームポート、ＵＳＢ（universal serial bus：ユニバーサル・シリアル・バス）などの他のインターフェースによって接続することもできる。モニタ４７または他のタイプのディスプレイ・デバイスもまた、ビデオ・アダプタ４８などのインターフェースを介してシステム・バス２３に接続することができる。モニタ４７に加えて、パーソナル・コンピュータは、一般的にスピーカやプリンタなど他のペリフェラル出力デバイス（図示せず）を含んでいる。図１の例示のシステムはまた、ホスト・ダプタ５５、ＳＣＳＩ（Small Computer System Interface：スモール・コンピュータ・システム・インターフェース）バス５６、およびＳＣＳＩバス５６に接続された外部ストレージ・デバイス６２も含んでいる。
【００２０】
パーソナル・コンピュータ２０は、リモート・コンピュータ４９など１つまたは複数のリモート・コンピュータに対する論理接続を使用してネットワーク環境において動作することができる。リモート・コンピュータ４９は、別のパーソナル・コンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の共通ネットワークノードであってもよく、一般的にパーソナル・コンピュータ２０に対して前述したエレメントの多くまたはすべてを含んでいるが、メモリス・トレージ・デバイス５０だけしか図１には示してはいない。図１に示す論理接続は、ＬＡＮ（local area network：ローカルエリアネットワーク）５１およびＷＡＮ（wide area network：ワイド・エリア・ネットワーク）５２を含んでいる。かかるネットワーキング環境は、オフィス、企業規模のコンピュータ・ネットワーク、イントラネットおよびインターネットにおいては一般的である。
【００２１】
ＬＡＮネットワーキング環境中で使用される場合には、パーソナル・コンピュータ２０は、ネットワーク・インターフェースまたはアダプタ５３を介してＬＡＮ５１に接続される。ＷＡＮネットワーキング環境中で使用される場合には、パーソナル・コンピュータ２０は、一般的にインターネットなどのワイド・エリア・ネットワーク５２上で通信を確立するモデム５４または他の手段を含んでいる。モデム５４は、内蔵でもよく、また外付けでもよいが、シリアル・ポート・インターフェース４６を介してシステム・バス２３に接続される。ネットワーク環境においては、パーソナル・コンピュータ２０に対して示したプログラム・モジュール、またはその一部分は、このリモート・メモリ・ストレージ・デバイスに記憶することができる。図に示すネットワーク接続は、例示的であり、これらのコンピュータ間で通信リンクを確立する他の手段を使用することもできることが理解されよう。さらに、本発明の多数の実施形態がコンピュータ化されたシステムにとって特によく適していることが想定されているが、この文書中においては、本発明をかかる実施形態だけに限定することは全く意図していない。
【００２２】
仮想マシン
概念的な観点から、コンピュータ・システムは、一般的にハードウェアの基本レイヤ上で実行される１つまたは複数のソフトウェア・レイヤを含んでいる。この階層化は、抽象化の理由で行われる。所与のソフトウェア・レイヤについてのインターフェースを定義することにより、このレイヤは、その上の他の諸レイヤによって異なるように実装することができる。うまく設計されたコンピュータ・システムにおいては、各レイヤは、その直下の隣接したレイヤについてしか知らない（し、またそれにしか依存していない）。これにより、レイヤまたは「スタック」（複数の隣接レイヤ）は、そのレイヤまたはスタックの上のレイヤに悪影響を与えずに置き換えることができるようになる。例えば、ソフトウェア・アプリケーション（上位レイヤ）は、一般的にそのオペレーティング・システム（下位レイヤ）の下位レベルに依存して、ファイルをある形態の恒久的ストレージに書き込み、これらのアプリケーションは、データをフロッピー（登録商標）ディスクか、ハードドライブか、あるいはネットワーク・フォルダに書き込むことの間におけるその違いを理解する必要がない。この下位レイヤが、ファイルを書き込むための新しいオペレーティング・システムコンポーネントで置き換えられる場合にも、この上位レイヤ・ソフトウェア・アプリケーションのオペレーションは、影響を受けないままである。
【００２３】
階層化ソフトウェアの柔軟性により、仮想マシン（ＶＭ）が、実際には別のソフトウェア・レイヤである仮想ハードウェア・レイヤを提示することができるようになる。このようにして、ＶＭは、その上のソフトウェア・レイヤにとって、前記ソフトウェア・レイヤがそれら自体のプライベート・コンピュータ・システム上で実行されているという錯覚を作り出すことができ、したがってＶＭにより、複数の「ゲスト・システム」を単一の「ホストシステム」上で同時に実行できるようにすることが可能になる。この抽象化レベルは図２の説明図によって表される。
【００２４】
図２は、コンピュータ・システムにおけるエミュレートされた動作環境についての、ハードウェア・アーキテクチャおよびソフトウェア・アーキテクチャの論理階層化を表す図である。この図において、エミュレーション・プログラム９４は、物理ハードウェア・アーキテクチャ９２上で、直接または間接に実行される。エミュレーション・プログラム９４は、（ａ）ホスト・オペレーティング・システムと並行して実行される仮想マシン・モニタ、（ｂ）ネイティブ・エミュレーション機能（native emulation capability）を有する専用のホスト・オペレーティング・システム、または（ｃ）前記ハイパーバイザ・コンポーネントが前記エミュレーションを実施するハイパーバイザ・コンポーネントを有するホスト・オペレーティング・システムでもよい。エミュレーション・プログラム９４は、（このコンポーネントが、「仮想マシン」、すなわち実際には存在しないが、代わりに前記エミュレーション・プログラム９４によってエミュレートされるハードウェアであることを示すために破線として示している）ゲスト・ハードウェア・アーキテクチャ９６をエミュレートする。ゲスト・オペレーティング・システム９８は、前記ゲスト・ハードウェア・アーキテクチャ９６上で実行され、ソフトウェア・アプリケーション１００は、ゲスト・オペレーティング・システム９８上で実行される。たとえソフトウェア・アプリケーション１００が、ホスト・オペレーティング・システムおよびハードウェア・アーキテクチャ９２とは一般的に互換性がないオペレーティング・システム上で実行されるように設計されているとしても、図２のエミュレートされた動作環境においては、（エミュレーション・プログラム９４のオペレーションのために）ソフトウェア・アプリケーション１００は、コンピュータ・システム９０中で実行することができる。
【００２５】
図３Ａは、物理コンピュータ・ハードウェア１０２上で直接に実行されるホストオペレーティング・システム・ソフトウェア・レイヤ１０４を含む仮想化コンピューティング・システムを示しており、ここではホストＯＳ（host operating system：ホスト・オペレーティング・システム）１０４は、このホストＯＳがエミュレートしている（または「仮想化」している）ハードウェアと同じインターフェースをエクスポーズ（公開）する（それにより、次にこのホストＯＳが、その上で実行されるオペレーティング・システム・レイヤによって気付かれないまま進むことが可能になる）ことにより、物理コンピュータ・ハードウェア１０２のリソースに対するアクセスを実現する。この場合にも、このエミュレーションを実施するために、ホスト・オペレーティング・システム１０４は、ネイティブ・エミュレーション機能を有する専用に設計されたオペレーティング・システムとすることができ、あるいは代わりにこのホスト・オペレーティング・システムは、このエミュレーションを実施するための組み込まれたハイパーバイザ・コンポーネントを有する標準的なオペレーティング・システム（図示せず）とすることもできる。
【００２６】
もう一度、図３Ａを参照すると、ホストＯＳ１０４上には、２つのＶＭ（virtual machine：仮想マシン）の実装形態、すなわち例えば仮想化されたインテル３８６プロセッサとすることができるＶＭ  Ａ１０８と、例えばモトローラ６８０Ｘ０プロセッサ・ファミリのうちの１つのプロセッサの仮想化バージョンとすることができるＶＭ  Ｂ１１０とが存在する。各ＶＭ１０８および１１０の上には、それぞれゲストＯＳ（guest operating system：ゲスト・オペレーティング・システム）Ａ１１２およびＢ１１４が存在する。ゲストＯＳ  Ａ１１２の上では２つのアプリケーション、すなわちアプリケーションＡ１  １１６およびアプリケーションＡ２  １１８が実行されており、ゲストＯＳ  Ｂ１１４上ではアプリケーションＢ１  １２０が実行されている。
【００２７】
図３Ａに関して、（破線内に示される）ＶＭ  Ａ１０８およびＶＭ  Ｂ１１０は、ソフトウェア構成としてしか存在しない仮想化コンピュータ・ハードウェア表現であり、またこのソフトウェア構成は、ＶＭ  Ａ１０８およびＶＭ  Ｂ１１０をそれぞれゲストＯＳ  Ａ１１２およびゲストＯＳ  Ｂ１１４に対して提示するだけでなく、この実際の物理コンピュータ・ハードウェア１０２と間接的に相互作用も行うゲストＯＳ  Ａ１１２およびゲストＯＳ  Ｂ１１４について必要なソフトウェア・ステップのすべてを実施する、１つ（または複数）の専用化エミュレーション・ソフトウェアの実行により可能になることに留意することが重要である。
【００２８】
図３Ｂは、代替的な仮想化コンピューティング・システムを示し、この場合に、このエミュレーションは、ホスト・オペレーティング・システム１０４”と並行して実行されるＶＭＭ（virtual machine monitor：仮想マシン・モニタ）１０４’によって実施される。ある種の実施形態では、このＶＭＭは、ホスト・オペレーティング・システム１０４上で実行され、前述のホスト・オペレーティング・システム１０４を介してしかこのコンピュータ・ハードウェアと相互作用しないアプリケーションとすることができる。他の実施形態においては、図３Ｂに示すように、このＶＭＭはその代わりに、一部のレベル上では、コンピュータ・ハードウェア１０２とホスト・オペレーティング・システム１０４を介して間接に相互作用するが、他のレベル上では、このＶＭＭが（このホスト・オペレーティング・システムがこのコンピュータ・ハードウェアと直接に相互作用する方法と同様に）コンピュータ・ハードウェア１０２と直接に相互作用する部分的に独立なソフトウェア・システム、を含むことができる。また、さらに他の実施形態においては、このＶＭＭは、（前述のコンピュータ・ハードウェア１０２の使用を調整し、競合を回避するなどの範囲で前述のホスト・オペレーティング・システム１０４と依然として相互作用するが）ホスト・オペレーティング・システム１０４を利用せずに、（このホスト・オペレーティング・システムがこのコンピュータ・ハードウェアと直接に相互作用する方法と同様に）すべてのレベル上でコンピュータ・ハードウェア１０２と直接に相互作用する完全に独立なソフトウェア・システムを含むこともできる。
【００２９】
この仮想マシンを実装するためのこれらの変形形態のすべては、本明細書中で説明しているように本発明の代替実施形態を形成することが予想されており、それでも、任意の特定のエミュレーション実施形態に本発明を限定するものと解釈すべきではない。さらに、（おそらくハードウェア・エミュレーション・シナリオにおいて）それぞれＶＭ  Ａ１０８および／またはＶＭ  Ｂ１１０を介したアプリケーション１１６と、１１８と、１２０の間の相互作用に対するどのような言及も、実際にはアプリケーション１１６、１１８、および１２０と、この仮想化を作成しているバーチャライザの間の相互作用であると解釈すべきである。同様に、（おそらくコンピュータ・ハードウェア１０２上で直接または間接にコンピュータ命令を実行するために）ホスト・オペレーティング・システム１０４および／またはコンピュータ・ハードウェア１０２を有するアプリケーションＶＭ  Ａ１０８および／またはＶＭ  Ｂ１１０の間の相互作用に対するどのような言及も、実際には必要に応じてこの仮想化を作成しているバーチャライザと、ホスト・オペレーティング・システム１０４および／またはコンピュータ・ハードウェア１０２の間の相互作用であると解釈すべきである。
【００３０】
プロセッサ・トポロジ
一般に、「プロセッサ」は、コンピュータを駆動する基本命令に反応し、処理する論理回路であり、中央演算処理装置（ＣＰＵ）についての省略表現としてしばしば使用される用語でもある。パーソナル・コンピュータ中における、または小型デバイス中に埋め込まれたプロセッサは、しばしばマイクロ・プロセッサと呼ばれる。
【００３１】
プロセッサ・トポロジに関しては、本明細書中で使用しているように、用語「プロセッサ」は、特に物理プロセッサ（physical processor）を意味する。「物理プロセッサ」とは、半導体ウェーハ（「シリケート（silicate）」）を含んでいる（時に、「チップ」または「マイクロチップ」と呼ばれる）ＩＣ（integrated circuit：集積回路）のことであり、この集積回路上では非常に多くの極めて小さな抵抗、キャパシタ、およびトランジスタが、少なくとも１つの論理プロセッサを含む少なくとも１つのプロセッサ・コア（processor core）を形成している。各プロセッサ・コアは、システム命令を実行する機能を有し、各論理プロセッサは、（対称性をもつマルチ・スレッディング、または「ＳＭＴ」としても知られている）ハイパー・スレッディング機能を表し、このハイパー・スレッディング機能により、１つのプロセッサ・コアは、外見上２つのスレッドを並列に実行する（したがって、またこのシステムに２つのコアがあるように見える）。
【００３２】
各物理プロセッサは、ＣＰＵマザーボード上の１つのソケットに取り付けられる。物理プロセッサは、（それぞれ１つまたは複数の論理プロセッサを有する）複数のプロセッサ・コアを有することができる。各プロセッサ・コアは、一般的にそれ自体のレベル−１キャッシュを有するが、この物理プロセッサ上の他のプロセッサ・コアとレベル−２キャッシュを共有することになる。
【００３３】
「マルチコア・プロセッサ（multi-core processor）」は、向上した性能、削減された電力消費、および／または多重タスクのより効率の良い同時処理（例えば、並列処理）を目的に、複数のコアを有する物理プロセッサである。例えば、（その名前が示唆するように２つのプロセッサ・コアを有するマルチコア・プロセッサである）「デュアル・コア・プロセッサ（dual-core processor）」は、同じコンピュータ中にインストールされた２つの別々のプロセッサを有するものにある程度類似している。しかし、これらの２つのコアは、１つの物理プロセッサ上に存在し、基本的にその同じソケットにプラグ接続され、したがって、これら２つのプロセッサ・コアの間の接続は、別々のソケットにプラグ接続される２つの単一コア・プロセッサの場合に比べて速くなる。
【００３４】
これらの性能ゲインのために、単一コア・プロセッサが、可能な複雑性と速度の物理的限界に急速に到達しつつあるので、マルチコア処理は、人気が高まりつつある。マルチコア製品を開発している、またはマルチコア製品に取り組んでいる会社には、ＡＭＤ、ＡＲＭ、Ｂｒｏａｄｃｏｍ、インテル、およびＶＩＡが含まれる。ＡＭＤもインテルも共に、２００５年までにデュアル・コア・プロセッサを市場に出す予定であると発表している。
【００３５】
図４は、本発明のいくつかの実施形態を利用することができるマルチコア・プロセッサおよびＮＵＭＡ２ノード・システムを示すブロック図である。この図において、物理プロセッサ４０６は、それぞれが２つの論理プロセッサ４０２を含む２つのプロセッサ・コア４０４を含んでいる。物理プロセッサ４０６は、Ｌ３−キャッシュなどのメモリ４０８に結合され、このメモリは、物理プロセッサ４０６の両方のコア４０４によって共有され、利用される。この図については以下でさらに説明する。
【００３６】
メモリ・トポロジ
ＮＵＭＡ（non-uniform memory access：非一様メモリ・アクセス）は、マルチ・プロセッシング・システム中で物理プロセッサがメモリをローカルに共有することができ、性能を改善し、またこのシステムの能力が高められるように、物理プロセッサのノードを構成する方法である。ＮＵＭＡは一般的に、ＳＭＰ（symmetric multiprocessing：対称マルチ・プロセッシング）システム中において使用され、このＳＭＰシステムは、１つのオペレーティング・システム下で動作する複数のプロセッサが、コモン・バス（common bus）または「相互接続」パス上で互いに他のメモリにアクセスする「密結合された、あらゆるものを共有する」システムである。通常は、ＳＭＰの限界は、マイクロ・プロセッサが追加されるにしたがって、共有バスまたはデータパスが、過負荷になり、性能的にボトルネックになってしまうことであり、しかし、ＮＵＭＡは、すべてのデータ・アクセスが、この主要バス上を伝わる必要がないように、ノードのマイクロ・プロセッサ間で共有される中間レベルのメモリ（ノード・メモリ）を追加している。
【００３７】
図４を再び参照すると、この２ノード・システム４１６は、それぞれが４つの物理プロセッサ４０６を有する２つのノード４１４を含んでおり、各物理プロセッサ４０６は、前記各キャッシュの、プロセッサ・コア４０４によって共有されるそれ自体のＬ３キャッシュを有している。さらに、各物理プロセッサ４０６およびその関連するＬ３キャッシュ・メモリ４０８は、互いに結合され、共有されるノード・メモリ４１２に結合される。ノード４１４およびこれらに関連するノード・メモリ４１２はまた、図に示すようにこの２ノード・システム４１６中で一緒に結合される。
【００３８】
ＮＵＭＡノードは、一般的に、共有メモリ（この「Ｌ３キャッシュ」）へのローカル・バスで相互接続された４つの物理プロセッサから構成され、これらはすべて１つのマザーボード上にある。このユニットを、同様なユニットに追加して、共通のＳＭＰバスがすべてのノードを相互接続する対称的なマルチ・プロセッシング・システムを形成することができる。かかるシステムは、一般的に１６個から２５６個のマイクロ・プロセッサを収容する。ＳＭＰシステム中で実行されるアプリケーション・プログラムにとって、これらのすべての個々のプロセッサ・メモリは、１つのメモリのように見える。
【００３９】
プロセッサ・コアが、ある種のメモリ・アドレスのデータを探すときに、このプロセッサ・コアは、まずそのＬ１キャッシュに向かい、次いでこの物理プロセッサ用のＬ２キャッシュに向かい、次いでこれらの他のマイクロ・プロセッサの近くに配置された「リモート・メモリ」中のデータをシークする前に、このＮＵＭＡコンフィギュレーションが提供するＬ３キャッシュに向かう。データは、ＮＵＭＡ  ＳＭＰシステムのクラスタ間のバス上を、ＳＣＩ（scalable coherent interface：スケーラブル・コヒーレント・インターフェース）技術を使用して、伝えられる。ＳＣＩは、複数のクラスタのノードにまたがる「キャッシュ・コヒーレンス（cache coherence）」または一貫性と呼ばれるものを調整する。
【００４０】
プロセッサ・トポロジを公開すること
本発明の様々な実施形態は、ゲスト・オペレーティング・システムに対して現在割り当てられている、サブセットのホスト・リソースのトポロジについて、ゲスト・オペレーティング・システムに知らせるためのシステムおよび方法を対象としている。ある種のこれらの実施形態では、仮想マシン・ブート時に、スタティック・リソース・アフィニティ・テーブル（ＳＲＡＴ）をバーチャライザが使用して、ゲスト物理メモリおよびゲスト仮想プロセッサを仮想ノード中にグループ分けすることになる。その後に仮想ノードの背後のホスト物理メモリは、必要に応じてこのバーチャライザが変更することができ、このバーチャライザは、このノード内のこれらの仮想プロセッサについての適切な物理プロセッサを提供することになる。このアプローチにより、この仮想マシン上で実行されるＮＵＭＡを認識しているオペレーティング・システムは、さらなる修正なしに最良の性能を得るようにスケジュールすることができるようになる。
【００４１】
ある種の代替実施形態では、このバーチャライザは、仮想マシン・メモリ中に、このゲスト・オペレーティング・システムについての動的プロセッサ・トポロジ情報を提供することもできる。この情報は、このゲスト・オペレーティング・システムの内部テーブルに直接に配置することもでき、あるいは代わりにこのゲスト・オペレーティング・システムは、追加のコードを実行して、共有メモリ・ロケーションからこの情報をピックする（取り出す）こともできる。「開示（disclosing）」と呼ばれるこの後者のアプローチ（ここでは、このＶＭが、このゲスト・オペレーティング・システムに対して定期的に情報を開示し、このゲスト・オペレーティング・システムが、アップデートされた情報を定期的にチェックし、それに応じて調整する）では、このゲスト・オペレーティング・システムに追加のコードを提供して、このゲスト・オペレーティング・システムが動的情報を定期的に獲得するようにすることが必要になる。
【００４２】
図５は、本発明のある種の実施形態について、バーチャライザが、このゲスト・オペレーティング・システムのための動的プロセッサ・トポロジ情報を仮想マシン・メモリ中に提供する一方法を示すプロセス・フロー図である。この図で、ステップ５０２において、このバーチャライザは、このゲスト・オペレーティング・システムに割り当てられた物理ハードウェア・リソースが変更されたことを知るようになる。ステップ５０４において、このバーチャライザは、それが仮想化しているプロセッサ・トポロジを再構成する。ステップ５０６において、このバーチャライザは、このゲスト・オペレーティング・システムについてのプロセッサ・トポロジ情報を直接にアップデートし、アップデートされたトポロジ情報をこのゲスト・オペレーティング・システムの内部テーブルに直接に配置する。
【００４３】
本発明のある種の実施形態では、このゲスト・オペレーティング・システムは、仮想マシンの物理メモリ・ページが、このバーチャライザとこのゲストＯＳの両方によって共有されるように指定する仮想マシン・コール（このバーチャライザに対するコール）を実行することになる。このページは、開示データ（disclosure data）を有する制御フィールド、を含むことができ、この開示データは、以下を決定する。例えば、（ａ）バーチャライザが、ホスト・コンピュータ・システム・リソース割付けにおける変更を前記仮想マシンにマッチングさせるようにこの仮想マシント・ポロジを変更する際に、このバーチャライザがこのゲスト・オペレーティング・システムに対して割込みを送るべきかどうか、（ｂ）この通知割込みについて使用すべきベクトル、（ｃ）ハイパーバイザがこのトポロジ・データをアップデートする際に、常に増分されるジェネレーション・カウンタ（generation counter）、（ｄ）この同じＳＭＴまたはハイパー・スレッド化プロセッサ・コア中のすべての仮想プロセッサのビット・マスク、および／または（ｅ）この同じ物理プロセッサ、すなわち各物理プロセッサ中のすべてのコア内のすべての論理プロセッサ、内のすべての仮想プロセッサのビット・マスク。さらに、開示データは、以下の効率の態様のうちのいずれにも対処することができる。すなわち、（ａ）スレッド優先順位、（ｂ）Ｉ／Ｏ優先順位、（ｃ）保護されたメモリの範囲、（ｄ）ＮＵＭＡノード、（ｅ）ニア・メモリ・アクセス（near memory access）および、フォア・メモリ・アクセス（far memory access）に関するデータ、（ｆ）プロセッサ速度およびプロセッサ電力消費、（ｇ）ソケット、およびコアごとのハイパー・スレッディング、および／または（ｈ）物理プロセッサごとの共有レベル。
【００４４】
この「開示（disclosing）」アプローチが使用されるときなどに、動的プロセッサおよびＮＵＭＡトポロジ情報にアクセスすることができるオペレーティング・システムのスケジューラは、この情報を使用して、それ自体のリソース割付けメカニズム（例えば、プロセッサ・スケジューリング、メモリ割付けなど）およびリソース利用スキームを最適化することができる。本発明のある種の追加の実施形態では、（バーチャライザ／仮想マシン・コールを介して、または共有メモリ・ページを介して）このゲストＯＳは、（開示（disclosing）の論理的な逆である）「ヒンティング（hinting）」と呼ばれるプロセスで、このバーチャライザに対してリソース割付けプリファランスについてのヒントを提供することができる。例えば、このゲストＯＳが、効率を良くするために、この同じプロセッサ上の２つのコアに割り当てられた２つの仮想プロセッサ、またはこの同じＮＵＭＡノード内の２つのプロセッサを保持することを選ぶ場合には、このゲストＯＳは、かかるヒントをこのＶＭに提供することができ、任意の所与の時刻に前記ＶＭに割り当てられるこれらの基礎となっている物理プロセッサにこれらの仮想化プロセッサが適切であるように、この仮想マシン・スケジューラは、これらの仮想化プロセッサに関するアカウントにこのヒントを利用することができる。より詳細には、かかるヒントは、以下の効率性の態様のいずれに対しても対処することができる。すなわち、（ａ）スレッド優先順位、（ｂ）Ｉ／Ｏ優先順位、および／または（ｃ）レイテンシ（latency）情報。したがって、本発明の実施形態では、このゲスト・オペレーション・システムについてのスケジューラと、このＶＭについてのスケジューラは、独立にリソースを管理し、協調して機能する「開示（disclosing）」および「ヒンティング」を利用し使用して、この全体システムの効率を最大にする。
【００４５】
図６は、本発明のいくつかの実施形態についての２層の開示（two-tier disclosing）およびヒンティング（hinting）のアプローチを示すブロック図である。この図において、ゲスト・オペレーティング・システム６０２は、ＯＳスケジューラ６０４を含み、仮想マシン６１２は、ＶＭスケジューラ６１４を含んでいる。かかる論理プロセッサが、例えば、前記物理ハードウェア・リソースの利用をスケジュールするホスト・オペレーティング・システムにより、この仮想マシンにとって使用可能にされる（またこれが、常に変化している）ときに、ＶＭスケジューラ６１４は、この物理ハードウェアの様々な論理プロセッサ上で仮想マシンスレッドの実行をスケジュールする。この仮想マシンに割り付けられている共有メモリ６２２を、ゲストＯＳスケジューラ６０４が利用して、ＶＭスケジューラ６１４に対して「ヒンティング」情報を提供し、またこの共有メモリ６２２を、ＶＭスケジューラ６１４が利用して、ゲストＯＳスケジューラ６０４に対して「開示（disclosing）」情報を提供する。例えば、データ・フロー６３２に沿って、ＶＭスケジューラ６１４は、開示する（disclosing）データ６４２を共有メモリ６２２に書き込み、またデータ・フロー６３４に沿って、このデータは、ＯＳスケジューラ６０４によって読み取られ、またＯＳスケジューラ６０４がこのデータを使用して、使用可能な（また、折に触れて動的に変化する）これらの現行のプロセッサ・リソースをより効率的に使用する。逆に、データ・フロー６３６に沿って、ＯＳスケジューラ６０４は、「ヒンティング」データ６４４を共有メモリ６２２に書き込み、データ・フロー６３８に沿って、このデータは、ＶＭスケジューラ６１４によって読み取られ、ＶＭスケジューラ６１４がこのデータを使用して、前記ゲスト・オペレーティング・システムに対して現行のプロセッサ・リソースのより効率的な割当（および／または要求）を行う。
【００４６】
結論
本明細書中で説明している様々なシステム、方法、および技法は、ハードウェアまたはソフトウェアに適切に、あるいはこれら両者の組合せを用いて実装することができる。したがって、本発明の方法および装置、またはある種の態様またはその一部分は、フロッピー（登録商標）ディスケット、ＣＤ−ＲＯＭ、ハードドライブ、他の任意のマシン読取り可能ストレージ媒体など有形の媒体の形で実施されるプログラム・コード（すなわち、命令）の形態を取ることができ、この場合、このプログラム・コードが、コンピュータなどのマシンにロードされ、マシンによって実行されるときに、このマシンは、本発明を実行するための装置になる。プログラマブル・コンピュータ上におけるプログラム・コード実行の場合においては、このコンピュータは、一般に、プロセッサ、（揮発性および不揮発性のメモリおよび／またはストレージ・エレメントを含めて）このプロセッサによって読取り可能なストレージ媒体、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを含むことになる。１つまたは複数のプログラムは、高レベルの手続き形言語またはオブジェクト指向プログラミング言語の形で実装して、コンピュータ・システムと情報をやりとりすることが好ましい。しかし、この１つまたは複数のプログラムは、必要に応じてアセンブリ言語または機械語で実装することができる。いずれにしても、この言語は、コンパイラ型言語またはインタープリタ型言語とすることができ、ハードウェア実装形態と組み合わせることができる。
【００４７】
本発明の方法および装置は、電気的な配線またはケーブル配線上で、光ファイバを介して、他の任意の伝送形態を介してなど、何らかの伝送媒体上で伝送されるプログラム・コードの形態で具現化することもでき、この場合、このプログラム・コードが、ＥＰＲＯＭ、ゲートアレイ、ＰＬＤ（programmable logic device：プログラマブルロジックデバイス）、クライアント・コンピュータ、ビデオ・レコーダなどのマシンによって受信され、このマシンにロードされ、またこのマシンによって実行されるときに、このマシンは、本発明を実行するための装置になる。汎用プロセッサ上で実装されるときには、このプログラム・コードがこのプロセッサと組み合わされて、本発明のインデッックス付け機能を実施するように動作する固有の装置がもたらされる。
【００４８】
本発明を様々な形態の好ましい実施形態に関連して説明してきたが、他の同様な実施形態を使用することもでき、あるいは本発明を逸脱することなく本発明と同じファンクションを実施するために、この説明した実施形態に対して変更および追加を行うことができることを理解されたい。例えば、本発明の例示の実施形態は、パーソナル・コンピュータの機能をエミュレートするデジタル・デバイスのコンテクストで説明しているが、本発明は、本明細書で説明しているかかるデジタル・デバイスだけに限定されることなく、有線であれ無線であれ、ゲーミング・コンソール、ハンドヘルド・コンピュータ、ポータブル・コンピュータなど任意数の既存の、または出現しつつあるコンピューティング・デバイスまたはコンピューティング環境にも適用でき、また通信ネットワークを介して接続され、このネットワークを横切って相互に作用する任意数のかかるコンピューティング・デバイスにも適用できることが当業者には理解されよう。さらに、特に無線ネットワーク・デバイスの数が増え続けているので、ハンドヘルド・デバイス・オペレーティング・システム、および他の特定用途向けハードウェア／ソフトウェア・インターフェース・システムを含めて様々なコンピュータ・プラットフォームが、本明細書中では企図されていることについて強調しておくべきである。したがって、本発明は、どの１つの実施形態だけにも限定すべきではなく、特許請求の範囲による広がりと範囲で解釈すべきである。
【００４９】
最終的には、本明細書中で説明しているこれらの開示した実施形態は、他のプロセッサ・アーキテクチャ、コンピュータ・ベースのシステム、またはシステム仮想化に使用するために適合させることができ、かかる実施形態については、本明細書中で行われた開示によって明確に予想されており、したがって、本発明は、本明細書中で説明している特定の実施形態だけに限定すべきではなく、その代わりに最も広く解釈すべきである。同様に、プロセッサ仮想化以外の目的のための合成命令の使用もまた、本明細書中で行われたこの開示によって予想されており、プロセッサ仮想化以外の文脈における合成命令のかかるどのような利用についても、本明細書中で行われたこの開示に、最も広範囲に読み込むべきである。
【図面の簡単な説明】
【００５０】
【図１】本発明の態様を組み込むことができるコンピュータ・システムを表すブロック図である。
【図２】コンピュータ・システムにおけるエミュレートされた動作環境についてのハードウェア・アーキテクチャおよびソフトウェア・アーキテクチャの論理階層化を表すブロック図である。
【図３Ａ】ホスト・オペレーティング・システムによって、エミュレーションが（直接に、またはハイパーバイザを介して）実施される仮想化コンピューティング・システムを表すブロック図である。
【図３Ｂ】ホスト・オペレーティング・システムと並行して実行される仮想マシン・モニタによって、エミュレーションが実施される代替的な仮想化コンピューティング・システムを表すブロック図である。
【図４】本発明のいくつかの実施形態を利用することができる対象のマルチコア・プロセッサおよびＮＵＭＡ２ノード・システム（NUMA two-node system）を示すブロック図である。
【図５】本発明のある種の実施形態において、バーチャライザが、ゲスト・オペレーティング・システムについての動的プロセッサ・トポロジ情報を仮想マシン・メモリ中に提供する一方法を示すプロセス・フロー図である。
【図６】本発明のいくつかの実施形態についての２層の開示（disclosing）およびヒンティングのアプローチを示すブロック図である。
【符号の説明】
【００５１】
２０    コンピュータ
２１    処理装置
２２    システム・メモリ
２３    システム・バス
２７    ハードドライブ
２８    フロッピー（登録商標）ドライブ
２９    着脱可能ストレージ
３０    光ドライブ
３２    ハードディスク・ドライブＩ／Ｆ
３３    磁気ディスク・ドライブＩ／Ｆ
３４    光ドライブＩ／Ｆ
３６    アプリケーション・プログラム
３６’    アプリケーション
３７    他のプログラム
３８    プログラム・データ
４０    キーボード
４２    マウス
４６    シリアル・ポートＩ／Ｆ
４７    モニタ
４８    ビデオ・アダプタ
４９    １つ（または複数）のリモート・コンピュータ
５０    フロッピー（登録商標）ドライブ
５３    ネットワークＩ／Ｆ
５４    モデム
５５    ホスト・アダプタ
５６    ＳＣＳＩバス
６２    ストレージ・デバイス
９０    コンピュータ・システム
１０２    物理コンピュータ・ハードウェア
１０４、１０４”    ホスト・オペレーティング・システム
１０４’    仮想マシン・モニタ
１０８    仮想マシンＡ
１１０    仮想マシンＢ
１１２    ゲストＯＳ  Ａ
１１４    ゲストＯＳ  Ｂ
１１６    アプリケーションＡ１
１１８    アプリケーションＡ２
１２０    アプリケーションＢ１
４０２    論理プロセッサ
４０４    コア
４０６    物理プロセッサ
４１２    ノード・メモリ
４１４    ノード
４１６    ２ノード・システム
６０２    ゲストＯＳ
６０４    ＯＳスケジューラ
６１２    仮想マシン
６１４    ＯＳスケジューラ
６２２    メモリ
６３４、６３６，６３８    データ・フロー
６４４    「ヒンティング」データ
【図１】
2006178933.tif 000003
【図２】
2006178933.tif 000004
【図３Ａ】
2006178933.tif 000005
【図３Ｂ】
2006178933.tif 000006
【図４】
2006178933.tif 000007
【図５】
2006178933.tif 000008
【図６】
2006178933.tif 000009