#!/bin/bash # perf stat events uniquifying # SPDX-License-Identifier: GPL-2.0 set -e stat_output=$(mktemp /tmp/__perf_test.stat_output.XXXXX) perf_tool=perf err=0 test_event_uniquifying() { # We use `clockticks` to verify the uniquify behavior. event="clockticks" # If the `-A` option is added, the event should be uniquified. # # $perf list -v clockticks # # List of pre-defined events (to be used in -e or -M): # # uncore_imc_0/clockticks/ [Kernel PMU event] # uncore_imc_1/clockticks/ [Kernel PMU event] # uncore_imc_2/clockticks/ [Kernel PMU event] # uncore_imc_3/clockticks/ [Kernel PMU event] # uncore_imc_4/clockticks/ [Kernel PMU event] # uncore_imc_5/clockticks/ [Kernel PMU event] # # ... # # $perf stat -e clockticks -A -- true # # Performance counter stats for 'system wide': # # CPU0 3,773,018 uncore_imc_0/clockticks/ # CPU0 3,609,025 uncore_imc_1/clockticks/ # CPU0 0 uncore_imc_2/clockticks/ # CPU0 3,230,009 uncore_imc_3/clockticks/ # CPU0 3,049,897 uncore_imc_4/clockticks/ # CPU0 0 uncore_imc_5/clockticks/ # # 0.002029828 seconds time elapsed echo "stat event uniquifying test" uniquified_event_array=() # Check how many uniquified events. while IFS= read -r line; do uniquified_event=$(echo "$line" | awk '{print $1}') uniquified_event_array+=("${uniquified_event}") done < <(${perf_tool} list -v ${event} | grep "\[Kernel PMU event\]") perf_command="${perf_tool} stat -e $event -A -o ${stat_output} -- true" $perf_command # Check the output contains all uniquified events. for uniquified_event in "${uniquified_event_array[@]}"; do if ! cat "${stat_output}" | grep -q "${uniquified_event}"; then echo "Event is not uniquified [Failed]" echo "${perf_command}" cat "${stat_output}" err=1 break fi done } test_event_uniquifying rm -f "${stat_output}" exit $err