summaryrefslogtreecommitdiffstats
path: root/src/spdk/test/ftl/common.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/spdk/test/ftl/common.sh')
-rw-r--r--src/spdk/test/ftl/common.sh68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/spdk/test/ftl/common.sh b/src/spdk/test/ftl/common.sh
new file mode 100644
index 000000000..f4620ac3d
--- /dev/null
+++ b/src/spdk/test/ftl/common.sh
@@ -0,0 +1,68 @@
+# Common utility functions to be sourced by the libftl test scripts
+
+function get_chunk_size() {
+ $SPDK_EXAMPLE_DIR/identify -r "trtype:PCIe traddr:$1" \
+ | grep 'Logical blks per chunk' | sed 's/[^0-9]//g'
+}
+
+function get_num_group() {
+ $SPDK_EXAMPLE_DIR/identify -r "trtype:PCIe traddr:$1" \
+ | grep 'Groups' | sed 's/[^0-9]//g'
+}
+
+function get_num_pu() {
+ $SPDK_EXAMPLE_DIR/identify -r "trtype:PCIe traddr:$1" \
+ | grep 'PUs' | sed 's/[^0-9]//g'
+}
+
+function has_separate_md() {
+ local md_type
+ md_type=$($SPDK_EXAMPLE_DIR/identify -r "trtype:PCIe traddr:$1" \
+ | grep 'Metadata Transferred' | cut -d: -f2)
+ if [[ "$md_type" =~ Separate ]]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+function create_nv_cache_bdev() {
+ local name=$1
+ local ocssd_bdf=$2
+ local cache_bdf=$3
+ local num_punits=$4
+
+ local bytes_to_mb=$((1024 * 1024))
+ local chunk_size
+ chunk_size=$(get_chunk_size $ocssd_bdf)
+
+ # We need at least 2 bands worth of data + 1 block
+ local size=$((2 * 4096 * chunk_size * num_punits + 1))
+ # Round the size up to the nearest megabyte
+ local size=$(((size + bytes_to_mb) / bytes_to_mb))
+
+ # Create NVMe bdev on specified device and split it so that it has the desired size
+ local nvc_bdev
+ nvc_bdev=$($rootdir/scripts/rpc.py bdev_nvme_attach_controller -b $name -t PCIe -a $cache_bdf)
+ $rootdir/scripts/rpc.py bdev_split_create $nvc_bdev -s $size 1
+}
+
+function gen_ftl_nvme_conf() {
+ jq . <<- JSON
+ {
+ "subsystems": [
+ {
+ "subsystem": "bdev",
+ "config": [
+ {
+ "params": {
+ "nvme_adminq_poll_period_us": 100
+ },
+ "method": "bdev_nvme_set_options"
+ }
+ ]
+ }
+ ]
+ }
+ JSON
+}