On Wed, Jun 04, 2014 at 11:01:50PM +0300, Nadav Amit wrote: > On Jun 4, 2014, at 10:43 PM, Gabriel L. Somlo <gsomlo@xxxxxxxxx> 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html