1831d06c8SNamhyung Kim#!/bin/sh 2831d06c8SNamhyung Kim# perf record offcpu profiling tests 3831d06c8SNamhyung Kim# SPDX-License-Identifier: GPL-2.0 4831d06c8SNamhyung Kim 5831d06c8SNamhyung Kimset -e 6831d06c8SNamhyung Kim 7831d06c8SNamhyung Kimerr=0 8831d06c8SNamhyung Kimperfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX) 9831d06c8SNamhyung Kim 10831d06c8SNamhyung Kimcleanup() { 11831d06c8SNamhyung Kim rm -f ${perfdata} 12831d06c8SNamhyung Kim rm -f ${perfdata}.old 13*a225c304SKajol Jain trap - EXIT TERM INT 14831d06c8SNamhyung Kim} 15831d06c8SNamhyung Kim 16831d06c8SNamhyung Kimtrap_cleanup() { 17831d06c8SNamhyung Kim cleanup 18831d06c8SNamhyung Kim exit 1 19831d06c8SNamhyung Kim} 20*a225c304SKajol Jaintrap trap_cleanup EXIT TERM INT 21831d06c8SNamhyung Kim 22ade1d030SNamhyung Kimtest_offcpu_priv() { 23ade1d030SNamhyung Kim echo "Checking off-cpu privilege" 24ade1d030SNamhyung Kim 25*a225c304SKajol Jain if [ "$(id -u)" != 0 ] 26831d06c8SNamhyung Kim then 27ade1d030SNamhyung Kim echo "off-cpu test [Skipped permission]" 28831d06c8SNamhyung Kim err=2 29831d06c8SNamhyung Kim return 30831d06c8SNamhyung Kim fi 319a2d5178SArnaldo Carvalho de Melo if perf record --off-cpu -o /dev/null --quiet true 2>&1 | grep BUILD_BPF_SKEL 32831d06c8SNamhyung Kim then 33ade1d030SNamhyung Kim echo "off-cpu test [Skipped missing BPF support]" 34831d06c8SNamhyung Kim err=2 35831d06c8SNamhyung Kim return 36831d06c8SNamhyung Kim fi 37ade1d030SNamhyung Kim} 38ade1d030SNamhyung Kim 39ade1d030SNamhyung Kimtest_offcpu_basic() { 40ade1d030SNamhyung Kim echo "Basic off-cpu test" 41ade1d030SNamhyung Kim 42831d06c8SNamhyung Kim if ! perf record --off-cpu -e dummy -o ${perfdata} sleep 1 2> /dev/null 43831d06c8SNamhyung Kim then 44831d06c8SNamhyung Kim echo "Basic off-cpu test [Failed record]" 45831d06c8SNamhyung Kim err=1 46831d06c8SNamhyung Kim return 47831d06c8SNamhyung Kim fi 48831d06c8SNamhyung Kim if ! perf evlist -i ${perfdata} | grep -q "offcpu-time" 49831d06c8SNamhyung Kim then 50ade1d030SNamhyung Kim echo "Basic off-cpu test [Failed no event]" 51831d06c8SNamhyung Kim err=1 52831d06c8SNamhyung Kim return 53831d06c8SNamhyung Kim fi 54818448e9STiezhu Yang if ! perf report -i ${perfdata} -q --percent-limit=90 | grep -E -q sleep 55831d06c8SNamhyung Kim then 56831d06c8SNamhyung Kim echo "Basic off-cpu test [Failed missing output]" 57831d06c8SNamhyung Kim err=1 58831d06c8SNamhyung Kim return 59831d06c8SNamhyung Kim fi 60831d06c8SNamhyung Kim echo "Basic off-cpu test [Success]" 61831d06c8SNamhyung Kim} 62831d06c8SNamhyung Kim 63ade1d030SNamhyung Kimtest_offcpu_child() { 64ade1d030SNamhyung Kim echo "Child task off-cpu test" 65ade1d030SNamhyung Kim 66ade1d030SNamhyung Kim # perf bench sched messaging creates 400 processes 67ade1d030SNamhyung Kim if ! perf record --off-cpu -e dummy -o ${perfdata} -- \ 689835b742SPatrice Duroux perf bench sched messaging -g 10 > /dev/null 2>&1 69ade1d030SNamhyung Kim then 70ade1d030SNamhyung Kim echo "Child task off-cpu test [Failed record]" 71ade1d030SNamhyung Kim err=1 72ade1d030SNamhyung Kim return 73ade1d030SNamhyung Kim fi 74ade1d030SNamhyung Kim if ! perf evlist -i ${perfdata} | grep -q "offcpu-time" 75ade1d030SNamhyung Kim then 76ade1d030SNamhyung Kim echo "Child task off-cpu test [Failed no event]" 77ade1d030SNamhyung Kim err=1 78ade1d030SNamhyung Kim return 79ade1d030SNamhyung Kim fi 80ade1d030SNamhyung Kim # each process waits for read and write, so it should be more than 800 events 81ade1d030SNamhyung Kim if ! perf report -i ${perfdata} -s comm -q -n -t ';' --percent-limit=90 | \ 82ade1d030SNamhyung Kim awk -F ";" '{ if (NF > 3 && int($3) < 800) exit 1; }' 83ade1d030SNamhyung Kim then 84ade1d030SNamhyung Kim echo "Child task off-cpu test [Failed invalid output]" 85ade1d030SNamhyung Kim err=1 86ade1d030SNamhyung Kim return 87ade1d030SNamhyung Kim fi 88ade1d030SNamhyung Kim echo "Child task off-cpu test [Success]" 89ade1d030SNamhyung Kim} 90ade1d030SNamhyung Kim 91ade1d030SNamhyung Kim 92ade1d030SNamhyung Kimtest_offcpu_priv 93ade1d030SNamhyung Kim 94ade1d030SNamhyung Kimif [ $err = 0 ]; then 95ade1d030SNamhyung Kim test_offcpu_basic 96ade1d030SNamhyung Kimfi 97ade1d030SNamhyung Kim 98ade1d030SNamhyung Kimif [ $err = 0 ]; then 99ade1d030SNamhyung Kim test_offcpu_child 100ade1d030SNamhyung Kimfi 101831d06c8SNamhyung Kim 102831d06c8SNamhyung Kimcleanup 103831d06c8SNamhyung Kimexit $err 104