summaryrefslogtreecommitdiff
path: root/tools/perf/tests/shell/stat+event_uniquifying.sh
blob: bf54bd6c3e2e612464d56ced164dd33012c705fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/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` in `uncore_imc` to verify the uniquify behavior.
  pmu="uncore_imc"
  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=()

  # Skip if the machine does not have `uncore_imc` device.
  if ! ${perf_tool} list pmu | grep -q ${pmu}; then
    echo "Target does not support PMU ${pmu} [Skipped]"
    err=2
    return
  fi

  # 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 ${pmu})

  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