2025-06-23 10:00:12 +01:00
|
|
|
#!/bin/bash
|
2025-05-22 19:01:47 -03:00
|
|
|
# perf trace summary (exclusive)
|
2025-03-25 21:40:01 -07:00
|
|
|
# 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"
|
|
|
|
|
2025-05-27 20:26:36 -07:00
|
|
|
if ! perf check feature -q bpf; then
|
|
|
|
echo "Skip --bpf-summary tests as perf built without libbpf"
|
|
|
|
rm -f ${OUTPUT}
|
|
|
|
exit 2
|
|
|
|
fi
|
|
|
|
|
2025-03-25 21:40:01 -07:00
|
|
|
# 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"
|
|
|
|
|
2025-05-22 07:25:51 -07:00
|
|
|
# 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"
|
|
|
|
|
2025-03-25 21:40:01 -07:00
|
|
|
rm -f ${OUTPUT}
|