xref: /spdk/scripts/perf/pm/collect-cpu-load (revision 8afdeef3becfe9409cc9e7372bd0bc10e8b7d46d)
1#!/usr/bin/env bash
2#  SPDX-License-Identifier: BSD-3-Clause
3#  Copyright (C) 2023 Intel Corporation
4#  All rights reserved.
5
6shopt -s nullglob extglob
7
8pmdir=$(readlink -f "$(dirname "$0")")
9rootdir=$(readlink -f "$pmdir/../../../")
10source "$rootdir/test/scheduler/common.sh"
11source "$pmdir/common"
12
13help() {
14	cat <<- HELP
15
16		Usage: $0 [-h] [-c count] [-d dir] [-l] [-p prefix] [cpu0 cpu1 ...]
17
18		-h - Print this message.
19		-c - Execute count times. 0 is the default and it means to run
20		     indefinitely.
21		-d - Directory where results should be saved. Default is /tmp.
22		-l - Save output of the script to a log file (dir/${0##*/}.pm.log).
23		-p - Add prefix to saved files.
24		-t - How long to wait before each load read. Default is 1s.
25
26		cpu - Valid cpu id (e.g. 0) to monitor.
27
28		When started, ${0##*/} will enter loop to continuously monitor cpu
29		load. Each iteration will be logged to stderr and a log file
30		(dir/${0##*/}.pm.log).
31
32	HELP
33}
34
35cleanup() {
36	rm_pm_pid
37}
38
39# get_cpu_time() uses these, so put some stubs in place
40xtrace_disable() { :; }
41xtrace_restore() { :; }
42
43_get_cpu_time() {
44	get_cpu_time "$@"
45}
46
47count=0
48interval=1
49log_to_file=no
50prefix=""
51
52while getopts c:d:hlp:t: opt; do
53	case "$opt" in
54		c) count=$OPTARG ;;
55		d) PM_OUTPUTDIR=$OPTARG ;;
56		h)
57			help
58			exit 0
59			;;
60		l) log_to_file=yes ;;
61		p) prefix=$OPTARG ;;
62		t) interval=$OPTARG ;;
63		*) ;;
64	esac
65done
66shift $((OPTIND - 1))
67
68declare -r log_file=${prefix:+${prefix}_}${0##*/}.pm.log
69
70mkdir -p "$PM_OUTPUTDIR"
71if [[ $log_to_file == yes ]]; then
72	printf 'Redirecting to %s\n' "$PM_OUTPUTDIR/$log_file" >&2
73	exec > "$PM_OUTPUTDIR/$log_file" 2>&1
74fi
75
76cpus=("$@")
77((${#cpus[@]} > 0)) || cpus=($(get_online_cpus))
78
79save_pm_pid
80trap 'cleanup' EXIT
81trap 'retag' USR1
82
83_get_cpu_time "$count" "" 1 "$interval" "${cpus[@]}"
84