drm/rockchip: Don't change hdmi reference clock rate
[drm/drm-misc.git] / tools / perf / tests / shell / daemon.sh
blobe5fa8d6f9eb1fdad3a5d700da9fa788c771a31ad
1 #!/bin/bash
2 # daemon operations
3 # SPDX-License-Identifier: GPL-2.0
5 check_line_first()
7 local line=$1
8 local name=$2
9 local base=$3
10 local output=$4
11 local lock=$5
12 local up=$6
14 local line_name
15 line_name=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $2 }'`
16 local line_base
17 line_base=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $3 }'`
18 local line_output
19 line_output=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $4 }'`
20 local line_lock
21 line_lock=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $5 }'`
22 local line_up
23 line_up=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $6 }'`
25 if [ "${name}" != "${line_name}" ]; then
26 echo "FAILED: wrong name"
27 error=1
30 if [ "${base}" != "${line_base}" ]; then
31 echo "FAILED: wrong base"
32 error=1
35 if [ "${output}" != "${line_output}" ]; then
36 echo "FAILED: wrong output"
37 error=1
40 if [ "${lock}" != "${line_lock}" ]; then
41 echo "FAILED: wrong lock"
42 error=1
45 if [ "${up}" != "${line_up}" ]; then
46 echo "FAILED: wrong up"
47 error=1
51 check_line_other()
53 local line=$1
54 local name=$2
55 local run=$3
56 local base=$4
57 local output=$5
58 local control=$6
59 local ack=$7
60 local up=$8
62 local line_name
63 line_name=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $2 }'`
64 local line_run
65 line_run=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $3 }'`
66 local line_base
67 line_base=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $4 }'`
68 local line_output
69 line_output=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $5 }'`
70 local line_control
71 line_control=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $6 }'`
72 local line_ack
73 line_ack=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $7 }'`
74 local line_up
75 line_up=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $8 }'`
77 if [ "${name}" != "${line_name}" ]; then
78 echo "FAILED: wrong name"
79 error=1
82 if [ "${run}" != "${line_run}" ]; then
83 echo "FAILED: wrong run"
84 error=1
87 if [ "${base}" != "${line_base}" ]; then
88 echo "FAILED: wrong base"
89 error=1
92 if [ "${output}" != "${line_output}" ]; then
93 echo "FAILED: wrong output"
94 error=1
97 if [ "${control}" != "${line_control}" ]; then
98 echo "FAILED: wrong control"
99 error=1
102 if [ "${ack}" != "${line_ack}" ]; then
103 echo "FAILED: wrong ack"
104 error=1
107 if [ "${up}" != "${line_up}" ]; then
108 echo "FAILED: wrong up"
109 error=1
113 daemon_exit()
115 local config=$1
117 local line
118 line=`perf daemon --config ${config} -x: | head -1`
119 local pid
120 pid=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $1 }'`
122 # Reset trap handler.
123 trap - SIGINT SIGTERM
125 # stop daemon
126 perf daemon stop --config ${config}
128 # ... and wait for the pid to go away
129 tail --pid=${pid} -f /dev/null
132 daemon_start()
134 local config=$1
135 local session=$2
137 perf daemon start --config ${config}
139 # Clean up daemon if interrupted.
140 trap 'echo "FAILED: Signal caught"; daemon_exit "${config}"; exit 1' SIGINT SIGTERM
142 # wait for the session to ping
143 local state="FAIL"
144 local retries=0
145 while [ "${state}" != "OK" ]; do
146 state=`perf daemon ping --config ${config} --session ${session} | awk '{ print $1 }'`
147 sleep 0.05
148 retries=$((${retries} +1))
149 if [ ${retries} -ge 600 ]; then
150 echo "FAILED: Timeout waiting for daemon to ping"
151 daemon_exit ${config}
152 exit 1
154 done
157 test_list()
159 echo "test daemon list"
161 local config
162 config=$(mktemp /tmp/perf.daemon.config.XXX)
163 local base
164 base=$(mktemp -d /tmp/perf.daemon.base.XXX)
166 cat <<EOF > ${config}
167 [daemon]
168 base=BASE
170 [session-size]
171 run = -e cpu-clock -m 1 sleep 10
173 [session-time]
174 run = -e task-clock -m 1 sleep 10
177 sed -i -e "s|BASE|${base}|" ${config}
179 # start daemon
180 daemon_start ${config} size
182 # check first line
183 # pid:daemon:base:base/output:base/lock
184 local line
185 line=`perf daemon --config ${config} -x: | head -1`
186 check_line_first ${line} daemon ${base} ${base}/output ${base}/lock "0"
188 # check 1st session
189 # pid:size:-e cpu-clock:base/size:base/size/output:base/size/control:base/size/ack:0
190 local line
191 line=`perf daemon --config ${config} -x: | head -2 | tail -1`
192 check_line_other "${line}" size "-e cpu-clock -m 1 sleep 10" ${base}/session-size \
193 ${base}/session-size/output ${base}/session-size/control \
194 ${base}/session-size/ack "0"
196 # check 2nd session
197 # pid:time:-e task-clock:base/time:base/time/output:base/time/control:base/time/ack:0
198 local line
199 line=`perf daemon --config ${config} -x: | head -3 | tail -1`
200 check_line_other "${line}" time "-e task-clock -m 1 sleep 10" ${base}/session-time \
201 ${base}/session-time/output ${base}/session-time/control \
202 ${base}/session-time/ack "0"
204 # stop daemon
205 daemon_exit ${config}
207 rm -rf ${base}
208 rm -f ${config}
211 test_reconfig()
213 echo "test daemon reconfig"
215 local config
216 config=$(mktemp /tmp/perf.daemon.config.XXX)
217 local base
218 base=$(mktemp -d /tmp/perf.daemon.base.XXX)
220 # prepare config
221 cat <<EOF > ${config}
222 [daemon]
223 base=BASE
225 [session-size]
226 run = -e cpu-clock -m 1 sleep 10
228 [session-time]
229 run = -e task-clock -m 1 sleep 10
232 sed -i -e "s|BASE|${base}|" ${config}
234 # start daemon
235 daemon_start ${config} size
237 # check 2nd session
238 # pid:time:-e task-clock:base/time:base/time/output:base/time/control:base/time/ack:0
239 local line
240 line=`perf daemon --config ${config} -x: | head -3 | tail -1`
241 check_line_other "${line}" time "-e task-clock -m 1 sleep 10" ${base}/session-time \
242 ${base}/session-time/output ${base}/session-time/control ${base}/session-time/ack "0"
243 local pid
244 pid=`echo "${line}" | awk 'BEGIN { FS = ":" } ; { print $1 }'`
246 # prepare new config
247 local config_new=${config}.new
248 cat <<EOF > ${config_new}
249 [daemon]
250 base=BASE
252 [session-size]
253 run = -e cpu-clock -m 1 sleep 10
255 [session-time]
256 run = -e cpu-clock -m 1 sleep 10
259 # TEST 1 - change config
261 sed -i -e "s|BASE|${base}|" ${config_new}
262 cp ${config_new} ${config}
264 # wait for old session to finish
265 tail --pid=${pid} -f /dev/null
267 # wait for new one to start
268 local state="FAIL"
269 while [ "${state}" != "OK" ]; do
270 state=`perf daemon ping --config ${config} --session time | awk '{ print $1 }'`
271 done
273 # check reconfigured 2nd session
274 # pid:time:-e task-clock:base/time:base/time/output:base/time/control:base/time/ack:0
275 local line
276 line=`perf daemon --config ${config} -x: | head -3 | tail -1`
277 check_line_other "${line}" time "-e cpu-clock -m 1 sleep 10" ${base}/session-time \
278 ${base}/session-time/output ${base}/session-time/control ${base}/session-time/ack "0"
280 # TEST 2 - empty config
282 local config_empty=${config}.empty
283 cat <<EOF > ${config_empty}
284 [daemon]
285 base=BASE
288 # change config
289 sed -i -e "s|BASE|${base}|" ${config_empty}
290 cp ${config_empty} ${config}
292 # wait for sessions to finish
293 local state="OK"
294 while [ "${state}" != "FAIL" ]; do
295 state=`perf daemon ping --config ${config} --session time | awk '{ print $1 }'`
296 done
298 local state="OK"
299 while [ "${state}" != "FAIL" ]; do
300 state=`perf daemon ping --config ${config} --session size | awk '{ print $1 }'`
301 done
303 local one
304 one=`perf daemon --config ${config} -x: | wc -l`
306 if [ ${one} -ne "1" ]; then
307 echo "FAILED: wrong list output"
308 error=1
311 # TEST 3 - config again
313 cp ${config_new} ${config}
315 # wait for size to start
316 local state="FAIL"
317 while [ "${state}" != "OK" ]; do
318 state=`perf daemon ping --config ${config} --session size | awk '{ print $1 }'`
319 done
321 # wait for time to start
322 local state="FAIL"
323 while [ "${state}" != "OK" ]; do
324 state=`perf daemon ping --config ${config} --session time | awk '{ print $1 }'`
325 done
327 # stop daemon
328 daemon_exit ${config}
330 rm -rf ${base}
331 rm -f ${config}
332 rm -f ${config_new}
333 rm -f ${config_empty}
336 test_stop()
338 echo "test daemon stop"
340 local config
341 config=$(mktemp /tmp/perf.daemon.config.XXX)
342 local base
343 base=$(mktemp -d /tmp/perf.daemon.base.XXX)
345 # prepare config
346 cat <<EOF > ${config}
347 [daemon]
348 base=BASE
350 [session-size]
351 run = -e cpu-clock -m 1 sleep 10
353 [session-time]
354 run = -e task-clock -m 1 sleep 10
357 sed -i -e "s|BASE|${base}|" ${config}
359 # start daemon
360 daemon_start ${config} size
362 local pid_size
363 pid_size=`perf daemon --config ${config} -x: | head -2 | tail -1 |
364 awk 'BEGIN { FS = ":" } ; { print $1 }'`
365 local pid_time
366 pid_time=`perf daemon --config ${config} -x: | head -3 | tail -1 |
367 awk 'BEGIN { FS = ":" } ; { print $1 }'`
369 # check that sessions are running
370 if [ ! -d "/proc/${pid_size}" ]; then
371 echo "FAILED: session size not up"
374 if [ ! -d "/proc/${pid_time}" ]; then
375 echo "FAILED: session time not up"
378 # stop daemon
379 daemon_exit ${config}
381 # check that sessions are gone
382 if [ -d "/proc/${pid_size}" ]; then
383 echo "FAILED: session size still up"
386 if [ -d "/proc/${pid_time}" ]; then
387 echo "FAILED: session time still up"
390 rm -rf ${base}
391 rm -f ${config}
394 test_signal()
396 echo "test daemon signal"
398 local config
399 config=$(mktemp /tmp/perf.daemon.config.XXX)
400 local base
401 base=$(mktemp -d /tmp/perf.daemon.base.XXX)
403 # prepare config
404 cat <<EOF > ${config}
405 [daemon]
406 base=BASE
408 [session-test]
409 run = -e cpu-clock --switch-output -m 1 sleep 10
412 sed -i -e "s|BASE|${base}|" ${config}
414 # start daemon
415 daemon_start ${config} test
417 # send 2 signals then exit. Do this in a loop watching the number of
418 # files to avoid races. If the loop retries more than 600 times then
419 # give up.
420 local retries=0
421 local signals=0
422 local success=0
423 while [ ${retries} -lt 600 ] && [ ${success} -eq 0 ]; do
424 local files
425 files=`ls ${base}/session-test/*perf.data* 2> /dev/null | wc -l`
426 if [ ${signals} -eq 0 ]; then
427 perf daemon signal --config ${config} --session test
428 signals=1
429 elif [ ${signals} -eq 1 ] && [ $files -ge 1 ]; then
430 perf daemon signal --config ${config}
431 signals=2
432 elif [ ${signals} -eq 2 ] && [ $files -ge 2 ]; then
433 daemon_exit ${config}
434 signals=3
435 elif [ ${signals} -eq 3 ] && [ $files -ge 3 ]; then
436 success=1
438 retries=$((${retries} +1))
439 done
440 if [ ${success} -eq 0 ]; then
441 error=1
442 echo "FAILED: perf data no generated"
445 rm -rf ${base}
446 rm -f ${config}
449 test_ping()
451 echo "test daemon ping"
453 local config
454 config=$(mktemp /tmp/perf.daemon.config.XXX)
455 local base
456 base=$(mktemp -d /tmp/perf.daemon.base.XXX)
458 # prepare config
459 cat <<EOF > ${config}
460 [daemon]
461 base=BASE
463 [session-size]
464 run = -e cpu-clock -m 1 sleep 10
466 [session-time]
467 run = -e task-clock -m 1 sleep 10
470 sed -i -e "s|BASE|${base}|" ${config}
472 # start daemon
473 daemon_start ${config} size
475 size=`perf daemon ping --config ${config} --session size | awk '{ print $1 }'`
476 type=`perf daemon ping --config ${config} --session time | awk '{ print $1 }'`
478 if [ ${size} != "OK" ] || [ ${type} != "OK" ]; then
479 error=1
480 echo "FAILED: daemon ping failed"
483 # stop daemon
484 daemon_exit ${config}
486 rm -rf ${base}
487 rm -f ${config}
490 test_lock()
492 echo "test daemon lock"
494 local config
495 config=$(mktemp /tmp/perf.daemon.config.XXX)
496 local base
497 base=$(mktemp -d /tmp/perf.daemon.base.XXX)
499 # prepare config
500 cat <<EOF > ${config}
501 [daemon]
502 base=BASE
504 [session-size]
505 run = -e cpu-clock -m 1 sleep 10
508 sed -i -e "s|BASE|${base}|" ${config}
510 # start daemon
511 daemon_start ${config} size
513 # start second daemon over the same config/base
514 failed=`perf daemon start --config ${config} 2>&1 | awk '{ print $1 }'`
516 # check that we failed properly
517 if [ ${failed} != "failed:" ]; then
518 error=1
519 echo "FAILED: daemon lock failed"
522 # stop daemon
523 daemon_exit ${config}
525 rm -rf ${base}
526 rm -f ${config}
529 error=0
531 test_list
532 test_reconfig
533 test_stop
534 test_signal
535 test_ping
536 test_lock
538 exit ${error}