RE: [RFC PATCH v16 8/8] perf test: Add test for Intel TPEBS counting mode

From: Wang, Weilin
Date: Tue Jul 09 2024 - 02:24:09 EST




> -----Original Message-----
> From: Namhyung Kim <namhyung@xxxxxxxxxx>
> Sent: Monday, July 8, 2024 10:04 PM
> To: Wang, Weilin <weilin.wang@xxxxxxxxx>
> Cc: Ian Rogers <irogers@xxxxxxxxxx>; Arnaldo Carvalho de Melo
> <acme@xxxxxxxxxx>; Peter Zijlstra <peterz@xxxxxxxxxxxxx>; Ingo Molnar
> <mingo@xxxxxxxxxx>; Alexander Shishkin
> <alexander.shishkin@xxxxxxxxxxxxxxx>; Jiri Olsa <jolsa@xxxxxxxxxx>; Hunter,
> Adrian <adrian.hunter@xxxxxxxxx>; Kan Liang <kan.liang@xxxxxxxxxxxxxxx>;
> linux-perf-users@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Taylor, Perry
> <perry.taylor@xxxxxxxxx>; Alt, Samantha <samantha.alt@xxxxxxxxx>; Biggers,
> Caleb <caleb.biggers@xxxxxxxxx>
> Subject: Re: [RFC PATCH v16 8/8] perf test: Add test for Intel TPEBS counting
> mode
>
> On Mon, Jul 8, 2024 at 9:58 PM Wang, Weilin <weilin.wang@xxxxxxxxx>
> wrote:
> >
> >
> >
> > > -----Original Message-----
> > > From: Namhyung Kim <namhyung@xxxxxxxxxx>
> > > Sent: Monday, July 8, 2024 9:44 PM
> > > To: Wang, Weilin <weilin.wang@xxxxxxxxx>
> > > Cc: Ian Rogers <irogers@xxxxxxxxxx>; Arnaldo Carvalho de Melo
> > > <acme@xxxxxxxxxx>; Peter Zijlstra <peterz@xxxxxxxxxxxxx>; Ingo Molnar
> > > <mingo@xxxxxxxxxx>; Alexander Shishkin
> > > <alexander.shishkin@xxxxxxxxxxxxxxx>; Jiri Olsa <jolsa@xxxxxxxxxx>; Hunter,
> > > Adrian <adrian.hunter@xxxxxxxxx>; Kan Liang <kan.liang@xxxxxxxxxxxxxxx>;
> > > linux-perf-users@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Taylor,
> Perry
> > > <perry.taylor@xxxxxxxxx>; Alt, Samantha <samantha.alt@xxxxxxxxx>;
> Biggers,
> > > Caleb <caleb.biggers@xxxxxxxxx>
> > > Subject: Re: [RFC PATCH v16 8/8] perf test: Add test for Intel TPEBS
> counting
> > > mode
> > >
> > > Hello Weilin,
> > >
> > > On Sat, Jul 6, 2024 at 4:30 PM <weilin.wang@xxxxxxxxx> wrote:
> > > >
> > > > From: Weilin Wang <weilin.wang@xxxxxxxxx>
> > > >
> > > > Intel TPEBS sampling mode is supported through perf record. The
> counting
> > > mode
> > > > code uses perf record to capture retire_latency value and use it in metric
> > > > calculation. This test checks the counting mode code.
> > > >
> > > > Signed-off-by: Weilin Wang <weilin.wang@xxxxxxxxx>
> > > > ---
> > > > .../perf/tests/shell/test_stat_intel_tpebs.sh | 18
> ++++++++++++++++++
> > > > 1 file changed, 18 insertions(+)
> > > > create mode 100755 tools/perf/tests/shell/test_stat_intel_tpebs.sh
> > > >
> > > > diff --git a/tools/perf/tests/shell/test_stat_intel_tpebs.sh
> > > b/tools/perf/tests/shell/test_stat_intel_tpebs.sh
> > > > new file mode 100755
> > > > index 000000000000..fea8cb1b8367
> > > > --- /dev/null
> > > > +++ b/tools/perf/tests/shell/test_stat_intel_tpebs.sh
> > > > @@ -0,0 +1,18 @@
> > > > +#!/bin/bash
> > > > +# test Intel TPEBS counting mode
> > > > +# SPDX-License-Identifier: GPL-2.0
> > > > +
> > > > +set -e
> > > > +
> > > > +# Use this event for testing because it should exist in all platforms
> > > > +event=cache-misses:R
> > > > +
> > > > +# Without this cmd option, default value or zero is returned
> > > > +echo "Testing without --record-tpebs"
> > > > +result=$(perf stat -e "$event" true 2>&1)
> > > > +[[ "$result" =~ $event ]] || exit 1
> > > > +
> > > > +# In platforms that do not support TPEBS, it should execute without
> error.
> > > > +echo "Testing with --record-tpebs"
> > > > +result=$(perf stat -e "$event" --record-tpebs -a sleep 0.01 2>&1)
> > >
> > > It never finishes on my AMD machine.
> > >
> > Hi Namhyung,
> >
> > Do you see any message while it executes? Is the perf record forked
> successfully
> > but failed to return?
>
> I don't know.. all I can get is like below:
>
> $ sudo ./perf test tpebs -vv
> 121: test Intel TPEBS counting mode:
> --- start ---
> test child forked, pid 583475
> Testing without --record-tpebs
> Testing with --record-tpebs
> ^C

I think the problem is that the forked "perf record" encountered error, which
caused the control fifo failed to send a "ACK" back and the PIPE hanged.

Could you please try out the diff below and see if the test would finish?

As for the "perf record" error, I think it might because of the fake
event(cache-misses:R) cannot be supported in AMD. Could you please test run
a "perf stat -e cache-misses:R --record-tpebs true" and see if it complains about
the event?

diff --git a/tools/perf/util/intel-tpebs.c b/tools/perf/util/intel-tpebs.c
index a0585a6571b5..5b8e104f36f1 100644
--- a/tools/perf/util/intel-tpebs.c
+++ b/tools/perf/util/intel-tpebs.c
@@ -263,6 +263,7 @@ int tpebs_start(struct evlist *evsel_list)
}

if (tpebs_event_size > 0) {
+ struct pollfd pollfd = { .events = POLLIN, };
int control_fd[2], ack_fd[2], len;
char ack_buf[8];

@@ -297,6 +298,19 @@ int tpebs_start(struct evlist *evsel_list)
goto out;
}

+ /* wait for an ack */
+ pollfd.fd = ack_fd[0];
+
+ if (!poll(&pollfd, 1, 2000)) {
+ pr_err("failed: perf record ack timeout\n");
+ goto out;
+ }
+
+ if (!(pollfd.revents & POLLIN)) {
+ pr_err("failed: did not received an ack\n");
+ goto out;
+ }
+
ret = read(ack_fd[0], ack_buf, sizeof(ack_buf));
if (ret > 0)
ret = strcmp(ack_buf, "ack\n");

Thanks,
Weilin