0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 skip_if_no_arm_spe_event() {
0012 perf list | egrep -q 'arm_spe_[0-9]+//' && return 0
0013
0014
0015 return 2
0016 }
0017
0018 skip_if_no_arm_spe_event || exit 2
0019
0020 perfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
0021 glb_err=0
0022
0023 cleanup_files()
0024 {
0025 rm -f ${perfdata}
0026 rm -f ${perfdata}.old
0027 exit $glb_err
0028 }
0029
0030 trap cleanup_files exit term int
0031
0032 arm_spe_report() {
0033 if [ $2 = 0 ]; then
0034 echo "$1: PASS"
0035 elif [ $2 = 2 ]; then
0036 echo "$1: SKIPPED"
0037 else
0038 echo "$1: FAIL"
0039 glb_err=$2
0040 fi
0041 }
0042
0043 perf_script_samples() {
0044 echo "Looking at perf.data file for dumping samples:"
0045
0046
0047 events="(ld1-miss|ld1-access|llc-miss|lld-access|tlb-miss|tlb-access|branch-miss|remote-access|memory)"
0048
0049
0050
0051
0052
0053 perf script -F,-time -i ${perfdata} 2>&1 | \
0054 egrep " +$1 +[0-9]+ .* +${events}:(.*:)? +" > /dev/null 2>&1
0055 }
0056
0057 perf_report_samples() {
0058 echo "Looking at perf.data file for reporting samples:"
0059
0060
0061
0062
0063
0064 perf report --stdio -i ${perfdata} 2>&1 | \
0065 egrep " +[0-9]+\.[0-9]+% +[0-9]+\.[0-9]+% +$1 " > /dev/null 2>&1
0066 }
0067
0068 arm_spe_snapshot_test() {
0069 echo "Recording trace with snapshot mode $perfdata"
0070 perf record -o ${perfdata} -e arm_spe// -S \
0071 -- dd if=/dev/zero of=/dev/null > /dev/null 2>&1 &
0072 PERFPID=$!
0073
0074
0075 sleep 1
0076
0077
0078 kill -USR2 $PERFPID
0079
0080
0081 kill $PERFPID
0082 wait $PERFPID
0083
0084 perf_script_samples dd &&
0085 perf_report_samples dd
0086
0087 err=$?
0088 arm_spe_report "SPE snapshot testing" $err
0089 }
0090
0091 arm_spe_system_wide_test() {
0092 echo "Recording trace with system-wide mode $perfdata"
0093
0094 perf record -o - -e dummy -a -B true > /dev/null 2>&1
0095 if [ $? != 0 ]; then
0096 arm_spe_report "SPE system-wide testing" 2
0097 return
0098 fi
0099
0100 perf record -o ${perfdata} -e arm_spe// -a --no-bpf-event \
0101 -- dd if=/dev/zero of=/dev/null count=100000 > /dev/null 2>&1
0102
0103 perf_script_samples dd &&
0104 perf_report_samples dd
0105
0106 err=$?
0107 arm_spe_report "SPE system-wide testing" $err
0108 }
0109
0110 arm_spe_snapshot_test
0111 arm_spe_system_wide_test
0112
0113 exit $glb_err