1*0e22c5caSIan Rogers#!/bin/bash 2*0e22c5caSIan Rogers# perf sched tests 3*0e22c5caSIan Rogers# SPDX-License-Identifier: GPL-2.0 4*0e22c5caSIan Rogers 5*0e22c5caSIan Rogersset -e 6*0e22c5caSIan Rogers 7*0e22c5caSIan Rogersif [ "$(id -u)" != 0 ]; then 8*0e22c5caSIan Rogers echo "[Skip] No root permission" 9*0e22c5caSIan Rogers exit 2 10*0e22c5caSIan Rogersfi 11*0e22c5caSIan Rogers 12*0e22c5caSIan Rogerserr=0 13*0e22c5caSIan Rogersperfdata=$(mktemp /tmp/__perf_test_sched.perf.data.XXXXX) 14*0e22c5caSIan RogersPID1=0 15*0e22c5caSIan RogersPID2=0 16*0e22c5caSIan Rogers 17*0e22c5caSIan Rogerscleanup() { 18*0e22c5caSIan Rogers rm -f "${perfdata}" 19*0e22c5caSIan Rogers rm -f "${perfdata}".old 20*0e22c5caSIan Rogers 21*0e22c5caSIan Rogers trap - EXIT TERM INT 22*0e22c5caSIan Rogers} 23*0e22c5caSIan Rogers 24*0e22c5caSIan Rogerstrap_cleanup() { 25*0e22c5caSIan Rogers echo "Unexpected signal in ${FUNCNAME[1]}" 26*0e22c5caSIan Rogers cleanup 27*0e22c5caSIan Rogers exit 1 28*0e22c5caSIan Rogers} 29*0e22c5caSIan Rogerstrap trap_cleanup EXIT TERM INT 30*0e22c5caSIan Rogers 31*0e22c5caSIan Rogersstart_noploops() { 32*0e22c5caSIan Rogers # Start two noploop workloads on CPU0 to trigger scheduling. 33*0e22c5caSIan Rogers perf test -w noploop 10 & 34*0e22c5caSIan Rogers PID1=$! 35*0e22c5caSIan Rogers taskset -pc 0 $PID1 36*0e22c5caSIan Rogers perf test -w noploop 10 & 37*0e22c5caSIan Rogers PID2=$! 38*0e22c5caSIan Rogers taskset -pc 0 $PID2 39*0e22c5caSIan Rogers 40*0e22c5caSIan Rogers if ! grep -q 'Cpus_allowed_list:\s*0$' "/proc/$PID1/status" 41*0e22c5caSIan Rogers then 42*0e22c5caSIan Rogers echo "Sched [Error taskset did not work for the 1st noploop ($PID1)]" 43*0e22c5caSIan Rogers grep Cpus_allowed /proc/$PID1/status 44*0e22c5caSIan Rogers err=1 45*0e22c5caSIan Rogers fi 46*0e22c5caSIan Rogers 47*0e22c5caSIan Rogers if ! grep -q 'Cpus_allowed_list:\s*0$' "/proc/$PID2/status" 48*0e22c5caSIan Rogers then 49*0e22c5caSIan Rogers echo "Sched [Error taskset did not work for the 2nd noploop ($PID2)]" 50*0e22c5caSIan Rogers grep Cpus_allowed /proc/$PID2/status 51*0e22c5caSIan Rogers err=1 52*0e22c5caSIan Rogers fi 53*0e22c5caSIan Rogers} 54*0e22c5caSIan Rogers 55*0e22c5caSIan Rogerscleanup_noploops() { 56*0e22c5caSIan Rogers kill "$PID1" "$PID2" 57*0e22c5caSIan Rogers} 58*0e22c5caSIan Rogers 59*0e22c5caSIan Rogerstest_sched_latency() { 60*0e22c5caSIan Rogers echo "Sched latency" 61*0e22c5caSIan Rogers 62*0e22c5caSIan Rogers start_noploops 63*0e22c5caSIan Rogers 64*0e22c5caSIan Rogers perf sched record --no-inherit -o "${perfdata}" sleep 1 65*0e22c5caSIan Rogers if ! perf sched latency -i "${perfdata}" | grep -q perf-noploop 66*0e22c5caSIan Rogers then 67*0e22c5caSIan Rogers echo "Sched latency [Failed missing output]" 68*0e22c5caSIan Rogers err=1 69*0e22c5caSIan Rogers fi 70*0e22c5caSIan Rogers 71*0e22c5caSIan Rogers cleanup_noploops 72*0e22c5caSIan Rogers} 73*0e22c5caSIan Rogers 74*0e22c5caSIan Rogerstest_sched_script() { 75*0e22c5caSIan Rogers echo "Sched script" 76*0e22c5caSIan Rogers 77*0e22c5caSIan Rogers start_noploops 78*0e22c5caSIan Rogers 79*0e22c5caSIan Rogers perf sched record --no-inherit -o "${perfdata}" sleep 1 80*0e22c5caSIan Rogers if ! perf sched script -i "${perfdata}" | grep -q perf-noploop 81*0e22c5caSIan Rogers then 82*0e22c5caSIan Rogers echo "Sched script [Failed missing output]" 83*0e22c5caSIan Rogers err=1 84*0e22c5caSIan Rogers fi 85*0e22c5caSIan Rogers 86*0e22c5caSIan Rogers cleanup_noploops 87*0e22c5caSIan Rogers} 88*0e22c5caSIan Rogers 89*0e22c5caSIan Rogerstest_sched_latency 90*0e22c5caSIan Rogerstest_sched_script 91*0e22c5caSIan Rogers 92*0e22c5caSIan Rogerscleanup 93*0e22c5caSIan Rogersexit $err 94