1#!/usr/bin/env bash 2 3set -e 4 5testdir=$(readlink -f $(dirname $0)) 6rootdir=$(readlink -f $testdir/../..) 7plugindir=$rootdir/examples/bdev/fio_plugin 8rpc_py="$rootdir/scripts/rpc.py" 9source "$rootdir/scripts/common.sh" 10source "$rootdir/test/common/autotest_common.sh" 11source "$rootdir/test/nvmf/common.sh" 12 13function error_cleanup() { 14 # force delete pmem file and wipe on-disk metadata 15 rm -rf /tmp/pmem 16 $SPDK_EXAMPLE_DIR/perf -q 1 -o 131072 -w write -t 2 17} 18 19function destroy_vols() { 20 # Gracefully destroy the vols via bdev_compress_delete API. 21 # bdev_compress_delete will delete the on-disk metadata as well as 22 # the persistent memory file containing its metadata. 23 $rpc_py bdev_compress_delete COMP_lvs0/lv0 24 $rpc_py bdev_lvol_delete_lvstore -l lvs0 25} 26 27function create_vols() { 28 $rootdir/scripts/gen_nvme.sh | $rpc_py load_subsystem_config 29 waitforbdev Nvme0n1 30 31 $rpc_py bdev_lvol_create_lvstore Nvme0n1 lvs0 32 $rpc_py bdev_lvol_create -t -l lvs0 lv0 100 33 waitforbdev lvs0/lv0 34 35 $rpc_py compress_set_pmd -p "$pmd" 36 if [ -z "$1" ]; then 37 $rpc_py bdev_compress_create -b lvs0/lv0 -p /tmp/pmem 38 else 39 $rpc_py bdev_compress_create -b lvs0/lv0 -p /tmp/pmem -l $1 40 fi 41 waitforbdev COMP_lvs0/lv0 42} 43 44function run_bdevio() { 45 $rootdir/test/bdev/bdevio/bdevio -w & 46 bdevio_pid=$! 47 trap 'killprocess $bdevio_pid; error_cleanup; exit 1' SIGINT SIGTERM EXIT 48 waitforlisten $bdevio_pid 49 create_vols 50 $rootdir/test/bdev/bdevio/tests.py perform_tests 51 destroy_vols 52 trap - SIGINT SIGTERM EXIT 53 killprocess $bdevio_pid 54} 55 56function run_bdevperf() { 57 $rootdir/test/bdev/bdevperf/bdevperf -z -q $1 -o $2 -w verify -t $3 -C -m 0x6 & 58 bdevperf_pid=$! 59 trap 'killprocess $bdevperf_pid; error_cleanup; exit 1' SIGINT SIGTERM EXIT 60 waitforlisten $bdevperf_pid 61 create_vols $4 62 $rootdir/test/bdev/bdevperf/bdevperf.py perform_tests 63 destroy_vols 64 trap - SIGINT SIGTERM EXIT 65 killprocess $bdevperf_pid 66} 67 68test_type=$1 69case "$test_type" in 70 qat) 71 pmd=1 72 ;; 73 isal) 74 pmd=2 75 ;; 76 *) 77 echo "invalid pmd name" 78 exit 1 79 ;; 80esac 81 82mkdir -p /tmp/pmem 83 84# per patch bdevperf uses slightly different params than nightly 85# logical block size same as underlying device, then 512 then 4096 86run_bdevperf 32 4096 3 87run_bdevperf 32 4096 3 512 88run_bdevperf 32 4096 3 4096 89 90if [ $RUN_NIGHTLY -eq 1 ]; then 91 run_bdevio 92 run_bdevperf 64 16384 30 93 94 # run perf on nvmf target w/compressed vols 95 export TEST_TRANSPORT=tcp && nvmftestinit 96 nvmfappstart -m 0x7 97 trap "nvmftestfini; error_cleanup; exit 1" SIGINT SIGTERM EXIT 98 99 # Create an NVMe-oF subsystem and add compress bdevs as namespaces 100 $rpc_py nvmf_create_transport -t $TEST_TRANSPORT -u 8192 101 create_vols 102 $rpc_py nvmf_subsystem_create nqn.2016-06.io.spdk:cnode0 -a -s SPDK0 103 $rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode0 COMP_lvs0/lv0 104 $rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode0 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT 105 106 # Start random read writes in the background 107 $SPDK_EXAMPLE_DIR/perf -r "trtype:$TEST_TRANSPORT adrfam:IPv4 traddr:$NVMF_FIRST_TARGET_IP trsvcid:$NVMF_PORT" -o 4096 -q 64 -s 512 -w randrw -t 30 -c 0x18 -M 50 & 108 perf_pid=$! 109 110 # Wait for I/O to complete 111 trap 'killprocess $perf_pid; compress_err_cleanup; exit 1' SIGINT SIGTERM EXIT 112 wait $perf_pid 113 destroy_vols 114 115 trap - SIGINT SIGTERM EXIT 116 nvmftestfini 117fi 118 119rm -rf /tmp/pmem 120