KVM exit to userspace on WFI

Marc Zyngier maz at kernel.org
Mon Oct 30 05:36:09 PDT 2023


[please make an effort not to top-post]

On Fri, 27 Oct 2023 18:41:44 +0100,
Jan Henrik Weinstock <jan at mwa.re> wrote:
> 
> Hi Marc,
> 
> the basic idea behind this is to have a (single-threaded) execution loop,
> something like this:
> 
> vcpu-thread:    vcpu-run | process-io-devices | vcpu-run | process-io...
>                          ^
>                   WFX or timeout
> 
> We switch to simulating IO devices whenever the vcpu is idle (wfi) or exceeds
> a certain budget of instructions (counted via pmu). Our fallback currently is
> to kick the vcpu out of its execution using a signal (via a timeout/alarm). But
> of course, if the cpu is stuck at a wfi, we are wasting a lot of time.
> 
> I understand that the proposed behavior is not desirable for most use cases,
> which is why I suggest locking it behind a flag, e.g.
> KVM_ARCH_FLAG_WFX_EXIT_TO_USER.

But how do you reconcile the fact that exposing this to userspace
breaks fundamental expectations that the guest has, such as getting
its timer interrupts and directly injected LPIs? Implementing WFI in
userspace breaks it. What about the case where we don't trap WFx and
let the *guest* wait for an interrupt?

Honestly, what you are describing seems to be a use model that doesn't
fit KVM, which is a general purpose hypervisor, but more a simulation
environment. Yes, the primitives are the same, but the plumbing is
wildly different.

*If* that's the stuff you're looking at, then I'm afraid you'll have
to do it in different way, because what you are suggesting is
fundamentally incompatible with the guarantees that KVM gives to guest
and userspace. Because your KVM_ARCH_FLAG_WFX_EXIT_TO_USER is really a
lie. It should really be named something more along the lines of
KVM_ARCH_FLAG_WFX_EXIT_TO_USER_SOMETIME_AND_I_DONT_EVEN_KNOW_WHEN
(probably with additional clauses related to breaking things).

Overall, you are still asking for something that is not guaranteed at
the architecture level, even less in KVM, and I'm not going to add
support for something that can only work "sometime".

	M.

-- 
Without deviation from the norm, progress is not possible.



More information about the linux-arm-kernel mailing list