From: Namhyung Kim <namhyung@kernel.org>
To: James Clark <james.clark@linaro.org>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>, Ian Rogers <irogers@google.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Jakub Brnak <jbrnak@redhat.com>, Leo Yan <leo.yan@arm.com>,
Arnaldo Carvalho de Melo <acme@redhat.com>,
linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 4/4] perf test: Don't starve per-process tests with system-wide events
Date: Thu, 5 Nov 2026 20:43:18 -0800 [thread overview]
Message-ID: <au1a5v8WozQm2RKU@google.com> (raw)
In-Reply-To: <20261105-james-perf-test-fixes-v1-4-0b279bee5830@linaro.org>
On Thu, Nov 05, 2026 at 03:49:06PM +0000, James Clark wrote:
> Some tests intermittently fail when run in parallel, for example "Check
> branch stack sampling" fails with no branches recorded at all.
>
> The default event is cycles:P which there may only be 1 or 2 HW counters
> for on Intel because it's precise. System wide or per-core precise
> events hog the HW counter leaving other per-process tests with no
> samples. Rather than make all the tests that use default record commands
> run serially, just make the system wide ones use a non-precise event.
> They don't need precise sampling anyway, so use plain cycles which can
> go on any counter. The per-process tests can be left alone as their
> events/processes never run concurrently on any one core.
One side effect of using default event is that it can fallback when it's
not available like on a VM or non-root. Maybe better to use a software
event like cpu-clock instead.
Thanks,
Namhyung
>
> The LBR filter is another resource shared by all events on a CPU, and
> the system-wide LBR test uses different filters to the per-process
> branch stack test, so mark the LBR test as exclusive.
>
> This fixes the "Check branch stack sampling" test and other flakes when
> a system-wide record from another test runs at the same time, for
> example:
>
> $ sudo perf record -a -o /dev/null -- sleep 30 &
> $ sudo perf test -vvv "Check branch stack sampling"
> ...
> Testing user branch stack sampling
> ERROR: Branches missing ^brstack_bench\+[^ ]*/brstack_foo\+[^ ]*/IND_CALL/.*$
> ...
> Testing user branch stack sampling [Failed]
> ...
> Testing branch stack filtering permutation (call,CALL|SYSCALL)
> Testing branch stack filtering [Failed empty script output]
> ...
> ---- end(-1) ----
> 138: Check branch stack sampling : FAILED!
>
> Signed-off-by: James Clark <james.clark@linaro.org>
> ---
> tools/perf/tests/shell/record.sh | 6 +++---
> tools/perf/tests/shell/record_lbr.sh | 2 +-
> tools/perf/tests/shell/record_sideband.sh | 4 ++--
> 3 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/tools/perf/tests/shell/record.sh b/tools/perf/tests/shell/record.sh
> index 01dc3e22fa73..5292eff78a70 100755
> --- a/tools/perf/tests/shell/record.sh
> +++ b/tools/perf/tests/shell/record.sh
> @@ -388,7 +388,7 @@ test_system_wide() {
> echo "Basic --system-wide mode test"
> local ret=0
> perf_record_with_retry "${perfdata}" "check_system_wide" "perf test -w thloop" \
> - -aB --synth=no || ret=$?
> + -aB --synth=no -e cycles || ret=$?
> if [ $ret -eq 2 ]; then
> echo "System-wide record [Skipped not supported]"
> return
> @@ -471,7 +471,7 @@ test_cgroup() {
> echo "Cgroup sampling test"
> local ret=0
> perf_record_with_retry "${perfdata}" "check_cgroup" "perf test -w thloop" \
> - -aB --synth=cgroup --all-cgroups || ret=$?
> + -aB --synth=cgroup --all-cgroups -e cycles || ret=$?
> if [ $ret -eq 2 ]; then
> echo "Cgroup sampling [Skipped not supported]"
> return
> @@ -491,7 +491,7 @@ test_uid() {
> echo "Uid sampling test"
> local ret=0
> perf_record_with_retry "${perfdata}" "check_uid" "perf test -w thloop" \
> - -aB --synth=no --uid "$(id -u)" || ret=$?
> + -aB --synth=no --uid "$(id -u)" -e cycles || ret=$?
> if [ $ret -eq 2 ]; then
> local logfile="${PERF_RECORD_LOGS[${#PERF_RECORD_LOGS[@]}-1]}"
> if grep -q -E "libbpf.*EPERM|Access to performance monitoring" "$logfile" || \
> diff --git a/tools/perf/tests/shell/record_lbr.sh b/tools/perf/tests/shell/record_lbr.sh
> index 8d51afeb437b..6b6af59db871 100755
> --- a/tools/perf/tests/shell/record_lbr.sh
> +++ b/tools/perf/tests/shell/record_lbr.sh
> @@ -1,6 +1,6 @@
> #!/bin/bash
> # SPDX-License-Identifier: GPL-2.0
> -# perf record LBR tests
> +# perf record LBR tests (exclusive)
>
> set -e
>
> diff --git a/tools/perf/tests/shell/record_sideband.sh b/tools/perf/tests/shell/record_sideband.sh
> index 2182551873be..31ec2f5cde69 100755
> --- a/tools/perf/tests/shell/record_sideband.sh
> +++ b/tools/perf/tests/shell/record_sideband.sh
> @@ -22,7 +22,7 @@ trap trap_cleanup EXIT TERM INT
>
> can_cpu_wide()
> {
> - if ! perf record -o ${perfdata} -BN --no-bpf-event -C $1 true > /dev/null 2>&1
> + if ! perf record -o ${perfdata} -BN --no-bpf-event -e cycles -C $1 true > /dev/null 2>&1
> then
> echo "record sideband test [Skipped cannot record cpu$1]"
> err=2
> @@ -39,7 +39,7 @@ test_system_wide_tracking()
> can_cpu_wide 1 || return 0
>
> # Record on CPU 0 a task running on CPU 1
> - perf record -BN --no-bpf-event -o ${perfdata} -C 0 -- taskset --cpu-list 1 true
> + perf record -BN --no-bpf-event -e cycles -o ${perfdata} -C 0 -- taskset --cpu-list 1 true
>
> # Should get MMAP events from CPU 1
> mmap_cnt=`perf script -i ${perfdata} --show-mmap-events -C 1 2>/dev/null | grep MMAP | wc -l`
>
> --
> 2.43.0
>
next prev parent reply other threads:[~2026-11-06 4:43 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-05 15:49 [PATCH 0/4] perf tools: LLVM dwarf and flaky test fixes James Clark
2026-11-05 15:49 ` [PATCH 1/4] perf libdw: Find the CU by iterating all CUs when aranges are missing James Clark
2026-11-06 5:36 ` sashiko-bot
2026-11-05 15:49 ` [PATCH 2/4] perf dwarf-aux: Support DW_OP_addrx locations for global variables James Clark
2026-11-06 5:44 ` sashiko-bot
2026-11-05 15:49 ` [PATCH 3/4] perf test probe_vfs_getname: Fix missing debuginfo detection James Clark
2026-11-06 4:39 ` Namhyung Kim
2026-11-06 5:47 ` sashiko-bot
2026-11-05 15:49 ` [PATCH 4/4] perf test: Don't starve per-process tests with system-wide events James Clark
2026-11-06 4:43 ` Namhyung Kim [this message]
2026-11-06 5:51 ` sashiko-bot
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=au1a5v8WozQm2RKU@google.com \
--to=namhyung@kernel.org \
--cc=acme@kernel.org \
--cc=acme@redhat.com \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=jbrnak@redhat.com \
--cc=jolsa@kernel.org \
--cc=leo.yan@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--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 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.