From: Peter Zijlstra <peterz@infradead.org>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: "K Prateek Nayak" <kprateek.nayak@amd.com>,
"Arnd Bergmann" <arnd@arndb.de>,
"Thomas Gleixner" <tglx@kernel.org>,
"Ingo Molnar" <mingo@redhat.com>,
"Borislav Petkov" <bp@alien8.de>,
"Dave Hansen" <dave.hansen@linux.intel.com>,
x86@kernel.org, "Catalin Marinas" <catalin.marinas@arm.com>,
"Will Deacon" <will@kernel.org>, "Paul Walmsley" <pjw@kernel.org>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Albert Ou" <aou@eecs.berkeley.edu>,
"Heiko Carstens" <hca@linux.ibm.com>,
"Vasily Gorbik" <gor@linux.ibm.com>,
"Alexander Gordeev" <agordeev@linux.ibm.com>,
"Darren Hart" <dvhart@infradead.org>,
"Davidlohr Bueso" <dave@stgolabs.net>,
"André Almeida" <andrealmeid@igalia.com>,
linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org,
"Samuel Holland" <samuel.holland@sifive.com>,
"Charlie Jenkins" <thecharlesjenkins@gmail.com>,
linux-arm-kernel@lists.infradead.org,
linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org,
"H. Peter Anvin" <hpa@zytor.com>,
"Thomas Huth" <thuth@redhat.com>,
"Sean Christopherson" <seanjc@google.com>,
"Jisheng Zhang" <jszhang@kernel.org>,
"Alexandre Ghiti" <alex@ghiti.fr>,
"Christian Borntraeger" <borntraeger@linux.ibm.com>,
"Sven Schnelle" <svens@linux.ibm.com>
Subject: Re: [PATCH] futex: Optimise the size check get_futex_key()
Date: Thu, 2 Jul 2026 10:59:21 +0200 [thread overview]
Message-ID: <20260702085921.GD49951@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <20260701161736.xYYizA0e@linutronix.de>
On Wed, Jul 01, 2026 at 06:17:36PM +0200, Sebastian Andrzej Siewior wrote:
> The futex address must be naturally aligned and this is checked via
> "address % size" where `address' is the supplied address and `size' is
> the expected size of futex. It is guaranteed that `size' is power of two
> but the compiler does not see it and creates here a `div' operation
> (x86, arm, gcc-15).
That's pretty stupid, since size = futex_size() := 1 << (blah); so it
has every opportunity to actually see this. Also, see below, clang does!
> We can take advantage of the pow2 property and rewrite it as
> "address & (size-1)".
>
> As per testing, the command
> |perf bench futex hash -f 1 -b 16384 -t 1 -r 30
>
> improved from
> | [thread 0] futex: 0x5619f931f740 [ 7001583 ops/sec ]
> to
> | [thread 0] futex: 0x55da173e5740 [ 7376137 ops/sec ]
>
> or by 5.3%
>
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> ---
>
> Could someone verify this, please? The 5% look a bit high. This is on
> top of the series (but not worsen by the series).
Bah, I tried to reproduce and couldn't. Then I noticed I did a clang
build and that is in fact clever enough to do this optimization itself.
/me tries again with a GCC build.
pre: [thread 0] futex: 0x561f14430680 [ 9021408 ops/sec ]
post: [thread 0] futex: 0x55feadbbb680 [ 8977527 ops/sec ]
(and this seems to be well inside the error threshold of this test).
So I see the GCC build do the DIV, and no longer with his patch applied,
but for some reason I cannot get the runtime performance to actually
improve much of anything on my system.
WARNING: multiple messages have this Message-ID (diff)
From: Peter Zijlstra <peterz@infradead.org>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: "K Prateek Nayak" <kprateek.nayak@amd.com>,
"Arnd Bergmann" <arnd@arndb.de>,
"Thomas Gleixner" <tglx@kernel.org>,
"Ingo Molnar" <mingo@redhat.com>,
"Borislav Petkov" <bp@alien8.de>,
"Dave Hansen" <dave.hansen@linux.intel.com>,
x86@kernel.org, "Catalin Marinas" <catalin.marinas@arm.com>,
"Will Deacon" <will@kernel.org>, "Paul Walmsley" <pjw@kernel.org>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Albert Ou" <aou@eecs.berkeley.edu>,
"Heiko Carstens" <hca@linux.ibm.com>,
"Vasily Gorbik" <gor@linux.ibm.com>,
"Alexander Gordeev" <agordeev@linux.ibm.com>,
"Darren Hart" <dvhart@infradead.org>,
"Davidlohr Bueso" <dave@stgolabs.net>,
"André Almeida" <andrealmeid@igalia.com>,
linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org,
"Samuel Holland" <samuel.holland@sifive.com>,
"Charlie Jenkins" <thecharlesjenkins@gmail.com>,
linux-arm-kernel@lists.infradead.org,
linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org,
"H. Peter Anvin" <hpa@zytor.com>,
"Thomas Huth" <thuth@redhat.com>,
"Sean Christopherson" <seanjc@google.com>,
"Jisheng Zhang" <jszhang@kernel.org>,
"Alexandre Ghiti" <alex@ghiti.fr>,
"Christian Borntraeger" <borntraeger@linux.ibm.com>,
"Sven Schnelle" <svens@linux.ibm.com>
Subject: Re: [PATCH] futex: Optimise the size check get_futex_key()
Date: Thu, 2 Jul 2026 10:59:21 +0200 [thread overview]
Message-ID: <20260702085921.GD49951@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <20260701161736.xYYizA0e@linutronix.de>
On Wed, Jul 01, 2026 at 06:17:36PM +0200, Sebastian Andrzej Siewior wrote:
> The futex address must be naturally aligned and this is checked via
> "address % size" where `address' is the supplied address and `size' is
> the expected size of futex. It is guaranteed that `size' is power of two
> but the compiler does not see it and creates here a `div' operation
> (x86, arm, gcc-15).
That's pretty stupid, since size = futex_size() := 1 << (blah); so it
has every opportunity to actually see this. Also, see below, clang does!
> We can take advantage of the pow2 property and rewrite it as
> "address & (size-1)".
>
> As per testing, the command
> |perf bench futex hash -f 1 -b 16384 -t 1 -r 30
>
> improved from
> | [thread 0] futex: 0x5619f931f740 [ 7001583 ops/sec ]
> to
> | [thread 0] futex: 0x55da173e5740 [ 7376137 ops/sec ]
>
> or by 5.3%
>
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> ---
>
> Could someone verify this, please? The 5% look a bit high. This is on
> top of the series (but not worsen by the series).
Bah, I tried to reproduce and couldn't. Then I noticed I did a clang
build and that is in fact clever enough to do this optimization itself.
/me tries again with a GCC build.
pre: [thread 0] futex: 0x561f14430680 [ 9021408 ops/sec ]
post: [thread 0] futex: 0x55feadbbb680 [ 8977527 ops/sec ]
(and this seems to be well inside the error threshold of this test).
So I see the GCC build do the DIV, and no longer with his patch applied,
but for some reason I cannot get the runtime performance to actually
improve much of anything on my system.
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2026-07-02 8:59 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-30 4:55 [PATCH v5 0/8] futex: Use runtime constants for futex_hash computation K Prateek Nayak
2026-06-30 4:55 ` K Prateek Nayak
2026-06-30 4:55 ` [PATCH v5 1/8] x86/runtime-const: Introduce runtime_const_mask_32() K Prateek Nayak
2026-06-30 4:55 ` K Prateek Nayak
2026-06-30 4:55 ` [PATCH v5 2/8] arm64/runtime-const: Use aarch64_insn_patch_text_nosync() for patching K Prateek Nayak
2026-06-30 4:55 ` K Prateek Nayak
2026-06-30 4:55 ` [PATCH v5 3/8] arm64/runtime-const: Introduce runtime_const_mask_32() K Prateek Nayak
2026-06-30 4:55 ` K Prateek Nayak
2026-06-30 5:07 ` sashiko-bot
2026-06-30 8:16 ` K Prateek Nayak
2026-06-30 4:55 ` [PATCH v5 4/8] riscv/runtime-const: Replace open-coded placeholder with RUNTIME_MAGIC K Prateek Nayak
2026-06-30 4:55 ` K Prateek Nayak
2026-06-30 6:47 ` Guo Ren
2026-06-30 6:47 ` Guo Ren
2026-06-30 4:55 ` [PATCH v5 5/8] riscv/runtime-const: Introduce runtime_const_mask_32() K Prateek Nayak
2026-06-30 4:55 ` K Prateek Nayak
2026-06-30 4:55 ` [PATCH v5 6/8] s390/runtime-const: " K Prateek Nayak
2026-06-30 4:55 ` K Prateek Nayak
2026-06-30 4:55 ` [PATCH v5 7/8] asm-generic/runtime-const: Add dummy runtime_const_mask_32() K Prateek Nayak
2026-06-30 4:55 ` K Prateek Nayak
2026-06-30 4:55 ` [PATCH v5 8/8] futex: Use runtime constants for __futex_hash() hot path K Prateek Nayak
2026-06-30 4:55 ` K Prateek Nayak
2026-06-30 5:20 ` sashiko-bot
2026-07-01 7:57 ` Peter Zijlstra
2026-07-01 7:57 ` Peter Zijlstra
2026-07-01 8:41 ` Sebastian Andrzej Siewior
2026-07-01 8:41 ` Sebastian Andrzej Siewior
2026-07-01 9:07 ` K Prateek Nayak
2026-07-01 9:07 ` K Prateek Nayak
2026-07-01 16:17 ` [PATCH] futex: Optimise the size check get_futex_key() Sebastian Andrzej Siewior
2026-07-01 16:17 ` Sebastian Andrzej Siewior
2026-07-02 8:59 ` Peter Zijlstra [this message]
2026-07-02 8:59 ` Peter Zijlstra
2026-07-02 10:56 ` Sebastian Andrzej Siewior
2026-07-02 10:56 ` Sebastian Andrzej Siewior
2026-07-02 11:18 ` Peter Zijlstra
2026-07-02 11:18 ` Peter Zijlstra
2026-07-01 11:01 ` [PATCH v5 8/8] futex: Use runtime constants for __futex_hash() hot path Sebastian Andrzej Siewior
2026-07-01 11:01 ` Sebastian Andrzej Siewior
2026-07-01 19:58 ` Sebastian Andrzej Siewior
2026-07-01 19:58 ` Sebastian Andrzej Siewior
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=20260702085921.GD49951@noisy.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=agordeev@linux.ibm.com \
--cc=alex@ghiti.fr \
--cc=andrealmeid@igalia.com \
--cc=aou@eecs.berkeley.edu \
--cc=arnd@arndb.de \
--cc=bigeasy@linutronix.de \
--cc=borntraeger@linux.ibm.com \
--cc=bp@alien8.de \
--cc=catalin.marinas@arm.com \
--cc=dave.hansen@linux.intel.com \
--cc=dave@stgolabs.net \
--cc=dvhart@infradead.org \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=hpa@zytor.com \
--cc=jszhang@kernel.org \
--cc=kprateek.nayak@amd.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-s390@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=palmer@dabbelt.com \
--cc=pjw@kernel.org \
--cc=samuel.holland@sifive.com \
--cc=seanjc@google.com \
--cc=svens@linux.ibm.com \
--cc=tglx@kernel.org \
--cc=thecharlesjenkins@gmail.com \
--cc=thuth@redhat.com \
--cc=will@kernel.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.