説明

割込みの仮想化

一実施形態では、デバイス割込みマネージャは、ゲストに割り当てられたデバイスからの割込みを受信するように構成されてもよい。デバイス割込みマネージャは、ゲスト内の仮想プロセッサに対する割込みを記録するためにシステムメモリの中の記憶域を対象にした動作を送信するように構成されてもよく、割込みは対象となる仮想プロセッサに送達されることになる。一実施形態では、仮想マシン・マネージャは、現在実行中ではない仮想プロセッサに対するデバイス割込みマネージャによる割込みが記録されていることを検出するように構成されてもよい。仮想マシン・マネージャは、割込みに応答して、ハードウェア・プロセッサ上での実行のために仮想プロセッサをスケジュール設定するように構成されてもよく、又はスケジューリングのために仮想プロセッサに優先順位をつけてもよい。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、プロセッサ及び仮想化に関し、より詳細には、仮想マシンゲストに割込みを送達することに関する。
【背景技術】
【0002】
仮想化は、種々の異なる目的のためにコンピュータ・システムで用いられている。例えば、仮想化は、仮想マシンを制御する仮想マシン・マネージャ(virtual machine manager)(VMM)によって最初にそうするのを許されることなしに、特権付きソフトウェアが、物理マシン状態のうちの少なくとも幾つかに対し、直接アクセス及び/又は変更を行うのを防ぐために、「コンテナ」の中の特権付きソフトウェアを実行するのに用いることができる。こうしたコンテナは、「バグだらけの(buggy)」又は悪意のあるソフトウェアが物理マシン上で問題を引き起こすのを防ぐことができる。加えて、仮想化は、2つ以上の特権付きプログラムを同じ物理マシン上で同時に実行するために用いることができる。物理マシンへのアクセスが制御されるので、特権付きプログラムが互いに干渉し合うのを防ぐことができる。特権付きプログラムは、オペレーティング・システムを含んでもよく、且つまた、ソフトウェアを実行するハードウェアのフル制御を有することを期待する他のソフトウェアを含んでもよい。別の例では、仮想化は、特権付きプログラムによって予定されるハードウェアとは異なるハードウェア上で特権付きプログラムを実行するのに用いることができる。
【0003】
一般に、プロセッサ又はコンピュータ・システムの仮想化は、仮想マシン(上述のコンテナ)へのアクセスを伴う1つ又は複数の特権付きプログラムを提供することを含む場合があり、特権付きプログラムは仮想マシンに対するフル制御を有するが、物理マシンの制御はVMMによって保たれる。仮想マシンは、プロセッサ(単数又は複数)、メモリ、及び特権付きプログラムが実行されるマシン内で見つけ出すことを期待する種々の周辺デバイスを含む場合がある。仮想マシン要素は、VMMが仮想マシンに少なくとも一時的に割り当てるハードウェアによって実装される場合があり、及び/又は、ソフトウェアでエミュレートされる場合がある。各特権付きプログラム(及び幾つかの場合には、オペレーティング・システム上で実行するアプリケーションのような関連するソフトウェア)は、本明細書ではゲストと呼ばれる場合がある。仮想化は、VMM及びその仮想マシンを実行する物理マシンにおける任意の特定のハードウェア仮想化支援なしに、ソフトウェア(例えば上述のVMM)で実装される場合がある。しかしながら、仮想化は、簡略化されてもよく、及び/又は、何らかのハードウェア支援が提供される場合に、より高い性能を達成する。
【発明の概要】
【発明が解決しようとする課題】
【0004】
仮想化に付随して起こる可能性がある1つの問題は、割込み送達の待ち時間である。前述のように、周辺デバイスは、仮想マシンによる使用のために(仮想マシンの仮想周辺デバイスとして作用するように)割り当てることができる。こうした周辺デバイスは、仮想マシンのソフトウェアによって処理されるべき割込みを発生させることがある。仮想化されていない環境では、割込み処理の待ち時間は比較的短い可能性がある。仮想化された環境では、割込みは、一般に、ある種のソフトウェア機構を用いてVMMによって横取りされ、VMMによって処理され、VMMによって対象となる仮想マシンに送達される。しかしながら、割込み処理の待ち時間は、仮想化されない環境よりもかなり多い(例えば約100倍長い)可能性がある。周辺デバイスにより発生した割込み(本明細書では、より簡潔に「デバイス割込み」)に加えて、プロセッサが、プロセッサ間の割込み(interprocessor interrupt(IPI)を発生させることがある。仮想マシンでは、IPIは、仮想プロセッサ(すなわちvCPU)と仮想マシンにおける別のvCPUとの間で発生する可能性がある。vCPUは、所与のゲストの仮想マシンに含まれるように定義されるプロセッサである。ゲストには少なくとも1つのvCPUが存在するが、多重処理ゲストのための複数のvCPUが存在する場合がある。
【課題を解決するための手段】
【0005】
一実施形態では、デバイス割込みマネージャは、ゲストに割り当てられるデバイスからの(又はゲストに割り当てられる仮想機能をサポートするデバイスからの)割込みを受信するように構成されてもよい。デバイス割込みマネージャは、ゲスト内の仮想プロセッサに対する割込みを記録するためにシステムメモリの中の記憶域を対象にした動作を送信するように構成されてもよく、割込みは対象となる仮想プロセッサに送達されることになる。一実装では、デバイス割込みマネージャは、入力/出力(I/O)メモリ管理ユニット(memory management unit)(IOMMU)に含まれてもよい。
【0006】
一実施形態では、仮想マシン・マネージャは、現在実行中ではない仮想プロセッサに対するデバイス割込みマネージャによって割込みが記録されていることを検出するように構成されてもよい。仮想マシン・マネージャは、割込みに応答して、ハードウェア・プロセッサ上での実行のために仮想プロセッサをスケジュール設定するように構成されてもよく、又はスケジューリングのために仮想プロセッサに優先順位をつけてもよい。
【0007】
以下の詳細な説明は、ここで簡単に説明される付属の図面を参照するものである。
【図面の簡単な説明】
【0008】
【図1】仮想化を実装するコンピュータ・システムの一実施形態のブロック図である。
【0009】
【図2】図1で例証されるホストハードウェアの一実施形態のブロック図である。
【0010】
【図3】ゲストに送達される割込みの一実施形態を例証するブロック図である。
【0011】
【図4】仮想マシン制御ブロック(VMCB)の一実施形態を例証するブロック図である。
【0012】
【図5】ゲストAPIC状態データ構造のゲストAPIC状態エントリの一実施形態を例証するブロック図である。
【0013】
【図6】割込みに対するゲストAPIC状態エントリを位置付ける一実施形態を例証するブロック図である。
【0014】
【図7】デバイスからの割込みの受信に応答する図2に示されたデバイス割込みマネージャの一実施形態の動作を例証するフローチャートである。
【0015】
【図8】仮想マシン実行(VMRUN)命令に応答する図2に示されたプロセッサの一実施形態の動作を例証するフローチャートである。
【0016】
【図9】仮想マシン終了(VMExit)に応答する図2に示されたプロセッサの一実施形態の動作を例証するフローチャートである。
【0017】
【図10】プロセッサ上で実行するゲストに対するゲスト割込みの検出に応答する図2に示されたプロセッサの一実施形態の動作を例証するフローチャートである。
【0018】
【図11】汎用命令に応答する図2に示されたプロセッサの一実施形態の動作を例証するフローチャートである。
【0019】
【図12】ゲストを初期化するVMMの一実施形態を例証するフローチャートである。
【0020】
【図13】ゲストの実行中にゲスト支援を提供するVMMの一実施形態を例証するフローチャートである。
【0021】
【図14】ゲストを削除するVMMの一実施形態を例証するフローチャートである。
【0022】
【図15】VMM及び/又はマイクロコードの一実施形態を格納するコンピュータ可読記憶媒体の一実施形態のブロック図である。
【0023】
【図16】プロセッサにおけるゲスト割込み制御ユニットにゲスト割込み制御メッセージを送達するためのモデル固有レジスタ(MSR)インターフェースの一実施形態を例証するブロック図である。
【発明を実施するための形態】
【0024】
本発明は種々の修正及び代替的形態の余地があるが、その具体的な実施形態が単なる例として図面に示され、本明細書で詳細に説明されるであろう。しかしながら、図面及びその詳細な説明は、本発明を開示された特定の形態に限定することを意図されないが、これに対して、本発明は、付属の請求項によって定義される場合の本発明の精神及び範囲内に入るすべての修正、均等物、及び変形を包含することを意図されることを理解されたい。本明細書で用いられる見出しは、系統立てる目的のみであって、説明の範囲を制限するために用いられるように意図されるものではない。本出願の全体を通して用いられる場合の「〜であってもよい、〜の可能性がある、〜の場合がある」という言葉は、義務付けの意味(すなわち、しなければならないという意味)ではなく、許容の意味で用いられる(すなわち、可能性を有することを意味する)。同様に、「〜を含む(include、includes)」、「〜を含んでいる」という言葉は、〜を含むがこれに限定されないことを意味する。
【0025】
種々のユニット、回路、又は他のコンポーネントが、1つ又は複数のタスクを行う「ように構成される」として説明される場合がある。このような文脈では、「ように構成される」は、動作中に1つ又は複数のタスクを行う「回路を有する」ことを概して意味する構造体の広い列挙である。したがって、ユニット/回路/コンポーネントは、ユニット/回路/コンポーネントが現在オンではないときであってもタスクを行うように構成することができる。一般に、「ように構成される」に対応する構造体を形成する回路は、動作を実装するためにハードウェア回路を含んでもよい。同様に、種々のユニット/回路/コンポーネントは、説明の便宜のために、1つ又は複数のタスクを行うとして説明される場合がある。こうした説明は、「するように構成される」というフレーズを含むとして解釈されるべきである。幾つかの場合には、1つ又は複数のタスクを行うように構成される回路は、動作を実装するために実行可能なプログラム命令を格納するメモリを含んでもよい。メモリは、静的又は動的ランダムアクセスメモリのような揮発性メモリ、及び/又は光又は磁気ディスク記憶装置、フラッシュメモリ、プログラム可能読出し専用メモリなどのような不揮発性メモリを含むことができる。1つ又は複数のタスクを行うように構成されるユニット/回路/コンポーネントの列挙は、該ユニット/回路/コンポーネントに対して35U.S.C.§112、パラグラフ6の解釈を行使しないことを明確に意図される。
【0026】
一実施形態では、コンピュータ・システムは、VMMと仮想マシン内で実行する1つ又は複数のゲストとを含む。周辺デバイスは、ゲストに(例えばゲストの仮想マシンにおける対応する仮想周辺デバイスとして動作するように)割り当てられてもよい。代替的に、周辺デバイスは、仮想機能をサポートしてもよく、仮想機能は、ゲストに割り当てられてもよい。周辺デバイスは、ゲストに送達されるべきデバイス割込みを発生させてもよい。デバイス割込みマネージャは、(もしあるとしたらVMM又はVMMを実行するホストソフトウェアを対象とするホスト割込みとは対照的に)デバイス割込みがゲストを対象とすることを検出するように構成されてもよい。より詳細には、デバイス割込みマネージャは、ゲストの仮想マシン内のどのvCPUが割込みの対象にされるかを検出するように構成されてもよい。デバイス割込みマネージャは、ゲスト割込みコントローラのデータ構造に割込みを記録するように構成されてもよい。対象にされたvCPUがコンピュータ・システムにおけるハードウェア・プロセッサ上で現在実行中である場合、ハードウェア・プロセッサは、ゲスト割込みを検出してもよく、且つ割込みのサービスのためにゲスト/vCPUをリダイレクトしてもよい。
【0027】
例えば、デバイス割込みマネージャは、データ構造に新しいゲスト割込みが記録されていることを示すために、ハードウェア・プロセッサにメッセージを送信してもよい。メッセージに応答して、ハードウェア・プロセッサは、ゲスト割込みデータ構造を読み出し、データ構造に記録された他の保留中の割込み(もしあるとしたら)と共に割込みに優先順位をつけてもよい。優先順位付けに基づいて、ハードウェア・プロセッサは、割込みを送達するか若しくは1つ又は複数のより高い優先度の割込み及び/又はより高い優先度のプロセスの完了を待ってもよい。別の例では、ハードウェア・プロセッサは、データ構造に割込みが記録されていることを検出するために、対応するゲストvCPUの実行中にゲスト割込みデータ構造(又はゲスト割込みデータ構造内の領域)を監視するように構成されてもよい。データ構造の更新の検出に応答して、ハードウェア・プロセッサは、データ構造を読み出し、上述のように割込みを送達してもよい。
【0028】
一実施形態では、ハードウェア・プロセッサは、ゲスト割込みに対する上記の動作のプロセッサ部分を実装するように構成されるゲスト割込み制御ユニットを含んでもよい。加えて、ゲスト割込み制御ユニットは、vCPUの割込みコントローラへのゲストアクセスが、ハードウェア・プロセッサに結合されてもよいホスト割込みコントローラを通じてではなくゲスト割込みデータ構造を通じて処理されることを保証してもよい。すなわち、ゲストにおける割込みコントローラアクセスは、ゲスト割込みデータ構造内でメモリアクセスに変換されてもよい。したがって、ゲスト割込み制御ユニットは、ゲスト割込み制御ユニットの仮想化及びエミュレートに関与してもよい。一実装では、ゲスト割込み制御ユニットは、少なくとも部分的にマイクロコードに実装されてもよい。マイクロコードは、プロセッサ内の不揮発性メモリに格納され、或る命令又は他の動作の検出に応答してプロセッサ回路によって呼び出され、マイクロコード・ルーチンを介して実施される命令であってもよい。マイクロコードは、したがって、実施される動作を行うべくプロセッサでの実行のためにディスパッチされてもよい。幾つかの実施形態では、ゲスト割込み制御ユニットは、主としてマイクロコードに実装されてもよい。他の実施形態では、ゲスト割込み制御ユニットは、ハードウェアに実装されてもよい。
【0029】
vCPU割込みコントローラへのゲストアクセスは、割込みコントローラにおけるレジスタの読出し/書込みを含んでもよい。一実施形態では、割込みコントローラにおける1つ又は複数のレジスタの書込みは、IPIをトリガしてもよい。プロセッサにおけるゲスト割込み制御ユニットは、IPIを引き起こすゲストにおける書込みに応答して、対象vCPUへのIPIを開始してもよい。ゲストIPIは、IPIを記録するために対象vCPUに関連付けられたデータ構造の更新を含んでもよい。一般に、IPIは、プロセッサによって又はより詳細にはプロセッサ上で実行するソフトウェアによって生じる割込みであってもよい。IPIは、時にはソーシング・プロセッサを含むシステムにおける1つ又は複数のプロセッサを対象にしてもよい。したがって、IPIは、別のプロセッサ上で実行するソフトウェアに割込むために1つのプロセッサ上で実行するソフトウェアの機構であってもよい。IPIは、異なるプロセッサ上で実行するスレッドの間でメッセージを渡すため、元々は1つのプロセッサを対象とする割込みを別のプロセッサに通信するためなどに用いられてもよい。
【0030】
プロセッサ又はvCPUは、プロセッサ/vCPUに関連付けられた割込みコントローラによって割込みが受信されることになる場合に、割込みの対象にされてもよい。プロセッサ/vCPUは、必ずしも割込みを処理しなくてもよいが、割込みを処理するための候補であってもよく、どのプロセッサ(単数又は複数)/vCPU(単数又は複数)が割込みを処理することになるかを判定することに関与してもよい。割込みは、その対象(単数又は複数)(例えば物理又は論理IDを伴う)を明示的に指定してもよく、又はすべてのプロセッサ/vCPUを対象とするブロードキャスト割込みであってもよい。一般に、割込みは、対象プロセッサに関連付けられた割込みコントローラがプロセッサに送達するための割込みを記録した場合に、受付けられた(accepted)と呼ばれてもよい。すなわち、受付け後の或る時点で、割込みがプロセッサに送達されるであろう。割込みをサービスするためにプロセッサに割込むことは、割込みの送達と呼ばれてもよい。vCPU及び/又は対応する仮想割込みコントローラ及び/又はそのペアは、本明細書ではより簡潔にゲスト内の割込みの宛先と呼ばれてもよい。宛先は、最終的には割込みをサービスするvCPUであってもよいが、対応する仮想割込みコントローラはまた、それが対応するプロセッサに関連付けられ及び割込みを記録するので、宛先とみなされてもよい。
【0031】
コンピュータ・システムは、少なくとも1つのホスト割込みコントローラを含んでもよい。ホスト割込みコントローラは、ホスト(例えば、仮想化された環境における仮想マシン・マネージャ、すなわちVMM、及び/又は、幾つかの実施形態ではVMMを走らせてもよいホストOSのような他のソフトウェア)によってサービスされるべき割込みを管理してもよい。こうした割込みは、例えば、システム上で実行するゲストに割り当てられていないコンピュータ・システムにおけるデバイスからの割込み、VMMがゲストに露出することを望まないシステムレベルの割込みなどを含んでもよい。上記のゲスト割込み動作は、ゲストによってサービスされるべき割込み(「ゲスト割込み」)を管理するのに用いられてもよい。ゲスト割込みは、例えば、ゲストの仮想マシンに対するデバイスの機能を提供するためにゲストに割り当てられるデバイスによって発行された割込み又はゲスト内の1つのvCPUから別のvCPUに発行されるIPIを含んでもよい。
【0032】
一実施形態では、本明細書で説明されるゲスト割込み動作は、ゲスト割込みに関する減少した待ち時間につながる可能性がある。例えば、幾つかの実施形態では、ゲストデバイス割込みを送達するための待ち時間は、ホストデバイス割込みを送達するための待ち時間と類似している場合がある。ゲスト割込み待ち時間は、ホスト割込み待ち時間、同じオーダーの大きさの待ち時間などとほぼ同じであってもよい。
【0033】
一実施形態では、ゲスト割込み管理の大部分は、ハードウェア・プロセッサに実装されてもよい。幾つかの実施形態では、動作のほとんどをシステムの一部分に位置付けることによって実装が簡略化されてもよい。したがって、幾つかの実施形態では、実装は、訂正される可能性が高い場合、より迅速に完了する場合、などがある。
【0034】
仮想化の概要
図1は、仮想化を実装するコンピュータ・システム5の一実施形態のブロック図を例証する。図1の実施形態では、複数のゲスト10A〜10Nが示される。ゲスト10Aは、ゲスト・オペレーティング・システム(OS)12と、ゲストOS12上で走る1つ又は複数のアプリケーション14A〜14Nとを含む。ゲスト10Nは特権付きコード16を含む。ゲスト10A〜10Nは、仮想マシン・マネージャ(VMM)18によって管理される。VMM18及びゲスト10A〜10Nは、コンピュータ・システム5に含まれる物理的ハードウェアを含んでもよいホストハードウェア20上で実行する。一実施形態では、VMM18は、一組の仮想マシン制御ブロック(VMCB)22を維持してもよい。各ゲスト10A〜10Nに対して1つのVMCB22が存在してもよい。一実施形態では、各ゲスト10A〜10Nの各vCPUに対して1つのVMCB22が存在してもよい。VMCB22は、図1の例証ではVMM18の一部として示されるが、VMCB22は、メモリに及び/又はホストハードウェア20におけるディスクドライブのような不揮発性媒体上に格納されてもよい。
【0035】
ホストハードウェア20は、一般に、コンピュータ・システム5に含まれるハードウェアのすべてを含む。種々の実施形態では、ホストハードウェア20は、1つ又は複数のプロセッサ、メモリ、周辺デバイス、及び上記のコンポーネントを結合するのに用いられる他の回路を含んでもよい。例えば、パーソナルコンピュータ(PC)型のシステムは、PCIエクスプレス・インターフェース(PCI Express Interface)のようなインターフェースを用いるプロセッサ、メモリ、及びグラフィックスデバイスを結合するノースブリッジを含んでもよい。加えて、ノースブリッジは、種々の周辺コンポーネントがそれに直接又は間接的に結合されてもよいペリフェラル・コンポーネント・インターフェース(peripheral component interface)(PCI)バスのようなペリフェラルバスに結合してもよい。レガシー機能を提供する及び/又はレガシーハードウェアに結合するために、サウスブリッジもまた含まれ、及びPCIバスに結合されてもよい。他の実施形態では、種々のハードウェアコンポーネントをリンクするために他の回路が用いられてもよい。例えば、ノードをリンクするためにHyperTransport(商標)(HT)リンクが用いられてもよく、この各々は、1つ又は複数のプロセッサ、ホストブリッジ、及びメモリコントローラを含んでもよい。各ノードはまた、ノースブリッジを含んでもよい。HTリンクを介して周辺デバイスにデイジーチェーンの状態で結合するために、ホストブリッジが用いられてもよい。代替的に、コンポーネントの多くは、例えば、1つ又は複数のプロセッサ、ノースブリッジ機能、及びグラフィックスデバイスを集積する単一のデバイスのような単一のデバイス上に含まれてもよい。任意の所望の回路/ホストハードウェア構造が用いられてもよい。
【0036】
VMM18は、ゲスト10A〜10Nの各々のための仮想化を提供するように構成されてもよく、ホストハードウェア20へのゲスト10A〜10Nのアクセスを制御してもよい。VMM18はまた、ホストハードウェア20(及びより詳細には、1つ以上のvCPUが含まれる場合にゲスト内のvCPU)上での実行のためのゲスト10A〜10Nのスケジューリングを担当してもよい。VMM18は、仮想化のためにホストハードウェア20において提供されるハードウェアサポートを用いるように構成されてもよい。例えば、プロセッサは、イベントを横取りし及びゲストをハンドリングのためにVMM18に出すハードウェアを含む、仮想化のためのハードウェアサポートを提供してもよい。プロセッサにおけるデバイス割込みマネージャ及び/又はゲスト割込み制御ユニットは、同様に仮想化をサポートするために提供されたハードウェアであってもよい。
【0037】
幾つかの実施形態では、VMM18は、ホストハードウェア20上で実行し且つゲスト10A〜10Nのための仮想化を提供する「薄い」独立型ソフトウェアプログラムとして実装されてもよい。こうしたVMM実装は、時には「ハイパーバイザ」と呼ばれる場合がある。他の実施形態では、VMM18は、ホストOSに集積され又はホストOS上で実行してもよい。こうした実施形態では、VMM18は、ホストOSにおける任意のドライバ、システムBIOSによって提供されるプラットフォームシステム管理モード(system management mode)(SMM)コードなどを含むホストOSに頼ってもよい。したがって、ホストOSコンポーネント(及びプラットフォームSMMコードのような種々のより低レベルのコンポーネント)は、ホストハードウェア20上で直接実行し、VMM18によって仮想化されない。VMM18とホストOS(含まれる場合)は、一実施形態では合わせてホストと呼ばれる場合がある。一般に、ホストは、使用中にホストハードウェア20の直接制御下にある任意のコードを含んでもよい。例えば、ホストは、VMM18、ホストOSと組み合わされたVMM18、又はホストOS単独(例えば仮想化されない環境において)であってもよい。
【0038】
種々の実施形態では、VMM18は、フル仮想化、準仮想化、又はこの両方をサポートしてもよい。さらに、幾つかの実施形態では、VMM18は、準仮想化されるゲストとフル仮想化されるゲストとを同時に実行してもよい。
【0039】
フル仮想化の状態では、ゲスト10A〜10Nは、仮想化が起こっていることに気づかない。各ゲスト10A〜10Nは、その仮想マシンに一連のゼロベースのメモリを有してもよく、VMM18は、ホストの物理アドレススペースへのアクセスを制御するために、シャドウページテーブル又はネストしたページテーブルを用いてもよい。シャドウページテーブルは、ゲスト仮想アドレスからホスト物理アドレスに再マッピング(ゲスト10A〜10Nのメモリ管理ソフトウェアによって割り当てられたゲスト「物理アドレス」をホスト物理アドレスに効果的に再マッピング)してもよく、一方、ネストしたページテーブルは、ゲスト物理アドレスを入力として受信し、ホスト物理アドレスにマッピングしてもよい。各ゲスト10A〜10Nに対するシャドウページテーブル又はネストしたページテーブルを用いることで、VMM18は、ゲストがホストハードウェア20における他のゲストの物理メモリにアクセスしないことを保証してもよい。
【0040】
準仮想化の状態では、ゲスト10A〜10Nは、少なくとも部分的にVM−アウェアであってもよい。こうしたゲスト10A〜10Nは、メモリページに関してVMM18と交渉してもよく、したがってゲスト物理アドレスをホスト物理アドレスに再マッピングすることは要求されない場合がある。一実施形態では、準仮想化において、ゲスト10A〜10Nは、ホストハードウェア20における周辺デバイスと直接対話することを可能にされてもよい。任意の所与の時点で、周辺デバイスは、1つ又は複数のゲスト10A〜10Nによって「所有」されてもよい。一実装では、例えば、周辺デバイスは、該周辺デバイスを現在所有する1つ又は複数のゲスト10A〜10Nと共に保護ドメインにマッピングされてもよい。周辺デバイスを所有するゲストだけが、これと直接対話してもよい。また、保護ドメインにおけるデバイスが別の保護ドメインにおけるゲストに割り当てられたページを読出す/書き込むのを防ぐために、保護機構が存在してもよい。代替的に、周辺デバイスは、ゲストによって所有されてもよい又はゲストがそれと対話してもよい仮想機能をサポートしてもよい。
【0041】
既述のように、VMM18は、各ゲスト10A〜10N及び/又はゲストの各vCPUのためのVMCB22を維持してもよい。VMCB22は、一般に、対応するゲスト10A〜10Nに対するVMM18によって割り当てられる記憶領域に格納されるデータ構造を備えてもよい。一実施形態では、VMCB22は、メモリのページを備えてもよいが、他の実施形態は、より大きい又は小さいメモリ領域を使用してもよく、及び/又は不揮発性記憶装置のような他の媒体上の記憶装置を使用してもよい。一実施形態では、VMCB22は、ゲストが実行するようにスケジュールされるときにホストハードウェア20におけるプロセッサにロードされてもよく、且つゲストが終了するときに(そのスケジュールされた時間の完了に起因して又はゲストが終了するのをプロセッサが検出することの1つ又は複数の横取りに起因して)VMCB22に戻して格納されてもよい、ゲストのプロセッサ状態を含んでもよい。幾つかの実施形態では、プロセッサ状態の一部のみが、VMCB22に対応するゲストに制御を伝送する命令(「仮想マシン実行(Virtual Machine Run)(VMRUN)」命令)を介してロードされ、VMRUN命令を実行する前にVMM18によって他の所望の状態がロードされてもよい。同様に、こうした実施形態では、プロセッサ状態の一部のみが、ゲスト終了時にプロセッサによってVMCB22に格納されてもよく、VMM18は、必要な場合に任意の付加的な状態を格納することを担当してもよい。他の実施形態では、VMCB22は、プロセッサ状態が格納される別のメモリ領域へのポインタを含んでもよい。さらに、一実施形態では、2つ以上の終了機構が定義されてもよい。一実施形態では、格納される状態の量と、ロードされる状態の場所は、どの終了機構が選択されるかに応じて変化してもよい。
【0042】
一実施形態では、VMM18はまた、VMM18に対応するプロセッサ状態を格納するために割り当てられたメモリの領域を有してもよい。VMRUNが実行されるときに、VMM18に対応するプロセッサ状態が領域に保存されてもよい。ゲストを終了してVMM18に出るときに、VMM18が実行を続けることができるように、領域からのプロセッサ状態が領域から再ロードされてもよい。一実装では、例えば、プロセッサは、VMM18のアドレスを保存領域に格納するために、レジスタ(例えば、モデル固有レジスタ(model specific register)、すなわちMSR)を実装してもよい。
【0043】
加えて、VMCB22は、ゲストに対してイネーブルにされる横取りイベントを識別する横取り構成と、イネーブルにされた横取りイベントが検出される場合にゲストを終了するための機構を含んでもよい。一実施形態では、横取り構成は、プロセッサがサポートする各横取りイベントに対して1つの指示である、一組の横取り指示を含んでもよい。横取り指示は、プロセッサが対応するイベントを横取りするか否か(すなわち、別の観点では、横取りがイネーブルにされるか否か)を示してもよい。本明細書で用いられる場合のイベントは、ゲストにおいてイベントが起こることになればゲストにおいて「横取り」され、プロセッサはイベントの処理のためにゲストを終了する。一実施形態では、横取り構成は、2つの終了機構のうちのどちらが用いられるかを示す指示の第2の組を含んでもよい。他の実施形態は、2つよりも多い終了機構を定義してもよい。別の実施形態では、横取り構成は、イベントに対して第1の終了機構が用いられるべきか否かを示す、1つの横取りイベントにつき1つである横取り指示の第1の組と、イベントに対して第2の終了機構が用いられるべきか否かを示す、1つの横取りイベントにつき1つである横取り指示の第2の組とを備えてもよい。
【0044】
一般に、終了機構は、(概して再始動可能な方法で)ゲスト実行を終了するため及び他のコードの実行を始めるためにプロセッサによって行われる動作を定義してもよい。一実施形態では、1つの終了機構は、少量のプロセッサ状態の保存と、Minivisorのための状態のロードを含んでもよい。Minivisorは、ゲスト物理アドレススペースで実行してもよく、比較的簡単な横取り処理を行ってもよい。別の終了機構は、VMMに出て、より多量のプロセッサ状態を保存し、及びVMMのプロセッサ状態をロードしてもよい。したがって、横取りイベントは、イベントに応じて異なる命令コードによって処理されてもよい。加えて、幾つかの実施形態では、実行するのにあまり時間がかからない可能性があり性能を改善する可能性がある「より軽いウエイトの」終了機構を通じて比較的簡単な横取り処理が処理されてもよい。終了するのに「より重いウエイトの」機構が用いられた後で、より複雑な処理がVMMで行われてもよい。したがって、この実施形態では、VMM18は、ゲスト10A〜10Nが内部的に処理することをVMM18が望まないイベントを横取りするようにプロセッサを構成してもよく、且つまた、それに対して終了機構を用いるようにプロセッサを構成してもよい。イベントは、命令(すなわち、命令を実行する代わりに命令を横取りする)、割込み、例外、及び/又はゲスト実行中に起こる可能性があるあらゆる他の所望のイベントを含んでもよい。
【0045】
一実施形態では、VMCB22は、VMCB22のロードによりプロセッサに或るアクションを行わせる可能性がある他の制御ビットをさらに含んでもよい。例えば、制御ビットは、プロセッサにおけるTLBをフラッシュする指示を含んでもよい。他の制御ビットは、ゲストに対する実行環境(例えば割込み処理モード、ゲストに対するアドレススペース識別子など)を指定してもよい。何故ゲストが終了したかなどを記述する終了コードを通信するために、さらに他の制御ビットが用いられてもよい。
【0046】
一般に、「ゲスト」は、コンピュータ・システム5における実行のために仮想化されるべき任意の1つ又は複数のソフトウェアプログラムを備えてもよい。ゲストは、特権付きモードで実行する少なくとも幾つかのコードを含んでもよく、したがって、ゲストを実行しているコンピュータ・システムに対するフル制御を有することを期待する。既述のように、ゲスト10Aは、ゲストがゲストOS12を含む例である。ゲストOS12は、Microsoft Corp.(ワシントン州レッドモンド)から入手可能なWindows(登録商標) OS、Linux(登録商標)のような任意のUNIX(登録商標)型オペレーティング・システム、IBM Corporation(ニューヨーク州アーモンク)からのAIX、Sun Microsystems,Inc.(カリフォルニア州サンタクララ)からのSolaris、Hewlett−Packard Company(カリフォルニア州パロアルト)からのHP−UXなどのうちのいずれかのような任意のOSであってもよい。ゲスト10Nは、非OS特権付きコード16を備えるゲストの例である。
【0047】
本明細書で10Nのような参照番号に用いられるときの文字「N」は、該参照番号をもつ任意の数の要素(例えば1つのゲストを含む任意の数のゲスト10A〜10N)を概して示すように意図されることに留意されたい。加えて、文字「N」を使用する異なる参照番号(例えば10N及び14N)は、他の方法で言及されない限り、同じ数の異なる要素が提供されることを示すように意図されない(例えば、ゲスト10A〜10Nの数は、アプリケーション14A〜14Nの数とは異なる場合がある)。
【0048】
ホストハードウェア及び割込み仮想化
ここで図2に移ると、ホストハードウェア20の一実施形態を例証するブロック図が示される。例証された実施形態では、ホストハードウェア20は、複数のプロセッサ30A〜30B、それぞれの高度なプログラム可能割込みコントローラ(Advanced Programmable Interrupt Controller)(APIC)32A〜32B、ブリッジ36(メモリコントローラ42及び入力/出力(I/O)メモリ管理ユニット(IOMMU)40を含み、IOMMU40はデバイス割込みマネージャ38をさらに含む)、複数のインターフェース回路(IF)44A〜44C、メモリインターフェース回路(memory interface circuit)(MIF)46、I/O APIC(以下、IOAPIC)50を含んでもよい随意的なブリッジ48、周辺デバイス52A〜52B(そのうち幾つかはIOAPIC54のようなIOAPICを含んでもよい)、及びメモリ56を含む。プロセッサ30A〜30Bは、図2に例証されるように、ブリッジ36に及びそれぞれのAPIC32A〜32Bに結合される。APIC32A〜32Bは、ブリッジ36に結合され、これはインターフェース回路44A〜44C及びメモリインターフェース回路46に結合される。メモリインターフェース回路46はメモリ56に結合され、インターフェース回路44Aはブリッジ48に結合され、これは周辺デバイス52A〜52Bに結合される。
【0049】
例証された実施形態では、各プロセッサ30A〜30Bは、関連付けられたAPIC32A〜32Bを有する。この実施形態では、割込みは、Intel Corporation(カリフォルニア州サンタクララ)によって記述されるAPIC仕様に従ってホストハードウェア20において通信されてもよい。例えば、参照によりその全体が本明細書に組み込まれる、Intel64及びIA−32アーキテクチャソフトウェア開発者用マニュアル(Architectures Software Developer’s Manual)、Volume3A:システムプログラミングガイド(System Programming Guide)、Part1、Chapter10(2009年12月)を参照されたい。この仕様では、各プロセッサは、(プロセッサ自体から、他のプロセッサから、内部APIC割込みソースから、及び周辺デバイスに関連付けられたIOAPICから)割込みを受ける関連付けられたローカルAPICを有する。ローカルAPICは、保留中の割込みに優先順位をつけ、プロセッサ上で進行中の別の割込みよりも高い優先度である場合に及び/又はプロセッサの現在のタスクよりも高い優先度である場合に割込みをプロセッサに送信する。本明細書では例としてAPIC仕様が用いられることになるが、他の実施形態では任意の割込み管理仕様が用いられてもよい。
【0050】
図2の実施形態では、APIC32A〜32Bは、プロセッサのホスト割込み(すなわち、ホストによって処理されるべき割込み)のためのローカルAPICであってもよい。他方では、ゲスト割込みのためのローカル割込みコントローラは、ハードウェアAPICとしてインスタンス化されない場合がある。代わりに、ゲストAPIC(又はより簡潔に、gAPIC)がハードウェアサポート及びVMM18を介してエミュレートされてもよい。具体的には、各gAPICは、gAPIC状態データ構造58に格納されるその状態を有してもよい。gAPICデータ構造58は、コンピュータ・システム5においてアクティブな各ゲストの各vCPUに対するgAPIC状態エントリを含んでもよい。一実施形態では、gAPIC状態エントリは、対応するgAPIC状態のためのデータのページであってもよい。こうした実施形態では、gAPIC状態データ構造58は、簡単にページのコレクションであってもよい。ページは、メモリシステムにおいて互いに近くに位置している必要はなく、すなわち、種々のgAPICのgAPIC状態データを格納することに加えて、互いとの任意の他の関係性を有する。他の実施形態は、より大きい又は小さいgAPIC状態エントリ及び/又は他のデータ構造を用いてもよい。ゲストは、ゲストがプロセッサ上で現在実行中である(例えば、ゲストに対するプロセッサ上でVMRUN命令が実行されており、ゲスト終了が発生していない)場合、又はゲストが終了し、VMM18が実行中であるが、ゲストがプロセッサ上で再び実行されることを期待される場合に、そのプロセッサ上でアクティブであってもよい。
【0051】
VMM18がプロセッサ30A〜30B上でゲスト/vCPUをスケジュール設定するときに、VMM18は、vCPUのVMCB22からプロセッサ30A〜30Bに(及びより詳細にはプロセッサのゲスト割込み制御ユニット34A〜34Bに)ポインタをロードしてもよい。ポインタは、対応するgAPIC状態エントリをgAPIC状態データ構造58の中で位置付けてもよい。したがって、ゲスト割込み制御ユニット34A〜34Bは、vCPUに対するgAPIC状態を位置付けてもよく、デバイス割込みマネージャ38によって記録されている割込みを検出してもよい。一実施形態では、プロセッサ30A〜30Bは、ゲスト割込み送達機構を実装してもよい。例えば、プロセッサ30A〜30Bは、ゲスト割込み(例えば、割込み要求、割込みベクトルなど)と共にプログラムされてもよい1つ又は複数のレジスタを含んでもよい。仮想割込みは、プロセッサ30A〜30B上で実行するソフトウェアに割り込むために、真の割込みソース(例えばプロセッサ30A〜30Bへの入力ピン)と論理的に組み合わされてもよい。プロセッサ30A〜30Bは、割込みをサービスするために割込みベクトルによって指定される割込みハンドラを実行してもよい。他の実施形態は、他のゲスト割込み送達機構を実装してもよい。
【0052】
一実施形態では、デバイス割込みマネージャ38は、ゲストを対象とするデバイス割込みに対するゲスト割込み状態を更新し、対応するAPIC32A〜32Bにホスト割込みを送達するように構成されてもよい。特に、一実施形態では、デバイス割込みマネージャ38は、ブリッジ36で受信される各ゲスト割込みをgAPIC状態データ構造58に記録するように構成されてもよい。ゲスト割込みの受信に応答して、デバイス割込みマネージャ38は、割込みの対象にされたゲスト/vCPUに対するgAPIC状態データ構造58におけるgAPIC状態を更新するように構成されてもよい。デバイス割込みマネージャ38は、一実施形態ではゲストがアクティブであるか否かから独立してgAPIC状態を更新するように構成されてもよい。1つ以上の対象を有するマルチキャスト及びブロードキャスト割込みでは、デバイス割込みマネージャ38は、各割込み宛先に対するgAPIC状態データ構造58におけるgAPIC状態を更新するように構成されてもよい。代替的に、デバイス割込みマネージャ38は、これらの複数の宛先割込みに関してVMM18に頼るように構成されてもよい。デバイス割込みマネージャ38は、こうした実施形態ではVMM18にアクセス可能な記憶域に割込みをログ記録するように構成されてもよく、メッセージを処理するのにVMM18に信号送信するように構成されてもよい。
【0053】
デバイス割込みマネージャ38は、図2にはメモリに格納された状態で示されるデバイステーブル62、割込み再マッピング・テーブル64、及びAPIC IDテーブル60を用いて、周辺デバイスからのデバイス割込みのための対象にされたプロセッサ又はvCPUを判定してもよい。具体的には、デバイス割込みマネージャ38は、IOAPIC50及び54からのデバイス割込み要求に含まれる情報に応答してデバイステーブル62及び割込み再マッピング・テーブル64にアクセスするように構成されてもよい。デバイステーブル62は、各周辺デバイス52A〜52Bのためのエントリを含んでもよい(及び、周辺デバイスが結合される周辺インターフェースに対する1つよりも多い識別子を含む、周辺デバイスのための複数のエントリを含んでもよい)。所与の周辺デバイスのためのデバイステーブルエントリは、割込み再マッピング・テーブル64へのポインタを含んでもよく、且つまた、APIC IDテーブル60のうちの1つへの少なくとも1つのAPIC IDテーブルポインタを含んでもよい。APIC IDテーブル60は、ゲストにおける各APIC IDのためのエントリを含んでもよく、該APIC IDを有するvCPU/gAPICに対応するgAPIC状態エントリへのポインタを格納してもよい。割込みを、そのオリジナルの宛先及び/又は割込みベクトルから新しい宛先及び/又は割込みベクトルにリダイレクトするために、割込み再マッピング・テーブル64が用いられてもよい。したがって、割込み再マッピング・テーブル64は、割込みに対する宛先IDを含んでもよい。宛先IDは、APIC IDであり、ゲスト割込みに対する更新されるべきgAPIC状態エントリを位置付けるために、デバイステーブル62からのAPIC IDテーブルポインタによって示されるAPIC IDテーブル60へのインデックスとして用いられてもよい。割込み再マッピング・テーブル64からの割込みベクトルに基づいて、デバイス割込みマネージャは、識別されたgAPIC状態エントリに割込みを記録してもよい。割込み再マッピング・テーブル64はまた、デバイスがゲスト又はホストのどちらに割り当てられるかの指示を含んでもよい。デバイスがホストに割り当てられる場合、割込みは、APIC32A〜32Bに送達されるべきホスト割込みであり、gAPIC状態データ構造58は更新されなくてもよい。テーブル60、62、及び64の一実施形態の付加的な詳細がさらに後述される。
【0054】
gAPIC状態データ構造58は、例証された実施形態ではメモリ56に格納されるように示されるが、その一部は、幾つかの実施形態ではデバイス割込みマネージャ38及び/又はブリッジ36にアクセス可能なキャッシュによってキャッシュされてもよい。加えて又は代替的に、1つ又は複数のgAPIC状態エントリに対する専用メモリがブリッジ36に実装されてもよい。
【0055】
APIC割込み機構では、各プロセッサ(そのローカルAPICを通じて)は、物理APIC ID及び論理APIC IDを有してもよい。物理APIC IDは、APIC IDレジスタに格納される。物理APIC IDは、物理送達モードの割込みによって示される物理APIC IDと1対1ベースでマッチングされる。論理APIC IDは、ローカルAPICの論理宛先レジスタに格納される。論理APIC IDは、クラスタID及びローカルAPIC IDを有し、この場合、ローカルAPIC IDは、典型的にワン・ホット・ビットベクトルである。論理送達モードの割込みは、割込みを1つ又は複数のローカルAPICにクラスタで送達するために、APIC IDのベクトル部分に任意のセットビットを含んでもよい。したがって、論理APIC IDのマッチングは、クラスタIDを比較すること、及びローカルAPICにおけるワン・ホット・ビットベクトルのセットビットと同じ位置でローカルAPIC IDベクトルにおけるセットビットを検出することを含んでもよい。別の観点では、論理送達モードの割込みにおけるローカルAPIC IDベクトルは、ローカルAPICのローカルAPIC IDベクトルと論理的にANDでつながれてもよく、結果がゼロではなく且つクラスタIDとマッチする場合は、ローカルAPICは論理割込みの対象である。論理APIC IDは、本明細書ではより簡潔に論理IDと呼ばれる場合があり、同様に、物理APIC IDは、本明細書ではより簡潔に物理IDと呼ばれる場合がある。割込みに関連付けられた所与のID(論理又は物理)は、割込みの宛先IDと呼ばれる場合がある。割込みのための対応する送達モードは、割込みの宛先IDを論理又は物理のいずれかとして識別してもよい。
【0056】
APIC IDテーブル60は、所与のゲストにおける論理APIC IDに対する論理APIC IDテーブルと、所与のゲストにおける物理APIC IDに対する物理APIC IDテーブルとを含んでもよい。APIC IDテーブルは、既述のようにAPIC IDをgAPIC状態ポインタにマッピングしてもよい。一実施形態では、論理APIC IDテーブルは、論理IDを物理IDにマッピングしてもよく、これは、物理IDテーブルを通じてgAPIC状態ポインタにマッピングされてもよい。他の実施形態は、同様に論理IDからgAPIC状態ポインタに直接マッピングしてもよい。
【0057】
一実施形態では、APIC IDテーブル60は、vCPUが走っているか否かの指示を含んでもよい。vCPUが現在走っている場合、割込みは、vCPUを実行しているプロセッサ30A〜30Bによって(例えば、新しい割込みの記録の更新に関するgAPIC状態エントリの監視を通じて、又はデバイス割込みマネージャ38からのメッセージを介して)検出されてもよい。したがって、割込みは、走っているゲストに送達されてもよい。しかしながら、ゲストが走っていない(又はアクティブではない)場合、割込みは、送達を遅延されてもよい。一実施形態では、IOMMUは、割込みをログ記録してもよい。VMM18は、ログの中の割込みを検出してもよく、スケジューリングのために対象にされたvCPUに優先順位をつけてもよい。vCPUは、現在ハードウェア・プロセッサ上で実行される状態にある場合に走ってもよい。
【0058】
所与のプロセッサ30A〜30Bに対するAPIC32A〜32Bは、プロセッサへの任意のインターフェースを有してもよい。例えば、ローカルAPICとそれらのそれぞれのプロセッサとの間で用いられる任意のインターフェースが用いられてもよい。各APICは、サービスのために割込みが送達されているプロセッサに独立して信号送信するように構成されてもよい。プロセッサがゲストを実行しており且つAPICが割込みを信号送信する場合、プロセッサは、ホスト割込みを処理するためにゲストを終了してVMM18に出るように構成されてもよい。プロセッサがゲストを実行していない場合、プロセッサは、ホスト実行に割り込み、APICによって信号送信された割込みに応答してホスト割込みハンドラに分岐するように構成されてもよい。
【0059】
APIC32A〜32Bは、割込みを受信するためにブリッジ36に結合される。APIC32A〜32Bに割込みを輸送するのに任意のインターフェースが用いられてもよい。例えば、APIC割込みの輸送のために実装される任意のインターフェースが用いられてもよい。一実施形態では、割込みメッセージを輸送するために、プロセッサ30A〜30Bとの間で他の動作を通信するのに用いられるのと同じ通信機構(例えば、プロセッサ30A〜30Bによって開始されるメモリ読出し/書込み動作、キャッシュコヒーレンシーメンテナンスのためのプローブなど)が用いられてもよい。別の観点では、APIC32A〜32Bの結合は、ブリッジ36へのプロセッサ30A〜30Bの結合と共有されてもよい。代替的に、プロセッサ30A〜30Bは、APIC32A〜32DがAPIC「3ワイヤインターフェース」を用いるような場合にブリッジ36への別個のパスを有してもよい。割込みメッセージは、送信されている割込みと割込みの宛先とを識別する任意のインターフェース上の任意の通信であってもよい。例えば、割込みは、関連付けられた割込みベクトルを有してもよく、割込みベクトルは、割込みメッセージの一部であってもよい。割込みメッセージはまた、宛先ID(例えば、論理又は物理APIC ID)を含んでもよい。
【0060】
ゲスト割込み制御ユニット34A〜34Bは、対応するgAPIC状態エントリに記録されているゲスト割込みを検出するように構成されてもよく、且つ前述のように割込みを送達してもよい。加えて、ゲスト割込み制御ユニット34A〜34Bは、ゲスト/vCPU実行中にそれら自身のgAPICへのプロセッサ30A〜30Bのアクセスを検出してもよく、且つAPIC32A〜32Bにアクセスする代わりにアクセスをgAPIC状態エントリにおけるメモリ読出し/書込みに変換してもよい。ゲスト割込み制御ユニット34A〜34Bはまた、幾つかの実施形態では、同様にgAPICの幾らかのエミュレーションを実装してもよい。例えば、性能への多大な影響を有する動作が実装されてもよい。ゲスト割込み制御ユニット34A〜34Bによって実装されないエミュレーションでは、ゲスト割込み制御ユニット34A〜34Bは、VMM18におけるエミュレーションのためにゲストを終了してもよい。幾つかのアクセスはエミュレーションを要求しない場合がある(例えば、ほとんどの読出しは、データを読み出すこと以外の影響を有さず、そのためgAPIC状態エントリからのデータの読出しを超えるエミュレーションは必要とされない)。gAPIC状態エントリにおける対応するロケーションを更新することによって、APICにおける如何なる副作用も生じない書込みもまた完了される可能性がある。
【0061】
一実施形態では、ゲスト割込み制御ユニット34A〜34Bにおいてエミュレートされる動作は、ゲスト内のIPIの開始、タスク優先度レジスタ(task priority register)(TPR)へのアクセス、及び割込みの終わり(end of interrupt)(EOI)レジスタへのアクセスを含んでもよい。他の実施形態は、ゲスト割込み制御ユニット34A〜34Bにおける動作の異なるサブセットを実装してもよい。先述のように、幾つかの実施形態では、ゲスト割込み制御ユニット34A〜34Bは、主としてマイクロコードに実装されてもよい。したがって、ゲスト実行中にgAPICへのアクセスがマイクロコード実行を引き起こしてもよい。加えて、デバイス割込みマネージャ38によるgAPIC状態エントリへの更新(プロセッサ上で実行されているvCPUに対する)は、マイクロコード実行を引き起こしてもよい。VMM18に出る命令では、終了は、命令をリタイアした(すなわち、書き込みのためにgAPIC状態エントリへの更新が完了した又はgAPIC状態エントリからのデータ読出しが読出しのために対象レジスタに書き込まれた)後で又は命令をリタイアする前に行われてもよい。命令をリタイアした後でVMExitを開始することは、トラッピングと呼ばれてもよい。幾つかの場合には、対応する命令は、リタイアが認められる場合に取り返しのつかない変化を引き起こす可能性がある。したがって、こうした命令は、命令のフォールトと呼ばれる、VMExitの前にリタイアすることを許されない場合がある。
【0062】
IOMMU40は、前述のようにデバイス割込みマネージャ38を含む。加えて、IOMMU40は、I/Oにより開始されるメモリ動作(例えば、周辺デバイス52A〜52Bから生じる又は周辺デバイス52A〜52Bに代わってDMAコントローラによるメモリ読出し/書込み動作)のための仮想対物理アドレスマッピングを行うように構成されてもよい。翻訳動作の一部として、IOMMU40は、デバイステーブル62及び随意的に割込みリダイレクト・テーブル64にアクセスするように構成されてもよい。各周辺デバイス52A〜52Bに対するデバイステーブルエントリは、メモリ読出し/書込み動作のメモリアドレスを翻訳するためのI/Oページテーブルへのページテーブル・ポインタを含んでもよい(図示せず)。
【0063】
メモリコントローラ42は、プロセッサ30A〜30Bによって発行されるメモリ動作(例えば、命令フェッチ、ロード/格納データアクセス、翻訳のためのプロセッサページテーブルアクセスなど)、デバイス割込みマネージャ38からのメモリ動作(例えば、gAPIC状態データ構造58を読み出す/更新すること、及び/又はテーブル60、62、及び64にアクセスすること)、IOMMU40(例えば、I/Oページテーブル、デバイステーブル62、及び割込み再マッピング・テーブル64にアクセスすること)、及び(幾つかの実施形態において)インターフェース回路44A〜44Cから受信されたメモリ動作を受信するために結合されてもよい。メモリコントローラ42は、メモリ動作を順序付ける、及びメモリ動作を行うためにメモリ56と通信するように構成されてもよい。メモリインターフェース回路46は、メモリ56への物理レベルアクセスを行ってもよい。
【0064】
メモリ56は、あらゆるタイプのメモリを備えてもよい。例えば、メモリ56は、動的ランダムアクセスメモリ(DRAM)、例えばシンクロナスDRAM(SDRAM)、DDR SDRAMのモバイルバージョン(mDDR3など)及び/又は低出力バージョン(LPDDR2など)を含む倍データレート(double data rate)(DDR、DDR2、DDR3など)SDRAM、RAMBUS DRAM、静的RAMなどを備えてもよい。メモリ56は、シングル・インライン・メモリ・モジュール(SIMM)、デュアル・インライン・メモリ・モジュール(DIMM)などのような複数のメモリチップを備える1つ又は複数のメモリモジュールを含んでもよい。
【0065】
この実施形態ではデバイス割込みマネージャ38、IOMMU40、及びメモリコントローラ42を含むことに加えて、ブリッジ36はまた、プロセッサ30A〜30Bと、APIC32A〜32Bと、インターフェース回路44A〜44Dに結合されたデバイスとの間で通信するために他の通信機能を含んでもよい。例えば、例証された実施形態では、別のブリッジ48がインターフェース回路44Aに結合されてもよく、インターフェース回路44Aによって用いられるプロトコルと周辺デバイス52A〜52Bによって用いられるプロトコルとの間の通信を橋渡しするように構成されてもよい。一実施形態では、インターフェース回路44A〜44Cは、例えば前述のHTインターフェースを実装してもよく、ブリッジ48は、HTからPCI Express(PCIe)インターフェースのような別のインターフェースに橋渡しをしてもよい。周辺デバイス52A〜52Bは、こうした実施形態ではPCIeデバイスであってもよい。ブリッジ48はまた、他のインターフェースと橋渡しをするように構成されてもよく、又は他のインターフェースと橋渡しをするために別のブリッジがブリッジ48に結合されてもよい。任意の1つ又は複数の周辺インターフェースが用いられてもよい。加えて、周辺デバイス52A〜52Bは、HTインターフェースと直接結合するように構成されるHT周辺デバイスを備えてもよい。こうした周辺デバイスは、ブリッジ48を必要としない場合がある。
【0066】
一実施形態では、ブリッジ48及び/又は周辺デバイス52A〜52Bのうちの1つ又は複数は、IOAPIC(図2の50及び54)を含んでもよい。IOAPICは、周辺デバイスから割込み要求を受信することを担当してもよく、(メモリのgAPIC状態データ構造58に記録するために)APIC32A〜32B及びデバイス割込みマネージャ38に割込み要求を送信するのに割込みメッセージを生成する。
【0067】
前述のように、一実施形態では、インターフェース回路44A〜44Cは、HTインターフェース上で通信するように構成されてもよい。インターフェース回路44A〜44Cは、HTを用いて周辺デバイス/ブリッジと通信するように構成されてもよい。加えて、幾つかの実施形態では、インターフェース回路44A〜44Cは、プロセッサ、APICなどと共に他のノードに結合されるように構成されてもよい。こうした実施形態では、ブリッジ36は、前述の回路に加えてコヒーレンス管理回路を含んでもよい。
【0068】
プロセッサ30A〜30Bは、任意の命令セットアーキテクチャを実装してもよく、且つ命令セットアーキテクチャで定義される命令を実行するように構成されてもよい。プロセッサ30A〜30Bは、スーパーパイプライン式、スーパースケーラ、及び/又はこれらの組合せ、イン・オーダー又はアウト・オブ・オーダー実行、投機的実行などのような任意のマイクロアーキテクチャを含んでもよい。プロセッサ30A〜30Bは、必要に応じてマイクロコーディング技術を実装してもよいし又は実装しなくてもよい。
【0069】
周辺デバイス52A〜52Bは、任意のタイプの周辺デバイスを備えてもよい。周辺デバイス52A〜52Bは、磁気ドライブ、ソリッドステートドライブ、又は光ディスクドライブのような記憶装置、フラッシュメモリのような不揮発性メモリデバイスなどを含んでもよい。周辺デバイス52A〜52Bは、ユーザI/Oデバイス(キーボード、マウス、ディスプレイ、音声入力など)のようなI/Oデバイス、ネットワーキングデバイス、ユニバーサル・シリアル・バス(USB)又はFirewireのような外部インターフェースデバイスなどを含んでもよい。
【0070】
例証された実施形態では、プロセッサ30A〜30B、ブリッジ36、APIC32A〜32B、インターフェース回路44A〜44C、及びメモリインターフェース回路46は、単一の半導体基板上に集積回路66として集積されてもよい。他の実施形態は、必要に応じて異なる量の集積回路及びディスクリート回路を実装してもよい。プロセッサ、APIC、インターフェース回路、周辺デバイス、ブリッジなどのような様々な数のコンポーネントが図2で例証されるが、他の実施形態は、必要に応じて任意の数の1つ又は複数の各コンポーネントを実装してもよいことに留意されたい。
【0071】
他の実施形態では、IOMMU40及びデバイス割込みマネージャ38の場所は変化してもよい。例えば、この一方又は両方が、ブリッジ48に、周辺デバイス52A〜52Bに、ブリッジに結合される別のブリッジなどにあってもよい。
【0072】
例証された実施形態では、各APIC32A〜32Bは、図2に例証されるように特定のプロセッサ30A〜30Bに関連付けられる。したがって、所与の割込みコントローラは、この実施形態では対応するプロセッサ30A〜30Bに専用にされる。より詳細には、図2では、APIC32Aはプロセッサ30Aに専用にされ、APIC32Bはプロセッサ30Bに専用にされる。割込みコントローラは、その対応するプロセッサに任意の方法で割込みを信号送信してもよい。一般に、信号送信は、割込みが必要とされることを示してもよい。信号送信は、割込みベクトルを含んでもよく、又は割込みベクトルは、割込みが送達された後で実行されるソフトウェアによって読み出されてもよい。割込みの送達は、一実施形態では、プロセッサ及び割込みを受け付けるプロセッサへの信号送信を指す場合がある。割込みのサービスは、デバイスの割込みに必要な動作を行うために割込みベクトルに関連付けられた割込みサービスルーチンを実行することを指す場合がある。
【0073】
ここで図3に移ると、一実施形態での周辺デバイスからgAPICへの割込みの進行を例証し且つまたゲスト内のIPIを例証するブロック図が示される。例証された実施形態では、周辺デバイス52Aは、割込みが望まれることを判定する。周辺デバイス52A内のIOAPIC54(図2参照)は、周辺デバイス52Aに対する割込みメッセージを発生させてもよい。具体的には、IOAPIC54は、所望の割込み(例えば、周辺デバイス52Aに必要とされるサービスに基づいて、周辺デバイス52Aが複数の機能を実装する場合に割込みを信号送信する特定の機能など)に対応する割込みベクトルを発生させてもよい。同様に、IOAPIC50は、それら自身のIOAPICを実装しない周辺デバイス52Bのような周辺デバイスに対する割込みメッセージを発生させてもよい。割込みベクトルは、割込み通信の一部であり、割込みソースを識別すること、割込みに優先順位をつけることなどのために用いられてもよい。幾つかの場合には、割込みベクトルは、IOMMU40によって再マッピングされてもよく、そのため割込みベクトルは図3では「オリジナルベクトル」として例証される。周辺デバイス52Aは、IOMMU40に割込みメッセージを送信してもよい(矢印A)。この実施形態では、割込みは、例えばPCIe仕様で定義される場合の、メッセージにより信号送信される割込み(message−signalled interrupt)(MSI)の形態で送信されてもよい。他の実施形態は、任意の所望の方法で割込みを送信してもよい。一般に、送信は、割込み、その送達モード(例えば論理又は物理)、及び割込みの宛先ID(DestID)を識別してもよい。
【0074】
IOMMU40はMSIを受信してもよい。MSIは、周辺デバイスの識別子を含む。例えば、PCIプログラミングモデルを実装するインターフェースは、バスナンバー及び該バス上のデバイスナンバーをもつ各デバイスを識別してもよい(複数のPCIインターフェースが階層的な形態及び/又は並列な形態でシステムに存在することを可能にする)。デバイスは、物理デバイス上の別個の仮想デバイス又はデバイス上の動作のパーティション分割であってもよい複数の「機能」を有してもよい。識別子は、機能ナンバーも含んでもよい。したがって、この実施形態では、識別子は、バス−デバイス−機能(Bus−Device−Function)、すなわちBDF(登録商標)と呼ばれる場合がある。IOMMU40(及びより詳細には、この実施形態ではデバイス割込みマネージャ38)は、BDF(登録商標)(矢印B)を用いてデバイステーブル62へのインデックスを作成してもよく、且つ周辺デバイス52Aに対応するデバイステーブルエントリを識別してもよい。エントリは、APIC IDテーブルポインタ(矢印C)を含んでもよい。この実施形態では、デバイステーブルエントリはまた、割込み再マッピング・テーブルポインタ(IRTP)を含んでもよく、これは、デバイスに対応する割込み再マッピング・テーブル64を識別してもよい(矢印C1)。割込み再マッピング・テーブル64は、オリジナルの割込みベクトルによってインデックスを作成されてもよく、且つ出力ベクトル及び割込みに対する宛先ID(DestID、例えば、論理又は物理APIC ID)を提供してもよい(矢印C2)。加えて、ゲスト/ホスト指示が出力されてもよい(G/H)。一実施形態では、G/H指示は、設定されたときに割込みがゲストによってサービスされるべきであることを示し、且つクリアされたときに割込みがホストによってサービスされるべきであることを示すビットであってもよい。他の実施形態は、状態の設定及びクリアと反対の意味を用いてもよく、又は指示のための他のエンコーディングを用いてもよい。
【0075】
G/H指示がホストを示す場合、デバイス割込みマネージャ38は、APIC32A〜32Bに割込みメッセージを送信してもよく、割込みは、APIC仕様に従って処理されてもよい(矢印F)。他方では、G/H指示がゲストを示す場合、デバイス割込みマネージャ38は、物理APIC IDテーブル60A(デバイステーブル62によって提供されるAPIC IDテーブルポインタによって指し示されるテーブル)へのインデックス(矢印D)として宛先IDを用いてもよい。物理APIC IDテーブル60Aは、更新されるべきgAPIC状態エントリを識別するgAPIC状態ポインタを出力してもよい。デバイス割込みマネージャ38は、gAPIC状態に割込みを書き込んでもよい(gAPIC状態の更新、図3の矢印E)。物理APIC IDテーブル60Aはまた、vCPUに対する指示をIs_Running(IR)として供給してもよい。vCPUが走っている場合、割込みは、かなり迅速に送達されてもよい。vCPUが走っていない場合、デバイス割込みマネージャ38は、VMM18に対する割込みをログ記録してもよく、これは割込みを処理するためにvCPUをスケジュール設定してもよい。
【0076】
例証された実施形態は、宛先IDをもつ物理APIC IDテーブル60Aにのみアクセスする。したがって、例証された実施形態では、ゲスト割込みに対する宛先IDは物理APIC IDであってもよい。論理APIC IDは、デバイステーブル62、割込みマッピング・テーブル64などをプログラミングするときに、VMM18によって物理APIC IDに翻訳されてもよい。他の実施形態では、論理APIC IDと物理APIC IDとの両方がサポートされてもよく、所与のゲストに対する論理APIC IDテーブルと物理APIC IDテーブルとの両方が、必要な場合にgAPIC状態ポインタを位置付けるために用いられてもよい。
【0077】
一実施形態では、gAPIC状態は、各割込みベクトルのためのビットを含む割込み要求レジスタ(interrupt request register)(IRR)を含む。割込みを記録するために、割込みベクトルに対応するビットがIRRに設定されてもよい。gAPIC状態におけるIRRは、1つよりも多いソースから更新されることが可能である。したがって、更新は、状態を失うのを防ぐためにアトミックにされてもよい。特に、更新は、セットビットをメモリのIRRにORするアトミックORであってもよい。アトミック動作は、動作が複数のステップとして実装される場合であっても、ユニットとして効果的に行われる動作であってもよい。アトミックに更新される場所へのアクセスを試みるオブザーバは、アトミック更新の前又はアトミック更新の後のいずれかで値を受信するが、中間値は受信しない可能性がある。アトミックに更新される場所を更新することを試みるオブザーバは、アトミック動作中にではなく、アトミック動作が完了する前又はアトミック動作が完了した後のいずれかでその更新を行う。この実施形態はアトミックORを実装してもよいが、他の実施形態は、より一般的なアトミック更新動作を実装してもよい。例えば、アトミック更新は、修正されないであろう対象のビットを識別するANDマスクと、どのビットがORされるべきかを識別するORマスクとを含んでもよい。同様に他の実装が可能である。例えば、比較及びスワップ実装が用いられてもよく、この実装では、記憶域からオリジナル値が読み出され、オリジナル値に対して新しいORされた値との比較及びスワップ動作が行われる。比較に失敗した場合、プロセスは繰り返されてもよい(新しいオリジナル値を読み出し、比較及びスワップを行う)。必要であればループを抜け出すためにバックオフ機構及び/又はタイムアウト機構が用いられてもよい。
【0078】
一実施形態では、プロセッサ30A〜30B(及びより詳細にはゲスト割込み制御ユニット34A〜34B)は、プロセッサ上で実行するvCPUに対応するgAPIC状態エントリへの更新を監視してもよい(もしあるとしたら)。具体的には、プロセッサは、それぞれ、IRRビットを含むgAPIC状態エントリの領域を監視してもよく、gAPIC状態エントリはプロセッサが実行しているvCPUに対応する。この領域は、本明細書では「ウォッチ領域」と呼ばれる。ウォッチ領域は、種々の方法で確立されてもよい。例えば、プロセッサ30A〜30Bは、キャッシュを含んでもよく、キャッシュとメモリとの間でコヒーレンシーを維持するように構成されてもよい。コヒーレンシー機構の一部として、プロセッサ30A〜30Bは、キャッシュに格納されるデータの更新を知らせてもよい。プロセッサ30A〜30Bは、したがって、領域をキャッシュに読み込むことによってウォッチ領域を確立してもよい。例えば、一実施形態では2つのキャッシュブロックが領域をカバーしてもよい。幾つかの実施形態では、これはキャッシュブロックがキャッシュに残ることを保証するのに必要な場合がある。例えば、幾つかの実施形態は、プロセッサのキャッシュにおいて見失われることが知られているコヒーレンシー・プローブをフィルタしてもよい。ウォッチ領域ブロックがキャッシュに残ることを保証することで、こうした実施形態ではウォッチ領域の更新に対応するプローブがフィルタされないことを保証してもよい。
【0079】
ウォッチ領域ブロックがプロセッサのキャッシュに残ることを保証するために種々の機構が用いられてもよい。例えば、プロセッサは、ブロックをキャッシュにロックするためにキャッシュ・ロッキングを実装してもよい。代替的に、プロセッサは、キャッシュによって実装されるキャッシュ置換えアルゴリズムにおいてブロックを「最近使用した」状態のまま残してもよい。他方では、これは、例えばコヒーレンシー・プローブがフィルタされない場合に、ウォッチ領域ブロックがプロセッサのキャッシュに残ることを保証するのに必要ではない場合がある。こうした実施形態では、プロセッサは、領域のアドレスをレジスタに単純に格納し、アドレスをプローブと比較してもよい。
【0080】
プロセッサ30A〜30B上で走っているvCPUに対するgAPIC状態エントリへのgAPIC状態の更新が起こる場合、対応するプロセッサがウォッチ領域への更新を検出してもよい(矢印G2)。対応するプロセッサにおけるゲスト割込み制御ユニット34A〜34Bは、更新されるIRRを読み出してもよく、且つ保留中の割込みに優先順位をつけ、これがより高い優先度である場合に新しい割込みを取り込んでもよい。
【0081】
別の実施形態では、ウォッチ領域は用いられなくてもよく、代わりにデバイス割込みマネージャ38がゲスト割込み制御メッセージをAPIC32A〜32Bに(又は直接にプロセッサ30A〜30Bに)送信してもよい(矢印G1)。ゲスト割込み制御メッセージは、ホスト割込みメッセージ及びIPIから区別可能であってもよく、したがって、ゲスト割込みが要求されていることを知らせるためにゲスト割込み制御ユニット34A〜34Bに転送されてもよい。例えば、ゲスト割込み制御メッセージは、既存の割込みメッセージ・コーディングを用いるホスト割込みメッセージ及びIPIからこれを区別する、未定義の割込みメッセージ・コーディングを用いてもよい。他の実施形態は、ウォッチ領域とゲスト割込み制御メッセージとの両方を実装してもよい。
【0082】
一実施形態では、ゲスト割込み制御メッセージは、モデル固有レジスタ(MSR)インターフェースを通じてゲスト割込み制御ユニット34A〜34Bに送達されてもよい。MSRは、ゲスト割込み制御ユニット34A〜34Bにアクセス可能(例えば、ゲスト割込み制御ユニット34A〜34Bがマイクロコードに部分的に又は完全に実装される場合に、マイクロコードにアクセス可能)であってもよい。MSRはまた、プロセッサ30A〜30B上で実行する特権付きコードにアクセス可能であってもよい。しかしながら、MSRは、ゲストアクセスを含む非特権アクセスから保護されてもよい。APIC32A〜32Bは、割込みソフトウェアにIPIを送達する代わりにMSRが書き込まれること以外は、MSRへの割込みを送達するためにIPIに対して用いられるインターフェースに類似したインターフェースを用いてもよい。MSRの更新は、ゲスト割込み制御ユニット34A〜34Bにゲスト割込み送達をアクティブ化させてもよい。例えば、ゲスト割込み制御ユニット34A〜34Bをマイクロコードに実装する実施形態では、MSRの更新は、ゲストへの送達のために割込みを処理するマイクロコード・ルーチンの実行を引き起こす可能性がある。一実施形態ではMSRインターフェースが用いられてもよいが、他の実施形態は、ゲスト割込み制御メッセージがゲスト割込み制御ユニット34A〜34Bに送達されることを可能にする任意の機構を用いてもよい。こうした機構は、「ドアベル」機構と呼ばれる場合がある。
【0083】
デバイス割込みに加えて、プロセッサ上で実行するゲストvCPUは、同じ仮想マシンにおける他のvCPUにIPIを発行してもよい。本発明の実施形態では、IPIは、vCPU上で実行するソフトウェアが割込みコマンドレジスタ(interrupt command register)(ICR)を更新するときに発行される。割込みコマンドレジスタは、高い及び低い(ICRH及びICRL)部分を含んでもよく、IPIは、ICRLレジスタへの書込みに応答して開始されてもよい。この機構は、x1 APICエンコーディングとx2 APICエンコーディングとの両方と互換性があってもよい。IPIのソースvCPUを実行するプロセッサのゲスト割込み制御ユニット34A〜34Bは、ICRLレジスタへの書込みを検出してもよく、APIC IDテーブル60におけるgAPIC状態ポインタを識別するためにIPIの宛先IDを用いてもよい(矢印a)。IPIの宛先IDは、論理又は物理のいずれであってもよく、ゲスト割込み制御ユニット34A〜34Bは、宛先IDに適するように論理及び/又は物理APIC IDテーブル60を用いてもよい。gAPIC状態ポインタを用いることで、ゲスト割込み制御ユニット34A〜34Bは、gAPIC状態データ構造58における対象vCPUのgAPIC状態エントリを更新してもよい(矢印b)。ゲスト割込み制御ユニット34A〜34Bはまた、対象vCPUを実行しているプロセッサ30A〜30Bのゲスト割込み制御ユニット34A〜34Bにゲスト割込み制御メッセージを通信するように構成されてもよい(矢印c)。より詳細には、IPIを送達するためのゲスト割込み制御メッセージは、一実施形態ではAPIC32A〜32Bを通じてルーティングされてもよい。代替的に、ウォッチ領域を実装する実施形態は、更新を検出するためにウォッチ領域検出を用いてもよい。他の実施形態は、IPIを開始するために他の機構を実装してもよい。ゲスト割込み制御ユニット34A〜34Bは、機構を検出してもよく、対象vCPUに対するgAPIC状態を適宜更新してもよい。加えて、対象vCPUが走っていないことをAPIC IDテーブル60が示す場合、ソースプロセッサからのゲスト割込み制御ユニットは、VMExitを発生させて、VMM18が対象vCPUをスケジュール設定することを可能にしてもよい。
【0084】
一実施形態では、正しいプロセッサ30A〜30Bへの割込みのためのゲスト割込み制御メッセージを送信するために、APIC IDテーブル60におけるIRビットは、どのプロセッサが対応するvCPUを実行しているかを識別するフィールドであってもよい(又はvCPUが走っているか否かを示すビット及びプロセッサを識別するフィールドが存在してもよい)。ゲスト割込み制御メッセージの対象を識別するためにフィールドが用いられてもよい。
【0085】
ここで図4に移ると、VMCB22の一実施形態のブロック図が示される。例証された実施形態では、VMCB22は、gAPIC状態ポインタフィールド70、物理APIC IDテーブルポインタフィールド72、論理APIC IDテーブルポインタフィールド74、及び他の仮想マシンデータ76を含む。gAPIC状態ポインタ70は、ゲスト/vCPUに対応するgAPIC状態エントリをメモリ56の中に位置付けてもよい。gAPIC状態ポインタ70は、VMRUN命令の一部としてプロセッサ30A〜30Bにロードされてもよく、且つvCPUに対するgAPIC状態を位置付けるためにゲスト割込み制御ユニット34A〜34Bによって用いられてもよい。物理APIC IDポインタフィールド72及び論理APIC IDテーブルポインタフィールド74は、それぞれゲストに対する物理APIC IDテーブルポインタ及び論理APIC IDテーブルポインタを格納してもよい。他のVMデータ76は、VMRUN及びVMExit上にロードされる/格納される種々の他のプロセッサ状態を含んでもよい。
【0086】
ここで図5に移ると、gAPIC状態エントリ90の一実施形態のブロック図が示される。図5の例証は状態の論理図であってもよい。メモリにおける状態の実際の配置は変化してもよい。一実施形態では、状態の配置は、状態がAPICにおいてアドレス指定される順序にであってもよい。すなわち、各レジスタは、APICのベースアドレスからのオフセットを有してもよく、各レジスタに対するgAPIC状態エントリ90における状態の対応するコピーは、gAPIC状態エントリ90のベースアドレスから同じオフセットであってもよい。
【0087】
gAPIC状態エントリ90は、APIC状態の完全なコピーを含んでもよい。すべての状態が図5で例証されるわけではない。しかしながら、IRR、イン・サービス・レジスタ(ISR)、トリガ・モード・レジスタ(TMR)、並びにICRHレジスタ及びICRLレジスタ、タスク優先度レジスタ(TPR)、及び割込みの終わり(EOI)レジスタが、他のAPIC状態と共に示される。他のAPIC状態は、(例えば、APICアドレスマップにおける各レジスタに対するオフセットに従って)例証された状態内でインターリーブされてもよい。さらに、図5に示すような状態の順序は、メモリに格納される場合の状態の順序ではなくてもよい。
【0088】
IRRレジスタは、gAPICに送信されている割込み要求を記録する。IRRにおける割込み要求の位置は割込みベクトルに対応する。IRRは、「固定の(fixed)」割込みを追跡してもよい。他の割込みタイプは、マスク可能ではない割込み(non−maskable interrupt)(NMI)、システム管理割込み(system management interrupt)(SMI)、レガシー外部割込み(legacy external interrupt)(extINT)などを含んでもよい。これらの割込みは、他のAPIC状態の一部として処理されてもよい。一実施形態では、割込みメッセージはまた、各割込みに対するトリガモード(レベル又はエッジ)を含んでもよい。TMRは、どのトリガモードを割込みに適用するかの指示を格納してもよい。例えば、エッジによりトリガされる割込みは、TMRにおけるバイナリ0によって表されてもよく、レベルによりトリガされる割込みは、バイナリ1によって表されてもよい。他の実施形態では、エッジによりトリガされる割込みだけがgAPICにおいてサポートされてもよく、TMRは排除されてもよい。
【0089】
固定の割込みでは、ゲスト割込み制御ユニット34Aは、割込み要求がプロセッサに送達されるべきであるかどうかを判定するために割込み要求及びイン・サービス割込みに優先順位をつけるように構成されてもよい。一般に、最高優先度の割込み要求が最高優先度のイン・サービス割込みよりも高い優先度である(割込みに対応する割込みハンドラを実行するためにプロセッサがそのソフトウェア実行を割込みされた場合に割込みがイン・サービスである)場合、ゲスト割込み制御ユニット34Aは、要求された割込みを送達するように構成されてもよい。加えて、TPRは、vCPUによって受付けられる最低優先度レベルの割込みを確立するためにソフトウェアによってプログラムされてもよい。ゲスト割込み制御ユニット34Aは、それが最高優先度のイン・サービス割込みよりも高い優先度であり且つTPRにおいて示された優先度よりも高い優先度である場合に、最高優先度の割込み要求を送達するように構成されてもよい。
【0090】
vCPUが割込みを取り入れるとき、プロセッサは、gAPICへの割込み通知コマンドで応答してもよい。ゲスト割込み制御ユニット34Aは、IRR70からの最高優先度の割込み要求を除去し、割込みをイン・サービスとしてISRにログ記録するように構成されてもよい。ISRにおける割込みに対応するイン・サービス指示の位置は、割込みの割込みベクトルに対応してもよい。プロセッサ30Aは、割込みをサービスするために割込みサービスルーチン(又は複数のルーチン)を実行してもよい。割込みサービスルーチンは、割込みサービスが完了することを信号送信するためにgAPICへの割込みの終わり(EOI)コマンドで終わってもよい。ゲスト割込み制御ユニット34Aは、EOIコマンドに応答してISRからの最高優先度のイン・サービス割込みを除去するように構成されてもよい。EOIコマンドを行うときに、マイクロコードは、ISRビット#N(この場合、Nは最高優先度のイン・サービス割込みである)をクリアしてもよい。TMRのビット#Nが設定される場合、マイクロコードは、VMM18がレベルに敏感な割込み挙動をエミュレートすることを可能にするためにVMExitであってもよい。他の実施形態では、ISRの更新はVMM18によって管理されてもよい。
【0091】
前述のように、IRR、ISR、及びTMRのそれぞれは、gAPICによってサポートされる各割込みベクトルに対応する場所を含む。例証された実施形態では、ベクトル0〜255がサポートされる。割込みベクトルナンバーはまた、他の割込みとのその相対的な優先度を示してもよい(例えば、より高いベクトルナンバーはより低いベクトルナンバーよりも高い優先度であり、又は他の実施形態ではこの逆である)。各割込みベクトルに対して、IRRは、該割込みベクトルでの割込みが要求されるか否かを示す割込み要求ビットを格納する。例えば、指示は、設定されたときに要求を示し且つクリアされたときに要求なしを示すビットであってもよい。同様に、各割込みベクトルに対して、ISRは、該割込みベクトルに対する割込みがイン・サービスであるか否かを示すイン・サービスビット(例えば、設定されたときにイン・サービス割込みを示し、クリアされたときにイン・サービス割込みなしを示す)を格納する。各割込みベクトルに対して、TMRはトリガモードを格納する。IRR、ISR、及びTMRのそれぞれに対して、レジスタにおけるビット位置は、割込みに対応する割込みベクトルナンバーに等しい。例証された実施形態では256個の割込みベクトルがサポートされるが、他の実施形態ではより多い又は少ない割込みベクトル及び/又はより多い又は少ない優先度レベルグループがサポートされてもよいことに留意されたい。他のAPIC状態は、内部的に生成される割込み、タイマ、ローカルベクトルテーブルなどを含んでもよい。
【0092】
一実施形態では、gAPIC状態エントリ90におけるIRR、ISR、及び/又はTMRのビットは、1バイトにつき8ビットとして配置されなくてもよい。特定のIRR、ISR、又はTMRビットへの容易なアドレス指定を促進するために、ビットは、より分散された状態で格納されてもよい(例えば、1バイトにつき2ビット、1バイトにつき1ビットなど)。
【0093】
次に図6に移ると、デバイステーブル62、割込み再マッピング・テーブル64、及びAPIC IDテーブル60A〜60Bの一実施形態のブロック図と、テーブルを用いるgAPIC状態エントリ90の位置付けが示される。
【0094】
デバイス割込みでは、割込みから生じる周辺デバイスのバス/デバイス/機能(BDF(登録商標))は、デバイステーブル62へのインデックスとして用いられてもよい。デバイステーブル62のベースアドレスは、IOMMU40に格納されてもよく、1つのコンピュータ・システム5につき1つのデバイステーブル62(又はシステムに複数のIOMMUが含まれる場合に1つのIOMMU40につき1つのデバイステーブル52)が存在してもよい。BDF(登録商標)に応答して選択されたデバイステーブルエントリは、割込み再マッピング・テーブル64のベースアドレスである割込み再マッピング・テーブルポインタ(IRTP)を含む。一実施形態では、システム5における1つのゲストにつき1つの割込み再マッピング・テーブル64が存在してもよい。加えて、デバイステーブルエントリは、APIC IDテーブルポインタ(AIDTP)を含んでもよく、これは物理APIC IDテーブル60Aのベースアドレスであってもよい。他の実施形態では、デバイス割込みに対して論理APIC IDがサポートされてもよく、デバイステーブル62に2つのAIDTPフィールドが存在してもよい(一方は論理APIC IDテーブル60Bに対するものであり、他方は物理APIC IDテーブル60Aに対するものである)。一実施形態では、コンピュータ・システム5における1つのゲストにつき1つの論理APIC IDテーブル60Bと1つの物理APIC IDテーブル60Aが存在してもよい。
【0095】
割込みリダイレクト・テーブル64へのインデックスは、割込みのための割込み識別子である。割込み識別子は、割込みベクトルを含んでもよく、且つまた、物理又は論理のいずれかの送達モード(delivery mode)(Delmode)を含んでもよい。選択されたエントリは、新しいベクトル及び宛先ID(DestID)を含んでもよい。加えて、選択されたエントリは、前述のゲスト/ホスト(G/H)フィールドを含んでもよい。
【0096】
宛先IDは、物理APIC IDテーブル60Aへのインデックスであってもよく、選択されたエントリは、gAPIC状態エントリ90へのgAPIC状態ポインタを含んでもよい。加えて、選択されたエントリは、vCPUに対するIR指示を含んでもよい。
【0097】
IPIでは、対象vCPUは、論理APIC ID又は物理APIC IDによって識別されてもよい。物理APIC IDでは、IDは、(そのアドレスがVMCBからゲスト割込み制御ユニット34A〜34Bにロードされる)物理APIC IDテーブル60Aへのインデックスとして用いられてもよい。gAPIC状態ポインタ及びIRフィールドは、したがって、物理IPIのためにアクセスされてもよい。
【0098】
IPIが論理APIC IDを有する場合、論理APIC IDは、論理APIC IDテーブル60Bへのインデックスとして用いられてもよい。論理APIC IDの最上位部分はクラスタを識別してもよい。したがって、テーブルはクラスタに再分割され、そのそれぞれは、クラスタの各論理メンバに対する1つ又は複数のエントリを含んでもよい。クラスタにおけるメンバの数は、モードに応じて変化してもよい(例えば、x1 APICフラットモードは、1クラスタにつき8個までのメンバを含んでもよく、x1 APICクラスタモードは、1クラスタにつき4個までのメンバを含んでもよく、x2 APICモードは、16個までのクラスタメンバを含んでもよい。論理APIC IDテーブル60Bは、任意のモードを取り扱うようにサイズ設定されてもよく、そのため、この実施形態での各再分割クラスタは16個のメンバを含んでもよい。
【0099】
図6で例証されるように、論理APIC IDテーブル60Bにおける各エントリは、対応するクラスタメンバを該クラスタメンバの物理APIC IDにマッピングしてもよい。論理APIC IDテーブル60Bからの物理APIC ID出力は、物理APIC IDテーブル60Aへのインデックスとして用いられてもよく、これは、vCPUに対するgAPIC状態ポインタ及びIRフィールドを供給してもよい。
【0100】
次に図7に移ると、周辺デバイスからの割込みメッセージの受信に応答したデバイス割込みマネージャ38の一実施形態の動作を例証するフローチャートが示される。ブロックは理解を容易にするために特定の順序で示されるが、他の順序が用いられてもよい。ブロックは、デバイス割込みマネージャ38において組合せ論理で並列に行われてもよい。ブロック、ブロックの組合せ、及び/又はフローチャートは、複数のクロックサイクルにわたってパイプラインされてもよい。一般に、デバイス割込みマネージャ38は、図7で例証される動作を実装するように構成されてもよい。
【0101】
デバイス割込みマネージャ38は、BDF(登録商標)及び周辺デバイスから受信される割込み情報に応答してデバイステーブル62及び割込み再マッピング・テーブル64にアクセスしてもよい。デバイス割込みマネージャ38は、割込み再マッピング・テーブル64からG/H指示を受信してもよく、割込みがホストに対するものである場合(決定ブロック100、「yes」分岐)、デバイス割込みマネージャ38は、(再マッピングされる可能性がある)宛先ID及びベクトルを伴う割込みメッセージをAPIC32A〜32Bに送信してもよい(ブロック108)。
【0102】
デバイス割込みがG/H指示に従ってゲストに対するものである場合(決定ブロック100、「no」分岐)、デバイス割込みマネージャ38は、ゲスト/vCPUに対するgAPIC状態エントリに割込みを記録してもよい。デバイス割込みに対する論理APIC IDをサポートする幾つかの実施形態では、デバイス割込みマネージャ38は、論理APIC IDテーブル60Bを通じて論理APIC IDを物理APIC IDに変換してもよい(ブロック102)。
【0103】
デバイス割込みマネージャ38は、デバイステーブル62からのAIDTP及びデバイス割込みに対する物理APIC IDを用いて物理APIC IDテーブル60AからgAPIC状態エントリポインタを判定するように構成されてもよい(ブロック110)。デバイス割込みマネージャ38は、gAPIC状態エントリ90において表されるIRRにおける割込みベクトルに対応するビットを設定するように構成されてもよい(ブロック112)。加えて、デバイス割込みマネージャ38は、物理APIC IDテーブル60AからのIR指示を用いて、割込みの対象にされたvCPUが走っているかどうかを判定してもよい(決定ブロック104)。vCPUが走っていない場合(決定ブロック104、「no」分岐)、デバイス割込みマネージャ38は、VMM18に対するログメッセージを、例えばイベントキューに記録してもよい(ブロック106)。VMM18は、その後、ログメッセージを処理してvCPUをスケジュール設定してもよい。他の実施形態は、走っていないvCPUに対する割込みの受取りを他の方法で通信してもよい。vCPUが走っている場合(決定ブロック104、「yes」分岐)、vCPUを走らせているプロセッサ30A〜30Bにおけるゲスト割込み制御ユニット34A〜34Bは、ウォッチ領域機構を用いてIRRビットの更新を検出してもよい(ブロック112)。別の実施形態では、デバイス割込みマネージャ38は、ゲスト割込みの受取りを示すためにプロセッサ30A〜30Bにゲスト割込み制御メッセージを送信してもよい(ブロック116)。
【0104】
物理的割込みは、ブロードキャストであってもよく、又は単一の宛先であってもよい。物理的割込みがブロードキャストである場合(決定ブロック114、「yes」分岐)、デバイス割込みマネージャ38は、ゲストの仮想マシンにおける各宛先(例えば各vCPU)に対してブロック110、112、104、106、及び116を繰り返すように構成されてもよい。代替的に、ブロードキャストである物理的割込みは、VMM18にアクセス可能なデータ構造(例えばイベントキュー)に割込みをログ記録することでデバイス割込みマネージャ38によって処理されてもよい。デバイス割込みマネージャ38はまた、VMM18にイベントを知らせるためにVMM18に信号送信するように構成されてもよい(例えば、プロセッサ30A〜30Bのうちの1つの上の仮想マシンからの終了を引き起こす)。代替的に、デバイス割込みマネージャ38は、VMM18に周期的にのみ(例えば、Nミリ秒おきに、及び/又はイベントキューにおける高いウォーターマークで)信号送信してもよく、VMM18は、信号送信がサポートする可能性があるよりも迅速に任意のイベントをサービスするために同様に周期的にイベントキューをチェックしてもよい。一実施形態では、イベントキューは、デバイス割込みマネージャ38の代わりにIOMMU40によって管理されてもよい。論理割込みをマルチキャストして、割込みの論理APIC IDのベクトル部分における各宛先に対してブロック102、110、112、104、106、及び116を繰り返すために、類似した機構が実装されてもよい。
【0105】
図8〜図11は、コンピュータ・システム5における種々の命令及び/又は他のイベントに応答したプロセッサ30A〜30B(及びより詳細にはゲスト割込み制御ユニット34A〜34B)の一実施形態の動作を例証するフローチャートである。ゲスト割込み制御ユニット34A〜34Bは、各フローチャートで例証される動作を実装するように構成されてもよい。既述のように、ゲスト割込み制御ユニット34A〜34Bのうちの幾つか又はすべては、マイクロコードに実装されてもよい。こうした実施形態では、ゲスト割込み制御ユニット34A〜34Bは、プロセッサにおける実行のためにマイクロコードをディスパッチすることによって動作を実装するように構成されてもよい。ブロックは、理解を容易にするためにフローチャートに特定の順序で示されるが、他の順序が用いられてもよい。ブロックは、ゲスト割込み制御ユニット34A〜34Bにおいて組合せ論理で並列に行われてもよい。ブロック、ブロックの組合せ、及び/又はフローチャートは、概して複数のクロックサイクルにわたってパイプラインされてもよい。
【0106】
図8は、一実施形態に関するVMRUN命令を実行するプロセッサに応答したプロセッサ30A〜30Bにおけるゲスト割込み制御ユニット34A〜34Bの動作を例証する。ゲスト割込み制御ユニットは、プロセッサにおけるAPICアクセスに対するトラップ/フォールト動作をイネーブルにしてもよい(ブロック120)。プロセッサハードウェアは、APICアクセスをこの実施形態ではvCPUに対するgAPIC状態エントリ90へのメモリアクセスに変換するように構成されてもよく、又はAPICアクセスは、マイクロコードに実装されてもよい。gAPICアクセスのうちの多くは、必要であればVMMが任意の副作用をエミュレートすることを可能にするためにリタイア時にトラップされてもよい。しかしながら、或る動作はgAPIC状態への回復不能な変化をもたらす可能性があり、こうしたアクセスは、フォールトされVMMで行われてもよい。一実施形態では、ゲスト割込み状態は、(例えば、vCPUが走っていなかった時間中の割込みの送達を検出するために)再評価されてもよい。図10の動作は、例えば、VMRUN命令の一部として実装されてもよい。
【0107】
ウォッチ領域動作が実装される場合、ゲスト割込み制御ユニットは、gAPIC状態エントリ90におけるIRRビットにわたるウォッチ領域をイネーブルにしてもよい(ブロック122)。例えば、ゲスト割込み制御ユニットは、VMCB22からのgAPIC状態エントリポインタを用いて、IRRビットをキャッシュにカバーするgAPIC状態エントリ90における1つ又は複数のキャッシュブロックを読み出してもよく、且つキャッシュブロックへの更新の監視を始めてもよい。他の実施形態は、vCPUに対するゲスト割込みが受信されていることを信号送信するためにゲスト割込み制御メッセージを実装してもよく、ウォッチ領域は実装されなくてもよい。
【0108】
プロセッサは、VMRUN命令に応答して行われる種々の他の処理を行ってもよい(ブロック124)。例えば、VMCB22からロードされる種々のプロセッサ状態がロードされてもよく、プロセッサ状態がVMM状態セーブ領域などに保存されてもよい。ブロック124の動作は、幾つかの実施形態ではブロック120及び122の前に、後に、及び/又はインターリーブして行われてもよい。
【0109】
図9は、一実施形態に関するゲストからのVMExitに応答した動作を例証する。ゲスト割込み制御ユニットは、APICアクセスに対するトラップ/フォールト挙動をディスエーブルにしてもよい(ブロック126)。加えて、vCPUに対して受信されている割込みを検出するのにウォッチ領域動作が用いられる場合、ウォッチ領域はディスエーブルにされてもよく(ブロック128)、プロセッサは、他のVMExit処理(例えば、VMCB22に状態を保存すること、VMM18状態を復元することなど)を続けてもよい(ブロック130)。ブロック130の動作は、幾つかの実施形態ではブロック126及び128の前に、後に、及び/又はインターリーブして行われてもよい。
【0110】
ここで図10に移ると、プロセッサ上で実行するvCPUに対するゲスト割込みを検出するプロセッサに応答したゲスト割込み制御ユニットの一実施形態の動作を例証するフローチャートが示される。ゲスト割込みは、ウォッチ領域における更新を検出すること、ゲスト割込み制御メッセージを受信することなどの種々の方法で検出されてもよい。
【0111】
ゲスト割込み制御ユニットは、vCPUに対するgAPIC状態エントリ90からIRR及びISRデータコンテンツを読み出してもよい(ブロック132)。ゲストTPRがプロセッサに実装されない場合、TPRは同様に読み出されてもよい。ゲスト割込み制御ユニットは、イン・サービスではないIRRに記録される最高優先度の割込みを、vCPUにおける現在送達される割込み及び現在のTPRと比較してもよい(ブロック134)。最高優先度の割込みがTPR及び最高優先度のイン・サービス割込みよりも高い優先度である場合(決定ブロック136、「yes」分岐)、ゲスト割込み制御ユニットは、新しいより高い優先度の割込みをvCPUに送達してもよい(ブロック138)。割込みをゲストに投入するための機構は、種々の実施形態において変化してもよい。既述のように、プロセッサは、実行中にゲストに割り込むために、ゲスト割込みをキューに入れるためのハードウェアを含んでもよい。ゲスト割込み制御ユニットは、こうした実施形態では、より高い優先度の割込みに関する情報をハードウェアにロードしてもよい。
【0112】
図10の動作をマイクロコードに実装するゲスト割込み制御ユニットの実施形態では、ゲスト割込みの検出は、マイクロコードへのトラップを引き起こす可能性がある。トラップは、この場合、トラップされる命令に直接関係していなくてもよい。しかしながら、トラップは、マイクロコードが実行し且つ割込みを取り込むことを可能にしてもよい。マイクロコードは、トラップに応答して図10で例証される動作を実装するために実行されてもよい。
【0113】
図11は、ゲスト割込み制御ユニットを含むプロセッサ上のvCPUにおける命令実行のためのゲスト割込み制御ユニットの一実施形態の動作を例証するフローチャートである。命令がAPICアクセスではない場合(決定ブロック140、「no」分岐)又はAPICアクセスであって(決定ブロック140、「yes」分岐)プロセッサがゲストを実行しない場合(すなわちプロセッサがホストを実行している−決定ブロック142、「no」分岐)、ゲスト割込み制御ユニットは、アクションを起こさなくてもよく、命令は普通に実行されてもよい(ブロック144)。これに関連して、普通に実行することは、ゲスト割込み制御ユニットからの干渉なしに実行することを指してもよい。命令は、ゲストにおける横取り構成を介して依然として横取りされてもよく、例外などを経験してもよい。
【0114】
命令がAPICアクセスであり(決定ブロック140、「yes」分岐)且つゲストで実行される状態にある場合(決定ブロック142、「yes」分岐)、ゲスト割込み制御ユニットは、アクセスが加速されたアクセスであるかどうかを判定してもよい(決定ブロック146)。加速されたアクセスは、アクセスによって引き起こされる場合がある任意の副作用を含む、ゲスト割込み制御ユニットによって実装されるアクセスであってもよい。一実施形態では、アクセスは、任意の副作用を含むマイクロコードに実装されてもよい。アクセスが加速されたアクセスではない場合、ゲスト割込み制御ユニットは、命令がトラップされる(フォールトされない)場合にgAPIC状態エントリへのアクセスを行ってもよい(ブロック148)。前述のように、ほとんどの命令はトラップされてもよい。フォールトされる命令は、リタイアが許される場合に回復不能な状態変化を引き起こす命令であってもよい。例えば、割込み状態がこれらの命令によって上書きされる可能性があるので、IRR、ISR、及び随意的にTMRへの書込みがフォールトされてもよい。加えて、一実施形態では、現在のカウントレジスタは集積回路66に供給されるクロックに従って動作する自由に走るカウンタであるため、現在のカウントレジスタへのアクセスは、エミュレーションのためにフォールトされてもよい。仮想化のオーバーヘッドは、エミュレートされない場合にカウンタにおいて検出可能であってもよい。他のアクセスがトラップされてもよい。他の実施形態は、トラップされる命令及びフォールトされる命令とは異なる描写をする可能性がある。
【0115】
VMM18が動作の1つ又は複数の副作用をエミュレートする場合(決定ブロック150、「yes」分岐)、ゲスト割込み制御ユニットは、VMM18にVMExitしてもよい(ブロック152)。幾つかのアクセスは、副作用(例えば、ほとんどの読出し動作)を有さない可能性がある。書込み動作及び幾つかの読出し動作は、副作用を有する可能性があり(例えば、書込みに応答して期待されるAPICの動作)、これらの副作用はVMM18にエミュレートされてもよい。これに関連して、副作用は、状態(書込みに関して)又は対象レジスタ(読出しに関して)を更新する動作以外の任意の動作であってもよい。VMM18によってエミュレートされる副作用が存在しない場合(決定ブロック150、「no」分岐)、命令に対する動作が完了してもよい。
【0116】
アクセスが加速される場合(決定ブロック146、「yes」分岐)、ゲスト割込み制御ユニットは、命令によってアクセスされるレジスタに対応するgAPIC状態エントリにおける場所を読み出してもよい又は書き込んでもよい(ブロック154)。加速されるアクセスの組は、実施形態から実施形態へと変化してもよい。一般に、頻繁に起こる可能性がある及び/又は他の方法ではパフォーマンスが決定的に影響する(performance critical)可能性があるアクセスが、加速に対する候補であってもよい。一実施形態では、ICRL(IPIを引き起こす可能性がある)、TPR、及びEOIレジスタへのアクセスが加速されてもよい。アクセスがTPR又はEOIへのものである又はアクセスがICRLへのものであるがIPIを引き起こさない場合(決定ブロック156、「no」分岐)、ゲスト割込み制御ユニットは、任意の他の副作用(もしあるとしたら)を実装してもよく、命令が完了してもよい(ブロック158)。命令がIPIを引き起こす場合(決定ブロック156、「yes」分岐)、ゲスト割込み制御ユニットは、IPIの宛先IDを対象vCPUに対するgAPIC状態ポインタに翻訳するためにAPIC IDテーブル60を用いてもよい(ブロック160)。論理APIC IDテーブル60B及び物理APIC IDテーブル60Aのベースアドレスは、VMCB22から利用可能であってもよく、プロセッサ上で実行するvCPUが呼び出されたときにプロセッサにロードされていてもよい。ゲスト割込み制御ユニットは、IPIを記録するためにgAPIC状態におけるIRRに書き込んでもよい(ブロック162)。割込みが記録されていること及び対象vCPUが走っていることを通信するためにゲスト割込み制御メッセージが用いられる場合、ゲスト割込み制御ユニットは、対象プロセッサにゲスト割込み制御メッセージを送信してもよい(ブロック164)。対象vCPUが走っていない場合(決定ブロック166、「no」分岐)、プロセッサは、VMM18が対象vCPUをスケジュール設定することを可能にするためにVMExitしてもよい(ブロック168)。
【0117】
図7に関する物理的割込みのブロードキャストの上記の説明と類似して、IPIがブロードキャストされる(物理)又は複数の対象を有する(論理)場合、ゲスト割込み制御ユニットは、複数のgAPIC状態エントリを更新することによって複数の対象をサポートしてもよく、又は複数の対象IPIに対するVMM18に出てもよい。
【0118】
図16は、プロセッサ30Aにおけるゲスト割込み制御ユニット38Aにゲスト割込み制御メッセージ(及びゲストIPI)を送達するのに用いられてもよいMSRインターフェースの一実施形態を例証するブロック図である。図16で例証されるのは、ゲスト割込み制御ユニット38A及びMSRユニット212(その両方ともプロセッサ30Aの一部であってもよい)、特権付きコード210、及びAPIC32Aである。ゲスト割込み制御ユニット38Aは、MSRユニット212に結合され、これは、MSR214を含む。MSR214は、ゲスト割込み有効(guest interrupt valid)(GIV)ビットを格納してもよい。他の割込みに関係するデータがMSR214に同様に格納されてもよい。MSRユニット212はAPIC32Aに結合される。
【0119】
したがって、APIC32Aは、ゲスト割込み制御メッセージを受信してもよく、且つ、MSR214に対する更新を送信するように構成されてもよい。更新は、GIVビットを設定してもよい。GIVビットの設定に応答して、ゲスト割込み制御ユニット38Aは、受信したゲスト割込みを処理してもよい(例えば図10に示すように)。GIVビットの設定は、ゲスト割込み制御ユニット38Aにおける回路にゲスト割込みの処理を開始させてもよい。代替的に、GIVビットの設定は、ゲスト割込みの処理を開始するためにゲスト割込み制御ユニット38Aからのマイクロコードの発行を引き起こしてもよい。
【0120】
前述のように、特権付きコード210は、MSRユニット212(MSR214を含む)にアクセスしてもよい。特権付きコード210は、プロセッサ30A上で実行してもよいVMM18並びに他の特権付きコード(例えばホストOSコードなど)を含んでもよい。しかしながら、非特権付きコード及びゲストコードはMSR214にアクセスしなくてもよい。
【0121】
図12〜図14は、前述のハードウェアを用いてゲスト割込み仮想化をサポートするためのVMM18の一実施形態の高レベル動作を例証するフローチャートである。VMM18によって実装される多くの他の動作は、これらのフローチャートでは例証されず、これらの種々の他の動作の一部は、例証された動作とインターリーブされてもよく、及び/又は例証された動作の前及び/又は後に行われてもよい。ブロックは、理解を容易にするためにフローチャートに特定の順序で示されるが、他の順序が用いられてもよい。VMM18は、実行されるときにフローチャートで例証される動作を実施する命令を含んでもよい。
【0122】
図12は、コンピュータ・システム5上での実行のためのゲストの初期化中のVMM18の動作の一実施形態を例証するフローチャートである。すなわち、初期化は、コンピュータ・システム5上でゲストを実行する前に、ゲストに対する仮想マシンを記述するデータ構造をもたらすことを含んでもよい。VMM18は、ゲストにおける各vCPUに対するgAPIC状態を確立してもよい(ブロック170)。gAPIC状態を確立することは、例えば、状態に対するページを割り当てること及び状態に対する最初の値を挿入することを含んでもよい。最初の値は、例えば、APICのリセット状態に対応してもよい。
【0123】
VMM18は、ゲストに対するAPIC IDテーブル60を確立し、各vCPUのAPIC IDに基づいてゲストに対する割り当てられたページへのgAPIC状態エントリポインタをマッピングしてもよい(ブロック172)。VMM18はまた、走っていないことを示すためにIR指示を初期化してもよい。ゲストに割り当てられてもよい任意の周辺デバイスに対して、VMM18は、割込み再マッピング・テーブル64及び物理APIC IDテーブル60Bへのポインタと共にデバイステーブル62をプログラムしてもよい。VMM18は、ゲストに対する割込み再マッピング・テーブル64をプログラムし、且つゲストを示すためにG/Hビットを設定してもよい(ブロック174)。
【0124】
図13は、初期化が完了した後の割込みの仮想化のためにゲストをサポートするVMM18の動作の一実施形態を例証するフローチャートである。VMM18が実行のためにゲストをスケジュール設定する又はゲストのvCPUをスケジュール解除する(deschedules)場合(決定ブロック176、「yes」分岐)、VMM18は、走っている(ゲストスケジュール設定される)又は走っていない(ゲストスケジュール解除される)ことを示すために該vCPUに対応する物理APIC IDテーブル60AのエントリにおけるIRフィールドを更新してもよい(ブロック178)。APICアクセスに対するVMExitが検出される場合(決定ブロック180、「yes」分岐)、VMM18は、gAPIC状態に基づいてAPICアクセスをエミュレートしてもよい(ブロック182)。走っていないvCPUを対象にした割込みが受信されていることを示すIOMMU40からのログエントリをVMM18が検出する場合(決定ブロック184、「yes」分岐)、VMM18は、割込みを処理するべくスケジューリングするために、対象vCPUに優先順位をつけてもよい(ブロック186)。
【0125】
図14は、システムからゲストを削除するVMM18の一実施形態の動作を例証するフローチャートである。VMM18は、任意の周辺デバイスのゲスト割り当てを除去するためにデバイステーブル62及び割込み再マッピング・テーブル64を更新してもよい(ブロック188)。VMM18はまた、ゲストのgAPIC状態エントリ90及びAPIC IDテーブル60を削除してもよい(ブロック190)。
【0126】
次に図15に移ると、コンピュータ可読記憶媒体200のブロック図が示される。一般的に言えば、コンピュータ可読記憶媒体は、コンピュータに命令及び/又はデータを提供するために、使用中にコンピュータがアクセス可能な任意の記憶媒体を含んでもよい。例えば、コンピュータ可読記憶媒体は、磁気媒体又は光学媒体、例えば、ディスク(固定又はリムーバブル)、テープ、CD−ROM、又はDVD−ROM、CD−R、CD−RW、DVD−R、DVD−RW、HDDVD、及び/又はブルーレイディスクのような記憶媒体を含んでもよい。記憶媒体は、RAM(例えば、シンクロナス動的RAM(SDRAM)、Rambus DRAM(RDRAM)、静的RAM(SRAM)など)、ROM、ユニバーサル・シリアル・バス(USB)インターフェース又はあらゆる他のインターフェースのような周辺インターフェースを介してアクセス可能なフラッシュメモリ、不揮発性メモリ(例えばフラッシュメモリ)などのような揮発性又は不揮発性メモリ媒体をさらに含んでもよい。記憶媒体は、微小電気機械システム(MEMS)、並びにネットワーク及び/又は無線リンクのような通信媒体を介してアクセス可能な記憶媒体を含んでもよい。図15のコンピュータ可読記憶媒体200は、VMM18を格納してもよく、これは、図12〜図14のフローチャートで例証される動作及び/又はこの説明におけるVMM18に割り当てられる任意の他の機能のすべて又は一部を実装してもよい。コンピュータ可読記憶媒体200は、マイクロコード202又は他の命令及び/又はデータ(例えば、Verilog又は幾つかの他のハードウェア記述言語)を格納してもよく、これは、マイクロコードに実装されるゲスト割込み制御ユニット34Aの部分に関する図8〜図13のフローチャートで例証される動作及び/又はこの説明におけるマイクロコードに割り当てられる任意の他の機能のすべて又は一部を実装してもよい。一般に、コンピュータ可読記憶媒体200は、実行されるときに、図8〜図13に示されたフローチャートの一部又はすべてを実施する命令の任意のセットを格納してもよい。幾つかの実施形態では、プロセッサ30Aに関して本明細書で説明される動作の一部又はすべて(及びより詳細にはゲスト割込み制御ユニット34A)は、ハードウェアに実装されてもよく、同様にIOMMU40(及びより詳細にはデバイス割込みマネージャ38)はハードウェアに実装されてもよい。コンピュータ可読記憶媒体200は、こうしたハードウェアの任意の所望の表現を格納してもよい。例えば、表現は、Verilog又はVHDLのような高水準設計言語(HDL)におけるハードウェア機能の動作レベル記述又はレジスタ伝送レベル(register−transfer level)(RTL)記述であってもよい。記述は、合成ライブラリからのゲートのリストを含むネットリストをもたらすために、記述を合成してもよい合成ツールによって読み出されてもよい。ネットリストは、ゲートのセットを備え、これはまた、システム10を備えるハードウェアの機能を表す。ネットリストは、次いで、マスクに適用されるべき幾何学的形状を記述するデータセットをもたらすために配置されルーティングされてもよい。マスクは、次いで、システム10に対応する1つ又は複数の半導体回路をもたらすために、種々の半導体製作ステップで用いられてもよい。代替的に、コンピュータによりアクセス可能な記憶媒体300上の表現は、必要に応じてネットリスト(合成ライブラリ有り又は無し)であってもよいし又はデータセットであってもよい。命令は、例えば、そのように構成されるときに、製作設備が図8〜図13のフローチャートで説明される動作の一部又はすべて及び/又はプロセッサ30A、ゲスト割込み制御ユニット34A、IOMMU40、及び/又はデバイス割込みマネージャ38に関して本明細書で説明される動作の一部又はすべてを実装する集積回路をもたらすように適合されるマスクワークの発生を通じて回路製作設備を構成するのに用いられてもよい。搬送媒体は、コンピュータによりアクセス可能な記憶媒体並びに配線又は無線伝送のような伝送媒体を含んでもよい。
【0127】
上記の開示が十分に認識されれば、当業者には多くの変形及び修正が明らかとなるであろう。以下の請求項は、すべてのこうした変形及び修正を包含するように解釈されることを意図される。

【特許請求の範囲】
【請求項1】
ゲストに割り当てられたデバイスからの割込みを受信するように構成されるデバイス割込みマネージャであって、
前記デバイス割込みマネージャが、前記割込みを記憶域に記録するための動作を送信するように構成され、
前記記憶域が前記ゲスト内の仮想プロセッサに関連付けられ、
前記仮想プロセッサが前記割込みの対象にされる、デバイス割込みマネージャ。
【請求項2】
1つ又は複数のテーブルに応答して前記仮想プロセッサに対応する前記記憶域を識別するようにさらに構成され、
前記1つ又は複数のテーブルにおけるエントリが、前記割込みに関連付けられた割込みコントローラ識別子に応答して選択される、請求項1に記載のデバイス割込みマネージャ。
【請求項3】
前記割込みコントローラ識別子が物理的割込みコントローラ識別子である、請求項2に記載のデバイス割込みマネージャ。
【請求項4】
前記デバイスによって送信される割込みベクトルを前記1つ又は複数のテーブルにおける前記エントリを識別するのに用いられる前記割込みコントローラ識別子に再マッピングするようにさらに構成される、請求項2に記載のデバイス割込みマネージャ。
【請求項5】
前記エントリにおける前記指示に応答して前記仮想プロセッサがハードウェア・プロセッサ上でアクティブであるか否かを判定するようにさらに構成され、
前記デバイス割込みマネージャが、前記仮想プロセッサが前記ハードウェア・プロセッサ上でアクティブであることの検出に応答して前記ハードウェア・プロセッサに向けられた割込みメッセージを送信するように構成される、請求項2に記載のデバイス割込みマネージャ。
【請求項6】
前記仮想プロセッサが前記ハードウェア・プロセッサ上で走っていないことの検出に応答して前記仮想プロセッサをスケジュール設定する要求を記録するために前記システムメモリに書込み動作を送信するようにさらに構成される、請求項5に記載のデバイス割込みマネージャ。
【請求項7】
方法であって、
デバイス割込みマネージャが割込みを記憶域に記録するステップを含み、
前記記憶域がゲストに関連付けられた仮想プロセッサに関連付けられ、
前記デバイスが前記ゲストに割り当てられ、
前記仮想プロセッサが前記割込みの対象にされる、方法。
【請求項8】
前記デバイス割込みマネージャが、割込みコントローラ識別子を仮想プロセッサにマッピングするようにプログラムされる1つ又は複数のテーブルにおけるエントリを選択するステップであり、割込みに関連付けられる割込みコントローラ識別子に応答した、デバイス割込みマネージャによるエントリの選択ステップと、
前記デバイス割込みマネージャが、前記エントリに格納されるアドレスを介して前記記憶域を識別するステップと、
をさらに含む、請求項7に記載の方法。
【請求項9】
前記割込みコントローラ識別子が物理的割込みコントローラ識別子である、請求項8に記載の方法。
【請求項10】
前記デバイス割込みマネージャが、前記デバイスによって送信される割込みベクトルを、前記エントリを識別するのに用いられる前記割込みコントローラ識別子に再マッピングするステップをさらに含む、請求項8に記載の方法。
【請求項11】
前記エントリに格納されるデータに応答して、前記仮想プロセッサがハードウェア・プロセッサ上でアクティブであることを前記デバイス割込みマネージャが判定するステップと、
前記仮想プロセッサが前記ハードウェア・プロセッサ上でアクティブであることの検出に応答して、前記デバイス割込みマネージャが前記ハードウェア・プロセッサに向けられた割込みメッセージを送信するステップと、
をさらに含む、請求項8に記載の方法。
【請求項12】
前記エントリに格納されるデータに応答して、前記仮想プロセッサがハードウェア・プロセッサ上でアクティブではないことを前記デバイス割込みマネージャが判定するステップと、
前記仮想プロセッサが前記ハードウェア・プロセッサ上でアクティブではないことの検出に応答して、前記仮想プロセッサをスケジュール設定する要求を記録するために前記デバイス割込みマネージャが前記システムメモリに書込み動作を送信するステップと、
をさらに含む、請求項8に記載の方法。
【請求項13】
コンピュータ・システム上で実行可能なプログラムによって動作するデータ構造を備えるコンピュータ可読記憶媒体であって、
集積回路を製作するプロセスの一部を行うために前記データ構造上で動作する前記プログラムが、前記データ構造によって記述される回路を含み、
前記データ構造で記述される前記回路が、ゲストに割り当てられたデバイスからの割込みを受信するように構成されるデバイス割込みマネージャを含み、
前記デバイス割込みマネージャが、前記割込みを記憶域に記録するための動作を送信するように構成され、
前記記憶域が前記ゲスト内の仮想プロセッサに関連付けられ、
前記仮想プロセッサが前記割込みの対象にされる、コンピュータ可読記憶媒体。
【請求項14】
前記デバイス割込みマネージャが、1つ又は複数のテーブルに応答して前記仮想プロセッサに対応する前記記憶域を識別するようにさらに構成され、
前記1つ又は複数のテーブルにおけるエントリが、前記割込みに関連付けられた割込みコントローラ識別子に応答して選択される、請求項13に記載のコンピュータ可読記憶媒体。
【請求項15】
前記デバイス割込みマネージャが、前記仮想プロセッサが実行のためにハードウェア・プロセッサに割り当てられるか否かを判定するようにさらに構成され、
前記デバイス割込みマネージャが、前記仮想プロセッサが前記ハードウェア・プロセッサに割り当てられることの検出に応答して前記ハードウェア・プロセッサに向けられた割込みメッセージを送信するように構成される、請求項13に記載のコンピュータ可読記憶媒体。
【請求項16】
コンピュータ上で実行されるときに複数の命令を格納するコンピュータ可読記憶媒体であって、
仮想マシンにおける仮想プロセッサに対応する記憶域に割込みが記録されていることを検出する命令であり、前記割込みが仮想マシンに割り当てられたデバイスによって生じる、検出する命令と、
前記割込みをサービスするために前記仮想プロセッサに対して記録されている前記割込みに応答して、前記コンピュータにおけるハードウェア・プロセッサ上での実行のために前記仮想プロセッサをスケジュール設定する命令と、
を含むコンピュータ可読記憶媒体。
【請求項17】
実行時に割込みが記録されていることを検出する前記命令が、前記コンピュータにおいて検出されるイベントのログを格納する別の記憶域を実行時に読み出す命令を含み、
前記イベントのログが、前記コンピュータ・システムにおけるデバイス割込みマネージャによって更新され、
前記デバイス割込みマネージャが、前記割込みを受信し且つ前記割込みが前記仮想プロセッサを対象とすることを判定するように構成される、請求項16に記載のコンピュータ可読記憶媒体。
【請求項18】
実行時に前記仮想プロセッサをスケジュール設定する前記命令が、前記仮想プロセッサがアクティブであることを示すために仮想プロセッサへの割込みをマッピングする1つ又は複数のテーブルを実行時に更新する命令を含む、請求項17に記載のコンピュータ可読記憶媒体。
【請求項19】
実行時に前記仮想プロセッサをスケジュール解除し且つ前記仮想プロセッサがアクティブではないことを示すために前記1つ又は複数のテーブルを更新する命令をさらに格納する、請求項18に記載のコンピュータ可読記憶媒体。
【請求項20】
デバイスがゲストに割り当てられる場合に前記1つ又は複数のテーブルにおける前記データを実行時に管理する命令をさらに格納する、請求項19に記載のコンピュータ可読記憶媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate


【公表番号】特表2013−519169(P2013−519169A)
【公表日】平成25年5月23日(2013.5.23)
【国際特許分類】
【出願番号】特願2012−552139(P2012−552139)
【出願日】平成23年2月7日(2011.2.7)
【国際出願番号】PCT/US2011/023942
【国際公開番号】WO2011/097588
【国際公開日】平成23年8月11日(2011.8.11)
【出願人】(591016172)アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド (439)
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED