script.sh 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #!/bin/bash
  2. # perf script tests
  3. # SPDX-License-Identifier: GPL-2.0
  4. set -e
  5. temp_dir=$(mktemp -d /tmp/perf-test-script.XXXXXXXXXX)
  6. perfdatafile="${temp_dir}/perf.data"
  7. db_test="${temp_dir}/db_test.py"
  8. err=0
  9. cleanup()
  10. {
  11. trap - EXIT TERM INT
  12. sane=$(echo "${temp_dir}" | cut -b 1-21)
  13. if [ "${sane}" = "/tmp/perf-test-script" ] ; then
  14. echo "--- Cleaning up ---"
  15. rm -rf "${temp_dir:?}/"*
  16. rmdir "${temp_dir}"
  17. fi
  18. }
  19. trap_cleanup()
  20. {
  21. cleanup
  22. exit 1
  23. }
  24. trap trap_cleanup EXIT TERM INT
  25. test_db()
  26. {
  27. echo "DB test"
  28. # Check if python script is supported
  29. if perf version --build-options | grep python | grep -q OFF ; then
  30. echo "SKIP: python scripting is not supported"
  31. err=2
  32. return
  33. fi
  34. cat << "_end_of_file_" > "${db_test}"
  35. perf_db_export_mode = True
  36. perf_db_export_calls = False
  37. perf_db_export_callchains = True
  38. def sample_table(*args):
  39. print(f'sample_table({args})')
  40. def call_path_table(*args):
  41. print(f'call_path_table({args}')
  42. _end_of_file_
  43. case $(uname -m)
  44. in s390x)
  45. cmd_flags="--call-graph dwarf -e cpu-clock";;
  46. *)
  47. cmd_flags="-g";;
  48. esac
  49. perf record $cmd_flags -o "${perfdatafile}" true
  50. # Disable lsan to avoid warnings about python memory leaks.
  51. export ASAN_OPTIONS=detect_leaks=0
  52. perf script -i "${perfdatafile}" -s "${db_test}"
  53. export ASAN_OPTIONS=
  54. echo "DB test [Success]"
  55. }
  56. test_parallel_perf()
  57. {
  58. echo "parallel-perf test"
  59. if ! python3 --version >/dev/null 2>&1 ; then
  60. echo "SKIP: no python3"
  61. err=2
  62. return
  63. fi
  64. pp=$(dirname "$0")/../../scripts/python/parallel-perf.py
  65. if [ ! -f "${pp}" ] ; then
  66. echo "SKIP: parallel-perf.py script not found "
  67. err=2
  68. return
  69. fi
  70. perf_data="${temp_dir}/pp-perf.data"
  71. output1_dir="${temp_dir}/output1"
  72. output2_dir="${temp_dir}/output2"
  73. perf record -o "${perf_data}" --sample-cpu uname
  74. python3 "${pp}" -o "${output1_dir}" --jobs 4 --verbose -- perf script -i "${perf_data}"
  75. python3 "${pp}" -o "${output2_dir}" --jobs 4 --verbose --per-cpu -- perf script -i "${perf_data}"
  76. echo "parallel-perf test [Success]"
  77. }
  78. test_db
  79. test_parallel_perf
  80. cleanup
  81. exit $err