From: Paolo Bonzini <pbonzini@redhat.com>
To: David Woodhouse <dwmw@amazon.co.uk>,
tglx@linutronix.de, karahmed@amazon.de, x86@kernel.org,
kvm@vger.kernel.org, torvalds@linux-foundation.org,
linux-kernel@vger.kernel.org, bp@alien8.de, peterz@infradead.org,
jmattson@google.com, rkrcmar@redhat.com,
arjan.van.de.ven@intel.com, dave.hansen@intel.com,
mingo@kernel.org
Subject: Re: [PATCH v3 2/4] x86/speculation: Support "Enhanced IBRS" on future CPUs
Date: Tue, 20 Feb 2018 12:26:38 +0100 [thread overview]
Message-ID: <79c73482-9509-e67a-da8f-43ba0cb6d0fa@redhat.com> (raw)
In-Reply-To: <1519037457-7643-3-git-send-email-dwmw@amazon.co.uk>
On 19/02/2018 11:50, David Woodhouse wrote:
> Cope with this by trapping and emulating *all* access to SPEC_CTRL from
> KVM guests when the IBRS_ALL feature is present, so it can never be
> turned off. Guests who see IBRS_ALL should never do anything except
> turn it on at boot anyway. And if they didn't know about IBRS_ALL and
> they keep frobbing IBRS on every kernel entry/exit... well the vmexit
> for a no-op is probably going to be faster than they were expecting
> anyway, so they'll live.
The problem is, it isn't. On a Haswell (which has fairly slow
SPEC_CTRL) toggling IBRS is 200 cycles. This gives a context switch
time of around 2000 clock cycles with PTI enabled.
This is fairly awful, but with a vmexit cost of ~1100 cycles that goes
up to 2000+(1100-200)*2 = 3800. That's more or less doubling the cost
of a system call.
With newer machines SPEC_CTRL cost goes down but vmexit cost doesn't, so
it's only worse.
For now, we really should do something like
if (vmx->spec_ctrl != host_spec_ctrl)
wrmsrl(MSR_IA32_SPEC_CTRL, host_spec_ctrl);
else
lfence();
which later can become
if (vmx->spec_ctrl != host_spec_ctrl)
wrmsrl(MSR_IA32_SPEC_CTRL, host_spec_ctrl);
else {
/* lfence not needed if host_spec_ctrl == 0 */
if (static_cpu_has(BUG_REALLY_WANTS_IBRS))
nospec_barrier();
}
Paolo
next prev parent reply other threads:[~2018-02-20 11:26 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-19 10:50 [PATCH v3 0/4] Speculation control improvements David Woodhouse
2018-02-19 10:50 ` [PATCH v3 1/4] x86/speculation: Use IBRS if available before calling into firmware David Woodhouse
2018-02-20 7:44 ` Thomas Gleixner
2018-02-20 10:29 ` [tip:x86/pti] " tip-bot for David Woodhouse
2018-02-19 10:50 ` [PATCH v3 2/4] x86/speculation: Support "Enhanced IBRS" on future CPUs David Woodhouse
2018-02-20 8:31 ` Thomas Gleixner
2018-02-20 8:53 ` David Woodhouse
2018-02-20 10:37 ` Thomas Gleixner
2018-02-20 10:42 ` Thomas Gleixner
2018-02-20 11:22 ` David Woodhouse
2018-02-20 11:28 ` Paolo Bonzini
2018-02-26 19:55 ` Thomas Gleixner
2018-02-20 11:26 ` Paolo Bonzini [this message]
2018-02-19 10:50 ` [PATCH v3 3/4] Revert "x86/retpoline: Simplify vmexit_fill_RSB()" David Woodhouse
2018-02-20 8:35 ` Thomas Gleixner
2018-02-20 10:28 ` [tip:x86/pti] " tip-bot for David Woodhouse
2018-02-19 10:50 ` [PATCH v3 4/4] x86/retpoline: Support retpoline build with Clang David Woodhouse
2018-02-20 8:36 ` Thomas Gleixner
2018-02-20 8:45 ` David Woodhouse
2018-02-20 10:29 ` [tip:x86/pti] x86/retpoline: Support retpoline builds " tip-bot for David Woodhouse
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=79c73482-9509-e67a-da8f-43ba0cb6d0fa@redhat.com \
--to=pbonzini@redhat.com \
--cc=arjan.van.de.ven@intel.com \
--cc=bp@alien8.de \
--cc=dave.hansen@intel.com \
--cc=dwmw@amazon.co.uk \
--cc=jmattson@google.com \
--cc=karahmed@amazon.de \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=rkrcmar@redhat.com \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=x86@kernel.org \
/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.