qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] i386: Allow monitor / mwait cpuid override


From: Eduardo Habkost
Subject: Re: [Qemu-devel] [PATCH] i386: Allow monitor / mwait cpuid override
Date: Mon, 27 Mar 2017 13:33:33 -0300
User-agent: Mutt/1.7.1 (2016-10-04)

On Mon, Mar 27, 2017 at 06:10:43PM +0200, Alexander Graf wrote:
> 
> 
> On 27/03/2017 17:46, Eduardo Habkost wrote:
> > On Mon, Mar 27, 2017 at 04:26:50PM +0200, Alexander Graf wrote:
> > > KVM allows trap and emulate (read: NOP) of the MONITOR and MWAIT
> > > instructions. There is work undergoing to enable actual execution
> > > of these inside of KVM, but nobody really wants to expose the feature
> > > to the guest by default, as it would eat up all of the host CPU.
> > 
> > Isn't this something that should be reported using
> > KVM_GET_EMULATED_CPUID? (QEMU still doesn't know how to use
> > KVM_GET_EMULATED_CPUID, however.)
> 
> Depends how you look at it. In KVM land there are basically 3 ways to deal
> with MONITOR/MWAIT:
> 
>   1) #VMEXIT on every execution, treat them as NOP
>   2) let the guest natively execute them (looks like a busy loop for the
> host, but saves power)
>   3) be smart in KVM about it, add actual emulation and adaptively allow for
> native mwait execution or emulated mwait which means we can run inside host
> context

Which case is going to be enabled when using your patch? Don't
you want to make that configurable?

This looks like configuration that can't be easily represented
using the GET_SUPPORTED_CPUID/KVM_SET_CPUID abstraction, as the
ability to enable the feature can't be represented by a single
bit.

We already have a few cases where we make
kvm_arch_get_supported_cpuid() look at something other than just
GET_SUPPORTED_CPUID return values (most cases are related to
in-kernel irqchip). We can change kvm_arch_get_supported_cpuid()
to look at other flags (like one that would configure mwait
behavior), and decide to report CPUID_EXT_MONITOR on those cases.

Would something like the following make sense?

* Having a "mwait=(none|nop|native|smart)" option, to choose
  mwait behavior
* Making kvm_arch_get_supported_cpuid() return CPUID_EXT_MONITOR
  as supported only if the "mwait" option is not "none".

Then:
* "-cpu ...,monitor=on" would fail, because mwait=none would be
  the default
* "-cpu ...,mwait=none,monitor=on" would fail
* "-cpu ...,mwait=(nop|native|smart)" would fail if
  host KVM doesn't report the corresponding mwait behavior as
  supported
* "-cpu ...,mwait=(nop|native|smart),monitor=on" would work
* "-cpu ...,mwait=(nop|native|smart)" would also work, and
  probably should enable CPUID_EXT_MONITOR flag by default

We could still implement "monitor=force" for debugging, but I
think we need something safer than "just ignore what KVM is
telling us" for production.

-- 
Eduardo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]