From: Kashyap Chamarthy <kchamart@redhat.com>
To: Laszlo Ersek <lersek@redhat.com>
Cc: aarcange@redhat.com, qemu-devel@nongnu.org, dgilbert@redhat.com,
stefanha@redhat.com, pbonzini@redhat.com, vkuznets@redhat.com
Subject: Re: [PATCH qemu-web] Add a blog post on "Micro-Optimizing KVM VM-Exits"
Date: Fri, 15 Nov 2019 16:27:39 +0100 [thread overview]
Message-ID: <20191115152739.GV7754@paraplu> (raw)
In-Reply-To: <5c1e9646-2e76-7429-95e6-c78afe9e93be@redhat.com>
On Fri, Nov 15, 2019 at 01:45:51PM +0100, Laszlo Ersek wrote:
> On 11/08/19 10:22, Kashyap Chamarthy wrote:
[...]
> > +Guest workloads that are hard to virtualize
> > +-------------------------------------------
> > +
> > +At the 2019 edition of the KVM Forum in Lyon, kernel developer, Andrea
> > +Arcangeli, attempted to address the kernel part of minimizing VM-Exits.
>
> I'd suggest "addressed", not "attempted to address".
Will fix in next iteration.
[...]
> > +Conclusion
> > +----------
[...]
> > +Although, we still have to deal with mitigations for 'indirect branch
> > +prediction' for a long time, reducing the VM-Exit latency is important
> > +in general; and more specifically, for guest workloads that happen to
> > +trigger frequent VM-Exits, without having to disable Spectre v2
> > +mitigations on the host, as Andrea stated in the cover letter of his
> > +patch series.
> >
>
> This article refers to "indirect calls" and "indirect branches" quite a
> few times.
>
> I suggest mentioning "function pointers" at least once...
>
> (AIUI, the core of the issue is that kvm.ko calls kvm-intel.ko and
> kvm-amd.ko through function pointers. Such calls are the target of
> malicious branch predictor mis-training, and therefore, as a
> counter-measure, they are compiled into retpolines, rather than the
> directly corresponding indirect call assembly instructions. But
> retpolines run slowly, in comparison. Calling the functions in question
> by name, in the C source code, rather than via function pointers,
> eliminates the indirect call assembly instructions, and obviates the
> need for retpolines. The resultant C source code is less abstract and
> less dynamic at runtime, but the original indirection isn't inherently
> necessary at runtime.)
>
> I couldn't attend Andrea's presentation, nor have I seen the slides, or
> a recording thereof, or the patchset; so I could easily be off.
I think your above explanation is indeed correct (which I couldn't have
articulated so well; thanks!), based on my understanding, and reading
Andrea's patch[*] and its commit message:
"This [patch] replaces all kvm_x86_ops pointer to functions with
regular external functions that don't require indirect calls.
"[...] The pointer to function virtual template model cannot provide
any runtime benefit because kvm-intel and kvm-amd can't be loaded at
the same time. [...]"
[*] https://lkml.org/lkml/2019/9/20/932 -- [PATCH 02/17] KVM:
monolithic: x86: convert the kvm_x86_ops methods to external functions
> My point is, *if* the expression "function pointers" applies in this
> context, please do mention it; otherwise "indirect calls" just hangs
> in the air, IMHO.
>
> It might be as simple as replacing
>
> These indirect calls were not optimal before,
>
> with
>
> These indirect calls -- via function pointers in the C source code
> -- were not optimal before,
Will fix; thanks for the thorough review.
If you want to read Andrea's slides, here they are:
https://static.sched.com/hosted_files/kvmforum2019/3b/kvm-monolithic.pdf
Thanks for the review!
--
/kashyap
prev parent reply other threads:[~2019-11-15 15:28 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-08 9:22 [PATCH qemu-web] Add a blog post on "Micro-Optimizing KVM VM-Exits" Kashyap Chamarthy
2019-11-12 9:42 ` Kashyap Chamarthy
2019-11-12 10:37 ` Stefan Hajnoczi
2019-11-15 12:08 ` Thomas Huth
2019-11-15 12:18 ` Paolo Bonzini
2019-11-15 12:25 ` Alex Bennée
2019-11-15 12:33 ` Daniel P. Berrangé
2019-11-15 12:37 ` Kashyap Chamarthy
2019-11-15 12:41 ` Paolo Bonzini
2019-11-15 15:19 ` Kashyap Chamarthy
2019-11-15 12:45 ` Laszlo Ersek
2019-11-15 15:27 ` Kashyap Chamarthy [this message]
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=20191115152739.GV7754@paraplu \
--to=kchamart@redhat.com \
--cc=aarcange@redhat.com \
--cc=dgilbert@redhat.com \
--cc=lersek@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=vkuznets@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).