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