numam-spdk/test/scheduler/idle.sh
Josh Soref c9c7c281f8 spelling: test
Part of #2256

* achieve
* additionally
* against
* aliases
* already
* another
* arguments
* between
* capabilities
* comparison
* compatibility
* configuration
* continuing
* controlq
* cpumask
* default
* depends
* dereferenced
* discussed
* dissect
* driver
* environment
* everything
* excluded
* existing
* expectation
* failed
* fails
* following
* functions
* hugepages
* identifiers
* implicitly
* in_capsule
* increment
* initialization
* initiator
* integrity
* iteration
* latencies
* libraries
* management
* namespace
* negotiated
* negotiation
* nonexistent
* number
* occur
* occurred
* occurring
* offsetting
* operations
* outstanding
* overwhelmed
* parameter
* parameters
* partition
* preempts
* provisioned
* responded
* segment
* skipped
* struct
* subsystem
* success
* successfully
* sufficiently
* this
* threshold
* transfer
* transferred
* unchanged
* unexpected
* unregistered
* useless
* utility
* value
* variable
* workload

Change-Id: I21ca7dab4ef575b5767e50aaeabc34314ab13396
Signed-off-by: Josh Soref <jsoref@gmail.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/10409
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
2021-12-03 08:13:22 +00:00

63 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
testdir=$(readlink -f "$(dirname "$0")")
rootdir=$(readlink -f "$testdir/../../")
source "$rootdir/test/common/autotest_common.sh"
source "$testdir/common.sh"
trap 'killprocess "$spdk_pid"' EXIT
thread_stats() {
local thread
local busy_threads=0
get_thread_stats
# Simply verify if threads stay idle
for thread in "${!thread_map[@]}"; do
if ((idle[thread] < busy[thread])); then
printf 'Waiting for %s to become idle\n' "${thread_map[thread]}"
((++busy_threads))
elif ((idle[thread] > busy[thread])); then
printf '%s is idle\n' "${thread_map[thread]}"
fi
done
((busy_threads == 0))
}
idle() {
local reactor_framework
local reactors thread
local cpumask thread_cpumask
local threads
exec_under_dynamic_scheduler "${SPDK_APP[@]}" -m "$spdk_cpumask" --main-core "$spdk_main_core"
# The expectation here is that when SPDK app is idle the following is true:
# - all threads are assigned to main lcore
# - threads are not being moved between lcores
xtrace_disable
while ((samples++ < 5)); do
cpumask=0
reactor_framework=$(rpc_cmd framework_get_reactors | jq -r '.reactors[]')
threads=($(
jq -r "select(.lcore == $spdk_main_core) | .lw_threads[].name" <<< "$reactor_framework"
))
for thread in "${threads[@]}"; do
thread_cpumask=0x$(jq -r "select(.lcore == $spdk_main_core) | .lw_threads[] | select(.name == \"$thread\") | .cpumask" <<< "$reactor_framework")
((cpumask |= thread_cpumask))
done
printf 'SPDK cpumask: %x Threads cpumask: %x\n' "$spdk_cpumask" "$cpumask"
thread_stats
done
xtrace_restore
}
idle