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