Virtualizing Interrupts

Virtualizing Interrupts

It seems like there must be some way of virtualizing interrupts without catching them all in the VMM or exiting on every APIC access from the guest...

Let's say I have a single device that I need the VMM to manage and present a virtual device to the guest. I want to catch the physicaldevice's interrupts in the VMM but I don't care about any other device and I would really like to avoid virtualizing the whole APIC just to hide this one interrupt from the guest. When the VMM is done, I want to inject an interrupt for the virtual function into the guest.

Is there any way to catch just this one interrupt in the VMM and let everything else pass through to the guest without exiting?

6 帖子 / 0 全新

Unfortunately the current generation of H/W and VMMs don't yet support this functionality.

Are you interested in the performance benefits of it, or is there a functional problem you are facing?

Virtualized interrupts are not currently supported today.

David Ott

Both, actually. We would like the guest to be able to use their operating system's in-box class drivers without an additional driver for our device. This isn't possible if we have to explicitly coordinate with the code running in the VMM.

We can virtualize more completely but then we incur performance penalties and add complexity in the VMM. I was looking for a way around this should such an option exist...

Best Reply

If this is a PCI-E device you can use VT-D pass-through for the functionality you described. Have you looked at that option?

Yes, it is a PCIe device. VTd is plan B, so it looks like we'll try looking in that direction for awhile.