| #!/bin/sh |
| # perf script tests |
| # SPDX-License-Identifier: GPL-2.0 |
| |
| set -e |
| |
| temp_dir=$(mktemp -d /tmp/perf-test-script.XXXXXXXXXX) |
| |
| perfdatafile="${temp_dir}/perf.data" |
| db_test="${temp_dir}/db_test.py" |
| |
| err=0 |
| |
| cleanup() |
| { |
| trap - EXIT TERM INT |
| sane=$(echo "${temp_dir}" | cut -b 1-21) |
| if [ "${sane}" = "/tmp/perf-test-script" ] ; then |
| echo "--- Cleaning up ---" |
| rm -rf "${temp_dir:?}/"* |
| rmdir "${temp_dir}" |
| fi |
| } |
| |
| trap_cleanup() |
| { |
| cleanup |
| exit 1 |
| } |
| |
| trap trap_cleanup EXIT TERM INT |
| |
| |
| test_db() |
| { |
| echo "DB test" |
| |
| # Check if python script is supported |
| if perf version --build-options | grep python | grep -q OFF ; then |
| echo "SKIP: python scripting is not supported" |
| err=2 |
| return |
| fi |
| |
| cat << "_end_of_file_" > "${db_test}" |
| perf_db_export_mode = True |
| perf_db_export_calls = False |
| perf_db_export_callchains = True |
| |
| def sample_table(*args): |
| print(f'sample_table({args})') |
| |
| def call_path_table(*args): |
| print(f'call_path_table({args}') |
| _end_of_file_ |
| case $(uname -m) |
| in s390x) |
| cmd_flags="--call-graph dwarf -e cpu-clock";; |
| *) |
| cmd_flags="-g";; |
| esac |
| |
| perf record $cmd_flags -o "${perfdatafile}" true |
| # Disable lsan to avoid warnings about python memory leaks. |
| export ASAN_OPTIONS=detect_leaks=0 |
| perf script -i "${perfdatafile}" -s "${db_test}" |
| export ASAN_OPTIONS= |
| echo "DB test [Success]" |
| } |
| |
| test_parallel_perf() |
| { |
| echo "parallel-perf test" |
| if ! python3 --version >/dev/null 2>&1 ; then |
| echo "SKIP: no python3" |
| err=2 |
| return |
| fi |
| pp=$(dirname "$0")/../../scripts/python/parallel-perf.py |
| if [ ! -f "${pp}" ] ; then |
| echo "SKIP: parallel-perf.py script not found " |
| err=2 |
| return |
| fi |
| perf_data="${temp_dir}/pp-perf.data" |
| output1_dir="${temp_dir}/output1" |
| output2_dir="${temp_dir}/output2" |
| perf record -o "${perf_data}" --sample-cpu uname |
| python3 "${pp}" -o "${output1_dir}" --jobs 4 --verbose -- perf script -i "${perf_data}" |
| python3 "${pp}" -o "${output2_dir}" --jobs 4 --verbose --per-cpu -- perf script -i "${perf_data}" |
| echo "parallel-perf test [Success]" |
| } |
| |
| test_db |
| test_parallel_perf |
| |
| cleanup |
| |
| exit $err |