From: Namhyung Kim <namhyung@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
James Clark <james.clark@linaro.org>,
Jiri Olsa <jolsa@kernel.org>, Ian Rogers <irogers@google.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Clark Williams <williams@redhat.com>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org
Subject: Re: [PATCH v12 0/8] perf tools: Add progress diagnostics and a false-sharing workload
Date: Tue, 6 Oct 2026 17:07:29 -0700 [thread overview]
Message-ID: <asWNQWokyx9F6iRq@google.com> (raw)
In-Reply-To: <20261006145729.3028247-1-acme@kernel.org>
On Tue, Oct 06, 2026 at 04:57:21PM +0200, Arnaldo Carvalho de Melo wrote:
> Hi,
>
> This series adds progress diagnostics to perf, and a workload that makes
> false sharing visible to data type profiling.
>
> The changes are:
>
> - move perf_config__set_variable() to util/config.c and serialize config
> parser and read-modify-write state, so non-builtin perf code can persist
> configuration changes safely;
>
> - add 'perf report --progress' for stdio users, showing the current phase,
> percentage, and counts while a session is processed;
>
> - wire up 'perf report --no-progress', the counterpart of the option
> above, for the TUI and GTK browsers, whose progress there is no other
> way to turn off;
>
> - add 'perf test -w false_sharing', a synthetic TCP-shaped workload with
> identity and packet counters sharing a cacheline, and include it in the
> data type profiling shell test.
>
> Follow up work: the DO_ONCE() one-time init primitive added here mirrors
> what the eight pre-existing raw pthread_once() users in util/ (annotate.c,
> callchain.c, comm.c, dso.c, fncache.c, intel-tpebs.c, libbfd.c, pmus.c)
> need, conversions that will also exercise the DEFINE_MUTEX() static
> initializer; converting them is left for after this series.
> Best regards,
Reviewed-by: Namhyung Kim <namhyung@kernel.org>
Thanks,
Namhyung
>
> - Arnaldo
>
> What changed from v11:
>
> - The 'perf-stuck' patch is removed for the time being, to be submitted
> separately later on;
>
> What changed from v10:
>
> - tools/perf/scripts/perf-stuck.sh: pin the watched process by its start
> time, so a recycled PID can't get samples or gdb; Sashiko, v10;
>
> - tools/perf/scripts/perf-stuck.sh: drop the control characters from the
> shown progress updates, no terminal escape injection; Sashiko, v10;
>
> - tools/perf/tests/shell/perf_stuck.sh: test the script, from option
> validation to the gdb DIE chain runs on stand-in workloads;
>
> What changed from v9:
>
> - tools/perf/ui/stdio/progress.c: progress updates now work well with
> the pager, printed to /dev/tty so they update in place;
>
> - tools/perf/scripts/perf-stuck.sh: take the last progress update
> from a bounded tail window, dropping the \r's. Sashiko, v9;
>
> What changed from v8:
>
> - tools/perf/util/mutex.h: DEFINE_MUTEX() statics keep mutex_init()'s
> !NDEBUG errorcheck type;
>
> - patch 4/9 commit log: clarify the acquire/release pairing, what the
> dropped static key used to guarantee.
>
> What changed from v7:
>
> - tools/perf/util/mutex.h: the DO_ONCE() lockless fast path pairs its
> __ATOMIC_ACQUIRE load with the __ATOMIC_RELEASE store. sashiko, v7;
>
> What changed from v6:
>
> - patch 1/5 split into four: the move, perf_etc_perfconfig() never
> returning NULL, the DEFINE_MUTEX() prep and the serialization.
> Namhyung Kim asked, v6;
>
> - tools/perf/util/{config.c,mutex.h}: perf's own mutex type, adding
> the DEFINE_MUTEX() initializer it lacked. Namhyung Kim, v6;
>
> - tools/perf/util/mutex.h: add DO_ONCE() one-time init, from the
> kernel's once.h, moving the lazy inits in config.c to it;
>
> - tools/perf/builtin-report.c: drop the option negation and stdio
> hook comments Namhyung Kim asked to drop, reviewing v6;
>
> - tools/perf/scripts/perf-stuck.gdb: break the long printf() line.
> Namhyung Kim, reviewing v6;
>
> - the false_sharing cset now carries the data type profiling output
> with cacheline info. Namhyung Kim asked for it, reviewing v6.
>
> What changed from v5:
>
> - tools/perf/util/config.c: drop the config_file_name read in
> bad_config(), locking would buy a consistent NULL. Sashiko, v5;
>
> - tools/perf/util/config.c: new config_set_mutex around the shared
> set's init/teardown, home init via pthread_once. Sashiko, v5;
>
> - tools/perf/builtin-report.c, perf-report.txt: --no-progress is
> --progress's auto negation, last wins. Namhyung Kim, reviewing v5.
>
> What changed from v4:
>
> - tools/perf/builtin-report.c: mark --progress PARSE_OPT_NOAUTONEG,
> parse_long_opt() claimed --no-progress first. Sashiko, v4;
>
> - tools/perf/util/config.c: format the path buffer inside the critical
> section. Sashiko pointed out the window, reviewing v4;
>
> - tools/perf/tests/workloads/false_sharing.c: walk every bit of the
> affinity mask, not _SC_NPROCESSORS_CONF. Sashiko, reviewing v4.
>
> What changed from v3:
>
> - tools/perf/util/config.c: keep the buffer handed to the parser in
> static storage. Sashiko, reviewing v3;
>
> - tools/perf/scripts/perf-stuck.gdb: perf-dso walks each dso candidate
> until one evaluates, for REFCNT_CHECKING builds. Sashiko, v3;
>
> - tools/perf/tests/workloads/false_sharing.c: sum before cpu in struct
> fs_reader, the padding after cpu rounded it to 128. Sashiko, v3;
>
> - tools/perf/builtin-report.c: --quiet wins over --progress, the phases
> stay uncounted, documented next to it. Namhyung Kim, v3;
>
> - tools/perf/builtin-report.c, tools/perf/ui/progress.c: --no-progress
> installs the no-op ops. Suggested by Namhyung Kim, reviewing v3;
>
> - tools/perf/scripts/perf-stuck.sh: check gdb is there before
> watching. Namhyung Kim, reviewing v3.
>
> What changed from v2:
>
> - tools/perf/util/config.c: make perf_etc_perfconfig() total, falling
> back to the unresolved path. Sashiko, reviewing v2;
>
> - tools/perf/scripts/perf-stuck.gdb: don't deref map_symbol.sym without
> a NULL check. Sashiko, reviewing v2;
>
> - tools/perf/scripts/perf-stuck.gdb: note the REFCNT_CHECKING proxy
> next to the structure walks;
>
> - tools/perf/scripts/perf-stuck.sh: count samples with no progress to
> look at, an empty log never fired -g;
>
> - tools/perf/scripts/perf-stuck.sh: `--` for pgrep and tail against
> names starting with a hyphen;
>
> - tools/perf/scripts/perf-stuck.sh: bound the gdb run with
> `timeout --signal=INT 30`.
>
> What changed from v1:
>
> - avoid calling CPU_SET() with -1 when false_sharing runs with only one
> CPU available in its affinity mask.
>
> tools/perf/Documentation/perf-report.txt | 19 ++
> tools/perf/builtin-config.c | 70 +----
> tools/perf/builtin-report.c | 9 +
> tools/perf/tests/builtin-test.c | 1 +
> tools/perf/tests/shell/data_type_profiling.sh | 9 +-
> tools/perf/tests/tests.h | 1 +
> tools/perf/tests/workloads/Build | 2 +
> tools/perf/tests/workloads/false_sharing.c | 251 ++++++++++++++++++
> tools/perf/ui/Build | 1 +
> tools/perf/ui/progress.c | 6 +
> tools/perf/ui/progress.h | 4 +
> tools/perf/ui/stdio/progress.c | 170 ++++++++++++
> tools/perf/util/config.c | 166 ++++++++++--
> tools/perf/util/config.h | 2 +
> tools/perf/util/mutex.h | 36 +++
> tools/perf/util/ordered-events.c | 16 +-
> tools/perf/util/session.c | 12 +-
> 17 files changed, 675 insertions(+), 100 deletions(-)
> create mode 100644 tools/perf/tests/workloads/false_sharing.c
> create mode 100644 tools/perf/ui/stdio/progress.c
> base-commit: 705da5b15ab89ba9
> v1-head: 45d7917f7e05e8a29828ed5f0bbdc94fc938f79f
> v2-head: d4f84e4de8890194924ccd897a8e6773e7d4240b
> v3-head: 485532296710225862daf8ffb19802ae327efe2a
> v4-head: 38193635508e0a5f04a6ebf70db27534b68b2d5b
> v5-head: e99bc48f6c72b9cc67b4e4143a0364acac5523bb
> v6-head: 7dc99dbb6504f199c3c39487d91370d1bbb7a827
> v7-head: b357a76666d08f74eb99c755cca41855a96f6169
> v8-head: 257b5ea6115ad5126d2c881523ea6c660cf5d28c
> v9-head: 70235104c6cf7d18d91f46de1a233abbeb65893a
> v10-head: 1ecf850c2694d20ca9cd0014f2a42528ef4dbfec
> v11-head: a3ddbaab18aa24fba520927f71d0ea66edfc5593
> --
next prev parent reply other threads:[~2026-10-07 0:07 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-06 14:57 [PATCH v12 0/8] perf tools: Add progress diagnostics and a false-sharing workload Arnaldo Carvalho de Melo
2026-10-06 14:57 ` [PATCH 1/8] perf config: Move perf_config__set_variable() to util/config.c Arnaldo Carvalho de Melo
2026-10-06 15:10 ` sashiko-bot
2026-10-06 14:57 ` [PATCH 2/8] perf config: Make perf_etc_perfconfig() never return NULL Arnaldo Carvalho de Melo
2026-10-06 15:05 ` sashiko-bot
2026-10-06 14:57 ` [PATCH 3/8] perf mutex: Add DEFINE_MUTEX() static initializer Arnaldo Carvalho de Melo
2026-10-06 15:02 ` sashiko-bot
2026-10-06 14:57 ` [PATCH 4/8] perf mutex: Add DO_ONCE() for one-time initialization Arnaldo Carvalho de Melo
2026-10-06 15:04 ` sashiko-bot
2026-10-06 14:57 ` [PATCH 5/8] perf config: Serialize config file access with a mutex Arnaldo Carvalho de Melo
2026-10-06 15:07 ` sashiko-bot
2026-10-06 14:57 ` [PATCH 6/8] perf report: Add --progress option Arnaldo Carvalho de Melo
2026-10-06 15:03 ` sashiko-bot
2026-10-06 14:57 ` [PATCH 7/8] perf report: Add --no-progress option Arnaldo Carvalho de Melo
2026-10-06 15:05 ` sashiko-bot
2026-10-06 14:57 ` [PATCH 8/8] perf test: Add false_sharing workload exhibiting cross-CPU false sharing Arnaldo Carvalho de Melo
2026-10-06 15:03 ` sashiko-bot
2026-10-07 0:07 ` Namhyung Kim [this message]
2026-10-07 9:44 ` [PATCH v12 0/8] perf tools: Add progress diagnostics and a false-sharing workload Arnaldo Carvalho de Melo
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=asWNQWokyx9F6iRq@google.com \
--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=tglx@linutronix.de \
--cc=williams@redhat.com \
/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.