xref: /spdk/test/ftl/common.sh (revision b30d57cdad6d2bc75cc1e4e2ebbcebcb0d98dcfa)
1 # Common utility functions to be sourced by the libftl test scripts
2 
3 function get_chunk_size() {
4 	$SPDK_EXAMPLE_DIR/identify -r "trtype:PCIe traddr:$1" \
5 		| grep 'Logical blks per chunk' | sed 's/[^0-9]//g'
6 }
7 
8 function get_num_group() {
9 	$SPDK_EXAMPLE_DIR/identify -r "trtype:PCIe traddr:$1" \
10 		| grep 'Groups' | sed 's/[^0-9]//g'
11 }
12 
13 function get_num_pu() {
14 	$SPDK_EXAMPLE_DIR/identify -r "trtype:PCIe traddr:$1" \
15 		| grep 'PUs' | sed 's/[^0-9]//g'
16 }
17 
18 function has_separate_md() {
19 	local md_type
20 	md_type=$($SPDK_EXAMPLE_DIR/identify -r "trtype:PCIe traddr:$1" \
21 		| grep 'Metadata Transferred' | cut -d: -f2)
22 	if [[ "$md_type" =~ Separate ]]; then
23 		return 0
24 	else
25 		return 1
26 	fi
27 }
28 
29 function create_nv_cache_bdev() {
30 	local name=$1
31 	local ocssd_bdf=$2
32 	local cache_bdf=$3
33 	local num_punits=$4
34 
35 	local bytes_to_mb=$((1024 * 1024))
36 	local chunk_size
37 	chunk_size=$(get_chunk_size $ocssd_bdf)
38 
39 	# We need at least 2 bands worth of data + 1 block
40 	local size=$((2 * 4096 * chunk_size * num_punits + 1))
41 	# Round the size up to the nearest megabyte
42 	local size=$(((size + bytes_to_mb) / bytes_to_mb))
43 
44 	# Create NVMe bdev on specified device and split it so that it has the desired size
45 	local nvc_bdev
46 	nvc_bdev=$($rootdir/scripts/rpc.py bdev_nvme_attach_controller -b $name -t PCIe -a $cache_bdf)
47 	$rootdir/scripts/rpc.py bdev_split_create $nvc_bdev -s $size 1
48 }
49 
50 function gen_ftl_nvme_conf() {
51 	jq . <<- JSON
52 		{
53 		  "subsystems": [
54 		    {
55 		      "subsystem": "bdev",
56 		      "config": [
57 		        {
58 		          "params": {
59 		            "nvme_adminq_poll_period_us": 100
60 		          },
61 		          "method": "bdev_nvme_set_options"
62 		        }
63 		      ]
64 		    }
65 		  ]
66 		}
67 	JSON
68 }
69