1156b48b2SKozlowski 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# 6156b48b2SKozlowski Mateusz 7156b48b2SKozlowski Mateusztestdir=$(readlink -f $(dirname $0)) 8156b48b2SKozlowski Mateuszrootdir=$(readlink -f $testdir/../..) 9156b48b2SKozlowski Mateuszsource $rootdir/test/common/autotest_common.sh 10156b48b2SKozlowski Mateuszsource $testdir/common.sh 11156b48b2SKozlowski Mateusz 12156b48b2SKozlowski Mateuszrpc_py=$rootdir/scripts/rpc.py 13156b48b2SKozlowski Mateusz 14156b48b2SKozlowski Mateuszfio_kill() { 15156b48b2SKozlowski Mateusz rm -f $testdir/testfile.md5 16156b48b2SKozlowski Mateusz rm -f $testdir/config/ftl.json 17156b48b2SKozlowski Mateusz rm -f $testdir/random_pattern 18156b48b2SKozlowski Mateusz rm -f $file 19156b48b2SKozlowski Mateusz 20156b48b2SKozlowski Mateusz killprocess $svcpid 21156b48b2SKozlowski Mateusz} 22156b48b2SKozlowski Mateusz 23156b48b2SKozlowski Mateuszdevice=$1 24156b48b2SKozlowski Mateuszcache_device=$2 25156b48b2SKozlowski Mateusztimeout=240 26156b48b2SKozlowski Mateuszdata_size_in_blocks=$((65536)) 27156b48b2SKozlowski Mateuszunmap_size_in_blocks=$((1024)) 28156b48b2SKozlowski Mateusz 29156b48b2SKozlowski Mateuszif [[ $CONFIG_FIO_PLUGIN != y ]]; then 30156b48b2SKozlowski Mateusz echo "FIO not available" 31156b48b2SKozlowski Mateusz exit 1 32156b48b2SKozlowski Mateuszfi 33156b48b2SKozlowski Mateusz 34156b48b2SKozlowski Mateuszexport FTL_BDEV_NAME=ftl0 35156b48b2SKozlowski Mateuszexport FTL_JSON_CONF=$testdir/config/ftl.json 36156b48b2SKozlowski Mateusz 37156b48b2SKozlowski Mateusztrap "fio_kill; exit 1" SIGINT SIGTERM EXIT 38156b48b2SKozlowski Mateusz 39156b48b2SKozlowski Mateusz"$SPDK_BIN_DIR/spdk_tgt" -m 0x7 & 40156b48b2SKozlowski Mateuszsvcpid=$! 41156b48b2SKozlowski Mateuszwaitforlisten $svcpid 42156b48b2SKozlowski Mateusz 43156b48b2SKozlowski Mateuszsplit_bdev=$(create_base_bdev nvme0 $device $((1024 * 101))) 44156b48b2SKozlowski Mateusznv_cache=$(create_nv_cache_bdev nvc0 $cache_device $split_bdev) 45156b48b2SKozlowski Mateusz 46156b48b2SKozlowski Mateuszl2p_percentage=60 47156b48b2SKozlowski Mateuszl2p_dram_size_mb=$(($(get_bdev_size $split_bdev) * l2p_percentage / 100 / 1024)) 48156b48b2SKozlowski Mateusz 49156b48b2SKozlowski Mateusz$rpc_py -t $timeout bdev_ftl_create -b ftl0 -d $split_bdev -c $nv_cache --core_mask 7 --l2p_dram_limit $l2p_dram_size_mb --overprovisioning 10 50156b48b2SKozlowski Mateusz 51156b48b2SKozlowski Mateuszwaitforbdev ftl0 52156b48b2SKozlowski Mateusz 53156b48b2SKozlowski Mateusz( 54156b48b2SKozlowski Mateusz echo '{"subsystems": [' 55156b48b2SKozlowski Mateusz $rpc_py save_subsystem_config -n bdev 56156b48b2SKozlowski Mateusz echo ']}' 57156b48b2SKozlowski Mateusz) > $FTL_JSON_CONF 58156b48b2SKozlowski Mateusz 59156b48b2SKozlowski Mateuszbdev_info=$($rpc_py bdev_get_bdevs -b ftl0) 60156b48b2SKozlowski Mateusznb=$(jq ".[] .num_blocks" <<< "$bdev_info") 61*1b566ac7Swanghailiangx$rpc_py bdev_ftl_unload -b ftl0 62156b48b2SKozlowski Mateusz 63156b48b2SKozlowski Mateuszkillprocess $svcpid 64156b48b2SKozlowski Mateusz 65156b48b2SKozlowski Mateusz# Generate data pattern 66156b48b2SKozlowski Mateuszdd if=/dev/urandom bs=4K count=$data_size_in_blocks > $testdir/random_pattern 67156b48b2SKozlowski Mateusz 68156b48b2SKozlowski Mateusz# Write data pattern 69156b48b2SKozlowski Mateusz"$SPDK_BIN_DIR/spdk_dd" --if=$testdir/random_pattern --ob=ftl0 --json=$FTL_JSON_CONF 70156b48b2SKozlowski Mateusz 71156b48b2SKozlowski Mateusz"$SPDK_BIN_DIR/spdk_tgt" -L ftl_init & 72156b48b2SKozlowski Mateuszsvcpid=$! 73156b48b2SKozlowski Mateuszwaitforlisten $svcpid 74156b48b2SKozlowski Mateusz 75156b48b2SKozlowski Mateusz$rpc_py load_config < $FTL_JSON_CONF 76156b48b2SKozlowski Mateusz 77156b48b2SKozlowski Mateusz# Unmap first and last 4MiB 78156b48b2SKozlowski Mateusz$rpc_py bdev_ftl_unmap -b ftl0 --lba 0 --num_blocks $((unmap_size_in_blocks)) 79156b48b2SKozlowski Mateusz$rpc_py bdev_ftl_unmap -b ftl0 --lba $((nb - unmap_size_in_blocks)) --num_blocks $((unmap_size_in_blocks)) 80156b48b2SKozlowski Mateusz 81156b48b2SKozlowski Mateuszkillprocess $svcpid 82156b48b2SKozlowski Mateusz 83156b48b2SKozlowski Mateusz# Calculate checksum of the data written 84156b48b2SKozlowski Mateuszfile=$testdir/data 85156b48b2SKozlowski Mateusz"$SPDK_BIN_DIR/spdk_dd" --ib=ftl0 --of=$file --count=$data_size_in_blocks --json=$FTL_JSON_CONF 86156b48b2SKozlowski Mateuszcmp --bytes=$((unmap_size_in_blocks * 4096)) $file /dev/zero 87156b48b2SKozlowski Mateuszmd5sum $file > $testdir/testfile.md5 88156b48b2SKozlowski Mateusz 89156b48b2SKozlowski Mateusz# Rewrite the first 4MiB 90156b48b2SKozlowski Mateusz"$SPDK_BIN_DIR/spdk_dd" --if=$testdir/random_pattern --ob=ftl0 --count=$((unmap_size_in_blocks)) --json=$FTL_JSON_CONF 91156b48b2SKozlowski Mateusz 92156b48b2SKozlowski Mateusz"$SPDK_BIN_DIR/spdk_tgt" -L ftl_init & 93156b48b2SKozlowski Mateuszsvcpid=$! 94156b48b2SKozlowski Mateuszwaitforlisten $svcpid 95156b48b2SKozlowski Mateusz 96156b48b2SKozlowski Mateusz$rpc_py load_config < $FTL_JSON_CONF 97156b48b2SKozlowski Mateusz 98156b48b2SKozlowski Mateusz# Unmap first and last 4MiB 99156b48b2SKozlowski Mateusz$rpc_py bdev_ftl_unmap -b ftl0 --lba 0 --num_blocks $((unmap_size_in_blocks)) 100156b48b2SKozlowski Mateusz$rpc_py bdev_ftl_unmap -b ftl0 --lba $((nb - unmap_size_in_blocks)) --num_blocks $((unmap_size_in_blocks)) 101156b48b2SKozlowski Mateusz 102156b48b2SKozlowski Mateuszkillprocess $svcpid 103156b48b2SKozlowski Mateusz 104156b48b2SKozlowski Mateusz# Verify that the checksum matches and the data is consistent 105156b48b2SKozlowski Mateusz"$SPDK_BIN_DIR/spdk_dd" --ib=ftl0 --of=$file --count=$data_size_in_blocks --json=$FTL_JSON_CONF 106156b48b2SKozlowski Mateuszmd5sum -c $testdir/testfile.md5 107156b48b2SKozlowski Mateusz 108156b48b2SKozlowski Mateusztrap - SIGINT SIGTERM EXIT 109156b48b2SKozlowski Mateuszfio_kill 110