Spdk/test/nvme/zns/zns.sh

98 lines
1.9 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# SPDX-License-Identifier: BSD-3-Clause
# Copyright (C) 2021 Intel Corporation
# All rights reserved.
#
testdir=$(readlink -f "$(dirname "$0")")
rootdir=$(readlink -f "$testdir/../../../")
source "$rootdir/test/common/autotest_common.sh"
restore_pci_blocked() {
[[ -n $PCI_ZONED ]] || return 0
PCI_BLOCKED="" "$rootdir/scripts/setup.sh" reset
PCI_BLOCKED=$PCI_ZONED "$rootdir/scripts/setup.sh"
}
gen_json_conf() {
cat <<- JSON
{
"subsystems": [
{
"subsystem": "bdev",
"config": [
{
"method": "bdev_nvme_attach_controller",
"params": {
"trtype": "PCIe",
"name":"$bdev",
"traddr":"$bdf"
}
}
]
}
]
}
JSON
}
gen_fio_conf() {
local zone_bdev
cat <<- FIO
[global]
ioengine=spdk_bdev
thread=1
direct=1
time_based
runtime=5
rw=randwrite
bs=16K
zonemode=zbd
max_open_zones=8
initial_zone_reset=1
zone_append=1
iodepth=64
FIO
for zone_bdev in "${!zoned_bdevs[@]}"; do
cat <<- FIO
[filename$zone_bdev]
filename=${zoned_bdevs[zone_bdev]}
FIO
done
}
is_zoned() {
# At least one namespace must be zoned
((${#zoned_bdevs[@]} > 0))
}
fio() {
fio_bdev --ioengine=spdk_bdev --spdk_json_conf <(gen_json_conf) <(gen_fio_conf)
}
zoned_bdfs=($PCI_ZONED)
if ((${#zoned_bdfs[@]} == 0)); then
printf 'No ZNS nvme devices found, skipping\n' >&2
exit 0
fi
PCI_BLOCKED="" PCI_ALLOWED="${zoned_bdfs[*]}" "$rootdir/scripts/setup.sh"
bdf=${zoned_bdfs[0]} bdev=zone0
trap 'kill $spdk_app_pid || :; restore_pci_blocked' EXIT
"${SPDK_APP[@]}" &
spdk_app_pid=$!
waitforlisten "$spdk_app_pid"
rpc_cmd bdev_nvme_attach_controller -t pcie -a "$bdf" -b "$bdev"
zoned_bdevs=($(rpc_cmd bdev_get_bdevs | jq -r ".[] | select(.zoned == true) | select(.driver_specific.nvme[].pci_address == \"$bdf\") | .name"))
killprocess "$spdk_app_pid"
run_test "is_zoned" is_zoned
run_test "zoned_fio" fio