Messages in this thread | | | Date | Mon, 30 Oct 2023 12:36:09 +0000 | From | Marc Zyngier <> | Subject | Re: KVM exit to userspace on WFI |
| |
[please make an effort not to top-post]
On Fri, 27 Oct 2023 18:41:44 +0100, Jan Henrik Weinstock <jan@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.
| |