From: "Michael S. Tsirkin" <mst@redhat.com>
To: linux-kernel@vger.kernel.org,
Linus Torvalds <torvalds@linux-foundation.org>
Cc: Davidlohr Bueso <dave@stgolabs.net>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
the arch/x86 maintainers <x86@kernel.org>,
Davidlohr Bueso <dbueso@suse.de>,
"H. Peter Anvin" <hpa@zytor.com>,
virtualization <virtualization@lists.linux-foundation.org>,
Borislav Petkov <bp@alien8.de>
Subject: [PATCH v5 0/5] x86: faster smp_mb()+documentation tweaks
Date: Thu, 28 Jan 2016 19:02:23 +0200 [thread overview]
Message-ID: <1453921746-16178-1-git-send-email-mst@redhat.com> (raw)
mb() typically uses mfence on modern x86, but a micro-benchmark shows that it's
2 to 3 times slower than lock; addl that we use on older CPUs.
So we really should use the locked variant everywhere, except that intel manual
says that clflush is only ordered by mfence, so we can't.
Note: some callers of clflush seems to assume sfence will
order it, so there could be existing bugs around this code.
Fortunately no callers of clflush (except one) order it using smp_mb(), so
after fixing that one caller, it seems safe to override smp_mb straight away.
Down the road, it might make sense to introduce clflush_mb() and switch
to that for clflush callers.
While I was at it, I found some inconsistencies in comments in
arch/x86/include/asm/barrier.h
The documentation fixes are included first - I verified that
they do not change the generated code at all. Borislav Petkov
said they will appear in tip eventually, included here for
completeness.
The last patch changes __smp_mb() to lock addl. I was unable to
measure a speed difference on a macro benchmark,
but I noted that even doing
#define mb() barrier()
seems to make no difference for most benchmarks
(it causes hangs sometimes, of course).
Lightly tested on my laptop.
HPA asked that the last patch is deferred until we hear back from
intel, which makes sense of course. So it needs HPA's ack.
Changes from v4:
Fix up the 64 bit version.
Changes from v3:
Leave mb() alone for now since it's used to order
clflush, which requires mfence. Optimize smp_mb instead.
Changes from v2:
add patch adding cc clobber for addl
tweak commit log for patch 2
use addl at SP-4 (as opposed to SP) to reduce data dependencies
Michael S. Tsirkin (5):
x86: add cc clobber for addl
x86: drop a comment left over from X86_OOSTORE
x86: tweak the comment about use of wmb for IO
x86: use mb() around clflush
x86: drop mfence in favor of lock+addl
arch/x86/include/asm/barrier.h | 21 ++++++++++++---------
arch/x86/kernel/process.c | 4 ++--
2 files changed, 14 insertions(+), 11 deletions(-)
--
MST
next reply other threads:[~2016-01-28 17:02 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-28 17:02 Michael S. Tsirkin [this message]
2016-01-28 17:02 ` [PATCH v5 1/5] x86: add cc clobber for addl Michael S. Tsirkin
2016-01-29 11:32 ` [tip:locking/core] locking/x86: Add cc clobber for ADDL tip-bot for Michael S. Tsirkin
2016-01-28 17:02 ` [PATCH v5 2/5] x86: drop a comment left over from X86_OOSTORE Michael S. Tsirkin
2016-01-29 11:32 ` [tip:locking/core] locking/x86: Drop " tip-bot for Michael S. Tsirkin
2016-01-28 17:02 ` [PATCH v5 3/5] x86: tweak the comment about use of wmb for IO Michael S. Tsirkin
2016-01-29 11:32 ` [tip:locking/core] locking/x86: Tweak the comment about use of wmb() " tip-bot for Michael S. Tsirkin
2016-01-28 17:02 ` [PATCH v5 4/5] x86: use mb() around clflush Michael S. Tsirkin
2016-01-28 18:25 ` Peter Zijlstra
2016-01-29 11:33 ` [tip:locking/core] locking/x86: Use mb() around clflush() tip-bot for Michael S. Tsirkin
2016-01-28 17:02 ` [PATCH v5 5/5] x86: drop mfence in favor of lock+addl Michael S. Tsirkin
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=1453921746-16178-1-git-send-email-mst@redhat.com \
--to=mst@redhat.com \
--cc=bp@alien8.de \
--cc=dave@stgolabs.net \
--cc=dbueso@suse.de \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=virtualization@lists.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome