Commit 8531656d authored by Ankit Kumar's avatar Ankit Kumar Committed by Konrad Sztyber
Browse files

test/nvmf: Interrupt test for local pcie nvme device



Change-Id: I62196ca5b84a622c60cbea465fb3cb5c7ef680dc
Signed-off-by: default avatarAnkit Kumar <ankit.kumar@samsung.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/25378


Reviewed-by: default avatarMichal Berger <michal.berger@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Community CI Samsung <spdk.community.ci.samsung@gmail.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
parent 318515b4
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -247,6 +247,10 @@ if [ $SPDK_RUN_FUNCTIONAL_TEST -eq 1 ]; then
			run_test "ublk" $rootdir/test/ublk/ublk.sh
			run_test "ublk_recovery" $rootdir/test/ublk/ublk_recovery.sh
		fi

		if [[ $SPDK_TEST_NVME_INTERRUPT -eq 1 ]]; then
			run_test "nvme_interrupt" "$rootdir/test/nvme/interrupt.sh"
		fi
	fi

	if [ $SPDK_TEST_IOAT -eq 1 ]; then
+2 −0
Original line number Diff line number Diff line
@@ -174,6 +174,8 @@ export SPDK_TEST_NVMF_MDNS
export SPDK_JSONRPC_GO_CLIENT
: ${SPDK_TEST_SETUP=0}
export SPDK_TEST_SETUP
: ${SPDK_TEST_NVME_INTERRUPT=0}
export SPDK_TEST_NVME_INTERRUPT

# always test with SPDK shared objects.
export SPDK_LIB_DIR="$rootdir/build/lib"

test/nvme/interrupt.sh

0 → 100755
+71 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash
#  SPDX-License-Identifier: BSD-3-Clause
#  Copyright (C) 2024 Samsung Electronics Co., Ltd.
#  All rights reserved.
#
testdir=$(readlink -f "$(dirname "$0")")
rootdir=$(readlink -f "$testdir/../../")
source "$rootdir/test/common/autotest_common.sh"
source "$rootdir/test/scheduler/common.sh"

CPU_UTIL_INTR_THRESHOLD=70
CPU_UTIL_POLL_THRESHOLD=95

bdev_nvme_attach_ctrlr() {
	rpc_cmd bdev_nvme_attach_controller --name Nvme0 --trtype PCIe --traddr "$1"
}

# Abort the test in case no nvmes are found
nvmes=($(nvme_in_userspace))
nvme=${nvmes[0]}

# Abort here as vfio-pci is hard dependency for interrupts
[[ -e /sys/bus/pci/drivers/vfio-pci/$nvme/vfio-dev ]]

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

	waitforlisten $bdevperf_pid
	trap 'killprocess $bdevperf_pid; exit 1' SIGINT SIGTERM EXIT

	bdev_nvme_attach_ctrlr "$nvme"

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

	cpu_util=$(spdk_pid=$bdevperf_pid get_spdk_proc_time 8 0)

	trap - SIGINT SIGTERM EXIT
	killprocess $bdevperf_pid

	if ((cpu_util > CPU_UTIL_INTR_THRESHOLD)); then
		return 1
	fi
}

nvme_pcie_poll_mode() {
	local cpu_util
	$rootdir/build/examples/bdevperf -z -q 1 -o 262144 -t 10 -w read -m 0x1 &
	bdevperf_pid=$!

	waitforlisten $bdevperf_pid
	trap 'killprocess $bdevperf_pid; exit 1' SIGINT SIGTERM EXIT

	bdev_nvme_attach_ctrlr "$nvme"
	$rootdir/examples/bdev/bdevperf/bdevperf.py perform_tests &
	sleep 1

	cpu_util=$(spdk_pid=$bdevperf_pid get_spdk_proc_time 8 0)

	trap - SIGINT SIGTERM EXIT
	killprocess $bdevperf_pid

	if ((cpu_util < CPU_UTIL_POLL_THRESHOLD)); then
		return 1
	fi
}

run_test "nvme_pcie_intr_mode" nvme_pcie_intr_mode
run_test "nvme_pcie_poll_mode" nvme_pcie_poll_mode