1*2c140f58SAlexey Marchuk#!/usr/bin/env bash 2*2c140f58SAlexey Marchuk# SPDX-License-Identifier: BSD-3-Clause 3*2c140f58SAlexey Marchuk# Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES. 4*2c140f58SAlexey Marchuk# All rights reserved. 5*2c140f58SAlexey Marchuk# 6*2c140f58SAlexey Marchuk 7*2c140f58SAlexey Marchuktestdir=$(readlink -f $(dirname $0)) 8*2c140f58SAlexey Marchukrootdir=$(readlink -f $testdir/../../..) 9*2c140f58SAlexey Marchuksource $rootdir/test/common/autotest_common.sh 10*2c140f58SAlexey Marchuksource $rootdir/test/nvmf/common.sh 11*2c140f58SAlexey Marchuk 12*2c140f58SAlexey MarchukMALLOC_BDEV_SIZE=256 13*2c140f58SAlexey MarchukMALLOC_BLOCK_SIZE=512 14*2c140f58SAlexey Marchukapp_sock=/var/tmp/bdev.sock 15*2c140f58SAlexey Marchuk 16*2c140f58SAlexey Marchukfunction gen_accel_mlx5_driver_crypto_rdma_json() { 17*2c140f58SAlexey Marchuk accel_qp_size=${1:-256} 18*2c140f58SAlexey Marchuk accel_num_requests=${2:-2047} 19*2c140f58SAlexey Marchuk 20*2c140f58SAlexey Marchuk jq . <<- JSON 21*2c140f58SAlexey Marchuk { 22*2c140f58SAlexey Marchuk "subsystems": [ 23*2c140f58SAlexey Marchuk { 24*2c140f58SAlexey Marchuk "subsystem": "accel", 25*2c140f58SAlexey Marchuk "config": [ 26*2c140f58SAlexey Marchuk { 27*2c140f58SAlexey Marchuk "method": "mlx5_scan_accel_module", 28*2c140f58SAlexey Marchuk "params": { 29*2c140f58SAlexey Marchuk "qp_size": ${accel_qp_size}, 30*2c140f58SAlexey Marchuk "num_requests": ${accel_num_requests}, 31*2c140f58SAlexey Marchuk "enable_driver": true 32*2c140f58SAlexey Marchuk } 33*2c140f58SAlexey Marchuk }, 34*2c140f58SAlexey Marchuk { 35*2c140f58SAlexey Marchuk "method": "accel_crypto_key_create", 36*2c140f58SAlexey Marchuk "params": { 37*2c140f58SAlexey Marchuk "name": "test_dek", 38*2c140f58SAlexey Marchuk "cipher": "AES_XTS", 39*2c140f58SAlexey Marchuk "key": "00112233445566778899001122334455", 40*2c140f58SAlexey Marchuk "key2": "11223344556677889900112233445500" 41*2c140f58SAlexey Marchuk } 42*2c140f58SAlexey Marchuk } 43*2c140f58SAlexey Marchuk ] 44*2c140f58SAlexey Marchuk }, 45*2c140f58SAlexey Marchuk { 46*2c140f58SAlexey Marchuk "subsystem": "bdev", 47*2c140f58SAlexey Marchuk "config": [ 48*2c140f58SAlexey Marchuk { 49*2c140f58SAlexey Marchuk "method": "bdev_nvme_set_options", 50*2c140f58SAlexey Marchuk "params": { 51*2c140f58SAlexey Marchuk "allow_accel_sequence": true 52*2c140f58SAlexey Marchuk } 53*2c140f58SAlexey Marchuk }, 54*2c140f58SAlexey Marchuk { 55*2c140f58SAlexey Marchuk "method": "bdev_nvme_attach_controller", 56*2c140f58SAlexey Marchuk "params": { 57*2c140f58SAlexey Marchuk "name": "Nvme0", 58*2c140f58SAlexey Marchuk "trtype": "$TEST_TRANSPORT", 59*2c140f58SAlexey Marchuk "adrfam": "IPv4", 60*2c140f58SAlexey Marchuk "traddr": "$NVMF_FIRST_TARGET_IP", 61*2c140f58SAlexey Marchuk "trsvcid": "$NVMF_PORT", 62*2c140f58SAlexey Marchuk "subnqn": "nqn.2016-06.io.spdk:cnode0", 63*2c140f58SAlexey Marchuk "ddgst": true 64*2c140f58SAlexey Marchuk } 65*2c140f58SAlexey Marchuk }, 66*2c140f58SAlexey Marchuk { 67*2c140f58SAlexey Marchuk "method": "bdev_crypto_create", 68*2c140f58SAlexey Marchuk "params": { 69*2c140f58SAlexey Marchuk "base_bdev_name": "Nvme0n1", 70*2c140f58SAlexey Marchuk "name": "Crypto0", 71*2c140f58SAlexey Marchuk "key_name": "test_dek" 72*2c140f58SAlexey Marchuk } 73*2c140f58SAlexey Marchuk }, 74*2c140f58SAlexey Marchuk { 75*2c140f58SAlexey Marchuk "method": "bdev_wait_for_examine" 76*2c140f58SAlexey Marchuk } 77*2c140f58SAlexey Marchuk ] 78*2c140f58SAlexey Marchuk } 79*2c140f58SAlexey Marchuk ] 80*2c140f58SAlexey Marchuk } 81*2c140f58SAlexey Marchuk JSON 82*2c140f58SAlexey Marchuk} 83*2c140f58SAlexey Marchuk 84*2c140f58SAlexey Marchukvalidate_crypto_umr_stats() { 85*2c140f58SAlexey Marchuk rpc_sock=$1 86*2c140f58SAlexey Marchuk stats=$($rpc_py -s $rpc_sock accel_mlx5_dump_stats -l total) 87*2c140f58SAlexey Marchuk 88*2c140f58SAlexey Marchuk val=$(echo $stats | jq -r '.total.umrs.crypto_umrs') 89*2c140f58SAlexey Marchuk if [ "$val" == 0 ]; then 90*2c140f58SAlexey Marchuk echo "Unexpected number of crypto_umrs: $val, expected > 0" 91*2c140f58SAlexey Marchuk return 1 92*2c140f58SAlexey Marchuk fi 93*2c140f58SAlexey Marchuk val=$(echo $stats | jq -r '.total.umrs.sig_umrs') 94*2c140f58SAlexey Marchuk if [ "$val" != 0 ]; then 95*2c140f58SAlexey Marchuk echo "Unexpected number of sig_umrs: $val, expected 0" 96*2c140f58SAlexey Marchuk return 1 97*2c140f58SAlexey Marchuk fi 98*2c140f58SAlexey Marchuk val=$(echo $stats | jq -r '.total.rdma.total') 99*2c140f58SAlexey Marchuk if [ "$val" != 0 ]; then 100*2c140f58SAlexey Marchuk echo "Unexpected number of RDMA operations: $val, expected 0" 101*2c140f58SAlexey Marchuk return 1 102*2c140f58SAlexey Marchuk fi 103*2c140f58SAlexey Marchuk val=$(echo $stats | jq -r '.total.tasks.crypto_mkey') 104*2c140f58SAlexey Marchuk if [ $val != 0 ] && [ $val != $(echo $stats | jq -r '.total.tasks.total') ]; then 105*2c140f58SAlexey Marchuk echo "Unexpected number of tasks operations: $val, expected > 0 and no other tasks" 106*2c140f58SAlexey Marchuk return 1 107*2c140f58SAlexey Marchuk fi 108*2c140f58SAlexey Marchuk} 109*2c140f58SAlexey Marchuk 110*2c140f58SAlexey Marchukif [ "$TEST_TRANSPORT" != "rdma" ]; then 111*2c140f58SAlexey Marchuk exit 0 112*2c140f58SAlexey Marchukfi 113*2c140f58SAlexey Marchuk 114*2c140f58SAlexey Marchuk# Test mlx5 platform driver with crypto bdev and bdev_nvme rdma 115*2c140f58SAlexey Marchuknvmftestinit 116*2c140f58SAlexey Marchuknvmfappstart -m 0x3 117*2c140f58SAlexey Marchuk 118*2c140f58SAlexey Marchuk$rpc_py nvmf_create_transport $NVMF_TRANSPORT_OPTS 119*2c140f58SAlexey Marchuk$rpc_py bdev_malloc_create $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE -b Malloc0 120*2c140f58SAlexey Marchuk$rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode0 -a -s SPDK00000000000001 121*2c140f58SAlexey Marchuk$rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode0 Malloc0 122*2c140f58SAlexey Marchuk$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode0 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT 123*2c140f58SAlexey Marchuk 124*2c140f58SAlexey Marchuksleep 1 125*2c140f58SAlexey Marchuk 126*2c140f58SAlexey Marchuk# Test with bdevperf, without src memory domain 127*2c140f58SAlexey Marchukbdevperf=$rootdir/build/examples/bdevperf 128*2c140f58SAlexey Marchuk$bdevperf --json <(gen_accel_mlx5_driver_crypto_rdma_json) -q 64 -o 4096 -t 10 -w verify -M 50 -m 0xc -r $app_sock 129*2c140f58SAlexey Marchuk$bdevperf --json <(gen_accel_mlx5_driver_crypto_rdma_json) -q 64 -o 131072 -t 10 -w verify -M 50 -m 0xc -r $app_sock 130*2c140f58SAlexey Marchuk 131*2c140f58SAlexey Marchuk## By killing the target, we trigger qpair disconnect with outstanding IOs and test that nvme_rdma<->accel_mlx5 132*2c140f58SAlexey Marchuk## interaction works well. No hang or crash expected. 133*2c140f58SAlexey Marchuk$bdevperf --json <(gen_accel_mlx5_driver_crypto_rdma_json) -q 64 -o 4096 -t 60 -w rw -M 50 -m 0xc -r $app_sock & 134*2c140f58SAlexey Marchukbdev_perf_pid=$! 135*2c140f58SAlexey Marchukwaitforlisten $bdev_perf_pid $app_sock 136*2c140f58SAlexey Marchuksleep 5 137*2c140f58SAlexey Marchukvalidate_crypto_umr_stats $app_sock 138*2c140f58SAlexey Marchuksleep 1 139*2c140f58SAlexey Marchukkillprocess $nvmfpid 140*2c140f58SAlexey Marchukwait $bdev_perf_pid || true 141*2c140f58SAlexey Marchuk 142*2c140f58SAlexey Marchuknvmfappstart -m 0x3 143*2c140f58SAlexey Marchuk$rpc_py nvmf_create_transport $NVMF_TRANSPORT_OPTS 144*2c140f58SAlexey Marchuk$rpc_py bdev_malloc_create $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE -b Malloc0 145*2c140f58SAlexey Marchuk$rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode0 -a -s SPDK00000000000001 146*2c140f58SAlexey Marchuk$rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode0 Malloc0 147*2c140f58SAlexey Marchuk$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode0 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT 148*2c140f58SAlexey Marchuk 149*2c140f58SAlexey Marchuk$bdevperf --json <(gen_accel_mlx5_driver_crypto_rdma_json) -q 64 -o 4096 -t 10 -w rw -M 50 -m 0xc -r $app_sock & 150*2c140f58SAlexey Marchukbdev_perf_pid=$! 151*2c140f58SAlexey Marchukwaitforlisten $bdev_perf_pid $app_sock 152*2c140f58SAlexey Marchuksleep 5 153*2c140f58SAlexey Marchukvalidate_crypto_umr_stats $app_sock 154*2c140f58SAlexey Marchuksleep 1 155*2c140f58SAlexey Marchukwait $bdev_perf_pid 156*2c140f58SAlexey Marchuk 157*2c140f58SAlexey Marchuk# Test with dma app which uses memory domains 158*2c140f58SAlexey Marchuktestdma="$rootdir/test/dma/test_dma/test_dma" 159*2c140f58SAlexey Marchuk$testdma --json <(gen_accel_mlx5_driver_crypto_rdma_json) -q 64 -o 4096 -t 10 -w verify -M 50 -m 0xc -r $app_sock -b "Crypto0" -f -x translate & 160*2c140f58SAlexey Marchuktestdma_pid=$! 161*2c140f58SAlexey Marchukwaitforlisten $testdma_pid $app_sock 162*2c140f58SAlexey Marchuksleep 5 163*2c140f58SAlexey Marchukvalidate_crypto_umr_stats $app_sock 164*2c140f58SAlexey Marchuksleep 1 165*2c140f58SAlexey Marchukwait $testdma_pid 166*2c140f58SAlexey Marchuk 167*2c140f58SAlexey Marchuk# Test small qp size and number of MRs 168*2c140f58SAlexey Marchuktestdma="$rootdir/test/dma/test_dma/test_dma" 169*2c140f58SAlexey Marchuk$testdma --json <(gen_accel_mlx5_driver_crypto_rdma_json 16 32) -q 64 -o 32768 -t 10 -w verify -M 50 -m 0xc -r $app_sock -b "Crypto0" -f -x translate & 170*2c140f58SAlexey Marchuktestdma_pid=$! 171*2c140f58SAlexey Marchukwaitforlisten $testdma_pid $app_sock 172*2c140f58SAlexey Marchuksleep 5 173*2c140f58SAlexey Marchukvalidate_crypto_umr_stats $app_sock 174*2c140f58SAlexey Marchuksleep 1 175*2c140f58SAlexey Marchukwait $testdma_pid 176*2c140f58SAlexey Marchuk 177*2c140f58SAlexey Marchuk# Test mkey corruption 178*2c140f58SAlexey Marchuktestdma="$rootdir/test/dma/test_dma/test_dma" 179*2c140f58SAlexey Marchuk$testdma --json <(gen_accel_mlx5_driver_crypto_rdma_json) -q 64 -o 4096 -t 10 -w randrw -M 50 -m 0xc -r $app_sock -b "Crypto0" -f -x translate -Y 500000 & 180*2c140f58SAlexey Marchuktestdma_pid=$! 181*2c140f58SAlexey Marchukwaitforlisten $testdma_pid $app_sock 182*2c140f58SAlexey Marchuksleep 5 183*2c140f58SAlexey Marchukvalidate_crypto_umr_stats $app_sock 184*2c140f58SAlexey Marchuksleep 1 185*2c140f58SAlexey Marchukwait $testdma_pid || true 186*2c140f58SAlexey Marchuk 187*2c140f58SAlexey Marchuknvmftestfini 188*2c140f58SAlexey Marchuk 189*2c140f58SAlexey Marchuktrap - SIGINT SIGTERM EXIT 190