xref: /spdk/test/interrupt/common.sh (revision 7bb8a30db9b0e3db03894a519266e4fd13a98df3)
1ccad22cfSKrzysztof Goreczny#  SPDX-License-Identifier: BSD-3-Clause
2ccad22cfSKrzysztof Goreczny#  Copyright (C) 2021 Intel Corporation.
3ccad22cfSKrzysztof Goreczny#  All rights reserved.
4ccad22cfSKrzysztof Goreczny
5ccad22cfSKrzysztof Gorecznyfunction cleanup() {
6ccad22cfSKrzysztof Goreczny	rm -f "$SPDK_TEST_STORAGE/aiofile"
7ccad22cfSKrzysztof Goreczny}
8ccad22cfSKrzysztof Goreczny
9ccad22cfSKrzysztof Gorecznyfunction reactor_is_busy_or_idle() {
10ccad22cfSKrzysztof Goreczny	local pid=$1
11ccad22cfSKrzysztof Goreczny	local idx=$2
12ccad22cfSKrzysztof Goreczny	local state=$3
13*7bb8a30dSKonrad Sztyber	local busy_threshold=${BUSY_THRESHOLD:-65}
14*7bb8a30dSKonrad Sztyber	local idle_threshold=${IDLE_THRESHOLD:-30}
15ccad22cfSKrzysztof Goreczny
16ccad22cfSKrzysztof Goreczny	if [[ $state != "busy" ]] && [[ $state != "idle" ]]; then
17ccad22cfSKrzysztof Goreczny		return 1
18ccad22cfSKrzysztof Goreczny	fi
19ccad22cfSKrzysztof Goreczny
20ccad22cfSKrzysztof Goreczny	if ! hash top; then
21ccad22cfSKrzysztof Goreczny		# Fail this test if top is missing from system.
22ccad22cfSKrzysztof Goreczny		return 1
23ccad22cfSKrzysztof Goreczny	fi
24ccad22cfSKrzysztof Goreczny
25ccad22cfSKrzysztof Goreczny	for ((j = 10; j != 0; j--)); do
26ccad22cfSKrzysztof Goreczny		top_reactor=$(top -bHn 1 -p $pid -w 256 | grep reactor_$idx)
27ccad22cfSKrzysztof Goreczny		cpu_rate=$(echo $top_reactor | sed -e 's/^\s*//g' | awk '{print $9}')
28ccad22cfSKrzysztof Goreczny		cpu_rate=${cpu_rate%.*}
29ccad22cfSKrzysztof Goreczny
30*7bb8a30dSKonrad Sztyber		if [[ $state = "busy" ]] && ((cpu_rate < busy_threshold)); then
31ccad22cfSKrzysztof Goreczny			sleep 1
32*7bb8a30dSKonrad Sztyber		elif [[ $state = "idle" ]] && ((cpu_rate > idle_threshold)); then
33ccad22cfSKrzysztof Goreczny			sleep 1
34ccad22cfSKrzysztof Goreczny		else
35ccad22cfSKrzysztof Goreczny			return 0
36ccad22cfSKrzysztof Goreczny		fi
37ccad22cfSKrzysztof Goreczny	done
38ccad22cfSKrzysztof Goreczny
39ccad22cfSKrzysztof Goreczny	if [[ $state = "busy" ]]; then
40ccad22cfSKrzysztof Goreczny		echo "cpu rate ${cpu_rate} of reactor $i probably is not busy polling"
41ccad22cfSKrzysztof Goreczny	else
42ccad22cfSKrzysztof Goreczny		echo "cpu rate ${cpu_rate} of reactor $i probably is not idle interrupt"
43ccad22cfSKrzysztof Goreczny	fi
44ccad22cfSKrzysztof Goreczny
45ccad22cfSKrzysztof Goreczny	return 1
46ccad22cfSKrzysztof Goreczny}
47ccad22cfSKrzysztof Goreczny
48ccad22cfSKrzysztof Gorecznyfunction reactor_is_busy() {
49ccad22cfSKrzysztof Goreczny	reactor_is_busy_or_idle $1 $2 "busy"
50ccad22cfSKrzysztof Goreczny}
51ccad22cfSKrzysztof Goreczny
52ccad22cfSKrzysztof Gorecznyfunction reactor_is_idle() {
53ccad22cfSKrzysztof Goreczny	reactor_is_busy_or_idle $1 $2 "idle"
54ccad22cfSKrzysztof Goreczny}
55ccad22cfSKrzysztof Goreczny
56ccad22cfSKrzysztof Gorecznyfunction reactor_get_thread_ids() {
57ccad22cfSKrzysztof Goreczny	local reactor_cpumask=$1
58ccad22cfSKrzysztof Goreczny	local grep_str
59ccad22cfSKrzysztof Goreczny
60ccad22cfSKrzysztof Goreczny	reactor_cpumask=$((reactor_cpumask))
61ccad22cfSKrzysztof Goreczny	jq_str='.threads|.[]|select(.cpumask == $reactor_cpumask)|.id'
62ccad22cfSKrzysztof Goreczny
63ccad22cfSKrzysztof Goreczny	# shellcheck disable=SC2005
64ccad22cfSKrzysztof Goreczny	echo "$($rpc_py thread_get_stats | jq --arg reactor_cpumask "$reactor_cpumask" "$jq_str")"
65ccad22cfSKrzysztof Goreczny
66ccad22cfSKrzysztof Goreczny}
67ccad22cfSKrzysztof Goreczny
68ccad22cfSKrzysztof Gorecznyfunction setup_bdev_mem() {
69ccad22cfSKrzysztof Goreczny	"$rpc_py" <<- RPC
70ccad22cfSKrzysztof Goreczny		bdev_malloc_create -b Malloc0 32 512
71ccad22cfSKrzysztof Goreczny		bdev_malloc_create -b Malloc1 32 512
72ccad22cfSKrzysztof Goreczny		bdev_malloc_create -b Malloc2 32 512
73ccad22cfSKrzysztof Goreczny	RPC
74ccad22cfSKrzysztof Goreczny}
75ccad22cfSKrzysztof Goreczny
76ccad22cfSKrzysztof Gorecznyfunction setup_bdev_aio() {
77ccad22cfSKrzysztof Goreczny	if [[ $(uname -s) != "FreeBSD" ]]; then
78ccad22cfSKrzysztof Goreczny		dd if=/dev/zero of="$SPDK_TEST_STORAGE/aiofile" bs=2048 count=5000
79ccad22cfSKrzysztof Goreczny		"$rpc_py" bdev_aio_create "$SPDK_TEST_STORAGE/aiofile" AIO0 2048
80ccad22cfSKrzysztof Goreczny	fi
81ccad22cfSKrzysztof Goreczny}
82