projects/linux·blob master · refs

72 lines · 1.7 KiB

1#!/bin/bash -e
2# CoreSight deterministic workload decode (exclusive)
3
4# SPDX-License-Identifier: GPL-2.0
5
6# If CoreSight is not available, skip the test
7perf list pmu | grep -q cs_etm || exit 2
8
9tmpdir=$(mktemp -d /tmp/__perf_test.coresight_deterministic.XXXXX)
10
11cleanup() {
12 rm -rf "${tmpdir}"
13 trap - EXIT TERM INT
14}
15
16trap_cleanup() {
17 cleanup
18 exit 1
19}
20trap trap_cleanup EXIT TERM INT
21
22cf="$tmpdir/ctl"
23af="$tmpdir/ack"
24mkfifo "$cf" "$af"
25
26# Start disabled and use the control FIFO to only record the workload and not
27# startup.
28perf record -o "$tmpdir/data" -e cs_etm//u -D -1 --control fifo:"$cf","$af" -- \
29 perf test --record-ctl fifo:"$cf","$af" -w deterministic > /dev/null 2>&1
30
31perf script -i "$tmpdir/data" --itrace=i1i -F ip,srcline | \
32 grep "deterministic.c" | uniq > "$tmpdir/script" 2>/dev/null
33
34
35# Remove brace lines and call sites as they may not be hit or may have
36# extra hits after returning, depending on the compiler.
37sed -i \
38 -e '/deterministic.c:8$/d' \
39 -e '/deterministic.c:12$/d' \
40 -e '/deterministic.c:15$/d' \
41 -e '/deterministic.c:19$/d' \
42 -e '/deterministic.c:23$/d' \
43 -e '/deterministic.c:28$/d' \
44 -e '/deterministic.c:34$/d' \
45 -e '/deterministic.c:36$/d' \
46 -e '/deterministic.c:37$/d' \
47 "$tmpdir/script"
48
49cat > "$tmpdir/expected" << EOF
50 deterministic.c:24
51 deterministic.c:25
52 deterministic.c:26
53 deterministic.c:9
54 deterministic.c:10
55 deterministic.c:11
56 deterministic.c:30
57 deterministic.c:31
58 deterministic.c:32
59 deterministic.c:16
60 deterministic.c:17
61 deterministic.c:18
62EOF
63
64if ! diff -q "$tmpdir/script" "$tmpdir/expected"; then
65 echo "FAIL: line numbers don't match expected: "
66 head -n 100 "$tmpdir/script"
67 cleanup
68 exit 1
69fi
70
71cleanup
72exit 0