On Wed, Jun 04, 2014 at 11:01:50PM +0300, Nadav Amit wrote:
> On Jun 4, 2014, at 10:43 PM, Gabriel L. Somlo <[email protected]> wrote:
> 
> My implementation still emulates the instruction as a NOP, but first checks 
> for an exception.

[...] 

> Anyhow, if you want a real mwait emulation, you can write-protect the page of 
> the monitored memory area in the EPT of the other VCPUs and set a callback 
> once a write to the area takes place. You may want the host to cause a 
> spurious wakeup after you do the write-protection, so you will not miss a 
> write of another VCPU to the monitored area. After the spurious wake-up, the 
> VM is likely to issue an additional mwait, using the same monitored 
> cache-line.
> 
> Additional care for DMAs (emulated and paravirtual) might be needed with the 
> assistance of QEMU. The complicated case is dealing with the DMAs of assigned 
> devices due to the lack of support for I/O page-faules.

I took a stab at something like that a while ago:

http://www.contrib.andrew.cmu.edu/~somlo/OSXKVM/kvm-mwait-emu-20140205.patch

with limited success, probably due to my lack of familiarity with
the fine details of the KVM code base... :)

My main interest was to get it working well enough to be useful for
idle loops (which is the only thing I know of that either Linux or
OS X use monitor and mwait for, currently -- so DMA wasn't a huge
priority).

Even if we got it working well enough in the general case (any number
of vcpus, etc) I think it would still suck for idle loops when
compared to simply falling back to HLT (mainly due to all the TLB
shootdowns required to make it work) :)

Thanks,
--Gabriel


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to