Re: [PATCH 08/13] xen/pvticketlock: disable interrupts while blocking

From: Avi Kivity
Date: Wed Sep 07 2011 - 13:42:47 EST


On 09/07/2011 08:17 PM, Jeremy Fitzhardinge wrote:
On 09/07/2011 10:09 AM, Avi Kivity wrote:
> On 09/07/2011 07:52 PM, Don Zickus wrote:
>> >
>> > May I ask how? Detecting a back-to-back NMI?
>>
>> Pretty boring actually. Currently we execute an NMI handler until
>> one of
>> them returns handled. Then we stop. This may cause us to miss an
>> NMI in
>> the case of multiple NMIs at once. Now we are changing it to execute
>> _all_ the handlers to make sure we didn't miss one.
>
> That's going to be pretty bad for kvm - those handlers become a lot
> more expensive since they involve reading MSRs.

How often are you going to get NMIs in a kvm guest?

We'll soon have the perf-based watchdog firing every 60s worth of instructions or so. But if we implement your new kick pvop using NMI then it can be _very_ often.


> Even worse if we start using NMIs as a wakeup for pv spinlocks as
> provided by this patchset.

Hm, I'm interested to know what you're thinking in more detail. Can you
leave an NMI pending before you block in the same way you can with
"sti;halt" with normal interrupts?

Nope. But you can do

if (regs->rip in critical section)
regs->rip = after_halt;

and effectively emulate it. The critical section is something like

critical_section_start:
if (woken_up)
goto critical_section_end;
hlt
critical_section_end:


I was thinking you might want to do something with monitor/mwait to
implement the blocking/kick ops. (Handwave)


monitor/mwait are incredibly expensive to virtualize since they require write-protecting a page, IPIs flying everywhere and flushing tlbs, not to mention my lovely hugepages being broken up mercilessly.

--
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/