summaryrefslogtreecommitdiff
path: root/tools/perf/tests/shell/sched.sh
blob: 113df962a51c878f15a8df2b63969bde5c397ef9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/bin/bash
# perf sched tests
# SPDX-License-Identifier: GPL-2.0

set -e

if [ "$(id -u)" != 0 ]; then
  echo "[Skip] No root permission"
  exit 2
fi

err=0
perfdata=$(mktemp /tmp/__perf_test_sched.perf.data.XXXXX)
PID1=0
PID2=0

cleanup() {
  rm -f "${perfdata}"
  rm -f "${perfdata}".old

  trap - EXIT TERM INT
}

trap_cleanup() {
  echo "Unexpected signal in ${FUNCNAME[1]}"
  cleanup
  exit 1
}
trap trap_cleanup EXIT TERM INT

start_noploops() {
  # Start two noploop workloads on CPU0 to trigger scheduling.
  perf test -w noploop 10 &
  PID1=$!
  taskset -pc 0 $PID1
  perf test -w noploop 10 &
  PID2=$!
  taskset -pc 0 $PID2

  if ! grep -q 'Cpus_allowed_list:\s*0$' "/proc/$PID1/status"
  then
    echo "Sched [Error taskset did not work for the 1st noploop ($PID1)]"
    grep Cpus_allowed /proc/$PID1/status
    err=1
  fi

  if ! grep -q 'Cpus_allowed_list:\s*0$' "/proc/$PID2/status"
  then
    echo "Sched [Error taskset did not work for the 2nd noploop ($PID2)]"
    grep Cpus_allowed /proc/$PID2/status
    err=1
  fi
}

cleanup_noploops() {
  kill "$PID1" "$PID2" || true
}

test_sched_record() {
  echo "Sched record"

  start_noploops

  perf sched record --no-inherit -o "${perfdata}" sleep 1

  cleanup_noploops
}

test_sched_latency() {
  echo "Sched latency"

  if ! perf sched latency -i "${perfdata}" | grep -q perf-noploop
  then
    echo "Sched latency [Failed missing output]"
    err=1
  fi
}

test_sched_latency_histogram() {
  echo "Sched latency histogram"

  if ! perf sched latency -H -i "${perfdata}" | grep -q "Latency Distribution Histogram"
  then
    echo "Sched latency histogram [Failed missing log histogram]"
    err=1
  fi

  if ! perf sched latency --histogram --hist-mode linear -i "${perfdata}" | grep -q "Latency Distribution Histogram"
  then
    echo "Sched latency histogram [Failed missing linear histogram]"
    err=1
  fi
}

test_sched_latency_time() {
  echo "Sched latency time filter"

  if ! perf sched latency --time 0, -i "${perfdata}" | grep -q perf-noploop
  then
    echo "Sched latency time filter [Failed missing output]"
    err=1
  fi
}

test_sched_script() {
  echo "Sched script"

  if ! perf sched script -i "${perfdata}" | grep -q perf-noploop
  then
    echo "Sched script [Failed missing output]"
    err=1
  fi
}

test_sched_map() {
  echo "Sched map"

  if ! perf sched map -i "${perfdata}" | grep -q perf-noploop
  then
    echo "Sched map [Failed missing output]"
    err=1
  fi
}

test_sched_timehist() {
  echo "Sched timehist"

  if ! perf sched timehist -i "${perfdata}" | grep -q perf-noploop
  then
    echo "Sched timehist [Failed missing output]"
    err=1
  fi
}

test_sched_record
test_sched_latency
test_sched_latency_histogram
test_sched_latency_time
test_sched_script
test_sched_map
test_sched_timehist

cleanup
exit $err