161f87151SVeronika Molnarova#!/bin/bash 25afd6d38SVeronika Molnarova# perf_report :: Basic perf report options (exclusive) 361f87151SVeronika Molnarova# SPDX-License-Identifier: GPL-2.0 461f87151SVeronika Molnarova 561f87151SVeronika Molnarova# 661f87151SVeronika Molnarova# test_basic of perf_report test 761f87151SVeronika Molnarova# Author: Michael Petlan <[email protected]> 861f87151SVeronika Molnarova# 961f87151SVeronika Molnarova# Description: 1061f87151SVeronika Molnarova# 1161f87151SVeronika Molnarova# This test tests basic functionality of perf report command. 1261f87151SVeronika Molnarova# 1361f87151SVeronika Molnarova# 1461f87151SVeronika Molnarova 1561f87151SVeronika Molnarova# include working environment 1661f87151SVeronika Molnarova. ../common/init.sh 1761f87151SVeronika Molnarova 1861f87151SVeronika MolnarovaTEST_RESULT=0 1961f87151SVeronika Molnarova 2061f87151SVeronika Molnarova 2161f87151SVeronika Molnarova### help message 2261f87151SVeronika Molnarova 2361f87151SVeronika Molnarovaif [ "$PARAM_GENERAL_HELP_TEXT_CHECK" = "y" ]; then 2461f87151SVeronika Molnarova # test that a help message is shown and looks reasonable 2561f87151SVeronika Molnarova $CMD_PERF report --help > $LOGS_DIR/basic_helpmsg.log 2> $LOGS_DIR/basic_helpmsg.err 2661f87151SVeronika Molnarova PERF_EXIT_CODE=$? 2761f87151SVeronika Molnarova 2861f87151SVeronika Molnarova ../common/check_all_patterns_found.pl "PERF-REPORT" "NAME" "SYNOPSIS" "DESCRIPTION" "OPTIONS" "OVERHEAD\s+CALCULATION" "SEE ALSO" < $LOGS_DIR/basic_helpmsg.log 2961f87151SVeronika Molnarova CHECK_EXIT_CODE=$? 3061f87151SVeronika Molnarova ../common/check_all_patterns_found.pl "input" "verbose" "show-nr-samples" "show-cpu-utilization" "threads" "comms" "pid" "tid" "dsos" "symbols" "symbol-filter" < $LOGS_DIR/basic_helpmsg.log 3161f87151SVeronika Molnarova (( CHECK_EXIT_CODE += $? )) 3261f87151SVeronika Molnarova ../common/check_all_patterns_found.pl "hide-unresolved" "sort" "fields" "parent" "exclude-other" "column-widths" "field-separator" "dump-raw-trace" "children" < $LOGS_DIR/basic_helpmsg.log 3361f87151SVeronika Molnarova (( CHECK_EXIT_CODE += $? )) 3461f87151SVeronika Molnarova ../common/check_all_patterns_found.pl "call-graph" "max-stack" "inverted" "ignore-callees" "pretty" "stdio" "tui" "gtk" "vmlinux" "kallsyms" "modules" < $LOGS_DIR/basic_helpmsg.log 3561f87151SVeronika Molnarova (( CHECK_EXIT_CODE += $? )) 3661f87151SVeronika Molnarova ../common/check_all_patterns_found.pl "force" "symfs" "cpu" "disassembler-style" "source" "asm-raw" "show-total-period" "show-info" "branch-stack" "group" < $LOGS_DIR/basic_helpmsg.log 3761f87151SVeronika Molnarova (( CHECK_EXIT_CODE += $? )) 3861f87151SVeronika Molnarova ../common/check_all_patterns_found.pl "branch-history" "objdump" "demangle" "percent-limit" "percentage" "header" "itrace" "full-source-path" "show-ref-call-graph" < $LOGS_DIR/basic_helpmsg.log 3961f87151SVeronika Molnarova (( CHECK_EXIT_CODE += $? )) 4061f87151SVeronika Molnarova ../common/check_no_patterns_found.pl "No manual entry for" < $LOGS_DIR/basic_helpmsg.err 4161f87151SVeronika Molnarova (( CHECK_EXIT_CODE += $? )) 4261f87151SVeronika Molnarova 4361f87151SVeronika Molnarova print_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "help message" 4461f87151SVeronika Molnarova (( TEST_RESULT += $? )) 4561f87151SVeronika Molnarovaelse 4661f87151SVeronika Molnarova print_testcase_skipped "help message" 4761f87151SVeronika Molnarovafi 4861f87151SVeronika Molnarova 4961f87151SVeronika Molnarova 5061f87151SVeronika Molnarova### basic execution 5161f87151SVeronika Molnarova 5261f87151SVeronika Molnarova# test that perf report is even working 5361f87151SVeronika Molnarova$CMD_PERF report -i $CURRENT_TEST_DIR/perf.data --stdio > $LOGS_DIR/basic_basic.log 2> $LOGS_DIR/basic_basic.err 5461f87151SVeronika MolnarovaPERF_EXIT_CODE=$? 5561f87151SVeronika Molnarova 5661f87151SVeronika MolnarovaREGEX_LOST_SAMPLES_INFO="#\s*Total Lost Samples:\s+$RE_NUMBER" 5761f87151SVeronika MolnarovaREGEX_SAMPLES_INFO="#\s*Samples:\s+(?:$RE_NUMBER)\w?\s+of\s+event\s+'$RE_EVENT_ANY'" 5861f87151SVeronika MolnarovaREGEX_LINES_HEADER="#\s*Children\s+Self\s+Command\s+Shared Object\s+Symbol" 5961f87151SVeronika MolnarovaREGEX_LINES="\s*$RE_NUMBER%\s+$RE_NUMBER%\s+\S+\s+\[kernel\.(?:vmlinux)|(?:kallsyms)\]\s+\[[k\.]\]\s+\w+" 6061f87151SVeronika Molnarova../common/check_all_patterns_found.pl "$REGEX_LOST_SAMPLES_INFO" "$REGEX_SAMPLES_INFO" "$REGEX_LINES_HEADER" "$REGEX_LINES" < $LOGS_DIR/basic_basic.log 6161f87151SVeronika MolnarovaCHECK_EXIT_CODE=$? 6261f87151SVeronika Molnarova../common/check_errors_whitelisted.pl "stderr-whitelist.txt" < $LOGS_DIR/basic_basic.err 6361f87151SVeronika Molnarova(( CHECK_EXIT_CODE += $? )) 6461f87151SVeronika Molnarova 6561f87151SVeronika Molnarovaprint_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "basic execution" 6661f87151SVeronika Molnarova(( TEST_RESULT += $? )) 6761f87151SVeronika Molnarova 6861f87151SVeronika Molnarova 6961f87151SVeronika Molnarova### number of samples 7061f87151SVeronika Molnarova 7161f87151SVeronika Molnarova# '--show-nr-samples' should show number of samples for each symbol 7261f87151SVeronika Molnarova$CMD_PERF report --stdio -i $CURRENT_TEST_DIR/perf.data --show-nr-samples > $LOGS_DIR/basic_nrsamples.log 2> $LOGS_DIR/basic_nrsamples.err 7361f87151SVeronika MolnarovaPERF_EXIT_CODE=$? 7461f87151SVeronika Molnarova 7561f87151SVeronika MolnarovaREGEX_LINES_HEADER="#\s*Children\s+Self\s+Samples\s+Command\s+Shared Object\s+Symbol" 7661f87151SVeronika MolnarovaREGEX_LINES="\s*$RE_NUMBER%\s+$RE_NUMBER%\s+$RE_NUMBER\s+\S+\s+\[kernel\.(?:vmlinux)|(?:kallsyms)\]\s+\[[k\.]\]\s+\w+" 7761f87151SVeronika Molnarova../common/check_all_patterns_found.pl "$REGEX_LINES_HEADER" "$REGEX_LINES" < $LOGS_DIR/basic_nrsamples.log 7861f87151SVeronika MolnarovaCHECK_EXIT_CODE=$? 7961f87151SVeronika Molnarova../common/check_errors_whitelisted.pl "stderr-whitelist.txt" < $LOGS_DIR/basic_nrsamples.err 8061f87151SVeronika Molnarova(( CHECK_EXIT_CODE += $? )) 8161f87151SVeronika Molnarova 8261f87151SVeronika Molnarovaprint_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "number of samples" 8361f87151SVeronika Molnarova(( TEST_RESULT += $? )) 8461f87151SVeronika Molnarova 8561f87151SVeronika Molnarova 8661f87151SVeronika Molnarova### header 8761f87151SVeronika Molnarova 8861f87151SVeronika Molnarova# '--header' and '--header-only' should show perf report header 8961f87151SVeronika Molnarova$CMD_PERF report -i $CURRENT_TEST_DIR/perf.data --stdio --header-only > $LOGS_DIR/basic_header.log 9061f87151SVeronika MolnarovaPERF_EXIT_CODE=$? 9161f87151SVeronika Molnarova 9261f87151SVeronika MolnarovaREGEX_LINE_TIMESTAMP="#\s+captured on\s*:\s*$RE_DATE_TIME" 9361f87151SVeronika MolnarovaREGEX_LINE_HOSTNAME="#\s+hostname\s*:\s*$MY_HOSTNAME" 9461f87151SVeronika MolnarovaREGEX_LINE_KERNEL="#\s+os release\s*:\s*${MY_KERNEL_VERSION//+/\\+}" 9561f87151SVeronika MolnarovaREGEX_LINE_PERF="#\s+perf version\s*:\s*" 9661f87151SVeronika MolnarovaREGEX_LINE_ARCH="#\s+arch\s*:\s*$MY_ARCH" 9761f87151SVeronika MolnarovaREGEX_LINE_CPUS_ONLINE="#\s+nrcpus online\s*:\s*$MY_CPUS_ONLINE" 9861f87151SVeronika MolnarovaREGEX_LINE_CPUS_AVAIL="#\s+nrcpus avail\s*:\s*$MY_CPUS_AVAILABLE" 9961f87151SVeronika Molnarova# disable precise check for "nrcpus avail" in BASIC runmode 10061f87151SVeronika Molnarovatest $PERFTOOL_TESTSUITE_RUNMODE -lt $RUNMODE_STANDARD && REGEX_LINE_CPUS_AVAIL="#\s+nrcpus avail\s*:\s*$RE_NUMBER" 10161f87151SVeronika Molnarova../common/check_all_patterns_found.pl "$REGEX_LINE_TIMESTAMP" "$REGEX_LINE_HOSTNAME" "$REGEX_LINE_KERNEL" "$REGEX_LINE_PERF" "$REGEX_LINE_ARCH" "$REGEX_LINE_CPUS_ONLINE" "$REGEX_LINE_CPUS_AVAIL" < $LOGS_DIR/basic_header.log 10261f87151SVeronika MolnarovaCHECK_EXIT_CODE=$? 10361f87151SVeronika Molnarova 10461f87151SVeronika Molnarovaprint_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "header" 10561f87151SVeronika Molnarova(( TEST_RESULT += $? )) 10661f87151SVeronika Molnarova 10761f87151SVeronika Molnarova# '--header' and '--header-only' should use creation time 10861f87151SVeronika MolnarovaOLD_TIMESTAMP=`$CMD_PERF report --stdio --header-only -i $CURRENT_TEST_DIR/perf.data | grep "captured on"` 10961f87151SVeronika MolnarovaPERF_EXIT_CODE=$? 11061f87151SVeronika Molnarova 11161f87151SVeronika Molnarova( tar -C $CURRENT_TEST_DIR -c perf.data | xz > $CURRENT_TEST_DIR/perf.data.tar.xz ; xzcat $CURRENT_TEST_DIR/perf.data.tar.xz | tar x -C $HEADER_TAR_DIR ) 11261f87151SVeronika Molnarova(( PERF_EXIT_CODE += $? )) 11361f87151SVeronika Molnarova 11461f87151SVeronika MolnarovaNEW_TIMESTAMP=`$CMD_PERF report --stdio --header-only -i $HEADER_TAR_DIR/perf.data | grep "captured on"` 11561f87151SVeronika Molnarova(( PERF_EXIT_CODE += $? )) 11661f87151SVeronika Molnarova 11761f87151SVeronika Molnarovatest "$OLD_TIMESTAMP" = "$NEW_TIMESTAMP" 11861f87151SVeronika MolnarovaCHECK_EXIT_CODE=$? 11961f87151SVeronika Molnarova 12061f87151SVeronika Molnarovaprint_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "header timestamp" 12161f87151SVeronika Molnarova(( TEST_RESULT += $? )) 12261f87151SVeronika Molnarova 12361f87151SVeronika Molnarova 12461f87151SVeronika Molnarova### show CPU utilization 12561f87151SVeronika Molnarova 12661f87151SVeronika Molnarova# '--showcpuutilization' should show percentage for both system and userspace mode 12761f87151SVeronika Molnarova$CMD_PERF report -i $CURRENT_TEST_DIR/perf.data --stdio --showcpuutilization > $LOGS_DIR/basic_cpuut.log 2> $LOGS_DIR/basic_cpuut.err 12861f87151SVeronika MolnarovaPERF_EXIT_CODE=$? 12961f87151SVeronika Molnarova 13061f87151SVeronika MolnarovaREGEX_LINES_HEADER="#\s*Children\s+Self\s+sys\s+usr\s+Command\s+Shared Object\s+Symbol" 13161f87151SVeronika MolnarovaREGEX_LINES="\s*$RE_NUMBER%\s+$RE_NUMBER%\s+$RE_NUMBER%\s+$RE_NUMBER%\s+\S+\s+\[kernel\.(?:vmlinux)|(?:kallsyms)\]\s+\[[k\.]\]\s+\w+" 13261f87151SVeronika Molnarova../common/check_all_patterns_found.pl "$REGEX_LINES_HEADER" "$REGEX_LINES" < $LOGS_DIR/basic_cpuut.log 13361f87151SVeronika MolnarovaCHECK_EXIT_CODE=$? 13461f87151SVeronika Molnarova../common/check_errors_whitelisted.pl "stderr-whitelist.txt" < $LOGS_DIR/basic_cpuut.err 13561f87151SVeronika Molnarova(( CHECK_EXIT_CODE += $? )) 13661f87151SVeronika Molnarova 13761f87151SVeronika Molnarovaprint_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "show CPU utilization" 13861f87151SVeronika Molnarova(( TEST_RESULT += $? )) 13961f87151SVeronika Molnarova 14061f87151SVeronika Molnarova 14161f87151SVeronika Molnarova### pid 14261f87151SVeronika Molnarova 14361f87151SVeronika Molnarova# '--pid=' should limit the output for a process with the given pid only 14461f87151SVeronika Molnarova$CMD_PERF report --stdio -i $CURRENT_TEST_DIR/perf.data --pid=1 > $LOGS_DIR/basic_pid.log 2> $LOGS_DIR/basic_pid.err 14561f87151SVeronika MolnarovaPERF_EXIT_CODE=$? 14661f87151SVeronika Molnarova 14761f87151SVeronika Molnarovagrep -P -v '^#' $LOGS_DIR/basic_pid.log | grep -P '\s+[\d\.]+%' | ../common/check_all_lines_matched.pl "systemd|init" 14861f87151SVeronika MolnarovaCHECK_EXIT_CODE=$? 14961f87151SVeronika Molnarova../common/check_errors_whitelisted.pl "stderr-whitelist.txt" < $LOGS_DIR/basic_pid.err 15061f87151SVeronika Molnarova(( CHECK_EXIT_CODE += $? )) 15161f87151SVeronika Molnarova 15261f87151SVeronika Molnarovaprint_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "pid" 15361f87151SVeronika Molnarova(( TEST_RESULT += $? )) 15461f87151SVeronika Molnarova 15561f87151SVeronika Molnarova 15661f87151SVeronika Molnarova### non-existing symbol 15761f87151SVeronika Molnarova 15861f87151SVeronika Molnarova# '--symbols' should show only the given symbols 15961f87151SVeronika Molnarova$CMD_PERF report --stdio -i $CURRENT_TEST_DIR/perf.data --symbols=dummynonexistingsymbol > $LOGS_DIR/basic_symbols.log 2> $LOGS_DIR/basic_symbols.err 16061f87151SVeronika MolnarovaPERF_EXIT_CODE=$? 16161f87151SVeronika Molnarova 16261f87151SVeronika Molnarova../common/check_all_lines_matched.pl "$RE_LINE_EMPTY" "$RE_LINE_COMMENT" < $LOGS_DIR/basic_symbols.log 16361f87151SVeronika MolnarovaCHECK_EXIT_CODE=$? 16461f87151SVeronika Molnarova../common/check_errors_whitelisted.pl "stderr-whitelist.txt" < $LOGS_DIR/basic_symbols.err 16561f87151SVeronika Molnarova(( CHECK_EXIT_CODE += $? )) 16661f87151SVeronika Molnarova 16761f87151SVeronika Molnarovaprint_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "non-existing symbol" 16861f87151SVeronika Molnarova(( TEST_RESULT += $? )) 16961f87151SVeronika Molnarova 17061f87151SVeronika Molnarova 17161f87151SVeronika Molnarova### symbol filter 17261f87151SVeronika Molnarova 17361f87151SVeronika Molnarova# '--symbol-filter' should filter symbols based on substrings 17461f87151SVeronika Molnarova$CMD_PERF report --stdio -i $CURRENT_TEST_DIR/perf.data --symbol-filter=map > $LOGS_DIR/basic_symbolfilter.log 2> $LOGS_DIR/basic_symbolfilter.err 17561f87151SVeronika MolnarovaPERF_EXIT_CODE=$? 17661f87151SVeronika Molnarova 17761f87151SVeronika Molnarovagrep -P -v '^#' $LOGS_DIR/basic_symbolfilter.log | grep -P '\s+[\d\.]+%' | ../common/check_all_lines_matched.pl "\[[k\.]\]\s+.*map" 17861f87151SVeronika MolnarovaCHECK_EXIT_CODE=$? 17961f87151SVeronika Molnarova../common/check_errors_whitelisted.pl "stderr-whitelist.txt" < $LOGS_DIR/basic_symbolfilter.err 18061f87151SVeronika Molnarova(( CHECK_EXIT_CODE += $? )) 18161f87151SVeronika Molnarova 18261f87151SVeronika Molnarovaprint_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "symbol filter" 18361f87151SVeronika Molnarova(( TEST_RESULT += $? )) 18461f87151SVeronika Molnarova 18561f87151SVeronika Molnarova 186*257facfaSDmitry Vyukov### latency and parallelism 187*257facfaSDmitry Vyukov 188*257facfaSDmitry Vyukov# Record with --latency should record with context switches. 189*257facfaSDmitry Vyukov$CMD_PERF report -i $CURRENT_TEST_DIR/perf.data.1 --stdio --header-only > $LOGS_DIR/latency_header.log 190*257facfaSDmitry VyukovPERF_EXIT_CODE=$? 191*257facfaSDmitry Vyukov 192*257facfaSDmitry Vyukov../common/check_all_patterns_found.pl ", context_switch = 1, " < $LOGS_DIR/latency_header.log 193*257facfaSDmitry VyukovCHECK_EXIT_CODE=$? 194*257facfaSDmitry Vyukov 195*257facfaSDmitry Vyukovprint_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "latency header" 196*257facfaSDmitry Vyukov(( TEST_RESULT += $? )) 197*257facfaSDmitry Vyukov 198*257facfaSDmitry Vyukov 199*257facfaSDmitry Vyukov# The default report for latency profile should show Overhead and Latency fields (in that order). 200*257facfaSDmitry Vyukov$CMD_PERF report --stdio -i $CURRENT_TEST_DIR/perf.data.1 > $LOGS_DIR/latency_default.log 2> $LOGS_DIR/latency_default.err 201*257facfaSDmitry VyukovPERF_EXIT_CODE=$? 202*257facfaSDmitry Vyukov 203*257facfaSDmitry Vyukov../common/check_all_patterns_found.pl "# Overhead Latency Command" < $LOGS_DIR/latency_default.log 204*257facfaSDmitry VyukovCHECK_EXIT_CODE=$? 205*257facfaSDmitry Vyukov../common/check_errors_whitelisted.pl "stderr-whitelist.txt" < $LOGS_DIR/latency_default.err 206*257facfaSDmitry Vyukov(( CHECK_EXIT_CODE += $? )) 207*257facfaSDmitry Vyukov 208*257facfaSDmitry Vyukovprint_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "default report for latency profile" 209*257facfaSDmitry Vyukov(( TEST_RESULT += $? )) 210*257facfaSDmitry Vyukov 211*257facfaSDmitry Vyukov 212*257facfaSDmitry Vyukov# The latency report for latency profile should show Latency and Overhead fields (in that order). 213*257facfaSDmitry Vyukov$CMD_PERF report --latency --stdio -i $CURRENT_TEST_DIR/perf.data.1 > $LOGS_DIR/latency_latency.log 2> $LOGS_DIR/latency_latency.err 214*257facfaSDmitry VyukovPERF_EXIT_CODE=$? 215*257facfaSDmitry Vyukov 216*257facfaSDmitry Vyukov../common/check_all_patterns_found.pl "# Latency Overhead Command" < $LOGS_DIR/latency_latency.log 217*257facfaSDmitry VyukovCHECK_EXIT_CODE=$? 218*257facfaSDmitry Vyukov../common/check_errors_whitelisted.pl "stderr-whitelist.txt" < $LOGS_DIR/latency_latency.err 219*257facfaSDmitry Vyukov(( CHECK_EXIT_CODE += $? )) 220*257facfaSDmitry Vyukov 221*257facfaSDmitry Vyukovprint_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "latency report for latency profile" 222*257facfaSDmitry Vyukov(( TEST_RESULT += $? )) 223*257facfaSDmitry Vyukov 224*257facfaSDmitry Vyukov 225*257facfaSDmitry Vyukov# Ensure parallelism histogram with parallelism filter does not fail/crash. 226*257facfaSDmitry Vyukov$CMD_PERF report --hierarchy --sort latency,parallelism,comm,symbol --parallelism=1,2 --stdio -i $CURRENT_TEST_DIR/perf.data.1 > $LOGS_DIR/parallelism_hierarchy.log 2> $LOGS_DIR/parallelism_hierarchy.err 227*257facfaSDmitry VyukovPERF_EXIT_CODE=$? 228*257facfaSDmitry Vyukov 229*257facfaSDmitry Vyukov../common/check_all_patterns_found.pl "# Latency Parallelism / Command / Symbol" < $LOGS_DIR/parallelism_hierarchy.log 230*257facfaSDmitry VyukovCHECK_EXIT_CODE=$? 231*257facfaSDmitry Vyukov../common/check_errors_whitelisted.pl "stderr-whitelist.txt" < $LOGS_DIR/parallelism_hierarchy.err 232*257facfaSDmitry Vyukov(( CHECK_EXIT_CODE += $? )) 233*257facfaSDmitry Vyukov 234*257facfaSDmitry Vyukovprint_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "parallelism histogram" 235*257facfaSDmitry Vyukov(( TEST_RESULT += $? )) 236*257facfaSDmitry Vyukov 237*257facfaSDmitry Vyukov 23861f87151SVeronika Molnarova# TODO: $CMD_PERF report -n --showcpuutilization -TUxDg 2> 01.log 23961f87151SVeronika Molnarova 24061f87151SVeronika Molnarova# print overall results 24161f87151SVeronika Molnarovaprint_overall_results "$TEST_RESULT" 24261f87151SVeronika Molnarovaexit $? 243