1ea80f87eSKozlowski Mateusz#!/usr/bin/env bash 2eb53c232Spaul luse# SPDX-License-Identifier: BSD-3-Clause 3eb53c232Spaul luse# Copyright (C) 2022 Intel Corporation 4eb53c232Spaul luse# All rights reserved. 5eb53c232Spaul luse# 6ea80f87eSKozlowski Mateusz 7ea80f87eSKozlowski Mateusztestdir=$(readlink -f $(dirname $0)) 8ea80f87eSKozlowski Mateuszrootdir=$(readlink -f $testdir/../..) 9ea80f87eSKozlowski Mateuszsource $rootdir/test/common/autotest_common.sh 10ea80f87eSKozlowski Mateuszsource $testdir/common.sh 11ea80f87eSKozlowski Mateusz 12ea80f87eSKozlowski Mateuszrpc_py=$rootdir/scripts/rpc.py 13ea80f87eSKozlowski Mateusz 14ea80f87eSKozlowski Mateuszfio_kill() { 15ea80f87eSKozlowski Mateusz rm -f $testdir/testfile.md5 16ea80f87eSKozlowski Mateusz rm -f $testdir/config/ftl.json 17ea80f87eSKozlowski Mateusz 18ea80f87eSKozlowski Mateusz killprocess $svcpid 19ea80f87eSKozlowski Mateusz rmmod nbd || true 20ea80f87eSKozlowski Mateusz} 21ea80f87eSKozlowski Mateusz 22ea80f87eSKozlowski Mateuszdevice=$1 23ea80f87eSKozlowski Mateuszcache_device=$2 24ea80f87eSKozlowski Mateusztimeout=240 25ea80f87eSKozlowski Mateuszdata_size=$((262144 * 5)) 26ea80f87eSKozlowski Mateusz 27ea80f87eSKozlowski Mateuszif [[ $CONFIG_FIO_PLUGIN != y ]]; then 28ea80f87eSKozlowski Mateusz echo "FIO not available" 29ea80f87eSKozlowski Mateusz exit 1 30ea80f87eSKozlowski Mateuszfi 31ea80f87eSKozlowski Mateusz 32ea80f87eSKozlowski Mateuszexport FTL_BDEV_NAME=ftl0 33ea80f87eSKozlowski Mateuszexport FTL_JSON_CONF=$testdir/config/ftl.json 34ea80f87eSKozlowski Mateusz 35ea80f87eSKozlowski Mateusztrap "fio_kill; exit 1" SIGINT SIGTERM EXIT 36ea80f87eSKozlowski Mateusz 37ea80f87eSKozlowski Mateusz"$SPDK_BIN_DIR/spdk_tgt" & 38ea80f87eSKozlowski Mateuszsvcpid=$! 39ea80f87eSKozlowski Mateuszwaitforlisten $svcpid 40ea80f87eSKozlowski Mateusz 41ea80f87eSKozlowski Mateuszsplit_bdev=$(create_base_bdev nvme0 $device $((1024 * 101))) 42ea80f87eSKozlowski Mateusznv_cache=$(create_nv_cache_bdev nvc0 $cache_device $split_bdev) 43ea80f87eSKozlowski Mateusz 44ea80f87eSKozlowski Mateuszl2p_percentage=60 45ea80f87eSKozlowski Mateuszl2p_dram_size_mb=$(($(get_bdev_size $split_bdev) * l2p_percentage / 100 / 1024)) 46ea80f87eSKozlowski Mateusz 47ea80f87eSKozlowski Mateusz$rpc_py -t $timeout bdev_ftl_create -b ftl0 -d $split_bdev -c $nv_cache --l2p_dram_limit $l2p_dram_size_mb 48ea80f87eSKozlowski Mateusz 49ea80f87eSKozlowski Mateuszwaitforbdev ftl0 50ea80f87eSKozlowski Mateusz 51ea80f87eSKozlowski Mateusz( 52ea80f87eSKozlowski Mateusz echo '{"subsystems": [' 53ea80f87eSKozlowski Mateusz $rpc_py save_subsystem_config -n bdev 54ea80f87eSKozlowski Mateusz echo ']}' 55ea80f87eSKozlowski Mateusz) > $FTL_JSON_CONF 56*1b566ac7Swanghailiangx$rpc_py bdev_ftl_unload -b ftl0 57ea80f87eSKozlowski Mateusz 58ea80f87eSKozlowski Mateuszkillprocess $svcpid 59ea80f87eSKozlowski Mateusz 60ea80f87eSKozlowski Mateuszfio_bdev $testdir/config/fio/write_after_write.fio 61ea80f87eSKozlowski Mateusz 62ea80f87eSKozlowski Mateusz"$SPDK_BIN_DIR/spdk_tgt" -L ftl_init & 63ea80f87eSKozlowski Mateuszsvcpid=$! 64ea80f87eSKozlowski Mateuszwaitforlisten $svcpid 65ea80f87eSKozlowski Mateusz 66ea80f87eSKozlowski Mateusz$rpc_py load_config < $FTL_JSON_CONF 67ea80f87eSKozlowski Mateusz# Load the nbd driver 68ea80f87eSKozlowski Mateuszmodprobe nbd 69ea80f87eSKozlowski Mateusz$rpc_py nbd_start_disk ftl0 /dev/nbd0 70ea80f87eSKozlowski Mateuszwaitfornbd nbd0 71ea80f87eSKozlowski Mateusz 72ea80f87eSKozlowski Mateusz$rpc_py save_config > $testdir/config/ftl.json 73ea80f87eSKozlowski Mateusz 74ea80f87eSKozlowski Mateusz# Calculate checksum of the data written 75ea80f87eSKozlowski Mateuszdd if=/dev/nbd0 bs=4K count=$data_size | md5sum > $testdir/testfile.md5 76ea80f87eSKozlowski Mateusz$rpc_py nbd_stop_disk /dev/nbd0 77ea80f87eSKozlowski Mateusz 78ea80f87eSKozlowski Mateusz# Force kill bdev service (dirty shutdown) and start it again 79ea80f87eSKozlowski Mateuszkill -9 $svcpid 80ea80f87eSKozlowski Mateuszrm -f /dev/shm/spdk_tgt_trace.pid$svcpid 81ea80f87eSKozlowski Mateusz 82ea80f87eSKozlowski Mateusz"$SPDK_BIN_DIR/spdk_tgt" -L ftl_init & 83ea80f87eSKozlowski Mateuszsvcpid=$! 84ea80f87eSKozlowski Mateuszwaitforlisten $svcpid 85ea80f87eSKozlowski Mateusz 86ea80f87eSKozlowski Mateusz$rpc_py load_config < $testdir/config/ftl.json 87ea80f87eSKozlowski Mateuszwaitfornbd nbd0 88ea80f87eSKozlowski Mateusz 89ea80f87eSKozlowski Mateusz# Verify that the checksum matches and the data is consistent 90ea80f87eSKozlowski Mateuszdd if=/dev/nbd0 bs=4K count=$data_size | md5sum -c $testdir/testfile.md5 91ea80f87eSKozlowski Mateusz 92ea80f87eSKozlowski Mateusztrap - SIGINT SIGTERM EXIT 93ea80f87eSKozlowski Mateuszfio_kill 94