7

私はKVMのことをやっていて、理解できない質問がいくつかあります.

1> 私たちが知っているように、通常、外部割り込みは VMexit を引き起こし、ハイパーバイザーはゲスト用の場合は仮想割り込みを挿入します。では、どの irq が注入されるのでしょうか (つまり、ゲスト IDT にインデックスを付けるための割り込みベクトルを意味します)? KVM はどのようにしてこれを認識しますか (ホスト IRQ をゲスト仮想 IRQ に関連付ける)?

2> ゲストに割り当てられたデバイスの場合、ハイパーバイザーはその IRQ をゲストに配信します。コードをトレースすると、ホストの IRQ がゲストの IRQ と異なることがわかりました (割り込みベクトルを意味します)。ゲストが使用する割り込みベクトルを KVM がどのように構成するか?

3> VMCS でいくつかのフィールドを設定して、外部割り込みで終了しないように構成すると、物理的な割り込み中に何が起こりますか? CPU は応答割り込みにゲスト IDT を使用しますか? その場合、KVM は CPU をリダイレクトして、ゲスト用に別の IDT を使用できますか (IDTR を変更すると仮定)?

4> ゲスト IDT はどこにありますか? これは、vcpu とレジスタ (IDTR を含む) の初期化中に qemu によって構成されますか?

誰かが私の質問に答えてくれることを心から願っています。私は非常に感謝します。

ありがとう

4

1 に答える 1

3

1- 2-コードはirq_comm.cにあり、非常に複雑です。ゲストベクターの場合、ハイパーバイザーはゲストのPCI構成スペースをトラップして監視します(これは実際にはQEMUで行われます-たとえばkvm_msi_updateを参照してください-ただし、KVMへのシステムコールはデータで更新します)。

3-はい。別のIDTを設定するには、VMCSのIDTRフィールドを変更する必要があります。

4-ゲストIDTはゲストコードによって設定されます。QEMU/KVMは直接関与していません。ゲストIDTRの変更を監視するには、LIDTをトラップするように実行制御を構成する必要があります。

ASPLOS'12からELIを実装しようとしているようですね。オフラインで私に連絡してください(論文の2番目の著者-NA)。

于 2012-06-07T07:56:20.513 に答える