xref: /spdk/test/ftl/ftl.sh (revision e2d29d42b3d2c57ad118401ccf046a1e64884ed1)
125503b96SKozlowski Mateusz#!/usr/bin/env bash
2eb53c232Spaul luse#  SPDX-License-Identifier: BSD-3-Clause
3eb53c232Spaul luse#  Copyright (C) 2018 Intel Corporation
4eb53c232Spaul luse#  All rights reserved.
5eb53c232Spaul luse#
625503b96SKozlowski Mateusztestdir=$(readlink -f $(dirname $0))
725503b96SKozlowski Mateuszrootdir=$(readlink -f $testdir/../..)
825503b96SKozlowski Mateuszsource $rootdir/test/common/autotest_common.sh
925503b96SKozlowski Mateuszsource $testdir/common.sh
1025503b96SKozlowski Mateusz
1125503b96SKozlowski Mateuszrpc_py=$rootdir/scripts/rpc.py
1225503b96SKozlowski Mateusz
1325503b96SKozlowski Mateuszfunction at_ftl_exit() {
1425503b96SKozlowski Mateusz	killprocess "$spdk_tgt_pid"
1525503b96SKozlowski Mateusz
1625503b96SKozlowski Mateusz	# delete any created lvols of the base device
1725503b96SKozlowski Mateusz	if [[ -n $device ]]; then
1825503b96SKozlowski Mateusz		"$rootdir/build/bin/spdk_tgt" &
1925503b96SKozlowski Mateusz		spdk_tgt_pid=$!
2025503b96SKozlowski Mateusz		waitforlisten "$spdk_tgt_pid"
2125503b96SKozlowski Mateusz		"$rpc_py" bdev_nvme_attach_controller -b nvme0 -t PCIe -a $device
2225503b96SKozlowski Mateusz		clear_lvols
2325503b96SKozlowski Mateusz		killprocess "$spdk_tgt_pid"
2425503b96SKozlowski Mateusz	fi
2525503b96SKozlowski Mateusz
2625503b96SKozlowski Mateusz	# restore original driver
2725503b96SKozlowski Mateusz	$rootdir/scripts/setup.sh reset
28818b9c05SArtur Paszkiewicz	remove_shm
2925503b96SKozlowski Mateusz}
3025503b96SKozlowski Mateusz
3125503b96SKozlowski Mateusztrap 'at_ftl_exit' SIGINT SIGTERM EXIT
3225503b96SKozlowski Mateusz
3325503b96SKozlowski Mateusz# Bind device to vfio/uio driver before testing
3425503b96SKozlowski MateuszPCI_ALLOWED="$device" PCI_BLOCKED="" DRIVER_OVERRIDE="" $rootdir/scripts/setup.sh
3525503b96SKozlowski Mateusz
3625503b96SKozlowski Mateusz"$rootdir/build/bin/spdk_tgt" --wait-for-rpc &
3725503b96SKozlowski Mateuszspdk_tgt_pid=$!
3825503b96SKozlowski Mateuszwaitforlisten "$spdk_tgt_pid"
3925503b96SKozlowski Mateusz
4025503b96SKozlowski Mateusz$rpc_py bdev_set_options -d
4125503b96SKozlowski Mateusz$rpc_py framework_start_init
4225503b96SKozlowski Mateusz
4325503b96SKozlowski Mateusz"$rpc_py" load_subsystem_config -j <($rootdir/scripts/gen_nvme.sh)
4425503b96SKozlowski Mateusz
4525503b96SKozlowski Mateusz# 5GiB minimum for cache device
4625503b96SKozlowski Mateuszcache_size=$((5 * 1024 * 1024 * 1024 / 4096))
4725503b96SKozlowski Mateuszcache_disks=$("$rpc_py" bdev_get_bdevs | jq -r ".[] | select(.md_size==64 and .zoned == false and .num_blocks >= $cache_size).driver_specific.nvme[].pci_address")
4825503b96SKozlowski Mateuszfor disk in $cache_disks; do
4925503b96SKozlowski Mateusz	nv_cache=$disk
5025503b96SKozlowski Mateusz	break
5125503b96SKozlowski Mateuszdone
5225503b96SKozlowski Mateusz
5325503b96SKozlowski Mateuszif [ -z "$nv_cache" ]; then
5425503b96SKozlowski Mateusz	echo "Couldn't find NVMe device to be used as non-volatile cache"
5525503b96SKozlowski Mateusz	exit 1
5625503b96SKozlowski Mateuszfi
5725503b96SKozlowski Mateusz
5825503b96SKozlowski Mateusz# 5GiB minimum for base device (will be thin provisioned to 100GiB if necessary - it's enough for basic tests)
5925503b96SKozlowski Mateuszbase_size=$((5 * 1024 * 1024 * 1024 / 4096))
6025503b96SKozlowski Mateuszbase_disks=$("$rpc_py" bdev_get_bdevs | jq -r ".[] | select(.driver_specific.nvme[0].pci_address!=\"$nv_cache\" and .zoned == false and .num_blocks >= $base_size).driver_specific.nvme[].pci_address")
6125503b96SKozlowski Mateuszfor disk in $base_disks; do
6225503b96SKozlowski Mateusz	device=$disk
6325503b96SKozlowski Mateusz	break
6425503b96SKozlowski Mateuszdone
6525503b96SKozlowski Mateusz
6625503b96SKozlowski Mateuszkillprocess "$spdk_tgt_pid"
6725503b96SKozlowski Mateusz
6825503b96SKozlowski Mateuszif [ -z "$device" ]; then
6925503b96SKozlowski Mateusz	echo "Couldn't find NVMe device to be used as base device"
7025503b96SKozlowski Mateusz	exit 1
7125503b96SKozlowski Mateuszfi
7225503b96SKozlowski Mateusz
7325503b96SKozlowski Mateuszrun_test "ftl_fio_basic" $testdir/fio.sh $device $nv_cache basic
748ffe1a75SKozlowski Mateuszrun_test "ftl_bdevperf" $testdir/bdevperf.sh $device $nv_cache
75156b48b2SKozlowski Mateuszrun_test "ftl_trim" $testdir/trim.sh $device $nv_cache
7670c2bd88SKozlowski Mateuszrun_test "ftl_restore" $testdir/restore.sh -c $nv_cache $device
77ea80f87eSKozlowski Mateuszrun_test "ftl_dirty_shutdown" $testdir/dirty_shutdown.sh -c $nv_cache $device
78972201d7SMateusz Kozlowskirun_test "ftl_upgrade_shutdown" $testdir/upgrade_shutdown.sh $device $nv_cache
7925503b96SKozlowski Mateusz
80*7313180dSKarol Lateckiif [[ $RUN_NIGHTLY -eq 1 ]]; then
8142899f1aSKozlowski Mateusz	run_test "ftl_restore_fast" $testdir/restore.sh -f -c $nv_cache $device
828ffe1a75SKozlowski Mateuszfi
83