xref: /spdk/test/accel/mlx5/accel_mlx5_crc32c.sh (revision 671ee5e075565cae5d7a23767c887600496be6f0)
1#!/usr/bin/env bash
2#  SPDX-License-Identifier: BSD-3-Clause
3#  Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES.
4#  All rights reserved.
5#
6
7testdir=$(readlink -f $(dirname $0))
8rootdir=$(readlink -f $testdir/../../..)
9source $rootdir/test/common/autotest_common.sh
10source $rootdir/test/nvmf/common.sh
11
12function gen_accel_mlx5_json() {
13	accel_qp_size=${1:-256}
14	accel_num_requests=${2:-2047}
15	accel_driver=${3:-false}
16
17	jq . <<- JSON
18		{
19		  "subsystems": [
20		    {
21		      "subsystem": "accel",
22		      "config": [
23		        {
24		          "method": "mlx5_scan_accel_module",
25		          "params": {
26		            "qp_size": ${accel_qp_size},
27		            "num_requests": ${accel_num_requests},
28		            "enable_driver": ${accel_driver}
29		          }
30		        }
31		      ]
32		    }
33		  ]
34		}
35	JSON
36}
37
38accelperf=$rootdir/build/examples/accel_perf
39
40$accelperf -c <(gen_accel_mlx5_json) -w crc32c -t 5 -m 0xf -y -C 1 -o 4096 -q 64
41$accelperf -c <(gen_accel_mlx5_json) -w crc32c -t 5 -m 0xf -y -C 33 -o 4096 -q 64
42$accelperf -c <(gen_accel_mlx5_json) -w crc32c -t 5 -m 0xf -y -C 33 -o 131072 -q 128
43# accel perf consumes to much memory in this test, lower qd and number of cores
44$accelperf -c <(gen_accel_mlx5_json) -w crc32c -t 5 -m 0x3 -y -C 77 -o 524288 -q 64
45
46$accelperf -c <(gen_accel_mlx5_json) -w copy_crc32c -t 5 -m 0xf -y -C 1 -o 4096 -q 64
47$accelperf -c <(gen_accel_mlx5_json) -w copy_crc32c -t 5 -m 0xf -y -C 33 -o 4096 -q 64
48$accelperf -c <(gen_accel_mlx5_json) -w copy_crc32c -t 5 -m 0xf -y -C 33 -o 131072 -q 128
49# accel perf consumes to much memory in this test, lower qd and number of cores
50$accelperf -c <(gen_accel_mlx5_json) -w copy_crc32c -t 5 -m 0x3 -y -C 77 -o 524288 -q 64
51
52# Test with small amount of resources
53$accelperf -c <(gen_accel_mlx5_json 16 2047) -w crc32c -t 5 -m 0x3 -y -C 17 -o 131072 -q 128
54$accelperf -c <(gen_accel_mlx5_json 256 32) -w crc32c -t 5 -m 0x3 -y -C 17 -o 131072 -q 128
55$accelperf -c <(gen_accel_mlx5_json 16 32) -w crc32c -t 5 -m 0x3 -y -C 17 -o 131072 -q 128
56
57$accelperf -c <(gen_accel_mlx5_json 16 2047) -w copy_crc32c -t 5 -m 0x3 -y -C 17 -o 131072 -q 128
58$accelperf -c <(gen_accel_mlx5_json 256 32) -w copy_crc32c -t 5 -m 0x3 -y -C 17 -o 131072 -q 128
59$accelperf -c <(gen_accel_mlx5_json 16 32) -w copy_crc32c -t 5 -m 0x3 -y -C 17 -o 131072 -q 128
60
61# Test copy operation with fragmented payload and platform driver enabled
62$accelperf -c <(gen_accel_mlx5_json 256 2047 true) -w crc32c -t 5 -m 0x3 -y -C 17 -o 131072 -q 128
63$accelperf -c <(gen_accel_mlx5_json 256 2047 true) -w copy_crc32c -t 5 -m 0x3 -y -C 17 -o 131072 -q 128
64
65if [ "$TEST_TRANSPORT" != "tcp" ]; then
66	exit 0
67fi
68
69MALLOC_BDEV_SIZE=256
70MALLOC_BLOCK_SIZE=512
71
72function gen_accel_mlx5_crc_json() {
73
74	jq . <<- JSON
75		{
76		  "subsystems": [
77		    {
78		      "subsystem": "accel",
79		      "config": [
80		        {
81		          "method": "mlx5_scan_accel_module",
82		          "params": {
83		          }
84		        }
85		      ]
86		    },
87		    {
88		      "subsystem": "bdev",
89		      "config": [
90		        {
91		          "method": "bdev_nvme_attach_controller",
92		          "params": {
93		            "name": "Nvme0",
94		            "trtype": "$TEST_TRANSPORT",
95		            "adrfam": "IPv4",
96		            "traddr": "$NVMF_FIRST_TARGET_IP",
97		            "trsvcid": "$NVMF_PORT",
98		            "subnqn": "nqn.2016-06.io.spdk:cnode0",
99		            "ddgst": true
100		          }
101		        },
102		        {
103		          "method": "bdev_wait_for_examine"
104		        }
105		      ]
106		    }
107		  ]
108		}
109	JSON
110}
111
112nvmftestinit
113nvmfappstart -m 0x3
114
115$rpc_py nvmf_create_transport $NVMF_TRANSPORT_OPTS
116$rpc_py bdev_malloc_create $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE -b Malloc0
117$rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode0 -a -s SPDK00000000000001
118$rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode0 Malloc0
119$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode0 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
120
121# test crc32c with TCP data digest
122bdevperf=$rootdir/build/examples/bdevperf
123$bdevperf --json <(gen_accel_mlx5_crc_json) -q 128 -o 4096 -t 5 -w randrw -M 50 -m 0xc -r /var/tmp/bdev.sock
124$bdevperf --json <(gen_accel_mlx5_crc_json) -q 128 -o 131072 -t 5 -w randrw -M 50 -m 0xc -r /var/tmp/bdev.sock
125
126trap - SIGINT SIGTERM EXIT
127
128nvmftestfini
129