| #!/bin/bash | |
| # 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="cat /dev/null" | |
| 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} |