From: Sean Christopherson <seanjc@google.com>
To: Nitesh Narayan Lal <nitesh@redhat.com>
Cc: Vitaly Kuznetsov <vkuznets@redhat.com>,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
w90p710@gmail.com, pbonzini@redhat.com,
Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [PATCH] Revert "KVM: x86: Unconditionally enable irqs in guest context"
Date: Tue, 12 Jan 2021 14:04:38 -0800 [thread overview]
Message-ID: <X/4c9skP3rOqsWHW@google.com> (raw)
In-Reply-To: <fb41e24f-a5e3-8319-d25b-e0fe6b902a2b@redhat.com>
On Tue, Jan 12, 2021, Nitesh Narayan Lal wrote:
>
> On 1/7/21 4:33 AM, Vitaly Kuznetsov wrote:
> > Sean Christopherson <seanjc@google.com> writes:
> >
> >> On Wed, Jan 06, 2021, Vitaly Kuznetsov wrote:
> >>> Looking back, I don't quite understand why we wanted to account ticks
> >>> between vmexit and exiting guest context as 'guest' in the first place;
> >>> to my understanging 'guest time' is time spent within VMX non-root
> >>> operation, the rest is KVM overhead (system).
> >> With tick-based accounting, if the tick IRQ is received after PF_VCPU is cleared
> >> then that tick will be accounted to the host/system. The motivation for opening
> >> an IRQ window after VM-Exit is to handle the case where the guest is constantly
> >> exiting for a different reason _just_ before the tick arrives, e.g. if the guest
> >> has its tick configured such that the guest and host ticks get synchronized
> >> in a bad way.
> >>
> >> This is a non-issue when using CONFIG_VIRT_CPU_ACCOUNTING_GEN=y, at least with a
> >> stable TSC, as the accounting happens during guest_exit_irqoff() itself.
> >> Accounting might be less-than-stellar if TSC is unstable, but I don't think it
> >> would be as binary of a failure as tick-based accounting.
> >>
> > Oh, yea, I vaguely remember we had to deal with a very similar problem
> > but for userspace/kernel accounting. It was possible to observe e.g. a
> > userspace task going 100% kernel while in reality it was just perfectly
> > synchronized with the tick and doing a syscall just before it arrives
> > (or something like that, I may be misremembering the details).
> >
> > So depending on the frequency, it is probably possible to e.g observe
> > '100% host' with tick based accounting, the guest just has to
> > synchronize exiting to KVM in a way that the tick will always arrive
> > past guest_exit_irqoff().
> >
> > It seems to me this is a fundamental problem in case the frequency of
> > guest exits can match the frequency of the time accounting tick.
> >
>
> Just to make sure that I am understanding things correctly.
> There are two issues:
> 1. The first issue is with the tick IRQs that arrive after PF_VCPU is
> cleared as they are then accounted into the system context atleast on
> the setup where CONFIG_VIRT_CPU_ACCOUNTING_GEN is not enabled. With the
> patch "KVM: x86: Unconditionally enable irqs in guest context", we are
> atleast taking care of the scenario where the guest context is exiting
> constantly just before the arrival of the tick.
Yep.
> 2. The second issue that Sean mentioned was introduced because of moving
> guest_exit_irqoff() closer to VM-exit. Due to this change, any ticks that
> happen after IRQs are disabled are incorrectly accounted into the system
> context. This is because we exit the guest context early without
> ensuring if the required guest states to handle IRQs are restored.
Yep.
> So, the increase in the system time (reported by cpuacct.stats) that I was
> observing is not entirely correct after all.
It's correct, but iff CONFIG_VIRT_CPU_ACCOUNTING_GEN=y, as that doesn't rely on
ticks and so closer to VM-Enter is better. The problem is that it completely
breaks CONFIG_VIRT_CPU_ACCOUNTING_GEN=n (#2 above) because KVM will never
service an IRQ, ticks included, with PF_VCPU set.
> Am I missing anything here?
next prev parent reply other threads:[~2021-01-12 22:06 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-05 19:28 [PATCH] Revert "KVM: x86: Unconditionally enable irqs in guest context" Nitesh Narayan Lal
2021-01-06 0:42 ` Wanpeng Li
2021-01-06 0:47 ` Sean Christopherson
2021-01-06 1:35 ` Nitesh Narayan Lal
2021-01-15 3:20 ` Wanpeng Li
2021-01-19 1:27 ` Wanpeng Li
2021-01-06 10:09 ` Vitaly Kuznetsov
2021-01-06 17:11 ` Sean Christopherson
2021-01-07 9:33 ` Vitaly Kuznetsov
2021-01-07 9:41 ` Wanpeng Li
2021-01-12 21:43 ` Nitesh Narayan Lal
2021-01-12 22:04 ` Sean Christopherson [this message]
2021-01-07 10:55 ` Xinlong Lin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=X/4c9skP3rOqsWHW@google.com \
--to=seanjc@google.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nitesh@redhat.com \
--cc=pbonzini@redhat.com \
--cc=tglx@linutronix.de \
--cc=vkuznets@redhat.com \
--cc=w90p710@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.