lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAP-5=fVxPaSYtB62ZqcLOG1F9Va-0rwBWUCiVNdaBpmsGXUVaA@mail.gmail.com>
Date: Wed, 11 Dec 2024 09:58:11 -0800
From: Ian Rogers <irogers@...gle.com>
To: James Clark <james.clark@...aro.org>
Cc: Peter Zijlstra <peterz@...radead.org>, Ingo Molnar <mingo@...hat.com>, 
	Arnaldo Carvalho de Melo <acme@...nel.org>, Namhyung Kim <namhyung@...nel.org>, 
	Mark Rutland <mark.rutland@....com>, 
	Alexander Shishkin <alexander.shishkin@...ux.intel.com>, Jiri Olsa <jolsa@...nel.org>, 
	Adrian Hunter <adrian.hunter@...el.com>, Kan Liang <kan.liang@...ux.intel.com>, 
	linux-perf-users@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v1] perf test stat: Avoid hybrid assumption when virtualized

On Wed, Dec 11, 2024 at 1:50 AM James Clark <james.clark@...aro.org> wrote:
>
> On 11/12/2024 6:10 am, Ian Rogers wrote:
> > The cycles event will fallback to task-clock in the hybrid test when
> > running virtualized. Change the test to not fail for this.
> >
> > Fixes: a6b8bb2addd0 ("perf test: Add a test for default perf stat command")
> > Signed-off-by: Ian Rogers <irogers@...gle.com>
> > ---
> >   tools/perf/tests/shell/stat.sh | 10 +++++++---
> >   1 file changed, 7 insertions(+), 3 deletions(-)
> >
> > diff --git a/tools/perf/tests/shell/stat.sh b/tools/perf/tests/shell/stat.sh
> > index 5a2ca2bcf94d..60cea07350e1 100755
> > --- a/tools/perf/tests/shell/stat.sh
> > +++ b/tools/perf/tests/shell/stat.sh
> > @@ -165,9 +165,13 @@ test_hybrid() {
> >
> >     if [ "$pmus" -ne "$cycles_events" ]
> >     then
> > -    echo "hybrid test [Found $pmus PMUs but $cycles_events cycles events. Failed]"
> > -    err=1
> > -    return
> > +     # If virtualized the software task-clock event will be used.
> > +     if ! perf stat -- true 2>&1 | grep -q "task-clock"
> > +     then
> > +       echo "hybrid test [Found $pmus PMUs but $cycles_events cycles events. Failed]"
> > +       err=1
> > +       return
> > +     fi
> >     fi
> >     echo "hybrid test [Success]"
> >   }
>
> Hi Ian,
>
> Isn't the distinction between task-clock and cpu-clock whether the event
> is per-cpu or not?
>
> $ perf stat -C 1 -- true 2>&1 | grep cpu-clock
>                1.49 msec cpu-clock       #    0.917 CPUs utilized
>
> $ perf stat -- true 2>&1 | grep task-clock
>                0.30 msec task-clock      #    0.366 CPUs utilized
>
> The test uses per-task mode so this change makes it always pass, even
> when the number of cycles events doesn't match the PMUs.

So I'm confused by the test, but it has caused a passing test to be
broken for me when I run virtualized. The test is checking a cycles
event is opened on each hybrid PMU, but this is conflated with
checking perf stat's "default" output. The cycles event will fall back
to task-clock in per-task mode but we also open a task-clock in
default mode. Should:
```
if [ "$pmus" -ne "$cycles_events" ]
```
be something like this then:
```
# The expectation is that default output will have a cycles events on
each hybrid
# PMU, but in situations with no cycles PMU events, like
virtualized,this can fall
# back to task-clock and so the end count may be 0. Fail if neither
condition holds.
if [ "$pmus" -ne "$cycles_events" ] && [ "$pmus" -ne "0" ]
```

Thanks,
Ian

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ