2012-05-31 14 views
5

私はVMのIOのKVM最適化に取り組んでいます。私はKVMコードを読んでいます。通常、すべての物理的な割り込みがVMexitを引き起こし、KVMに入ります。次に、ホストのIDTが対応する物理的な割り込みを処理します。私の質問は、ゲストに仮想割り込みを注入するかどうかをKVMが決定する方法です。どのような状況下では、仮想割り込みをゲストに注入しますか?どのようにKVMが物理的な割り込みを処理しますか?

おかげ

答えて

1

私はあなたが割り当てられているデバイスの割り込みを参照してください推測(直接ゲストに物理デバイスから転送されていない割り込みかのvirt-IO割り込みをエミュレートされていません)。 割り当てられたデバイスの各irqに対して、request_threaded_irqが呼び出され、各割り込み時に呼び出されるkvm_assigned_dev_threadが登録されます。あなたが見ることができるように、kvm_set_irqが呼び出され、記述されているように、割り込みがマスクされた場合に起こる唯一の合体が行われます。 x86割り込みでは、割り込みが許可されないTPRまたは優先度の高いサービスの割り込みによって、rflags.if、mov-SSによってマスクされる可能性があります。 KVMは、ゲストを驚かさないために、アーキテクチャの定義に従うことが義務付けられています。

2

kvmのドキュメンテーションでは、これは、バーチャルインターハンドを注入できるときのことです。行番号905
私はそれがVM behave.Useのcscopeのを行い、ソースコード内の文字列request_interrupt_windowの検索方法については、アプリケーションに制御を与え、あなたが理解すると思うのstruct kvm_run構造でHERESにリンクhttp://os1a.cs.columbia.edu/lxr/source/Documentation/kvm/api.txt
外観どのようにkvmがいつinterupt.aを注入するためにゲストに入るかを参照してくださいそれは非常に有用ですapi.txtファイルを通過します。

乾杯ここ
のEDITED

、ゲストにinteruptsを注入するホストの一例。
が、これは

  • ハイパーバイザ/ KVMはVMEXITを扱うVMEXITを引き起こしGUEST VM

    • でページフォルトがなかったと仮定し
    • ITSはVMCS制御構造によるVMEXITの理由を見、そこにあったことを見つけますページ違反。それは、ページが、それはHOSTカーネルにalloc_pageを呼び出していた場合にはGUESTに割り当てられていないため、ページフォルトが
      • を引き起こしたかどうかを確認するよう
      • ホスト/ KVMは、メモリの仮想化を担当してVMENTRYを実行してGUESTの実行を再開します。
      • マッピングがGUEST OSによって削除されました。この場合、KVMはVMCS制御構造を通信媒体として使用して、GU30カーネルにページフォールトを処理させる仮想インターチェンジを挿入します()。

    これは、仮想interuptを挿入ホストの一例です。もちろん、他にもたくさんの方法や理由があります。
    実行後にゲストがVMEXITを実行するようにVMCSを設定することができますすべての指示これはMONITOR TRAP FLAGを使用して実行できます。

  • 関連する問題