summaryrefslogtreecommitdiff
path: root/tools/perf/tests/shell/trace_summary.sh
blob: f9bb7f9388be3fd7e06bd13fadab5350bed19cbd (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/sh
# perf trace summary (exclusive)
# SPDX-License-Identifier: GPL-2.0

# Check that perf trace works with various summary mode

# shellcheck source=lib/probe.sh
. "$(dirname $0)"/lib/probe.sh

skip_if_no_perf_trace || exit 2
[ "$(id -u)" = 0 ] || exit 2

OUTPUT=$(mktemp /tmp/perf_trace_test.XXXXX)

test_perf_trace() {
    args=$1
    workload="true"
    search="^\s*(open|read|close).*[0-9]+%$"

    echo "testing: perf trace ${args} -- ${workload}"
    perf trace ${args} -- ${workload} >${OUTPUT} 2>&1
    if [ $? -ne 0 ]; then
        echo "Error: perf trace ${args} failed unexpectedly"
        cat ${OUTPUT}
        rm -f ${OUTPUT}
        exit 1
    fi

    count=$(grep -E -c -m 3 "${search}" ${OUTPUT})
    if [ "${count}" != "3" ]; then
	echo "Error: cannot find enough pattern ${search} in the output"
	cat ${OUTPUT}
	rm -f ${OUTPUT}
	exit 1
    fi
}

# summary only for a process
test_perf_trace "-s"

# normal output with summary at the end
test_perf_trace "-S"

# summary only with an explicit summary mode
test_perf_trace "-s --summary-mode=thread"

# summary with normal output - total summary mode
test_perf_trace "-S --summary-mode=total"

# summary only for system wide - per-thread summary
test_perf_trace "-as --summary-mode=thread --no-bpf-summary"

# summary only for system wide - total summary mode
test_perf_trace "-as --summary-mode=total --no-bpf-summary"

if ! perf check feature -q bpf; then
    echo "Skip --bpf-summary tests as perf built without libbpf"
    rm -f ${OUTPUT}
    exit 2
fi

# summary only for system wide - per-thread summary with BPF
test_perf_trace "-as --summary-mode=thread --bpf-summary"

# summary only for system wide - total summary mode with BPF
test_perf_trace "-as --summary-mode=total --bpf-summary"

# summary with normal output for system wide - total summary mode with BPF
test_perf_trace "-aS --summary-mode=total --bpf-summary"

# summary only for system wide - cgroup summary mode with BPF
test_perf_trace "-as --summary-mode=cgroup --bpf-summary"

# summary with normal output for system wide - cgroup summary mode with BPF
test_perf_trace "-aS --summary-mode=cgroup --bpf-summary"

rm -f ${OUTPUT}