linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1] perf test stat: Avoid hybrid assumption when virtualized
@ 2024-12-11  6:10 Ian Rogers
  2024-12-11  9:50 ` James Clark
  0 siblings, 1 reply; 4+ messages in thread
From: Ian Rogers @ 2024-12-11  6:10 UTC (permalink / raw)
  To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
	Ian Rogers, Adrian Hunter, Kan Liang, James Clark,
	linux-perf-users, linux-kernel

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@google.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]"
 }
-- 
2.47.1.613.gc27f4b7a9f-goog


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v1] perf test stat: Avoid hybrid assumption when virtualized
  2024-12-11  6:10 [PATCH v1] perf test stat: Avoid hybrid assumption when virtualized Ian Rogers
@ 2024-12-11  9:50 ` James Clark
  2024-12-11 17:58   ` Ian Rogers
  0 siblings, 1 reply; 4+ messages in thread
From: James Clark @ 2024-12-11  9:50 UTC (permalink / raw)
  To: Ian Rogers
  Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
	Adrian Hunter, Kan Liang, linux-perf-users, linux-kernel



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

Thanks
James


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v1] perf test stat: Avoid hybrid assumption when virtualized
  2024-12-11  9:50 ` James Clark
@ 2024-12-11 17:58   ` Ian Rogers
  2024-12-12 15:45     ` James Clark
  0 siblings, 1 reply; 4+ messages in thread
From: Ian Rogers @ 2024-12-11 17:58 UTC (permalink / raw)
  To: James Clark
  Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
	Adrian Hunter, Kan Liang, linux-perf-users, linux-kernel

On Wed, Dec 11, 2024 at 1:50 AM James Clark <james.clark@linaro.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@google.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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v1] perf test stat: Avoid hybrid assumption when virtualized
  2024-12-11 17:58   ` Ian Rogers
@ 2024-12-12 15:45     ` James Clark
  0 siblings, 0 replies; 4+ messages in thread
From: James Clark @ 2024-12-12 15:45 UTC (permalink / raw)
  To: Ian Rogers, Namhyung Kim
  Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
	Adrian Hunter, Kan Liang, linux-perf-users, linux-kernel



On 11/12/2024 5:58 pm, Ian Rogers wrote:
> On Wed, Dec 11, 2024 at 1:50 AM James Clark <james.clark@linaro.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@google.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" ]

Yes it might make sense to skip this part if pmus == 0 then. Namhyung 
suggested to always assume 1 PMU to cover platforms that don't publish 
any PMU with the cpus file, but I suppose that breaks in this case.

If you still add the fallback check for task-clock it covers hybrid, 1 
PMU and virtualized and we could even rename the test to 
test_default_stat_2.

> ```
> 
> Thanks,
> Ian


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-12-12 15:45 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-11  6:10 [PATCH v1] perf test stat: Avoid hybrid assumption when virtualized Ian Rogers
2024-12-11  9:50 ` James Clark
2024-12-11 17:58   ` Ian Rogers
2024-12-12 15:45     ` James Clark

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).