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