xref: /spdk/test/nvmf/target/dif.sh (revision cc6920a4763d4b9a43aa40583c8397d8f14fa100)
1#!/usr/bin/env bash
2testdir=$(readlink -f "$(dirname "$0")")
3rootdir=$(readlink -f "$testdir/../../../")
4
5# Have proper defaults in place
6set -- "--transport=tcp" "--iso" "$@"
7
8source "$rootdir/test/common/autotest_common.sh"
9source "$rootdir/test/nvmf/common.sh"
10
11NULL_META=16 NULL_BLOCK_SIZE=$((512 + NULL_META)) NULL_SIZE=64 NULL_DIF=1
12
13create_subsystem() {
14	local sub_id=${1:-0}
15
16	# Make sure NQN matches what's used in gen_nvmf_target_json()
17	rpc_cmd bdev_null_create "bdev_null$sub_id" "$NULL_SIZE" "$NULL_BLOCK_SIZE" --md-size "$NULL_META" --dif-type "$NULL_DIF"
18	rpc_cmd nvmf_create_subsystem "nqn.2016-06.io.spdk:cnode$sub_id" --serial-number "53313233-$sub_id" --allow-any-host
19	rpc_cmd nvmf_subsystem_add_ns "nqn.2016-06.io.spdk:cnode$sub_id" "bdev_null$sub_id"
20	rpc_cmd nvmf_subsystem_add_listener "nqn.2016-06.io.spdk:cnode$sub_id" -t "$TEST_TRANSPORT" -a "$NVMF_FIRST_TARGET_IP" -s "$NVMF_PORT"
21}
22
23create_subsystems() {
24	local sub
25
26	for sub; do
27		create_subsystem "$sub"
28	done
29}
30
31destroy_subsystem() {
32	local sub_id=${1:-0}
33
34	rpc_cmd nvmf_delete_subsystem "nqn.2016-06.io.spdk:cnode$sub_id"
35	rpc_cmd bdev_null_delete "bdev_null$sub_id"
36}
37
38destroy_subsystems() {
39	local sub
40
41	for sub; do
42		destroy_subsystem "$sub"
43	done
44}
45
46create_transport() { rpc_cmd nvmf_create_transport $NVMF_TRANSPORT_OPTS; }
47create_json_sub_conf() { gen_nvmf_target_json "$@"; }
48
49gen_fio_conf() {
50	local file
51
52	cat <<- FIO
53		[global]
54		thread=1
55		direct=1
56		rw=randread
57		ramp_time=0
58		norandommap=1
59		time_based=1
60		bs=${bs:-4k}
61		numjobs=${numjobs:-1}
62		runtime=${runtime:-10}
63
64		[filename0]
65		filename=Nvme${nvme:-0}n1
66		iodepth=${iodepth:-4}
67	FIO
68	for ((file = 1; file <= files; file++)); do
69		cat <<- FIO
70			[filename$file]
71			filename=Nvme${file}n1
72			iodepth=${iodepth:-4}
73		FIO
74	done
75}
76
77fio() {
78	fio_bdev --ioengine=spdk_bdev --spdk_json_conf "$@" <(gen_fio_conf)
79}
80
81fio_dif_1() {
82	create_subsystems 0
83	fio <(create_json_sub_conf 0)
84	destroy_subsystems 0
85}
86
87fio_dif_1_multi_subsystems() {
88	local files=1
89
90	create_subsystems 0 1
91	fio <(create_json_sub_conf 0 1)
92	destroy_subsystems 0 1
93}
94
95fio_dif_rand_params() {
96	local NULL_DIF
97	local bs numjobs runtime iodepth files
98
99	NULL_DIF=3 bs=128k numjobs=3 iodepth=3 runtime=5
100
101	create_subsystems 0
102	fio <(create_json_sub_conf 0)
103	destroy_subsystems 0
104
105	NULL_DIF=2 bs=4k numjobs=8 iodepth=16 runtime="" files=2
106
107	create_subsystems 0 1 2
108	fio <(create_json_sub_conf 0 1 2)
109	destroy_subsystems 0 1 2
110
111	NULL_DIF=1 bs=8k,16k,128k numjobs=2 iodepth=8 runtime=5 files=1
112
113	create_subsystems 0 1
114	fio <(create_json_sub_conf 0 1)
115	destroy_subsystems 0 1
116}
117
118fio_dif_digest() {
119	local NULL_DIF
120	local bs numjobs runtime iodepth files
121	local hdgst ddgst
122
123	NULL_DIF=3 bs=128k,128k,128k numjobs=3 iodepth=3 runtime=10
124	hdgst=true ddgst=true
125
126	create_subsystems 0
127	fio <(create_json_sub_conf 0)
128	destroy_subsystems 0
129}
130
131nvmftestinit
132NVMF_TRANSPORT_OPTS+=" --dif-insert-or-strip"
133nvmfappstart
134
135create_transport
136
137run_test "fio_dif_1_default" fio_dif_1
138run_test "fio_dif_1_multi_subsystems" fio_dif_1_multi_subsystems
139run_test "fio_dif_rand_params" fio_dif_rand_params
140run_test "fio_dif_digest" fio_dif_digest
141
142trap - SIGINT SIGTERM EXIT
143nvmftestfini
144