test/nvmf: Test different abort qd sizes under SPDK and kernel targets
Signed-off-by: Michal Berger <michalx.berger@intel.com> Change-Id: I79ede7670477ed0d8eb38fa3eced4a9b70c64620 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/8962 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
This commit is contained in:
parent
dcd1fb796c
commit
11d13b85e6
@ -263,6 +263,7 @@ if [ $SPDK_RUN_FUNCTIONAL_TEST -eq 1 ]; then
|
||||
run_test "nvmf_identify_passthru" test/nvmf/target/identify_passthru.sh --transport=$SPDK_TEST_NVMF_TRANSPORT
|
||||
fi
|
||||
run_test "nvmf_dif" test/nvmf/target/dif.sh
|
||||
run_test "nvmf_abort_qd_sizes" test/nvmf/target/abort_qd_sizes.sh
|
||||
elif [ "$SPDK_TEST_NVMF_TRANSPORT" = "fc" ]; then
|
||||
run_test "nvmf_fc" ./test/nvmf/nvmf.sh --transport=$SPDK_TEST_NVMF_TRANSPORT
|
||||
run_test "spdkcli_nvmf_fc" ./test/spdkcli/nvmf.sh
|
||||
|
@ -551,3 +551,73 @@ function remove_spdk_ns() {
|
||||
# Let it settle
|
||||
sleep 1
|
||||
}
|
||||
|
||||
configure_kernel_target() {
|
||||
# Keep it global in scope for easier cleanup
|
||||
kernel_name=${1:-kernel_target}
|
||||
nvmet=/sys/kernel/config/nvmet
|
||||
kernel_subsystem=$nvmet/subsystems/$kernel_name
|
||||
kernel_namespace=$kernel_subsystem/namespaces/1
|
||||
kernel_port=$nvmet/ports/1
|
||||
|
||||
local block nvme
|
||||
|
||||
if [[ ! -e /sys/module/nvmet ]]; then
|
||||
modprobe nvmet
|
||||
fi
|
||||
|
||||
[[ -e $nvmet ]]
|
||||
|
||||
"$rootdir/scripts/setup.sh" reset
|
||||
|
||||
# Find nvme with an active ns device
|
||||
for block in /sys/block/nvme*; do
|
||||
[[ -e $block ]] || continue
|
||||
block_in_use "${block##*/}" || nvme="/dev/${block##*/}"
|
||||
done
|
||||
|
||||
[[ -b $nvme ]]
|
||||
|
||||
mkdir "$kernel_subsystem"
|
||||
mkdir "$kernel_namespace"
|
||||
mkdir "$kernel_port"
|
||||
|
||||
# It allows only %llx value and for some reason kernel swaps the byte order
|
||||
# so setting the serial is not very useful here
|
||||
# "$kernel_subsystem/attr_serial"
|
||||
echo "SPDK-$kernel_name" > "$kernel_subsystem/attr_model"
|
||||
|
||||
echo 1 > "$kernel_subsystem/attr_allow_any_host"
|
||||
echo "$nvme" > "$kernel_namespace/device_path"
|
||||
echo 1 > "$kernel_namespace/enable"
|
||||
|
||||
# By default use initiator ip which was set by nvmftestinit(). This is the
|
||||
# interface which resides in the main net namespace and which is visible
|
||||
# to nvmet.
|
||||
|
||||
echo "$NVMF_INITIATOR_IP" > "$kernel_port/addr_traddr"
|
||||
echo "$TEST_TRANSPORT" > "$kernel_port/addr_trtype"
|
||||
echo "$NVMF_PORT" > "$kernel_port/addr_trsvcid"
|
||||
echo ipv4 > "$kernel_port/addr_adrfam"
|
||||
|
||||
# Enable the listener by linking the port to previously created subsystem
|
||||
ln -s "$kernel_subsystem" "$kernel_port/subsystems/"
|
||||
|
||||
# Check if target is available
|
||||
nvme discover -a "$NVMF_INITIATOR_IP" -t "$TEST_TRANSPORT" -s "$NVMF_PORT"
|
||||
}
|
||||
|
||||
clean_kernel_target() {
|
||||
[[ -e $kernel_subsystem ]] || return 0
|
||||
|
||||
echo 0 > "$kernel_namespace/enable"
|
||||
|
||||
rm -f "$kernel_port/subsystems/$kernel_name"
|
||||
rmdir "$kernel_namespace"
|
||||
rmdir "$kernel_port"
|
||||
rmdir "$kernel_subsystem"
|
||||
|
||||
modules=(/sys/module/nvmet/holders/*)
|
||||
|
||||
modprobe -r "${modules[@]##*/}" nvmet
|
||||
}
|
||||
|
79
test/nvmf/target/abort_qd_sizes.sh
Executable file
79
test/nvmf/target/abort_qd_sizes.sh
Executable file
@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
testdir=$(readlink -f "$(dirname "$0")")
|
||||
rootdir=$(readlink -f "$testdir/../../../")
|
||||
|
||||
# Set defaults we want to work with
|
||||
set -- "--transport=tcp" "--iso" "$@"
|
||||
|
||||
source "$rootdir/test/common/autotest_common.sh"
|
||||
source "$rootdir/test/nvmf/common.sh"
|
||||
|
||||
shopt -s nullglob
|
||||
|
||||
rabort() {
|
||||
local trtype=$1
|
||||
local adrfam=$2
|
||||
local traddr=$3
|
||||
local trsvcid=$4
|
||||
local subnqn=$5
|
||||
|
||||
local qds qd
|
||||
local target r
|
||||
|
||||
qds=(4 24 64)
|
||||
|
||||
for r in trtype adrfam traddr trsvcid subnqn; do
|
||||
target=${target:+$target }$r:${!r}
|
||||
done
|
||||
|
||||
for qd in "${qds[@]}"; do
|
||||
"$SPDK_EXAMPLE_DIR/abort" \
|
||||
-q "$qd" \
|
||||
-w rw \
|
||||
-M 50 \
|
||||
-o 4096 \
|
||||
-r "$target"
|
||||
done
|
||||
}
|
||||
|
||||
spdk_target() {
|
||||
local name=spdk_target
|
||||
local subnqn=nqn.2016-06.io.spdk:$name
|
||||
|
||||
rpc_cmd bdev_nvme_attach_controller -t pcie -a "$nvme" -b "$name"
|
||||
|
||||
rpc_cmd nvmf_create_transport $NVMF_TRANSPORT_OPTS -u 8192
|
||||
rpc_cmd nvmf_create_subsystem "$subnqn" -a -s "$NVMF_SERIAL"
|
||||
rpc_cmd nvmf_subsystem_add_ns "$subnqn" "${name}n1"
|
||||
rpc_cmd nvmf_subsystem_add_listener "$subnqn" -t "$TEST_TRANSPORT" -a "$NVMF_FIRST_TARGET_IP" -s "$NVMF_PORT"
|
||||
|
||||
rabort "$TEST_TRANSPORT" IPv4 "$NVMF_FIRST_TARGET_IP" "$NVMF_PORT" "$subnqn"
|
||||
|
||||
rpc_cmd nvmf_delete_subsystem "$subnqn"
|
||||
rpc_cmd bdev_nvme_detach_controller "$name"
|
||||
}
|
||||
|
||||
kernel_target() {
|
||||
local name=kernel_target
|
||||
|
||||
configure_kernel_target "$name"
|
||||
rabort "$TEST_TRANSPORT" IPv4 "$NVMF_INITIATOR_IP" "$NVMF_PORT" "$name"
|
||||
clean_kernel_target
|
||||
}
|
||||
|
||||
nvmftestinit
|
||||
nvmfappstart -m 0xf
|
||||
|
||||
trap 'process_shm --id $NVMF_APP_SHM_ID || :; nvmftestfini || :; clean_kernel_target' SIGINT SIGTERM EXIT
|
||||
|
||||
mapfile -t nvmes < <(nvme_in_userspace)
|
||||
((${#nvmes[@]} > 0))
|
||||
|
||||
nvme=${nvmes[0]}
|
||||
|
||||
run_test "spdk_target_abort" spdk_target
|
||||
run_test "kernel_target_abort" kernel_target
|
||||
|
||||
trap - SIGINT SIGTERM EXIT
|
||||
nvmftestfini
|
Loading…
Reference in New Issue
Block a user