summaryrefslogtreecommitdiff
path: root/tools/perf/tests/shell/test_stat_intel_tpebs.sh
blob: a330ecdb7ba505cb35d9d218a8f27b34be25022b (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
78
79
80
81
82
83
84
85
#!/bin/bash
# test Intel TPEBS counting mode (exclusive)
# SPDX-License-Identifier: GPL-2.0

set -e

ParanoidAndNotRoot() {
  [ "$(id -u)" != 0 ] && [ "$(cat /proc/sys/kernel/perf_event_paranoid)" -gt $1 ]
}

if ! grep -q GenuineIntel /proc/cpuinfo
then
  echo "Skipping non-Intel"
  exit 2
fi

if ParanoidAndNotRoot 0
then
  echo "Skipping paranoid >0 and not root"
  exit 2
fi

stat_output=$(mktemp /tmp/__perf_stat_tpebs_output.XXXXX)

cleanup() {
  rm -rf "${stat_output}"
  trap - EXIT TERM INT
}

trap_cleanup() {
  echo "Unexpected signal in ${FUNCNAME[1]}"
  cat "${stat_output}"
  cleanup
  exit 1
}
trap trap_cleanup EXIT TERM INT

# Event to be used in tests
event=cache-misses

if ! perf record -e "${event}:p" -a -o /dev/null sleep 0.01 > "${stat_output}" 2>&1
then
  echo "Missing ${event} support"
  cleanup
  exit 2
fi

test_with_record_tpebs() {
  echo "Testing with --record-tpebs"
  if ! perf stat -e "${event}:R" --record-tpebs -a sleep 0.01 > "${stat_output}" 2>&1
  then
    echo "Testing with --record-tpebs [Failed perf stat]"
    cat "${stat_output}"
    exit 1
  fi

  # Expected output:
  # $ perf stat --record-tpebs -e cache-misses:R -a sleep 0.01
  # Events enabled
  # [ perf record: Woken up 2 times to write data ]
  # [ perf record: Captured and wrote 0.056 MB - ]
  #
  #  Performance counter stats for 'system wide':
  #
  #                  0      cache-misses:R
  #
  #        0.013963299 seconds time elapsed
  if ! grep "perf record" "${stat_output}"
  then
    echo "Testing with --record-tpebs [Failed missing perf record]"
    cat "${stat_output}"
    exit 1
  fi
  if ! grep "${event}:R" "${stat_output}" && ! grep "/${event}/R" "${stat_output}"
  then
    echo "Testing with --record-tpebs [Failed missing event name]"
    cat "${stat_output}"
    exit 1
  fi
  echo "Testing with --record-tpebs [Success]"
}

test_with_record_tpebs
cleanup
exit 0