160abedb8SLeo Yan#!/bin/bash 260abedb8SLeo Yan# Test data symbol 360abedb8SLeo Yan 460abedb8SLeo Yan# SPDX-License-Identifier: GPL-2.0 560abedb8SLeo Yan# Leo Yan <leo.yan@linaro.org>, 2022 660abedb8SLeo Yan 760abedb8SLeo Yanskip_if_no_mem_event() { 8*818448e9STiezhu Yang perf mem record -e list 2>&1 | grep -E -q 'available' && return 0 960abedb8SLeo Yan return 2 1060abedb8SLeo Yan} 1160abedb8SLeo Yan 1260abedb8SLeo Yanskip_if_no_mem_event || exit 2 1360abedb8SLeo Yan 140b77fe47SNamhyung KimTEST_PROGRAM="perf test -w datasym" 1560abedb8SLeo YanPERF_DATA=$(mktemp /tmp/__perf_test.perf.data.XXXXX) 1660abedb8SLeo Yan 1760abedb8SLeo Yancheck_result() { 1860abedb8SLeo Yan # The memory report format is as below: 1960abedb8SLeo Yan # 99.92% ... [.] buf1+0x38 2060abedb8SLeo Yan result=$(perf mem report -i ${PERF_DATA} -s symbol_daddr -q 2>&1 | 2160abedb8SLeo Yan awk '/buf1/ { print $4 }') 2260abedb8SLeo Yan 2360abedb8SLeo Yan # Testing is failed if has no any sample for "buf1" 2460abedb8SLeo Yan [ -z "$result" ] && return 1 2560abedb8SLeo Yan 2660abedb8SLeo Yan while IFS= read -r line; do 2760abedb8SLeo Yan # The "data1" and "data2" fields in structure "buf1" have 2860abedb8SLeo Yan # offset "0x0" and "0x38", returns failure if detect any 2960abedb8SLeo Yan # other offset value. 3060abedb8SLeo Yan if [ "$line" != "buf1+0x0" ] && [ "$line" != "buf1+0x38" ]; then 3160abedb8SLeo Yan return 1 3260abedb8SLeo Yan fi 3360abedb8SLeo Yan done <<< "$result" 3460abedb8SLeo Yan 3560abedb8SLeo Yan return 0 3660abedb8SLeo Yan} 3760abedb8SLeo Yan 3860abedb8SLeo Yancleanup_files() 3960abedb8SLeo Yan{ 4060abedb8SLeo Yan echo "Cleaning up files..." 4160abedb8SLeo Yan rm -f ${PERF_DATA} 4260abedb8SLeo Yan} 4360abedb8SLeo Yan 4460abedb8SLeo Yantrap cleanup_files exit term int 4560abedb8SLeo Yan 4660abedb8SLeo Yanecho "Recording workload..." 4760abedb8SLeo Yan 4860abedb8SLeo Yan# perf mem/c2c internally uses IBS PMU on AMD CPU which doesn't support 4960abedb8SLeo Yan# user/kernel filtering and per-process monitoring, spin program on 5060abedb8SLeo Yan# specific CPU and test in per-CPU mode. 51*818448e9STiezhu Yangis_amd=$(grep -E -c 'vendor_id.*AuthenticAMD' /proc/cpuinfo) 5260abedb8SLeo Yanif (($is_amd >= 1)); then 5360abedb8SLeo Yan perf mem record -o ${PERF_DATA} -C 0 -- taskset -c 0 $TEST_PROGRAM & 5460abedb8SLeo Yanelse 5560abedb8SLeo Yan perf mem record --all-user -o ${PERF_DATA} -- $TEST_PROGRAM & 5660abedb8SLeo Yanfi 5760abedb8SLeo Yan 5860abedb8SLeo YanPERFPID=$! 5960abedb8SLeo Yan 6060abedb8SLeo Yansleep 1 6160abedb8SLeo Yan 6260abedb8SLeo Yankill $PERFPID 6360abedb8SLeo Yanwait $PERFPID 6460abedb8SLeo Yan 6560abedb8SLeo Yancheck_result 6660abedb8SLeo Yanexit $? 67