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