2022-07-27 15:04:36

by Thomas Richter

[permalink] [raw]
Subject: [PATCH] perf/tests: Fix test case 95 on s390 and use same event

On linux-next tree perf test 95 was added recently.
s390 does not support branch sampling at all and the test case fails
despite for checking branch support before hand.
The check for support of branching
uses the software event named dummy, as seen in the line:

perf record -b -o- -e dummy -B true > /dev/null 2>&1 || exit 2

However when the branch recording is actually done, a different
event is used, as seen in the line:

perf record -o $TMPDIR/... --branch-filter any,save_type,u -- ...

The event is omitted and for perf record the default event is
cycles, which is not supported by s390 and this fails when executed
on s390:

# perf record --branch-filter any,save_type,u -- \
/tmp/__perf_test.program.iDSmQ/a.out
Error:
cycles: PMU Hardware or event type doesn't support branch stack sampling.
#

Therefore fix this and use the same event cycles for testing support
and actually running the test.

Output before:
# ./perf test -Fv 95
95: Check branch stack sampling :
--- start ---
Testing user branch stack sampling
---- end ----
Check branch stack sampling: FAILED!
#

Output after:
# ./perf test -Fv 95
95: Check branch stack sampling :
--- start ---
---- end ----
Check branch stack sampling: Skip
#

Fixes: b55878c90ab9 ("perf test: Add test for branch stack sampling")
Signed-off-by: Thomas Richter <[email protected]>
---
tools/perf/tests/shell/test_brstack.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/perf/tests/shell/test_brstack.sh b/tools/perf/tests/shell/test_brstack.sh
index 113ccd17bf03..c644f94a6500 100755
--- a/tools/perf/tests/shell/test_brstack.sh
+++ b/tools/perf/tests/shell/test_brstack.sh
@@ -12,7 +12,7 @@ if ! [ -x "$(command -v cc)" ]; then
fi

# skip the test if the hardware doesn't support branch stack sampling
-perf record -b -o- -e dummy -B true > /dev/null 2>&1 || exit 2
+perf record -b -o- -B true > /dev/null 2>&1 || exit 2

TMPDIR=$(mktemp -d /tmp/__perf_test.program.XXXXX)

--
2.36.1


2022-07-28 09:20:45

by James Clark

[permalink] [raw]
Subject: Re: [PATCH] perf/tests: Fix test case 95 on s390 and use same event



On 27/07/2022 15:14, Thomas Richter wrote:
> On linux-next tree perf test 95 was added recently.
> s390 does not support branch sampling at all and the test case fails
> despite for checking branch support before hand.
> The check for support of branching
> uses the software event named dummy, as seen in the line:
>
> perf record -b -o- -e dummy -B true > /dev/null 2>&1 || exit 2
>
> However when the branch recording is actually done, a different
> event is used, as seen in the line:
>
> perf record -o $TMPDIR/... --branch-filter any,save_type,u -- ...
>
> The event is omitted and for perf record the default event is
> cycles, which is not supported by s390 and this fails when executed
> on s390:
>
> # perf record --branch-filter any,save_type,u -- \
> /tmp/__perf_test.program.iDSmQ/a.out
> Error:
> cycles: PMU Hardware or event type doesn't support branch stack sampling.
> #
>
> Therefore fix this and use the same event cycles for testing support
> and actually running the test.
>
> Output before:
> # ./perf test -Fv 95
> 95: Check branch stack sampling :
> --- start ---
> Testing user branch stack sampling
> ---- end ----
> Check branch stack sampling: FAILED!
> #
>
> Output after:
> # ./perf test -Fv 95
> 95: Check branch stack sampling :
> --- start ---
> ---- end ----
> Check branch stack sampling: Skip
> #
>
> Fixes: b55878c90ab9 ("perf test: Add test for branch stack sampling")
> Signed-off-by: Thomas Richter <[email protected]>

Looks good to me.

Reviewed-by: James Clark <[email protected]>

> ---
> tools/perf/tests/shell/test_brstack.sh | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tools/perf/tests/shell/test_brstack.sh b/tools/perf/tests/shell/test_brstack.sh
> index 113ccd17bf03..c644f94a6500 100755
> --- a/tools/perf/tests/shell/test_brstack.sh
> +++ b/tools/perf/tests/shell/test_brstack.sh
> @@ -12,7 +12,7 @@ if ! [ -x "$(command -v cc)" ]; then
> fi
>
> # skip the test if the hardware doesn't support branch stack sampling
> -perf record -b -o- -e dummy -B true > /dev/null 2>&1 || exit 2
> +perf record -b -o- -B true > /dev/null 2>&1 || exit 2
>
> TMPDIR=$(mktemp -d /tmp/__perf_test.program.XXXXX)
>

2022-07-28 09:46:27

by German Gomez

[permalink] [raw]
Subject: Re: [PATCH] perf/tests: Fix test case 95 on s390 and use same event

Thanks for the fix, Thomas

On 27/07/2022 15:14, Thomas Richter wrote:
> On linux-next tree perf test 95 was added recently.
> s390 does not support branch sampling at all and the test case fails
> despite for checking branch support before hand.
> The check for support of branching
> uses the software event named dummy, as seen in the line:
>
> perf record -b -o- -e dummy -B true > /dev/null 2>&1 || exit 2

Just curious, do you know why the command succeeds in this platform (and
potentially others)?

I got the idea of using "dummy" from [1] but only tested on arm64 and
x86. I thought the platforms would reject it if -b was not implemented
regardless of the event. Did I misunderstand the use of dummy?

Thanks,
German

[1] https://lore.kernel.org/all/20220617073840.GA45710@leoy-ThinkPad-X240s/

>
> However when the branch recording is actually done, a different
> event is used, as seen in the line:
>
> perf record -o $TMPDIR/... --branch-filter any,save_type,u -- ...
>
> The event is omitted and for perf record the default event is
> cycles, which is not supported by s390 and this fails when executed
> on s390:
>
> # perf record --branch-filter any,save_type,u -- \
> /tmp/__perf_test.program.iDSmQ/a.out
> Error:
> cycles: PMU Hardware or event type doesn't support branch stack sampling.
> #
>
> Therefore fix this and use the same event cycles for testing support
> and actually running the test.
>
> Output before:
> # ./perf test -Fv 95
> 95: Check branch stack sampling :
> --- start ---
> Testing user branch stack sampling
> ---- end ----
> Check branch stack sampling: FAILED!
> #
>
> Output after:
> # ./perf test -Fv 95
> 95: Check branch stack sampling :
> --- start ---
> ---- end ----
> Check branch stack sampling: Skip
> #
>
> Fixes: b55878c90ab9 ("perf test: Add test for branch stack sampling")
> Signed-off-by: Thomas Richter <[email protected]>
> ---
> tools/perf/tests/shell/test_brstack.sh | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tools/perf/tests/shell/test_brstack.sh b/tools/perf/tests/shell/test_brstack.sh
> index 113ccd17bf03..c644f94a6500 100755
> --- a/tools/perf/tests/shell/test_brstack.sh
> +++ b/tools/perf/tests/shell/test_brstack.sh
> @@ -12,7 +12,7 @@ if ! [ -x "$(command -v cc)" ]; then
> fi
>
> # skip the test if the hardware doesn't support branch stack sampling
> -perf record -b -o- -e dummy -B true > /dev/null 2>&1 || exit 2
> +perf record -b -o- -B true > /dev/null 2>&1 || exit 2
>
> TMPDIR=$(mktemp -d /tmp/__perf_test.program.XXXXX)
>

2022-07-28 12:31:41

by German Gomez

[permalink] [raw]
Subject: Re: [PATCH] perf/tests: Fix test case 95 on s390 and use same event


On 28/07/2022 13:20, Thomas Richter wrote:
> On 7/28/22 11:25, German Gomez wrote:
>> Thanks for the fix, Thomas
>>
>> On 27/07/2022 15:14, Thomas Richter wrote:
>>> On linux-next tree perf test 95 was added recently.
>>> s390 does not support branch sampling at all and the test case fails
>>> despite for checking branch support before hand.
>>> The check for support of branching
>>> uses the software event named dummy, as seen in the line:
>>>
>>> perf record -b -o- -e dummy -B true > /dev/null 2>&1 || exit 2
>> Just curious, do you know why the command succeeds in this platform (and
>> potentially others)?
>>
>> I got the idea of using "dummy" from [1] but only tested on arm64 and
>> x86. I thought the platforms would reject it if -b was not implemented
>> regardless of the event. Did I misunderstand the use of dummy?
>>
>> Thanks,
>> German
>>
>> [1] https://lore.kernel.org/all/20220617073840.GA45710@leoy-ThinkPad-X240s/
>>
> Well, dummy is a predefined event of type software, you see that when you add
> some -v options as in
> # perf record -e dummy -vvv
> DEBUGINFOD_URLS=
> Using CPUID IBM,3931,704,A01,3.7,002f
> nr_cblocks: 0
> affinity: SYS
> mmap flush: 1
> comp level: 0
> ------------------------------------------------------------
> perf_event_attr:
> type 1 <----------- type 1 is software
> size 128
> config 0x9
> { sample_period, sample_freq } 4000
>
>
> So this event is never sent to an hardware PMU (which would have type 0) and thus
> mostly succeeds where as the perf record command without event uses default
> event cycles. And that one is sent to hardware PMU on s390...

Thanks for explaining! My bad for missing this.

Acked-by: German Gomez <[email protected]>

>

2022-07-28 12:48:39

by Thomas Richter

[permalink] [raw]
Subject: Re: [PATCH] perf/tests: Fix test case 95 on s390 and use same event

On 7/28/22 11:25, German Gomez wrote:
> Thanks for the fix, Thomas
>
> On 27/07/2022 15:14, Thomas Richter wrote:
>> On linux-next tree perf test 95 was added recently.
>> s390 does not support branch sampling at all and the test case fails
>> despite for checking branch support before hand.
>> The check for support of branching
>> uses the software event named dummy, as seen in the line:
>>
>> perf record -b -o- -e dummy -B true > /dev/null 2>&1 || exit 2
>
> Just curious, do you know why the command succeeds in this platform (and
> potentially others)?
>
> I got the idea of using "dummy" from [1] but only tested on arm64 and
> x86. I thought the platforms would reject it if -b was not implemented
> regardless of the event. Did I misunderstand the use of dummy?
>
> Thanks,
> German
>
> [1] https://lore.kernel.org/all/20220617073840.GA45710@leoy-ThinkPad-X240s/
>

Well, dummy is a predefined event of type software, you see that when you add
some -v options as in
# perf record -e dummy -vvv
DEBUGINFOD_URLS=
Using CPUID IBM,3931,704,A01,3.7,002f
nr_cblocks: 0
affinity: SYS
mmap flush: 1
comp level: 0
------------------------------------------------------------
perf_event_attr:
type 1 <----------- type 1 is software
size 128
config 0x9
{ sample_period, sample_freq } 4000


So this event is never sent to an hardware PMU (which would have type 0) and thus
mostly succeeds where as the perf record command without event uses default
event cycles. And that one is sent to hardware PMU on s390...

--
Thomas Richter, Dept 3303, IBM s390 Linux Development, Boeblingen, Germany
--
Vorsitzender des Aufsichtsrats: Gregor Pillen
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht Stuttgart, HRB 243294