xref: /spdk/test/ftl/restore.sh (revision 34edd9f1bf5fda4c987f4500ddc3c9f50be32e7d)
170c2bd88SKozlowski 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#
670c2bd88SKozlowski Mateusztestdir=$(readlink -f $(dirname $0))
770c2bd88SKozlowski Mateuszrootdir=$(readlink -f $testdir/../..)
870c2bd88SKozlowski Mateuszsource $rootdir/test/common/autotest_common.sh
970c2bd88SKozlowski Mateuszsource $testdir/common.sh
1070c2bd88SKozlowski Mateusz
1170c2bd88SKozlowski Mateuszrpc_py=$rootdir/scripts/rpc.py
1270c2bd88SKozlowski Mateusz
1370c2bd88SKozlowski Mateuszmount_dir=$(mktemp -d)
1470c2bd88SKozlowski Mateusz
1570c2bd88SKozlowski Mateuszwhile getopts ':u:c:f' opt; do
1670c2bd88SKozlowski Mateusz	case $opt in
1770c2bd88SKozlowski Mateusz		u) uuid=$OPTARG ;;
1870c2bd88SKozlowski Mateusz		c) nv_cache=$OPTARG ;;
1970c2bd88SKozlowski Mateusz		f) fast_shutdown=1 ;;
2070c2bd88SKozlowski Mateusz		?) echo "Usage: $0 [-f] [-u UUID] [-c NV_CACHE_PCI_BDF] BASE_PCI_BDF" && exit 1 ;;
2170c2bd88SKozlowski Mateusz	esac
2270c2bd88SKozlowski Mateuszdone
2370c2bd88SKozlowski Mateuszshift $((OPTIND - 1))
2470c2bd88SKozlowski Mateuszdevice=$1
2570c2bd88SKozlowski Mateusztimeout=240
2670c2bd88SKozlowski Mateusz
2770c2bd88SKozlowski Mateuszrestore_kill() {
2842899f1aSKozlowski Mateusz	rm -f $testdir/testfile
2970c2bd88SKozlowski Mateusz	rm -f $testdir/testfile.md5
3070c2bd88SKozlowski Mateusz	rm -f $testdir/config/ftl.json
3170c2bd88SKozlowski Mateusz
3270c2bd88SKozlowski Mateusz	killprocess $svcpid
3370c2bd88SKozlowski Mateusz	remove_shm
3470c2bd88SKozlowski Mateusz}
3570c2bd88SKozlowski Mateusz
3670c2bd88SKozlowski Mateusztrap "restore_kill; exit 1" SIGINT SIGTERM EXIT
3770c2bd88SKozlowski Mateusz
3870c2bd88SKozlowski Mateusz"$SPDK_BIN_DIR/spdk_tgt" &
3970c2bd88SKozlowski Mateuszsvcpid=$!
4070c2bd88SKozlowski Mateusz# Wait until spdk_tgt starts
4170c2bd88SKozlowski Mateuszwaitforlisten $svcpid
4270c2bd88SKozlowski Mateusz
4370c2bd88SKozlowski Mateuszsplit_bdev=$(create_base_bdev nvme0 $device $((1024 * 101)))
4470c2bd88SKozlowski Mateuszif [ -n "$nv_cache" ]; then
4570c2bd88SKozlowski Mateusz	nvc_bdev=$(create_nv_cache_bdev nvc0 $nv_cache $split_bdev)
4670c2bd88SKozlowski Mateuszfi
4770c2bd88SKozlowski Mateusz
4870c2bd88SKozlowski Mateuszl2p_dram_size_mb=$(($(get_bdev_size $split_bdev) * 10 / 100 / 1024))
4970c2bd88SKozlowski Mateuszftl_construct_args="bdev_ftl_create -b ftl0 -d $split_bdev --l2p_dram_limit $l2p_dram_size_mb"
5070c2bd88SKozlowski Mateusz
5170c2bd88SKozlowski Mateusz[ -n "$uuid" ] && ftl_construct_args+=" -u $uuid"
5270c2bd88SKozlowski Mateusz[ -n "$nv_cache" ] && ftl_construct_args+=" -c $nvc_bdev"
5370c2bd88SKozlowski Mateusz
5470c2bd88SKozlowski Mateuszif [ "$fast_shutdown" -eq "1" ]; then
5542899f1aSKozlowski Mateusz	ftl_construct_args+=" --fast-shutdown"
5670c2bd88SKozlowski Mateuszfi
5770c2bd88SKozlowski Mateusz
5842899f1aSKozlowski Mateusz$rpc_py -t $timeout $ftl_construct_args
5942899f1aSKozlowski Mateusz
6042899f1aSKozlowski Mateusz(
6142899f1aSKozlowski Mateusz	echo '{"subsystems": ['
6242899f1aSKozlowski Mateusz	$rpc_py save_subsystem_config -n bdev
6342899f1aSKozlowski Mateusz	echo ']}'
6442899f1aSKozlowski Mateusz) > $testdir/config/ftl.json
651b566ac7Swanghailiangx$rpc_py bdev_ftl_unload -b ftl0
6670c2bd88SKozlowski Mateuszkillprocess $svcpid
6770c2bd88SKozlowski Mateusz
6842899f1aSKozlowski Mateusz# Generate random data and calculate checksum
6942899f1aSKozlowski Mateuszdd if=/dev/urandom of=$testdir/testfile bs=4K count=256K
7042899f1aSKozlowski Mateuszmd5sum $testdir/testfile > $testdir/testfile.md5
7170c2bd88SKozlowski Mateusz
7242899f1aSKozlowski Mateusz# Write and read back the data, verifying checksum
7342899f1aSKozlowski Mateusz"$SPDK_BIN_DIR/spdk_dd" --if=$testdir/testfile --ob=ftl0 --json=$testdir/config/ftl.json
7442899f1aSKozlowski Mateusz"$SPDK_BIN_DIR/spdk_dd" --ib=ftl0 --of=$testdir/testfile --json=$testdir/config/ftl.json --count=262144
7570c2bd88SKozlowski Mateusz
7670c2bd88SKozlowski Mateuszmd5sum -c $testdir/testfile.md5
7742899f1aSKozlowski Mateusz
78*34edd9f1SKamil Godzwon# Write second time at overlapped sectors, read back and verify checksum
7942899f1aSKozlowski Mateusz"$SPDK_BIN_DIR/spdk_dd" --if=$testdir/testfile --ob=ftl0 --json=$testdir/config/ftl.json --seek=131072
8042899f1aSKozlowski Mateusz"$SPDK_BIN_DIR/spdk_dd" --ib=ftl0 --of=$testdir/testfile --json=$testdir/config/ftl.json --skip=131072 --count=262144
8142899f1aSKozlowski Mateusz
8242899f1aSKozlowski Mateuszmd5sum -c $testdir/testfile.md5
8370c2bd88SKozlowski Mateusz
8470c2bd88SKozlowski Mateusztrap - SIGINT SIGTERM EXIT
8570c2bd88SKozlowski Mateuszrestore_kill
86