From: Namhyung Kim <namhyung@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>,
Ian Rogers <irogers@google.com>,
James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>,
Adrian Hunter <adrian.hunter@intel.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
linux-perf-users@vger.kernel.org
Subject: [PATCH v2 1/2] perf bench: Fix initialization of union
Date: Wed, 18 Feb 2026 16:44:16 -0800 [thread overview]
Message-ID: <20260219004417.188434-1-namhyung@kernel.org> (raw)
Recent compilers don't initialize all members (or the largest member) in
an union. Instead it seems to set the first member only. So some perf
bench output shows invalid numbers like below on my system with GCC 15.
Before:
$ perf bench mem mmap
# Running 'mem/mmap' benchmark:
# function 'demand' (Demand loaded mmap())
# Copying 1MB bytes ...
0.011127 bytes/sec
# function 'populate' (Eagerly populated mmap())
# Copying 1MB bytes ...
0.011127 bytes/sec
After:
$ perf bench mem mmap
# Running 'mem/mmap' benchmark:
# function 'demand' (Demand loaded mmap())
# Copying 1MB bytes ...
2.209417 GB/sec
# function 'populate' (Eagerly populated mmap())
# Copying 1MB bytes ...
7.875504 GB/sec
Because the first member of bench_clock is u64 ('cycles'), the default
struct timeval wasn't fully initialized. Let's use memset to reset the
whole memory.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
tools/perf/bench/mem-functions.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tools/perf/bench/mem-functions.c b/tools/perf/bench/mem-functions.c
index 2908a3a796c932d0..676c8d18f4c2e259 100644
--- a/tools/perf/bench/mem-functions.c
+++ b/tools/perf/bench/mem-functions.c
@@ -193,9 +193,10 @@ static void __bench_mem_function(struct bench_mem_info *info, struct bench_param
{
const struct function *r = &info->functions[r_idx];
double result_bps = 0.0;
- union bench_clock rt = { 0 };
+ union bench_clock rt;
void *src = NULL, *dst = NULL;
+ memset(&rt, 0, sizeof(rt));
printf("# function '%s' (%s)\n", r->name, r->desc);
if (r->fn.init && r->fn.init(info, p, &src, &dst))
--
2.53.0.335.g19a08e0c02-goog
next reply other threads:[~2026-02-19 0:44 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-19 0:44 Namhyung Kim [this message]
2026-02-19 0:44 ` [PATCH v2 2/2] perf bench: Add -t/--threads option to perf bench mem mmap Namhyung Kim
2026-02-19 10:43 ` James Clark
2026-02-26 7:02 ` Ankur Arora
2026-02-27 21:42 ` Namhyung Kim
2026-02-19 10:36 ` [PATCH v2 1/2] perf bench: Fix initialization of union James Clark
2026-02-19 10:38 ` James Clark
2026-02-19 15:02 ` Leo Yan
2026-02-19 19:00 ` Namhyung Kim
2026-02-23 19:12 ` Namhyung Kim
2026-02-24 12:20 ` Leo Yan
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=20260219004417.188434-1-namhyung@kernel.org \
--to=namhyung@kernel.org \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.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
all inboxes | Powered by JetHome®