2011-02-01 15 views
0

私の質問は割り込みに関するもので、ゲストがKVMで実行しているときにどのように渡されますか?ゲストが実行中の場合、割り込みはどうなりますか?

kvmがvmentryまたはvmresumeを呼び出すと、ゲストコードの実行が開始されます。外部割込みがタイマー割込みを起こすと、ゲストはvmexitを発生させます。 Vmexitの後にkvmの次の命令が実行されるか、ホスト割り込み呼び出し側が呼び出されます。 kvmの次の命令が呼び出されると、kvmは望みのことを何でもして、適切なホスト割り込みハンドラを呼び出すことができます。

おかげで、IntelのVT-xのオン

+0

これは常にカーネルプロセスで実行されます。なぜなら、ユーザー空間のプロセスや権限はカーネルスペースに何か関係がありますか? – leppie

答えて

1

は、すべての割り込みは、ホストオペレーティングシステムにトラップを引き起こします。割り込みがある場合は、ホストは、決定します:自身のために

  • (その場合、それはおそらくかなりの時間のために予定外に座ってKVMを引き起こし、それを処理します)。または

  • ゲストの場合、割り込みについてKVMに通知します。 KVMは次に、割り込みをゲストに注入します。 (KVMのこの部分はカーネルモードで動作することに注意してください。ただし、これはまだKVMとみなされます)。

どちらの場合でも、ホストオペレーティングシステムが最初に制御を引き継ぎます。

私たちに仮想化をより喜ばせるVT-xへの拡張は、ホストへのトラップ(および関連するパフォーマンスペナルティ)を完全に避けて、特定の割り込みをゲストに直接送信できるかどうかということです。悲しいかな、これはまだカードには載っていないようです。

+0

答えをありがとう。 2つ目のポイントについては、パススルー装置がある場合に可能性があります。ホストはそれを知らないので、ゲスト割り込みハンドラは常に呼び出されます。 – zombie

+0

現在、VT-xではすべての割り込みがホストにトラップされます。ホストは適切な場合にゲストに転送する必要があります。これは実際のパフォーマンス上の問題を引き起こします。残念なことに、VT-xの後の改訂版でインテルが改良してくれることを願っています。 – davidg

+0

Re:提案された改善、割り込みが到着したときにゲストが現在実行されていなかった場合はどうなりますか? – caf

関連する問題