test_data_symbol.sh 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/bin/bash
  2. # Test data symbol
  3. # SPDX-License-Identifier: GPL-2.0
  4. # Leo Yan <leo.yan@linaro.org>, 2022
  5. shelldir=$(dirname "$0")
  6. # shellcheck source=lib/waiting.sh
  7. . "${shelldir}"/lib/waiting.sh
  8. # shellcheck source=lib/perf_has_symbol.sh
  9. . "${shelldir}"/lib/perf_has_symbol.sh
  10. skip_if_no_mem_event() {
  11. perf mem record -e list 2>&1 | grep -E -q 'available' && return 0
  12. return 2
  13. }
  14. skip_if_no_mem_event || exit 2
  15. skip_test_missing_symbol buf1
  16. TEST_PROGRAM="perf test -w datasym"
  17. PERF_DATA=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
  18. ERR_FILE=$(mktemp /tmp/__perf_test.stderr.XXXXX)
  19. check_result() {
  20. # The memory report format is as below:
  21. # 99.92% ... [.] buf1+0x38
  22. result=$(perf mem report -i ${PERF_DATA} -s symbol_daddr -q 2>&1 |
  23. awk '/buf1/ { print $4 }')
  24. # Testing is failed if has no any sample for "buf1"
  25. [ -z "$result" ] && return 1
  26. while IFS= read -r line; do
  27. # The "data1" and "data2" fields in structure "buf1" have
  28. # offset "0x0" and "0x38", returns failure if detect any
  29. # other offset value.
  30. if [ "$line" != "buf1+0x0" ] && [ "$line" != "buf1+0x38" ]; then
  31. return 1
  32. fi
  33. done <<< "$result"
  34. return 0
  35. }
  36. cleanup_files()
  37. {
  38. echo "Cleaning up files..."
  39. rm -f ${PERF_DATA}
  40. }
  41. trap cleanup_files exit term int
  42. echo "Recording workload..."
  43. # perf mem/c2c internally uses IBS PMU on AMD CPU which doesn't support
  44. # user/kernel filtering and per-process monitoring, spin program on
  45. # specific CPU and test in per-CPU mode.
  46. is_amd=$(grep -E -c 'vendor_id.*AuthenticAMD' /proc/cpuinfo)
  47. if (($is_amd >= 1)); then
  48. perf mem record -vvv -o ${PERF_DATA} -C 0 -- taskset -c 0 $TEST_PROGRAM 2>"${ERR_FILE}" &
  49. else
  50. perf mem record -vvv --all-user -o ${PERF_DATA} -- $TEST_PROGRAM 2>"${ERR_FILE}" &
  51. fi
  52. PERFPID=$!
  53. wait_for_perf_to_start ${PERFPID} "${ERR_FILE}"
  54. sleep 1
  55. kill $PERFPID
  56. wait $PERFPID
  57. check_result
  58. exit $?