xref: /spdk/test/accel/mlx5/accel_mlx5_driver_crypto.sh (revision 2c140f58ffe19fb26bb9d25f4df8ac7937a32557)
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