5

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

ありがとう

4

2 に答える 2

3

kvm のドキュメントでは、仮想割り込みをいつ注入できるかについて説明されています。リンクhttp://os1a.cs.columbia.edu/lxr/source/Documentation/kvm/api.txt
の行番号 905 を参照してください
。構造体 kvm_run 構造により、VM の動作方法をアプリケーションに制御できると思います.cscope を使用して、ソース コード内の文字列 request_interrupt_window を検索します。割り込みを挿入するためにゲストに入るタイミングを kvm がどのように認識するかを理解できます。

乾杯

編集済み
これは、ゲストに割り込みを挿入するホストの一例です。
ゲスト VM でページ フォールトが発生したとします。

  • これにより VMEXIT が発生します
  • ハイパーバイザー/KVM が VMEXIT を処理
  • VMCS 制御構造を介して VMEXIT の理由を確認し、ページ フォールトがあったことを検出します。
  • ホスト/KVM はメモリの仮想化を担当するため、ページ フォールトが発生したかどうかを確認します。
    • ページが GUEST に割り当てられていないため、HOST カーネルで alloc_page を呼び出し、VMENTRY を実行して GUEST の実行を再開します。
    • または、ゲスト OS によってマッピングが削除されました。この場合、KVM は通信媒体として VMCS 制御構造を使用して、ゲスト カーネルがページ フォールトを処理するようにする仮想割り込み番号 14 を挿入します。

これは、仮想割り込みを挿入するホストの一例です。もちろん、そうする方法/理由は他にもたくさんあります。
実際には、すべての命令を実行した後にゲストが VMEXIT を実行するように VMCS を構成できますこれは、MONITOR TRAP FLAG を使用して実行できます。

于 2012-06-26T11:01:09.913 に答える
1

割り当てられたデバイスの割り込みについて言及していると思います(物理デバイスからゲストに直接転送されないエミュレートされた割り込みまたはvirt-IO割り込みではありません)。割り当てられたデバイスの各 irq に対して、request_threaded_irq が呼び出され、割り込みごとに呼び出される kvm_assigned_dev_thread を登録します。ご覧のとおり、kvm_set_irq が呼び出され、説明したように、割り込みがマスクされている場合にのみ合体が行われます。x86 では、TPR が割り込みの配信を許可しないため、または優先度の高いサービス中の割り込みが原因で、rflags.if、mov-SS によって割り込みをマスクできます。KVM は、ゲストを驚かせないために、アーキテクチャの定義に従う必要があります。

于 2012-06-07T01:14:02.163 に答える