[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [Xen-devel] Fast inter-VM signaling using monitor/mwait
>From: Michael Abd-El-Malek [mailto:mabdelmalek@xxxxxxx] >Sent: 2009年5月5日 22:29 > >On Apr 26, 2009, at 9:04 AM, Tian, Kevin wrote: > >>> From: Michael Abd-El-Malek [mailto:mabdelmalek@xxxxxxx] >>> Sent: 2009年4月24日 5:48 >>> >>> 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 >> >> Maybe the reverse that you need consider those issues to persuade >> the community or else it's like a very limited usage in real world. >> This >> is something to hold the cpu exclusively with unknown time, unless >> you also ensure producer, which writes to monitored address, not >> being scheduled out too, which then further limits the >actual benefit. > >Interrupts will cause the mwait instruction to return. So the same >periodic timer interrupts that are used for VM scheduling will >continue to be useful. The CPU is not held exclusively for unbounded >time. In Xen actual vcpu scheduling happens at the point before resuming back to VM, instead of in timer interrupt ISR. So as long as your monitor/mwait loop in hypercall doesn't exit before update is observed, scheduling won't happen. > >>> 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. >> >> yes, then why do you need monitor/mwait, compared to a simple loop >> checking data directly? :-) > >The simple spin-poll loop prevents the core from going into a low- >energy mode. My motivation in using monitor/mwait is to get the >latency of spin-poll but with the energy efficiency of Xen events >(i.e., the CPU can go to sleep if the VM is waiting for a signal). That's obvious a wrong model to go. There could be other runnable threads with VM. Here it's not "if VM is waiting for a singal", instead it's just "if one thread in VM is waiting for a signal". Thanks Kevin _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |