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