xref: /spdk/test/ftl/write_after_write.sh (revision 1b566ac7d9e9159257b881d7dc5675cd9b7e1961)
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