VMのIOのKVM最適化に取り組んでいます。KVMコードを読みました。通常、すべての物理的な割り込みによってVMexitが発生し、KVMに入ります。次に、ホストのIDTが対応する物理割り込みを処理します。私の質問は、KVMがゲストに仮想割り込みを挿入するかどうかをどのように決定するかということです。そして、どのような状況でゲストに仮想割り込みを注入しますか?
ありがとう
kvm のドキュメントでは、仮想割り込みをいつ注入できるかについて説明されています。リンクhttp://os1a.cs.columbia.edu/lxr/source/Documentation/kvm/api.txt
の行番号 905 を参照してください
。構造体 kvm_run 構造により、VM の動作方法をアプリケーションに制御できると思います.cscope を使用して、ソース コード内の文字列 request_interrupt_window を検索します。割り込みを挿入するためにゲストに入るタイミングを kvm がどのように認識するかを理解できます。
乾杯
編集済み
これは、ゲストに割り込みを挿入するホストの一例です。
ゲスト VM でページ フォールトが発生したとします。
これは、仮想割り込みを挿入するホストの一例です。もちろん、そうする方法/理由は他にもたくさんあります。
実際には、すべての命令を実行した後にゲストが VMEXIT を実行するように VMCS を構成できます。これは、MONITOR TRAP FLAG を使用して実行できます。
割り当てられたデバイスの割り込みについて言及していると思います(物理デバイスからゲストに直接転送されないエミュレートされた割り込みまたはvirt-IO割り込みではありません)。割り当てられたデバイスの各 irq に対して、request_threaded_irq が呼び出され、割り込みごとに呼び出される kvm_assigned_dev_thread を登録します。ご覧のとおり、kvm_set_irq が呼び出され、説明したように、割り込みがマスクされている場合にのみ合体が行われます。x86 では、TPR が割り込みの配信を許可しないため、または優先度の高いサービス中の割り込みが原因で、rflags.if、mov-SS によって割り込みをマスクできます。KVM は、ゲストを驚かせないために、アーキテクチャの定義に従う必要があります。