|
|
|
|
|
|
|
|
|
|
xen-devel
Re: [Xen-devel] Fast inter-VM signaling using monitor/mwait
On Apr 21, 2009, at 5:01 AM, Tian, Kevin wrote:
From: Ian Pratt
Sent: 2009年4月21日 11:19
The mwait instruction is privileged. So I added a new hypercall
that
wraps access to the mwait instruction. Thus, my code has a Xen
component (the new hypercall) and a guest kernel component (code for
executing the hypercall and for turning off/on the timer interrupts
around the hypercall). For this code to be merged into Xen, it
would
need to add security checks and check whether the processor supports
such a feature.
I seem to recall that some newer CPUs have an mwait
instruction accessible from ring3, using a different opcode --
you might want to check this out.
How do you deal with atomicity of the monitor and mwait? i.e.
how do you stop the hypervisor pre-empting the VM and using
monitor for its own purposes or letting another guest use it?
That's a true concern. To use monitor/mwait sanely, software is
required
to not add voluntary context switch in between, however to ensure that
atomicity at hypercall level, I'm not sure about overall efficiency
when
multiple VMs are all active...
I'm executing the montior and mwait instructions together in the
hypercall. The hypercall also takes an argument specifying the old
value of the memory location. When the mwait instruction returns, the
hypervisor can check and handle any interrupts. I currently return a
continuation so that the mwait hypercall is rexecuted at the end of
handling interrupts. I haven't really thought about what if the VM
gets scheduled out. These are the kinds of issues that I'd like to
fix if the community wants to add this hypercall. For my benchmarking
purposes, I'm not worrying about this :)
Have you thought about HVM guests as well as PV?
For HVM guest, both vmexit and vmentry clears any address range
monitoring in effect and thus that won't work.
I imagine this would cause the mwait instruction to execute before a
write occurs to the memory address? If so, the guest OS can check
this (by comparing the memory address's value to the previous saved
value), and reexecute the mwait hypercall. Users of mwait already
have to check whether their terminating condition has occurred, since
interrupts cause mwait to return.
Thanks for the feedback,
Mike
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|