glibc: Add single-threaded fast path to rand()

Backport a patch [1] to improve performance of rand() and __random()[2]
by adding a single-threaded fast path.

[1] https://sourceware.org/git/?p=glibc.git;a=commit;h=be0cfd848d9ad7378800d6302bc11467cf2b514f
[2] https://sourceware.org/bugzilla/show_bug.cgi?id=32777
(From OE-Core rev: 09e2d663246d7335a9e33dd1a86dfe4630e4489a)

Signed-off-by: Haixiao Yan <haixiao.yan.cn@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit b0ded4df5f2d3bb3319978d1a549c72f5daf238e)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
This commit is contained in:
Haixiao Yan 2025-03-31 17:05:17 +08:00 committed by Steve Sakoman
parent 9d264e0817
commit 753f400c0b
2 changed files with 48 additions and 0 deletions

View File

@ -0,0 +1,47 @@
From 4f54b0dfc16dbe0df86afccb90e447df5f7f571e Mon Sep 17 00:00:00 2001
From: Wilco Dijkstra <wilco.dijkstra@arm.com>
Date: Mon, 18 Mar 2024 15:18:20 +0000
Subject: [PATCH] stdlib: Add single-threaded fast path to rand()
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Improve performance of rand() and __random() by adding a single-threaded
fast path. Bench-random-lock shows about 5x speedup on Neoverse V1.
Upstream-Status: Backport [be0cfd848d9ad7378800d6302bc11467cf2b514f]
Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
Signed-off-by: Haixiao Yan <haixiao.yan.cn@windriver.com>
---
stdlib/random.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/stdlib/random.c b/stdlib/random.c
index 17cc61ba8f55..5d482a857065 100644
--- a/stdlib/random.c
+++ b/stdlib/random.c
@@ -51,6 +51,7 @@
SUCH DAMAGE.*/
#include <libc-lock.h>
+#include <sys/single_threaded.h>
#include <limits.h>
#include <stddef.h>
#include <stdlib.h>
@@ -288,6 +289,12 @@ __random (void)
{
int32_t retval;
+ if (SINGLE_THREAD_P)
+ {
+ (void) __random_r (&unsafe_state, &retval);
+ return retval;
+ }
+
__libc_lock_lock (lock);
(void) __random_r (&unsafe_state, &retval);
--
2.34.1

View File

@ -53,6 +53,7 @@ SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \
file://0021-fix-create-thread-failed-in-unprivileged-process-BZ-.patch \
file://0022-Avoid-hardcoded-build-time-paths-in-the-output-binar.patch \
file://0023-tests-Skip-2-qemu-tests-that-can-hang-in-oe-selftest.patch \
file://0001-stdlib-Add-single-threaded-fast-path-to-rand.patch \
"
S = "${WORKDIR}/git"
B = "${WORKDIR}/build-${TARGET_SYS}"