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