perf test: Fix skipping branch stack sampling test

Message ID 20221028121913.745307-1-james.clark@arm.com
State New
Headers
Series perf test: Fix skipping branch stack sampling test |

Commit Message

James Clark Oct. 28, 2022, 12:19 p.m. UTC
  Commit f4a2aade6809 ("perf tests powerpc: Fix branch stack sampling test
to include sanity check for branch filter") added a skip if certain
branch options aren't available. But the change added both -b
(--branch-any) and --branch-filter options at the same time, which will
always result in a failure on any platform because the arguments can't
be used together.

Fix this by removing -b (--branch-any) and leaving --branch-filter which
already specifies 'any'. Also add warning messages to the test and perf
tool.

Output on x86 before this fix:

   $ sudo ./perf test branch
   108: Check branch stack sampling         : Skip

After:

   $ sudo ./perf test branch
   108: Check branch stack sampling         : Ok

Fixes: f4a2aade6809 ("perf tests powerpc: Fix branch stack sampling test to include sanity check for branch filter")
Signed-off-by: James Clark <james.clark@arm.com>
---
 tools/perf/tests/shell/test_brstack.sh | 5 ++++-
 tools/perf/util/parse-branch-options.c | 4 +++-
 2 files changed, 7 insertions(+), 2 deletions(-)
  

Comments

James Clark Oct. 28, 2022, 12:22 p.m. UTC | #1
On 28/10/2022 13:19, James Clark wrote:
> Commit f4a2aade6809 ("perf tests powerpc: Fix branch stack sampling test
> to include sanity check for branch filter") added a skip if certain
> branch options aren't available. But the change added both -b
> (--branch-any) and --branch-filter options at the same time, which will
> always result in a failure on any platform because the arguments can't
> be used together.
> 
> Fix this by removing -b (--branch-any) and leaving --branch-filter which
> already specifies 'any'. Also add warning messages to the test and perf
> tool.
> 

Hi Athira,

Are you able to check if this still skips for you on PowerPC with this
new change?

Thanks
James

> Output on x86 before this fix:
> 
>    $ sudo ./perf test branch
>    108: Check branch stack sampling         : Skip
> 
> After:
> 
>    $ sudo ./perf test branch
>    108: Check branch stack sampling         : Ok
> 
> Fixes: f4a2aade6809 ("perf tests powerpc: Fix branch stack sampling test to include sanity check for branch filter")
> Signed-off-by: James Clark <james.clark@arm.com>
> ---
>  tools/perf/tests/shell/test_brstack.sh | 5 ++++-
>  tools/perf/util/parse-branch-options.c | 4 +++-
>  2 files changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/perf/tests/shell/test_brstack.sh b/tools/perf/tests/shell/test_brstack.sh
> index ec801cffae6b..d7ff5c4b4da4 100755
> --- a/tools/perf/tests/shell/test_brstack.sh
> +++ b/tools/perf/tests/shell/test_brstack.sh
> @@ -13,7 +13,10 @@ fi
>  
>  # skip the test if the hardware doesn't support branch stack sampling
>  # and if the architecture doesn't support filter types: any,save_type,u
> -perf record -b -o- -B --branch-filter any,save_type,u true > /dev/null 2>&1 || exit 2
> +if ! perf record -o- --no-buildid --branch-filter any,save_type,u -- true > /dev/null 2>&1 ; then
> +	echo "skip: system doesn't support filter types: any,save_type,u"
> +	exit 2
> +fi
>  
>  TMPDIR=$(mktemp -d /tmp/__perf_test.program.XXXXX)
>  
> diff --git a/tools/perf/util/parse-branch-options.c b/tools/perf/util/parse-branch-options.c
> index 00588b9db474..31faf2bb49ff 100644
> --- a/tools/perf/util/parse-branch-options.c
> +++ b/tools/perf/util/parse-branch-options.c
> @@ -102,8 +102,10 @@ parse_branch_stack(const struct option *opt, const char *str, int unset)
>  	/*
>  	 * cannot set it twice, -b + --branch-filter for instance
>  	 */
> -	if (*mode)
> +	if (*mode) {
> +		pr_err("Error: Can't use --branch-any (-b) with --branch-filter (-j).\n");
>  		return -1;
> +	}
>  
>  	return parse_branch_str(str, mode);
>  }
  
Athira Rajeev Nov. 2, 2022, 6:51 a.m. UTC | #2
> On 28-Oct-2022, at 5:52 PM, James Clark <james.clark@arm.com> wrote:
> 
> 
> 
> On 28/10/2022 13:19, James Clark wrote:
>> Commit f4a2aade6809 ("perf tests powerpc: Fix branch stack sampling test
>> to include sanity check for branch filter") added a skip if certain
>> branch options aren't available. But the change added both -b
>> (--branch-any) and --branch-filter options at the same time, which will
>> always result in a failure on any platform because the arguments can't
>> be used together.
>> 
>> Fix this by removing -b (--branch-any) and leaving --branch-filter which
>> already specifies 'any'. Also add warning messages to the test and perf
>> tool.
>> 
> 
> Hi Athira,
> 
> Are you able to check if this still skips for you on PowerPC with this
> new change?
> 

Hi James,

Sorry for the late response. I was out on vacation couple of days.

I tested with the new change and verified it skips on powerpc.

Tested-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>

Thanks
Athira
> Thanks
> James
> 
>> Output on x86 before this fix:
>> 
>>   $ sudo ./perf test branch
>>   108: Check branch stack sampling         : Skip
>> 
>> After:
>> 
>>   $ sudo ./perf test branch
>>   108: Check branch stack sampling         : Ok
>> 
>> Fixes: f4a2aade6809 ("perf tests powerpc: Fix branch stack sampling test to include sanity check for branch filter")
>> Signed-off-by: James Clark <james.clark@arm.com>
>> ---
>> tools/perf/tests/shell/test_brstack.sh | 5 ++++-
>> tools/perf/util/parse-branch-options.c | 4 +++-
>> 2 files changed, 7 insertions(+), 2 deletions(-)
>> 
>> diff --git a/tools/perf/tests/shell/test_brstack.sh b/tools/perf/tests/shell/test_brstack.sh
>> index ec801cffae6b..d7ff5c4b4da4 100755
>> --- a/tools/perf/tests/shell/test_brstack.sh
>> +++ b/tools/perf/tests/shell/test_brstack.sh
>> @@ -13,7 +13,10 @@ fi
>> 
>> # skip the test if the hardware doesn't support branch stack sampling
>> # and if the architecture doesn't support filter types: any,save_type,u
>> -perf record -b -o- -B --branch-filter any,save_type,u true > /dev/null 2>&1 || exit 2
>> +if ! perf record -o- --no-buildid --branch-filter any,save_type,u -- true > /dev/null 2>&1 ; then
>> +	echo "skip: system doesn't support filter types: any,save_type,u"
>> +	exit 2
>> +fi
>> 
>> TMPDIR=$(mktemp -d /tmp/__perf_test.program.XXXXX)
>> 
>> diff --git a/tools/perf/util/parse-branch-options.c b/tools/perf/util/parse-branch-options.c
>> index 00588b9db474..31faf2bb49ff 100644
>> --- a/tools/perf/util/parse-branch-options.c
>> +++ b/tools/perf/util/parse-branch-options.c
>> @@ -102,8 +102,10 @@ parse_branch_stack(const struct option *opt, const char *str, int unset)
>> 	/*
>> 	 * cannot set it twice, -b + --branch-filter for instance
>> 	 */
>> -	if (*mode)
>> +	if (*mode) {
>> +		pr_err("Error: Can't use --branch-any (-b) with --branch-filter (-j).\n");
>> 		return -1;
>> +	}
>> 
>> 	return parse_branch_str(str, mode);
>> }
  
Arnaldo Carvalho de Melo Nov. 8, 2022, 9 p.m. UTC | #3
Em Wed, Nov 02, 2022 at 12:21:11PM +0530, Athira Rajeev escreveu:
> 
> 
> > On 28-Oct-2022, at 5:52 PM, James Clark <james.clark@arm.com> wrote:
> > 
> > 
> > 
> > On 28/10/2022 13:19, James Clark wrote:
> >> Commit f4a2aade6809 ("perf tests powerpc: Fix branch stack sampling test
> >> to include sanity check for branch filter") added a skip if certain
> >> branch options aren't available. But the change added both -b
> >> (--branch-any) and --branch-filter options at the same time, which will
> >> always result in a failure on any platform because the arguments can't
> >> be used together.
> >> 
> >> Fix this by removing -b (--branch-any) and leaving --branch-filter which
> >> already specifies 'any'. Also add warning messages to the test and perf
> >> tool.
> >> 
> > 
> > Hi Athira,
> > 
> > Are you able to check if this still skips for you on PowerPC with this
> > new change?
> > 
> 
> Hi James,
> 
> Sorry for the late response. I was out on vacation couple of days.
> 
> I tested with the new change and verified it skips on powerpc.
> 
> Tested-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>

Thanks, applied.

- Arnaldo

 
> Thanks
> Athira
> > Thanks
> > James
> > 
> >> Output on x86 before this fix:
> >> 
> >>   $ sudo ./perf test branch
> >>   108: Check branch stack sampling         : Skip
> >> 
> >> After:
> >> 
> >>   $ sudo ./perf test branch
> >>   108: Check branch stack sampling         : Ok
> >> 
> >> Fixes: f4a2aade6809 ("perf tests powerpc: Fix branch stack sampling test to include sanity check for branch filter")
> >> Signed-off-by: James Clark <james.clark@arm.com>
> >> ---
> >> tools/perf/tests/shell/test_brstack.sh | 5 ++++-
> >> tools/perf/util/parse-branch-options.c | 4 +++-
> >> 2 files changed, 7 insertions(+), 2 deletions(-)
> >> 
> >> diff --git a/tools/perf/tests/shell/test_brstack.sh b/tools/perf/tests/shell/test_brstack.sh
> >> index ec801cffae6b..d7ff5c4b4da4 100755
> >> --- a/tools/perf/tests/shell/test_brstack.sh
> >> +++ b/tools/perf/tests/shell/test_brstack.sh
> >> @@ -13,7 +13,10 @@ fi
> >> 
> >> # skip the test if the hardware doesn't support branch stack sampling
> >> # and if the architecture doesn't support filter types: any,save_type,u
> >> -perf record -b -o- -B --branch-filter any,save_type,u true > /dev/null 2>&1 || exit 2
> >> +if ! perf record -o- --no-buildid --branch-filter any,save_type,u -- true > /dev/null 2>&1 ; then
> >> +	echo "skip: system doesn't support filter types: any,save_type,u"
> >> +	exit 2
> >> +fi
> >> 
> >> TMPDIR=$(mktemp -d /tmp/__perf_test.program.XXXXX)
> >> 
> >> diff --git a/tools/perf/util/parse-branch-options.c b/tools/perf/util/parse-branch-options.c
> >> index 00588b9db474..31faf2bb49ff 100644
> >> --- a/tools/perf/util/parse-branch-options.c
> >> +++ b/tools/perf/util/parse-branch-options.c
> >> @@ -102,8 +102,10 @@ parse_branch_stack(const struct option *opt, const char *str, int unset)
> >> 	/*
> >> 	 * cannot set it twice, -b + --branch-filter for instance
> >> 	 */
> >> -	if (*mode)
> >> +	if (*mode) {
> >> +		pr_err("Error: Can't use --branch-any (-b) with --branch-filter (-j).\n");
> >> 		return -1;
> >> +	}
> >> 
> >> 	return parse_branch_str(str, mode);
> >> }
  

Patch

diff --git a/tools/perf/tests/shell/test_brstack.sh b/tools/perf/tests/shell/test_brstack.sh
index ec801cffae6b..d7ff5c4b4da4 100755
--- a/tools/perf/tests/shell/test_brstack.sh
+++ b/tools/perf/tests/shell/test_brstack.sh
@@ -13,7 +13,10 @@  fi
 
 # skip the test if the hardware doesn't support branch stack sampling
 # and if the architecture doesn't support filter types: any,save_type,u
-perf record -b -o- -B --branch-filter any,save_type,u true > /dev/null 2>&1 || exit 2
+if ! perf record -o- --no-buildid --branch-filter any,save_type,u -- true > /dev/null 2>&1 ; then
+	echo "skip: system doesn't support filter types: any,save_type,u"
+	exit 2
+fi
 
 TMPDIR=$(mktemp -d /tmp/__perf_test.program.XXXXX)
 
diff --git a/tools/perf/util/parse-branch-options.c b/tools/perf/util/parse-branch-options.c
index 00588b9db474..31faf2bb49ff 100644
--- a/tools/perf/util/parse-branch-options.c
+++ b/tools/perf/util/parse-branch-options.c
@@ -102,8 +102,10 @@  parse_branch_stack(const struct option *opt, const char *str, int unset)
 	/*
 	 * cannot set it twice, -b + --branch-filter for instance
 	 */
-	if (*mode)
+	if (*mode) {
+		pr_err("Error: Can't use --branch-any (-b) with --branch-filter (-j).\n");
 		return -1;
+	}
 
 	return parse_branch_str(str, mode);
 }