From 5ebcdf07f7e4cdfdcfb3589f6bd3f81c3c061164 Mon Sep 17 00:00:00 2001 From: Adrian Hunter Date: Wed, 14 Sep 2022 11:01:49 +0300 Subject: [PATCH] perf test: test_intel_pt.sh: Move helper functions for waiting Move helper functions for waiting to a separate file so they can be shared. Signed-off-by: Adrian Hunter Acked-by: Namhyung Kim Cc: Ian Rogers Cc: Jiri Olsa Link: https://lore.kernel.org/r/20220914080150.5888-2-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/tests/shell/lib/waiting.sh | 69 +++++++++++++++++++++++++ tools/perf/tests/shell/test_intel_pt.sh | 68 ++---------------------- 2 files changed, 73 insertions(+), 64 deletions(-) create mode 100644 tools/perf/tests/shell/lib/waiting.sh diff --git a/tools/perf/tests/shell/lib/waiting.sh b/tools/perf/tests/shell/lib/waiting.sh new file mode 100644 index 000000000000..dbd5bd90105e --- /dev/null +++ b/tools/perf/tests/shell/lib/waiting.sh @@ -0,0 +1,69 @@ +# SPDX-License-Identifier: GPL-2.0 + +tenths=date\ +%s%1N + +# Wait for PID $1 to have $2 number of threads started +wait_for_threads() +{ + start_time=$($tenths) + while [ -e "/proc/$1/task" ] ; do + th_cnt=$(find "/proc/$1/task" -mindepth 1 -maxdepth 1 -printf x | wc -c) + if [ "${th_cnt}" -ge "$2" ] ; then + return 0 + fi + # Wait at most 5 seconds + if [ $(($($tenths) - start_time)) -ge 50 ] ; then + echo "PID $1 does not have $2 threads" + return 1 + fi + done + return 1 +} + +# Wait for perf record -vvv 2>$2 with PID $1 to start by looking at file $2 +# It depends on capturing perf record debug message "perf record has started" +wait_for_perf_to_start() +{ + echo "Waiting for \"perf record has started\" message" + start_time=$($tenths) + while [ -e "/proc/$1" ] ; do + if grep -q "perf record has started" "$2" ; then + echo OK + break + fi + # Wait at most 5 seconds + if [ $(($($tenths) - start_time)) -ge 50 ] ; then + echo "perf recording did not start" + return 1 + fi + done + return 0 +} + +# Wait for process PID %1 to exit +wait_for_process_to_exit() +{ + start_time=$($tenths) + while [ -e "/proc/$1" ] ; do + # Wait at most 5 seconds + if [ $(($($tenths) - start_time)) -ge 50 ] ; then + echo "PID $1 did not exit as expected" + return 1 + fi + done + return 0 +} + +# Check if PID $1 is still running after 0.3 seconds +is_running() +{ + start_time=$($tenths) + while [ -e "/proc/$1" ] ; do + # Check for at least 0.3s + if [ $(($($tenths) - start_time)) -gt 3 ] ; then + return 0 + fi + done + echo "PID $1 exited prematurely" + return 1 +} diff --git a/tools/perf/tests/shell/test_intel_pt.sh b/tools/perf/tests/shell/test_intel_pt.sh index 051d088c1b74..efaad9566c34 100755 --- a/tools/perf/tests/shell/test_intel_pt.sh +++ b/tools/perf/tests/shell/test_intel_pt.sh @@ -4,11 +4,12 @@ set -e -tenths=date\ +%s%1N - # Skip if no Intel PT perf list | grep -q 'intel_pt//' || exit 2 +shelldir=$(dirname "$0") +. "${shelldir}"/lib/waiting.sh + skip_cnt=0 ok_cnt=0 err_cnt=0 @@ -112,67 +113,6 @@ can_kernel() return 0 } -wait_for_threads() -{ - start_time=$($tenths) - while [ -e "/proc/$1/task" ] ; do - th_cnt=$(find "/proc/$1/task" -mindepth 1 -maxdepth 1 -printf x | wc -c) - if [ "${th_cnt}" -ge "$2" ] ; then - return 0 - fi - # Wait at most 5 seconds - if [ $(($($tenths) - start_time)) -ge 50 ] ; then - echo "PID $1 does not have $2 threads" - return 1 - fi - done - return 1 -} - -wait_for_perf_to_start() -{ - echo "Waiting for \"perf record has started\" message" - start_time=$($tenths) - while [ -e "/proc/$1" ] ; do - if grep -q "perf record has started" "${errfile}" ; then - echo OK - break - fi - # Wait at most 5 seconds - if [ $(($($tenths) - start_time)) -ge 50 ] ; then - echo "perf recording did not start" - return 1 - fi - done - return 0 -} - -wait_for_process_to_exit() -{ - start_time=$($tenths) - while [ -e "/proc/$1" ] ; do - # Wait at most 5 seconds - if [ $(($($tenths) - start_time)) -ge 50 ] ; then - echo "PID $1 did not exit as expected" - return 1 - fi - done - return 0 -} - -is_running() -{ - start_time=$($tenths) - while [ -e "/proc/$1" ] ; do - # Check for at least 0.3s - if [ $(($($tenths) - start_time)) -gt 3 ] ; then - return 0 - fi - done - echo "PID $1 exited prematurely" - return 1 -} - test_per_thread() { k="$1" @@ -298,7 +238,7 @@ test_per_thread() perf record -B -N --no-bpf-event -o "${perfdatafile}" -e intel_pt//u"${k}" -vvv --per-thread -p "${w1},${w2}" 2>"${errfile}" >"${outfile}" & ppid=$! echo "perf PID is $ppid" - wait_for_perf_to_start ${ppid} || return 1 + wait_for_perf_to_start ${ppid} "${errfile}" || return 1 kill ${w1} wait_for_process_to_exit ${w1} || return 1