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