Commit d66a1e46 authored by Michal Berger's avatar Michal Berger Committed by Jim Harris
Browse files

test/nvme/interrupt: Verify pre|post IO cpu load



Measuring cpu load while running perform_tests is flaky and varies
depending on different factors. To make sure this doesn't become
a intermittent nuisance, we simply try to determine if cpu load
is "low" pre and post the workload.

Change-Id: I3ad71dddfcd84194bec5a3191517e6efe9a8fbf2
Signed-off-by: default avatarMichal Berger <michal.berger@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/25443


Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: default avatarAnkit Kumar <ankit.kumar@samsung.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Community CI Samsung <spdk.community.ci.samsung@gmail.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
parent e0d7428b
Loading
Loading
Loading
Loading
+20 −6
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@ rootdir=$(readlink -f "$testdir/../../")
source "$rootdir/test/common/autotest_common.sh"
source "$rootdir/test/scheduler/common.sh"

CPU_UTIL_INTR_THRESHOLD=70
CPU_UTIL_INTR_THRESHOLD=10
CPU_UTIL_POLL_THRESHOLD=95

bdev_nvme_attach_ctrlr() {
@@ -23,7 +23,8 @@ nvme=${nvmes[0]}
[[ -e /sys/bus/pci/drivers/vfio-pci/$nvme/vfio-dev ]]

nvme_pcie_intr_mode() {
	local cpu_util
	local cpu_util_pre cpu_util_post cpu_util_io
	local bdevperfpy_pid
	$rootdir/build/examples/bdevperf -z -q 1 -o 262144 -t 10 -w read -m 0x1 --interrupt-mode &
	bdevperf_pid=$!

@@ -31,18 +32,31 @@ nvme_pcie_intr_mode() {
	trap 'killprocess $bdevperf_pid; exit 1' SIGINT SIGTERM EXIT

	bdev_nvme_attach_ctrlr "$nvme"
	cpu_util_pre=$(spdk_pid=$bdevperf_pid get_spdk_proc_time 5 0)

	$rootdir/examples/bdev/bdevperf/bdevperf.py perform_tests &
	bdevperfpy_pid=$!
	sleep 1

	cpu_util=$(spdk_pid=$bdevperf_pid get_spdk_proc_time 8 0)
	cpu_util_io=$(spdk_pid=$bdevperf_pid get_spdk_proc_time 8 0)
	wait "$bdevperfpy_pid"
	cpu_util_post=$(spdk_pid=$bdevperf_pid get_spdk_proc_time 5 0)

	trap - SIGINT SIGTERM EXIT
	killprocess $bdevperf_pid

	if ((cpu_util > CPU_UTIL_INTR_THRESHOLD)); then
		return 1
	fi
	cat <<- SUMMARY
		pre CPU util: $cpu_util_pre
		IO CPU util: $cpu_util_io
		post CPU util: $cpu_util_post
	SUMMARY

	# Make sure that the main expectation of having low cpu load before and after tests is met.
	# FIXME: Measuring cpu load during IO seems to be flaky and dependent on multiple factors.
	# It's been noticed that even change in SPDK's cpu mask, io size, etc. may significantly
	# impact the result. With that in mind, we verify only the base and for perform_tests we
	# simply report the overall CPU usage for debugging purposes.
	((cpu_util_pre < CPU_UTIL_INTR_THRESHOLD && cpu_util_post < CPU_UTIL_INTR_THRESHOLD))
}

nvme_pcie_poll_mode() {