xref: /linux/tools/perf/tests/shell/sched.sh (revision 0e22c5ca44e687981f79598e650d26faad101746)
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