Message ID | 20230613164145.50488-18-atrajeev@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Handled Elsewhere |
Headers | show |
Series | tool/perf/test: Fix shellcheck coding/formatting issues of test shell scripts | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/github-powerpc_perf | fail | perf (ubuntu-18.04, ppc64) failed at step Build. |
snowpatch_ozlabs/github-powerpc_sparse | success | Successfully ran 4 jobs. |
snowpatch_ozlabs/github-powerpc_kernel_qemu | success | Successfully ran 24 jobs. |
snowpatch_ozlabs/github-powerpc_clang | success | Successfully ran 6 jobs. |
On Tue, Jun 13, 2023 at 10:04 AM Athira Rajeev <atrajeev@linux.vnet.ibm.com> wrote: > > From: Aditya Gupta <adityag@linux.ibm.com> > > Test "perf script task-analyzer tests" fails in environment with missing > libtraceevent support, as perf record fails to create the perf.data > file, which further tests depend on. > > Instead, when perf is not compiled with libtraceevent support, skip those > tests instead of failing them, by checking the output of `perf > record --dry-run` to see if it prints the error "libtraceevent is > necessary for tracepoint support" > > For the following output, perf compiled with: `make NO_LIBTRACEEVENT=1` > > Before the patch: > > 108: perf script task-analyzer tests : > test child forked, pid 24105 > failed to open perf.data: No such file or directory (try 'perf record' first) > FAIL: "invokation of perf script report task-analyzer command failed" Error message: "" > FAIL: "test_basic" Error message: "Failed to find required string:'Comm'." > failed to open perf.data: No such file or directory (try 'perf record' first) > FAIL: "invokation of perf script report task-analyzer --ns --rename-comms-by-tids 0:random command failed" Error message: "" > FAIL: "test_ns_rename" Error message: "Failed to find required string:'Comm'." > failed to open perf.data: No such file or directory (try 'perf record' first) > <...> > perf script task-analyzer tests: FAILED! > > With this patch, the script instead returns 2 signifying SKIP, and after > the patch: > > 108: perf script task-analyzer tests : > test child forked, pid 26010 > libtraceevent is necessary for tracepoint support > WARN: Skipping tests. No libtraceevent support > test child finished with -2 > perf script task-analyzer tests: Skip > > Fixes: e8478b84d6ba ("perf test: add new task-analyzer tests") > Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com> > Signed-off-by: Kajol Jain <kjain@linux.ibm.com> > Signed-off-by: Aditya Gupta <adityag@linux.ibm.com> > --- > tools/perf/tests/shell/test_task_analyzer.sh | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/tools/perf/tests/shell/test_task_analyzer.sh b/tools/perf/tests/shell/test_task_analyzer.sh > index b094eeb3bf66..59785dfc11f8 100755 > --- a/tools/perf/tests/shell/test_task_analyzer.sh > +++ b/tools/perf/tests/shell/test_task_analyzer.sh > @@ -44,9 +44,20 @@ find_str_or_fail() { > fi > } > > +# check if perf is compiled with libtraceevent support > +skip_no_probe_record_support() { > + perf record -e "sched:sched_switch" -a -- sleep 1 2>&1 | grep "libtraceevent is necessary for tracepoint support" && return 2 Fwiw, another way to detect build options used in other shell tests is: perf version --build-options | grep HAVE_LIBTRACEEVENT | grep -q OFF && return 2 Thanks, Ian > + return 0 > +} > + > prepare_perf_data() { > # 1s should be sufficient to catch at least some switches > perf record -e sched:sched_switch -a -- sleep 1 > /dev/null 2>&1 > + # check if perf data file got created in above step. > + if [ ! -e "perf.data" ]; then > + printf "FAIL: perf record failed to create \"perf.data\" \n" > + return 1 > + fi > } > > # check standard inkvokation with no arguments > @@ -134,6 +145,13 @@ test_csvsummary_extended() { > find_str_or_fail "Out-Out;" csvsummary "${FUNCNAME[0]}" > } > > +skip_no_probe_record_support > +err=$? > +if [ $err -ne 0 ]; then > + echo "WARN: Skipping tests. No libtraceevent support" > + cleanup > + exit $err > +fi > prepare_perf_data > test_basic > test_ns_rename > -- > 2.39.1 >
Hello Ian, On Wed, Jul 12, 2023 at 06:16:28PM -0700, Ian Rogers wrote: > On Tue, Jun 13, 2023 at 10:04 AM Athira Rajeev > <atrajeev@linux.vnet.ibm.com> wrote: > > > > From: Aditya Gupta <adityag@linux.ibm.com> > > > > Test "perf script task-analyzer tests" fails in environment with missing > > libtraceevent support, as perf record fails to create the perf.data > > file, which further tests depend on. > > > > Instead, when perf is not compiled with libtraceevent support, skip those > > tests instead of failing them, by checking the output of `perf > > record --dry-run` to see if it prints the error "libtraceevent is > > necessary for tracepoint support" > > > > ... > > > > +# check if perf is compiled with libtraceevent support > > +skip_no_probe_record_support() { > > + perf record -e "sched:sched_switch" -a -- sleep 1 2>&1 | grep "libtraceevent is necessary for tracepoint support" && return 2 > > Fwiw, another way to detect build options used in other shell tests is: > perf version --build-options | grep HAVE_LIBTRACEEVENT | grep -q OFF && return 2 > > Thanks, > Ian > Thanks for the review. That seems more straightforward way to check for libtraceevent support. I will work on a patch for this, and test it. Thanks, Aditya G
diff --git a/tools/perf/tests/shell/test_task_analyzer.sh b/tools/perf/tests/shell/test_task_analyzer.sh index b094eeb3bf66..59785dfc11f8 100755 --- a/tools/perf/tests/shell/test_task_analyzer.sh +++ b/tools/perf/tests/shell/test_task_analyzer.sh @@ -44,9 +44,20 @@ find_str_or_fail() { fi } +# check if perf is compiled with libtraceevent support +skip_no_probe_record_support() { + perf record -e "sched:sched_switch" -a -- sleep 1 2>&1 | grep "libtraceevent is necessary for tracepoint support" && return 2 + return 0 +} + prepare_perf_data() { # 1s should be sufficient to catch at least some switches perf record -e sched:sched_switch -a -- sleep 1 > /dev/null 2>&1 + # check if perf data file got created in above step. + if [ ! -e "perf.data" ]; then + printf "FAIL: perf record failed to create \"perf.data\" \n" + return 1 + fi } # check standard inkvokation with no arguments @@ -134,6 +145,13 @@ test_csvsummary_extended() { find_str_or_fail "Out-Out;" csvsummary "${FUNCNAME[0]}" } +skip_no_probe_record_support +err=$? +if [ $err -ne 0 ]; then + echo "WARN: Skipping tests. No libtraceevent support" + cleanup + exit $err +fi prepare_perf_data test_basic test_ns_rename