#!/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}