All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Namhyung Kim <namhyung@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,
	Arnaldo Carvalho de Melo <acme@kernel.org>
Subject: [PATCH v6 0/5] perf tools: Add progress diagnostics and a false-sharing workload
Date: Wed, 30 Sep 2026 23:37:11 +0200	[thread overview]
Message-ID: <20260930213716.2633750-1-acme@kernel.org> (raw)

Hi,

This series adds progress and stuck-process 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;

  - add 'perf report --no-progress', the counterpart above for the TUI and
    GTK browsers, whose progress there is no other way to turn off;

  - add the prototype tools/perf/scripts/perf-stuck.sh helper, which samples
    a running perf process and can invoke the accompanying GDB commands when
    progress stops;

  - 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.

Best regards,

- Arnaldo

What changed from v5:

  - tools/perf/util/config.c: check fprintf()/fclose() in
    perf_config_set__write(), a write failure was reported as success;

  - tools/perf/ui/stdio/progress.c: fix the "[42.3%]" changelog example
    and two comments that opened at the wrong indent;

  - tools/perf/scripts/perf-stuck.sh: validate -i/-n, require -g for -x,
    and clear gdb_done on progress so -g can fire more than once;

  - tools/perf/tests/workloads/false_sharing.c: say sum, not hash, and
    describe the actual perf mem record + report -s type verification;

Found in a pre-post read-through of v5, not a list reply.

What changed from v4:

  - tools/perf/builtin-report.c: mark --progress PARSE_OPT_NOAUTONEG,
    parse_long_opt() claimed --no-progress before reaching it.  Sashiko, v4;

  - tools/perf/util/config.c: format the path buffer inside the
    critical section, mkpath() ran outside the lock.  Sashiko, v4;

  - tools/perf/tests/workloads/false_sharing.c: walk every affinity mask
    bit instead of bounding by NPROCESSORS_CONF.  Sashiko, v4;

What changed from v3:

  - tools/perf/util/config.c: keep the config_file_name buffer in
    static storage, a reader outside a parse could race it.  Sashiko, v3;

  - tools/perf/scripts/perf-stuck.gdb: perf-dso walks each candidate,
    resolving the REFCNT_CHECKING proxy instead of aborting.  Sashiko, v3;

  - tools/perf/tests/workloads/false_sharing.c: put sum before cpu in
    fs_reader, alignment was doubling it to 128 bytes.  Sashiko, v3;

  - tools/perf/builtin-report.c: document what --quiet does to
    --progress, asked by Namhyung Kim reviewing v3;

  - tools/perf/builtin-report.c, tools/perf/ui/progress.c: add
    --no-progress, suggested by Namhyung Kim reviewing v3;

  - tools/perf/scripts/perf-stuck.sh: check gdb is present before
    watching instead of failing when -g first fires.  Namhyung, v3;

What changed from v2:

  - tools/perf/util/config.c: make perf_etc_perfconfig() total, it
    returned NULL on allocation failure.  Sashiko, v2;

  - tools/perf/scripts/perf-stuck.gdb: don't deref map_symbol.sym
    without a NULL check, print "(no symbol)" instead.  Sashiko, v2;

  - tools/perf/scripts/perf-stuck.gdb: note the REFCNT_CHECKING proxy
    indirection 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: use -- for pgrep and tail, a name
    starting with '-' attached to the wrong process;

  - tools/perf/scripts/perf-stuck.sh: bound the gdb run with
    timeout --signal=INT 30, an inferior call can hang forever;

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                   |  23 +++
  tools/perf/scripts/perf-stuck.gdb             | 129 +++++++++++++
  tools/perf/scripts/perf-stuck.sh              | 193 ++++++++++++++++++++
  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                | 162 +++++++++++++++
  tools/perf/util/config.c                      | 219 +++++++++++++++++---
  tools/perf/util/config.h                      |   2 +
  tools/perf/util/ordered-events.c              |  16 +-
  tools/perf/util/session.c                     |  12 +-
  18 files changed, 1021 insertions(+), 99 deletions(-)
  create mode 100644 tools/perf/scripts/perf-stuck.gdb
  create mode 100755 tools/perf/scripts/perf-stuck.sh
  create mode 100644 tools/perf/tests/workloads/false_sharing.c
  create mode 100644 tools/perf/ui/stdio/progress.c

base-commit: 0ae6fc78c5ce0dfd
v1-head: 45d7917f7e05e8a29828ed5f0bbdc94fc938f79f
v2-head: d4f84e4de8890194924ccd897a8e6773e7d4240b
v3-head: 485532296710225862daf8ffb19802ae327efe2a
v4-head: 38193635508e0a5f04a6ebf70db27534b68b2d5b
v5-head: 352709b39c0db8789a54d4ecca0251b26b1bf839
--

             reply	other threads:[~2026-09-30 21:37 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-30 21:37 Arnaldo Carvalho de Melo [this message]
2026-09-30 21:37 ` [PATCH v6 1/5] perf config: Move perf_config__set_variable() to util/config.c Arnaldo Carvalho de Melo
2026-09-30 21:48   ` sashiko-bot
2026-10-01  7:18   ` Namhyung Kim
2026-10-01  9:19     ` Arnaldo Carvalho de Melo
2026-09-30 21:37 ` [PATCH v6 2/5] perf report: Add --progress option Arnaldo Carvalho de Melo
2026-09-30 21:52   ` sashiko-bot
2026-09-30 21:37 ` [PATCH v6 3/5] perf report: Add --no-progress option Arnaldo Carvalho de Melo
2026-09-30 21:58   ` sashiko-bot
2026-10-01  7:01   ` Namhyung Kim
2026-10-01  9:20     ` Arnaldo Carvalho de Melo
2026-09-30 21:37 ` [PATCH v6 4/5] perf scripts: Add perf-stuck, to tell where a running perf is stuck Arnaldo Carvalho de Melo
2026-09-30 22:01   ` sashiko-bot
2026-10-01  7:24   ` Namhyung Kim
2026-10-01  9:19     ` Arnaldo Carvalho de Melo
2026-09-30 21:37 ` [PATCH v6 5/5] perf test: Add false_sharing workload exhibiting cross-CPU false sharing Arnaldo Carvalho de Melo
2026-09-30 22:05   ` sashiko-bot
2026-10-01  7:28   ` Namhyung Kim
2026-10-01  9:18     ` Arnaldo Carvalho de Melo
  -- strict thread matches above, loose matches on Subject: below --
2026-09-30 11:24 [PATCH v6 0/5] 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=20260930213716.2633750-1-acme@kernel.org \
    --to=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=namhyung@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.