[PATCH v2] perf test stat: Avoid hybrid assumption when virtualized

Ian Rogers posted 1 patch 1 year ago
tools/perf/tests/shell/stat.sh | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
[PATCH v2] perf test stat: Avoid hybrid assumption when virtualized
Posted by Ian Rogers 1 year ago
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 | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/tools/perf/tests/shell/stat.sh b/tools/perf/tests/shell/stat.sh
index 5a2ca2bcf94d..da42427bb077 100755
--- a/tools/perf/tests/shell/stat.sh
+++ b/tools/perf/tests/shell/stat.sh
@@ -163,7 +163,11 @@ test_hybrid() {
   # Run default Perf stat
   cycles_events=$(perf stat -- true 2>&1 | grep -E "/cycles/|  cycles  " | wc -l)
 
-  if [ "$pmus" -ne "$cycles_events" ]
+  # The expectation is that default output will have a cycles events on each
+  # hybrid PMU. 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" ] && [ "0" -ne "$cycles_events" ]
   then
     echo "hybrid test [Found $pmus PMUs but $cycles_events cycles events. Failed]"
     err=1
-- 
2.47.1.613.gc27f4b7a9f-goog
Re: [PATCH v2] perf test stat: Avoid hybrid assumption when virtualized
Posted by James Clark 1 year ago

On 12/12/2024 5:33 pm, 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 | 6 +++++-
>   1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/perf/tests/shell/stat.sh b/tools/perf/tests/shell/stat.sh
> index 5a2ca2bcf94d..da42427bb077 100755
> --- a/tools/perf/tests/shell/stat.sh
> +++ b/tools/perf/tests/shell/stat.sh
> @@ -163,7 +163,11 @@ test_hybrid() {
>     # Run default Perf stat
>     cycles_events=$(perf stat -- true 2>&1 | grep -E "/cycles/|  cycles  " | wc -l)
>   
> -  if [ "$pmus" -ne "$cycles_events" ]
> +  # The expectation is that default output will have a cycles events on each
> +  # hybrid PMU. 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" ] && [ "0" -ne "$cycles_events" ]
>     then
>       echo "hybrid test [Found $pmus PMUs but $cycles_events cycles events. Failed]"
>       err=1

Reviewed-by: James Clark <james.clark@linaro.org>
Re: [PATCH v2] perf test stat: Avoid hybrid assumption when virtualized
Posted by Namhyung Kim 1 year ago
On Thu, Dec 12, 2024 at 09:33:54AM -0800, 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")

I cannot find this commit.

> Signed-off-by: Ian Rogers <irogers@google.com>

Other than that,

Acked-by: Namhyung Kim <namhyung@kernel.org>

Thanks,
Namhyung

> ---
>  tools/perf/tests/shell/stat.sh | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/perf/tests/shell/stat.sh b/tools/perf/tests/shell/stat.sh
> index 5a2ca2bcf94d..da42427bb077 100755
> --- a/tools/perf/tests/shell/stat.sh
> +++ b/tools/perf/tests/shell/stat.sh
> @@ -163,7 +163,11 @@ test_hybrid() {
>    # Run default Perf stat
>    cycles_events=$(perf stat -- true 2>&1 | grep -E "/cycles/|  cycles  " | wc -l)
>  
> -  if [ "$pmus" -ne "$cycles_events" ]
> +  # The expectation is that default output will have a cycles events on each
> +  # hybrid PMU. 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" ] && [ "0" -ne "$cycles_events" ]
>    then
>      echo "hybrid test [Found $pmus PMUs but $cycles_events cycles events. Failed]"
>      err=1
> -- 
> 2.47.1.613.gc27f4b7a9f-goog
>
Re: [PATCH v2] perf test stat: Avoid hybrid assumption when virtualized
Posted by Ian Rogers 1 year ago
On Thu, Dec 12, 2024 at 5:39 PM Namhyung Kim <namhyung@kernel.org> wrote:
>
> On Thu, Dec 12, 2024 at 09:33:54AM -0800, 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")
>
> I cannot find this commit.

Sorry, should have been:
Fixes: 65d11821910b ("perf test: Add a test for default perf stat command")

Thanks,
Ian

> > Signed-off-by: Ian Rogers <irogers@google.com>
>
> Other than that,
>
> Acked-by: Namhyung Kim <namhyung@kernel.org>
>
> Thanks,
> Namhyung
>
> > ---
> >  tools/perf/tests/shell/stat.sh | 6 +++++-
> >  1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/tools/perf/tests/shell/stat.sh b/tools/perf/tests/shell/stat.sh
> > index 5a2ca2bcf94d..da42427bb077 100755
> > --- a/tools/perf/tests/shell/stat.sh
> > +++ b/tools/perf/tests/shell/stat.sh
> > @@ -163,7 +163,11 @@ test_hybrid() {
> >    # Run default Perf stat
> >    cycles_events=$(perf stat -- true 2>&1 | grep -E "/cycles/|  cycles  " | wc -l)
> >
> > -  if [ "$pmus" -ne "$cycles_events" ]
> > +  # The expectation is that default output will have a cycles events on each
> > +  # hybrid PMU. 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" ] && [ "0" -ne "$cycles_events" ]
> >    then
> >      echo "hybrid test [Found $pmus PMUs but $cycles_events cycles events. Failed]"
> >      err=1
> > --
> > 2.47.1.613.gc27f4b7a9f-goog
> >
Re: [PATCH v2] perf test stat: Avoid hybrid assumption when virtualized
Posted by Arnaldo Carvalho de Melo 11 months ago
On Thu, Dec 12, 2024 at 07:31:04PM -0800, Ian Rogers wrote:
> On Thu, Dec 12, 2024 at 5:39 PM Namhyung Kim <namhyung@kernel.org> wrote:
> > On Thu, Dec 12, 2024 at 09:33:54AM -0800, 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")

> > I cannot find this commit.
 
> Sorry, should have been:
> Fixes: 65d11821910b ("perf test: Add a test for default perf stat command")

Thanks, applied to perf-tools-next, there was a minimal fuzz but I fixed
it up:

⬢ [acme@toolbox perf-tools-next]$ patch -p1 < ./v2_20241212_irogers_perf_test_stat_avoid_hybrid_assumption_when_virtualized.mbx
patching file tools/perf/tests/shell/stat.sh
Hunk #1 succeeded at 187 with fuzz 2 (offset 24 lines).

- Arnaldo
 
> Thanks,
> Ian
> 
> > > Signed-off-by: Ian Rogers <irogers@google.com>
> >
> > Other than that,
> >
> > Acked-by: Namhyung Kim <namhyung@kernel.org>
> >
> > Thanks,
> > Namhyung
> >
> > > ---
> > >  tools/perf/tests/shell/stat.sh | 6 +++++-
> > >  1 file changed, 5 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/tools/perf/tests/shell/stat.sh b/tools/perf/tests/shell/stat.sh
> > > index 5a2ca2bcf94d..da42427bb077 100755
> > > --- a/tools/perf/tests/shell/stat.sh
> > > +++ b/tools/perf/tests/shell/stat.sh
> > > @@ -163,7 +163,11 @@ test_hybrid() {
> > >    # Run default Perf stat
> > >    cycles_events=$(perf stat -- true 2>&1 | grep -E "/cycles/|  cycles  " | wc -l)
> > >
> > > -  if [ "$pmus" -ne "$cycles_events" ]
> > > +  # The expectation is that default output will have a cycles events on each
> > > +  # hybrid PMU. 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" ] && [ "0" -ne "$cycles_events" ]
> > >    then
> > >      echo "hybrid test [Found $pmus PMUs but $cycles_events cycles events. Failed]"
> > >      err=1
> > > --
> > > 2.47.1.613.gc27f4b7a9f-goog
> > >