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