632506-qat-getting-started-guide-v2.0.pdf
21. Intel® QuickAssist (QAT) Crypto Poll Mode Driver — Data Plane Development Kit 23.11.0 documentation (dpdk.org)
This section provides details on building and installing the software.
The examples below are based on the C62x device, if you have a different device use the corresponding values in the above table.
In BIOS ensure that SRIOV is enabled and either:
"intel_iommu=on iommu=pt"
in the grub file.Check that the QAT driver is loaded on your system, by executing:
lsmod | grep qa
You should see the kernel module for your device listed, e.g.:
qat_c62x 5626 0
intel_qat 82336 1 qat_c62x
Next, you need to expose the Virtual Functions (VFs) using the sysfs file system.
First find the BDFs (Bus-Device-Function) of the physical functions (PFs) of your device, e.g.:
lspci -d:37c8
You should see output similar to:
1a:00.0 Co-processor: Intel Corporation Device 37c8
3d:00.0 Co-processor: Intel Corporation Device 37c8
3f:00.0 Co-processor: Intel Corporation Device 37c8
Enable the VFs for each PF by echoing the number of VFs per PF to the pci driver:
echo 16 > /sys/bus/pci/drivers/c6xx/0000:1a:00.0/sriov_numvfs
echo 16 > /sys/bus/pci/drivers/c6xx/0000:3d:00.0/sriov_numvfs
echo 16 > /sys/bus/pci/drivers/c6xx/0000:3f:00.0/sriov_numvfs
Check that the VFs are available for use. For example lspci -d:37c9
should list 48 VF devices available for a C62x
device.
To complete the installation follow the instructions in Binding the available VFs to the vfio-pci driver.
#链接start
Note:
Unbind the VFs from the stock driver so they can be bound to the vfio-pci driver.
The unbind command below assumes BDFs
of 03:01.00-03:04.07
, if your VFs are different adjust the unbind command below:
cd to the top-level DPDK directory
for device in $(seq 1 4); do \
for fn in $(seq 0 7); do \
usertools/dpdk-devbind.py -u 0000:03:0${device}.${fn}; \
done; \
done
The unbind command below assumes BDFs
of 1a:01.00-1a:02.07
, 3d:01.00-3d:02.07
and 3f:01.00-3f:02.07
, if your VFs are different adjust the unbind command below:
cd to the top-level DPDK directory
for device in $(seq 1 2); do \
for fn in $(seq 0 7); do \
usertools/dpdk-devbind.py -u 0000:1a:0${device}.${fn}; \
usertools/dpdk-devbind.py -u 0000:3d:0${device}.${fn}; \
usertools/dpdk-devbind.py -u 0000:3f:0${device}.${fn}; \
done; \
done
The unbind command below assumes BDFs
of 01:01.00-01:02.07
, if your VFs are different adjust the unbind command below:
cd to the top-level DPDK directory
for device in $(seq 1 2); do \
for fn in $(seq 0 7); do \
usertools/dpdk-devbind.py -u 0000:01:0${device}.${fn}; \
done; \
done
Load the vfio-pci driver, bind the VF PCI Device id to it using the dpdk-devbind.py
script then use the --status
option to confirm the VF devices are now in use by vfio-pci kernel driver, e.g. for the C62x device:
cd to the top-level DPDK directory
modprobe vfio-pci
usertools/dpdk-devbind.py -b vfio-pci 0000:03:01.1
usertools/dpdk-devbind.py --status
Use modprobe vfio-pci disable_denylist=1
from kernel 5.9 onwards. See note in the section Binding the available VFs to the vfio-pci driver above.
QAT SYM crypto PMD can be tested by running the test application:
cd ./<build_dir>/app/test
./dpdk-test -l1 -n1 -a <your qat bdf>
RTE>>cryptodev_qat_autotest
QAT ASYM crypto PMD can be tested by running the test application:
cd ./<build_dir>/app/test
./dpdk-test -l1 -n1 -a <your qat bdf>
RTE>>cryptodev_qat_asym_autotest
QAT compression PMD can be tested by running the test application:
cd ./<build_dir>/app/test
./dpdk-test -l1 -n1 -a <your qat bdf>
RTE>>compressdev_autotest
There are 2 sets of trace available via the dynamic logging feature:
pmd.qat exposes both sets of traces. They can be enabled using the log-level option (where 8=maximum log level) on the process cmdline, e.g. using any of the following:
--log-level="pmd.qat.general,8"
--log-level="pmd.qat.dp,8"
--log-level="pmd.qat,8"
Note
The global RTE_LOG_DP_LEVEL overrides data-path trace so must be set to RTE_LOG_DEBUG to see all the trace. This variable is in config/rte_config.h for meson build. Also the dynamic global log level overrides both sets of trace, so e.g. no QAT trace would display in this case:
--log-level="7" --log-level="pmd.qat.general,8"
#链接end
Note
If the QAT kernel modules are not loaded and you see an error like Failed to load MMP firmware qat_895xcc_mmp.bin
in kernel logs, this may be as a result of not using a distribution, but just updating the kernel directly.
Download firmware from the kernel firmware repo.
Copy qat binaries to /lib/firmware
:
cp qat_895xcc.bin /lib/firmware
cp qat_895xcc_mmp.bin /lib/firmware
Change to your linux source root directory and start the qat kernel modules:
insmod ./drivers/crypto/qat/qat_common/intel_qat.ko
insmod ./drivers/crypto/qat/qat_dh895xcc/qat_dh895xcc.ko
Note
If you see the following warning in /var/log/messages
it can be ignored: IOMMU should be enabled for SR-IOV to work correctly
.
浏览器输入https://01.org/ 进入Projects->QuickAssist Technology
或:
Download the latest QuickAssist Technology Driver from Intel Developer Zone. Consult the Quick Start Guide at the same URL for further information.
The steps below assume you are:
C62x
device.qat1.7.l.4.2.0-000xx.tar.gz
.4.11.11-300.fc26.x86_64
.In the BIOS ensure that SRIOV is enabled and VT-d is disabled.
Uninstall any existing QAT driver, for example by running:
./installer.sh uninstall
in the directory where originally installed.Build and install the SRIOV-enabled QAT driver:
mkdir /QAT
cd /QAT
# Copy the package to this location and unpack
tar zxof qat1.7.l.4.2.0-000xx.tar.gz
./configure --enable-icp-sriov=host
make install
You can use cat /sys/kernel/debug/qat
to confirm the driver is correctly installed and is using firmware version 4.2.0. You can use lspci -d:37c9
to confirm the presence of the 16 VF devices available per C62x
PF.
Confirm the driver is correctly installed and is using firmware version 4.2.0:
cat /sys/kernel/debug/qat/version/fw
Confirm the presence of 48 VF devices - 16 per PF:
lspci -d:37c9
To complete the installation - follow instructions in 1.2.Binding the available VFs to the vfio-pci driver
Note
If using a later kernel and the build fails with an error relating to strict_stroul
not being available apply the following patch:
/QAT/QAT1.6/quickassist/utilities/downloader/Target_CoreLibs/uclo/include/linux/uclo_platform.h
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,18,5)
+ #define STR_TO_64(str, base, num, endPtr) {endPtr=NULL; if (kstrtoul((str), (base), (num))) printk("Error strtoull convert %s\n", str); }
+ #else
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)
#define STR_TO_64(str, base, num, endPtr) {endPtr=NULL; if (strict_strtoull((str), (base), (num))) printk("Error strtoull convert %s\n", str); }
#else
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
#define STR_TO_64(str, base, num, endPtr) {endPtr=NULL; strict_strtoll((str), (base), (num));}
#else
#define STR_TO_64(str, base, num, endPtr) \
do { \
if (str[0] == '-') \
{ \
*(num) = -(simple_strtoull((str+1), &(endPtr), (base))); \
}else { \
*(num) = simple_strtoull((str), &(endPtr), (base)); \
} \
} while(0)
+ #endif
#endif
#endif
Note
If the build fails due to missing header files you may need to do following:
sudo yum install zlib-devel
sudo yum install openssl-devel
sudo yum install libudev-devel
Note
If the build or install fails due to mismatching kernel sources you may need to do the following:
sudo yum install kernel-headers-`uname -r`
sudo yum install kernel-src-`uname -r`
sudo yum install kernel-devel-`uname -r`
Note
If the build fails on newer GCC versions (such as GCC 12) with an error relating to -lc
not being found, apply the following patch:
/QAT/quickassist/lookaside/access_layer/src/Makefile
cd $(ICP_FINAL_OUTPUT_DIR);\
cmd="$(LINKER) $(LIB_SHARED_FLAGS) -o \
$(LIB_SHARED) $(ADDITIONAL_OBJECTS) $(ADDITIONAL_LIBS) *.o -lpthread -ludev \
- -Bstatic -L$(ADF_DIR)/src/build/$(ICP_OS)/$(ICP_OS_LEVEL) \
- -ladf_user -L$(OSAL_DIR)/src/build/$(ICP_OS)/$(ICP_OS_LEVEL)/ \
- -losal -Bdynamic -lc"; \
+ -Bstatic -L$(ADF_DIR)/src/build/$(ICP_OS)/$(ICP_OS_LEVEL) \
+ -ladf_user -L$(OSAL_DIR)/src/build/$(ICP_OS)/$(ICP_OS_LEVEL)/ \
+ -losal -Bdynamic -L/lib/x86_64-linux-gnu/ -lc"; \
echo "$$cmd"; \
$$cmd
Followed by this patch:
/QAT/quickassist/build_system/build_files/OS/linux_common_user_space_rules.mk
@echo 'Creating shared library ${LIB_SHARED}'; \
cd $($(PROG_ACY)_FINAL_OUTPUT_DIR);\
- echo $(LINKER) $(LIB_SHARED_FLAGS) -o $@ $(OBJECTS) $(ADDITIONAL_OBJECTS) -lc;\
- $(LINKER) $(LIB_SHARED_FLAGS) -o $@ $(OBJECTS) $(ADDITIONAL_OBJECTS) -lc ;
+ echo $(LINKER) $(LIB_SHARED_FLAGS) -o $@ $(OBJECTS) $(ADDITIONAL_OBJECTS) \
+ -L/lib/x86_64-linux-gnu/ -lc;\
+ $(LINKER) $(LIB_SHARED_FLAGS) -o $@ $(OBJECTS) $(ADDITIONAL_OBJECTS) \
+ -L/lib/x86_64-linux-gnu/ -lc ;
2.1 QATzip @github仓库
2.2 QATlib @github仓库
cat /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="iommu=pt intel_iommu=on quiet splash"
GRUB_CMDLINE_LINUX=""
grub-mkconfig -o /boot/grub/grub.cfg
reboot
lsmod |grep qat
qat_4xxx 20480 0
intel_qat 270336 1 qat_4xxx
crc8 16384 1 intel_qat
authenc 16384 1 intel_qat
lspci |grep Co-processor
76:00.0 Co-processor: Intel Corporation Device 4942 (rev 40)
78:00.0 Co-processor: Intel Corporation Device 2710
f3:00.0 Co-processor: Intel Corporation Device 4942 (rev 40)
f5:00.0 Co-processor: Intel Corporation Device 2710
cat /sys/bus/pci/drivers/4xxx/0000\:
0000:76:00.0/ 0000:f3:00.0/ #两个
echo 16 > /sys/bus/pci/drivers/4xxx/0000\:76\:00.0/sriov_numvfs
cat /sys/bus/pci/drivers/4xxx/0000\:76\:00.0/sriov_numvfs
16
echo 16 > /sys/bus/pci/drivers/4xxx//0000\:f3\:00.0/sriov_numvfs
cat /sys/bus/pci/drivers/4xxx//0000\:f3\:00.0/sriov_numvfs
16
lspci -d:4943
76:00.1 Co-processor: Intel Corporation Device 4943 (rev 40)
76:00.2 Co-processor: Intel Corporation Device 4943 (rev 40)
76:00.3 Co-processor: Intel Corporation Device 4943 (rev 40)
76:00.4 Co-processor: Intel Corporation Device 4943 (rev 40)
76:00.5 Co-processor: Intel Corporation Device 4943 (rev 40)
76:00.6 Co-processor: Intel Corporation Device 4943 (rev 40)
76:00.7 Co-processor: Intel Corporation Device 4943 (rev 40)
76:01.0 Co-processor: Intel Corporation Device 4943 (rev 40)
76:01.1 Co-processor: Intel Corporation Device 4943 (rev 40)
76:01.2 Co-processor: Intel Corporation Device 4943 (rev 40)
76:01.3 Co-processor: Intel Corporation Device 4943 (rev 40)
76:01.4 Co-processor: Intel Corporation Device 4943 (rev 40)
76:01.5 Co-processor: Intel Corporation Device 4943 (rev 40)
76:01.6 Co-processor: Intel Corporation Device 4943 (rev 40)
76:01.7 Co-processor: Intel Corporation Device 4943 (rev 40)
76:02.0 Co-processor: Intel Corporation Device 4943 (rev 40)
f3:00.1 Co-processor: Intel Corporation Device 4943 (rev 40)
f3:00.2 Co-processor: Intel Corporation Device 4943 (rev 40)
f3:00.3 Co-processor: Intel Corporation Device 4943 (rev 40)
f3:00.4 Co-processor: Intel Corporation Device 4943 (rev 40)
f3:00.5 Co-processor: Intel Corporation Device 4943 (rev 40)
f3:00.6 Co-processor: Intel Corporation Device 4943 (rev 40)
f3:00.7 Co-processor: Intel Corporation Device 4943 (rev 40)
f3:01.0 Co-processor: Intel Corporation Device 4943 (rev 40)
f3:01.1 Co-processor: Intel Corporation Device 4943 (rev 40)
f3:01.2 Co-processor: Intel Corporation Device 4943 (rev 40)
f3:01.3 Co-processor: Intel Corporation Device 4943 (rev 40)
f3:01.4 Co-processor: Intel Corporation Device 4943 (rev 40)
f3:01.5 Co-processor: Intel Corporation Device 4943 (rev 40)
f3:01.6 Co-processor: Intel Corporation Device 4943 (rev 40)
f3:01.7 Co-processor: Intel Corporation Device 4943 (rev 40)
f3:02.0 Co-processor: Intel Corporation Device 4943 (rev 40)
modprobe vfio-pci
lsmod |grep vfio
vfio_pci 16384 0
vfio_pci_core 94208 1 vfio_pci
vfio_iommu_type1 49152 0
vfio 61440 3 vfio_pci_core,vfio_iommu_type1,vfio_pci
iommufd 73728 1 vfio
irqbypass 16384 2 vfio_pci_core,kvm
# unbind
for device in $(seq 0 1); do \
for fn in $(seq 1 7); do \
usertools/dpdk-devbind.py -u 0000:76:0${device}.${fn}; \
done; \
done
usertools/dpdk-devbind.py -u 0000:76:01.0
usertools/dpdk-devbind.py -u 0000:76:02.0
for device in $(seq 0 1); do \
for fn in $(seq 1 7); do \
usertools/dpdk-devbind.py -u 0000:f3:0${device}.${fn}; \
done; \
done
usertools/dpdk-devbind.py -u 0000:f3:01.0
usertools/dpdk-devbind.py -u 0000:f3:02.0
# bind
for device in $(seq 0 1); do \
for fn in $(seq 1 7); do \
usertools/dpdk-devbind.py -b vfio-pci 0000:76:0${device}.${fn}; \
done; \
done
usertools/dpdk-devbind.py -b vfio-pci 0000:76:01.0
usertools/dpdk-devbind.py -b vfio-pci 0000:76:02.0
for device in $(seq 0 1); do \
for fn in $(seq 1 7); do \
usertools/dpdk-devbind.py -b vfio-pci 0000:f3:0${device}.${fn}; \
done; \
done
usertools/dpdk-devbind.py -b vfio-pci 0000:f3:01.0
usertools/dpdk-devbind.py -b vfio-pci 0000:f3:02.0
示例:
./usertools/dpdk-devbind.py -b vfio-pci 0000:76:00.1
spdk-23.09/dpdk# ./usertools/dpdk-devbind.py --status
Network devices using kernel driver
===================================
0000:19:00.0 'Ethernet Controller X710 for 10GbE SFP+ 1572' if=ens38f0 drv=i40e unused=vfio-pci *Active*
0000:19:00.1 'Ethernet Controller X710 for 10GbE SFP+ 1572' if=ens38f1 drv=i40e unused=vfio-pci
0000:2a:00.0 'MT28908 Family [ConnectX-6] 101b' if=ens3f0np0 drv=mlx5_core unused=vfio-pci
0000:2a:00.1 'MT28908 Family [ConnectX-6] 101b' if=ens3f1np1 drv=mlx5_core unused=vfio-pci
No 'Baseband' devices detected
==============================
Crypto devices using DPDK-compatible driver
===========================================
0000:76:00.1 'Device 4943' drv=vfio-pci unused=
0000:76:00.2 'Device 4943' drv=vfio-pci unused=
0000:76:00.3 'Device 4943' drv=vfio-pci unused=
0000:76:00.4 'Device 4943' drv=vfio-pci unused=
0000:76:00.5 'Device 4943' drv=vfio-pci unused=
0000:76:00.6 'Device 4943' drv=vfio-pci unused=
0000:76:00.7 'Device 4943' drv=vfio-pci unused=
0000:76:01.0 'Device 4943' drv=vfio-pci unused=
0000:76:01.1 'Device 4943' drv=vfio-pci unused=
0000:76:01.2 'Device 4943' drv=vfio-pci unused=
0000:76:01.3 'Device 4943' drv=vfio-pci unused=
0000:76:01.4 'Device 4943' drv=vfio-pci unused=
0000:76:01.5 'Device 4943' drv=vfio-pci unused=
0000:76:01.6 'Device 4943' drv=vfio-pci unused=
0000:76:01.7 'Device 4943' drv=vfio-pci unused=
0000:76:02.0 'Device 4943' drv=vfio-pci unused=
0000:f3:00.1 'Device 4943' drv=vfio-pci unused=
0000:f3:00.2 'Device 4943' drv=vfio-pci unused=
0000:f3:00.3 'Device 4943' drv=vfio-pci unused=
0000:f3:00.4 'Device 4943' drv=vfio-pci unused=
0000:f3:00.5 'Device 4943' drv=vfio-pci unused=
0000:f3:00.6 'Device 4943' drv=vfio-pci unused=
0000:f3:00.7 'Device 4943' drv=vfio-pci unused=
0000:f3:01.0 'Device 4943' drv=vfio-pci unused=
0000:f3:01.1 'Device 4943' drv=vfio-pci unused=
0000:f3:01.2 'Device 4943' drv=vfio-pci unused=
0000:f3:01.3 'Device 4943' drv=vfio-pci unused=
0000:f3:01.4 'Device 4943' drv=vfio-pci unused=
0000:f3:01.5 'Device 4943' drv=vfio-pci unused=
0000:f3:01.6 'Device 4943' drv=vfio-pci unused=
0000:f3:01.7 'Device 4943' drv=vfio-pci unused=
0000:f3:02.0 'Device 4943' drv=vfio-pci unused=
Crypto devices using kernel driver
==================================
0000:76:00.0 'Device 4942' drv=4xxx unused=qat_4xxx,vfio-pci
0000:f3:00.0 'Device 4942' drv=4xxx unused=qat_4xxx,vfio-pci
Other Crypto devices
====================
0000:78:00.0 'Device 2710' unused=vfio-pci
0000:f5:00.0 'Device 2710' unused=vfio-pci
DMA devices using kernel driver
===============================
0000:75:01.0 'Device 0b25' drv=idxd unused=vfio-pci
0000:f2:01.0 'Device 0b25' drv=idxd unused=vfio-pci
Other Eventdev devices
======================
0000:78:00.0 'Device 2710' unused=vfio-pci
0000:f5:00.0 'Device 2710' unused=vfio-pci
No 'Mempool' devices detected
=============================
No 'Compress' devices detected
==============================
No 'Misc (rawdev)' devices detected
===================================
No 'Regex' devices detected
===========================
No 'ML' devices detected
========================
# 分配hugepage
cd dpdk
./usertools/dpdk-hugepages.py --setup 2G
执行./build/app/test/dpdk-test -l1 -n1 -a 0000:76:00.1
**************************************************cryptodev_qat_autotest***********************
cd dpdk
./build/app/test/dpdk-test -l1 -n1 -a 0000:76:00.1
EAL: Detected CPU lcores: 80
EAL: Detected NUMA nodes: 2
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: VFIO support initialized
EAL: Using IOMMU type 1 (Type 1)
EAL: Probe PCI driver: qat (8086:4943) device: 0000:76:00.1 (socket 0)
CRYPTODEV: Creating cryptodev 0000:76:00.1_qat_sym
CRYPTODEV: Initialisation parameters - name: 0000:76:00.1_qat_sym,socket id: 0, max queue pairs: 0
CRYPTODEV: Creating cryptodev 0000:76:00.1_qat_asym
CRYPTODEV: Initialisation parameters - name: 0000:76:00.1_qat_asym,socket id: 0, max queue pairs: 0
TELEMETRY: No legacy callbacks, legacy socket not created
APP: HPET is not enabled, using TSC as default timer
RTE>>cryptodev_qat_autotest
...
+ DOCSIS Proto Unit Test Suite : 52/52 passed, 0/52 skipped, 0/52 failed, 0/52 unsupported
+ ------------------------------------------------------- +
+ Sub Testsuites Total : 29
+ Sub Testsuites Skipped : 13
+ Sub Testsuites Passed : 16
+ Sub Testsuites Failed : 0
+ ------------------------------------------------------- +
+ Tests Total : 792
+ Tests Skipped : 496
+ Tests Executed : 494
+ Tests Unsupported: 0
+ Tests Passed : 296
+ Tests Failed : 0
+ ------------------------------------------------------- +
Test OK
***************test_compressdev negative test, errors are expected***********************
+ TestCase [25] : test_compressdev_deflate_im_buffers_SGL_over_2ops_first failed
qat_comp_qp_setup(): qp_id 0 invalid for this device
USER1: Queue pair setup failed
rte_compressdev_stop(): Device with dev_id=0 already stopped
+ TestCase [26] : test_compressdev_deflate_im_buffers_SGL_over_2ops_second failed
+ ------------------------------------------------------- +
+ Test Suite Summary : compressdev unit test suite
+ ------------------------------------------------------- +
+ Tests Total : 27
+ Tests Skipped : 0
+ Tests Executed : 27
+ Tests Unsupported: 0
+ Tests Passed : 1
+ Tests Failed : 26
+ ------------------------------------------------------- +
Test Failed
RTE>>quit
更加详细的日志
spdk-23.09/dpdk# ./build/app/test/dpdk-test -l1 -n1 -a 76:00.1 --log-level=qat:8
EAL: Detected CPU lcores: 80
EAL: Detected NUMA nodes: 2
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: VFIO support initialized
EAL: Using IOMMU type 1 (Type 1)
EAL: Probe PCI driver: qat (8086:4943) device: 0000:76:00.1 (socket 0)
CRYPTODEV: Creating cryptodev 0000:76:00.1_qat_sym
CRYPTODEV: Initialisation parameters - name: 0000:76:00.1_qat_sym,socket id: 0, max queue pairs: 0
CRYPTODEV: Creating cryptodev 0000:76:00.1_qat_asym
CRYPTODEV: Initialisation parameters - name: 0000:76:00.1_qat_asym,socket id: 0, max queue pairs: 0
TELEMETRY: No legacy callbacks, legacy socket not created
APP: HPET is not enabled, using TSC as default timer
RTE>>compressdev_autotest
+ ------------------------------------------------------- +
+ Test Suite : compressdev unit test suite
USER1: Running tests on device 0000:76:00.1_qat_comp
+ ------------------------------------------------------- +
USER1: This is a negative test, errors are expected
rte_compressdev_queue_pairs_config(): invalid param: dev 0x5599e5f163c0, nb_queues 0
rte_compressdev_configure(): dev0 rte_comp_dev_queue_pairs_config = -22
rte_compressdev_queue_pair_setup(): Invalid queue_pair_id=0
+ TestCase [ 0] : test_compressdev_invalid_configuration succeeded
qat_comp_qp_setup(): qp_id 0 invalid for this device
USER1: Queue pair setup failed
rte_compressdev_stop(): Device with dev_id=0 already stopped
+ TestCase [ 1] : test_compressdev_deflate_stateless_fixed failed
qat_comp_qp_setup(): qp_id 0 invalid for this device
USER1: Queue pair setup failed
rte_compressdev_stop(): Device with dev_id=0 already stopped
+ TestCase [ 2] : test_compressdev_deflate_stateless_dynamic failed
qat_comp_qp_setup(): qp_id 0 invalid for this device
USER1: Queue pair setup failed
rte_compressdev_stop(): Device with dev_id=0 already stopped
+ TestCase [ 3] : test_compressdev_deflate_stateless_dynamic_big failed
qat_comp_qp_setup(): qp_id 0 invalid for this device
USER1: Queue pair setup failed
rte_compressdev_stop(): Device with dev_id=0 already stopped
+ TestCase [ 4] : test_compressdev_deflate_stateless_multi_op failed
qat_comp_qp_setup(): qp_id 0 invalid for this device
说明,实际并未使用该种方式。
下载安装driver
https://github.com/intel/qatlib
./configure; make install
# Sample programs can be installed by using the “make samples-install”. The sample program “cpa_sample_code runTests=32” can be used to test compression performance.
root@hik-Super-Server:/home/lhx/spdk-23.09# lsmod | grep qat
qat_4xxx 20480 0
intel_qat 270336 1 qat_4xxx
crc8 16384 1 intel_qat
authenc 16384 1 intel_qat
# service qat_service start||stop||status||restart||shutdown
# For a system with multiple Intel® QAT Endpoints, you can start, stop or restart each individual device by passing the Intel® QAT Endpoint to be restarted or stopped as a parameter qat_dev, for example:
service qat_service stop qat_dev0
service qat_service stop qat_dev1
# The shutdown qualifier enables the user to bring down all Intel® QAT Endpoints and unload driver modules from the kernel. This contrasts with the stop qualifier, which brings down one or more Intel® QAT Endpoints, but does not unload kernel modules, so other Intel® QAT Endpoints can still run.
# service qat_service status
Checking status of all devices.
There is 3 QAT acceleration device(s) in the system:
qat_dev0 - type: c6xx, inst_id: 0, node_id: 1, bsf: 0000:cc:00.0, #accel: 5 #engines: 10 state: up
qat_dev1 - type: c6xx, inst_id: 1, node_id: 1, bsf: 0000:ce:00.0, #accel: 5 #engines: 10 state: up
qat_dev2 - type: c6xx, inst_id: 2, node_id: 1, bsf: 0000:d0:00.0, #accel: 5 #engines: 10 state: up
# 位置 quickassist/utilities/adf_ctl/conf_files
以QAT20.L.1.0.50-00003\quickassist\utilities\adf_ctl\conf_files\4xxx_template.conf为例
并参考programmer guide 进行配置
[GENERAL]
ServicesEnabled = asym;dc
ConfigVersion = 2
#Default values for number of concurrent requests*/
CyNumConcurrentSymRequests = 512
CyNumConcurrentAsymRequests = 64
#Statistics, valid values: 1,0
statsGeneral = 1
statsDh = 1
statsDrbg = 1
statsDsa = 1
statsEcc = 1
statsKeyGen = 1
statsDc = 1
statsLn = 1
statsPrime = 1
statsRsa = 1
statsSym = 1
# Default heartbeat timer is 1s
HeartbeatTimer = 1000
# This flag is to enable SSF features
StorageEnabled = 0
# Disable public key crypto and prime number
# services by specifying a value of 1 (default is 0)
PkeServiceDisabled = 0
# This flag is to enable device auto reset on heartbeat error
AutoResetOnError = 0
# Default value for power management idle interrrupt delay
PmIdleInterruptDelay = 512
# This flag is to enable power management idle support
PmIdleSupport = 1
# This flag is to enable key protection technology
KptEnabled = 1
# Define the maximum SWK count per function can have
# Default value is 1, the maximum value is 128
KptMaxSWKPerFn = 1
# Define the maximum SWK count per pasid can have
# Default value is 1, the maximum value is 128
KptMaxSWKPerPASID = 1
# Define the maximum SWK lifetime in second
# Default value is 0 (eternal of life)
# The maximum value is 31536000 (one year)
KptMaxSWKLifetime = 31536000
# Flag to define whether to allow SWK to be shared among processes
# Default value is 0 (shared mode is off)
KptSWKShared = 0
# Disable AT
ATEnabled = 0
##############################################
# Kernel Instances Section
##############################################
[KERNEL]
NumberCyInstances = 0
NumberDcInstances = 0
##############################################
# ADI Section for Scalable IOV
##############################################
[SIOV]
NumberAdis = 0
##############################################
# User Process Instance Section
##############################################
[SSL]
NumberCyInstances = 2
NumberDcInstances = 2
NumProcesses = 1
LimitDevAccess = 0
# Crypto - User instance #0
Cy0Name = "SSL0"
Cy0IsPolled = 1
# List of core affinities
Cy0CoreAffinity = 0
# Crypto - User instance #1
Cy1Name = "SSL1"
Cy1IsPolled = 1
# List of core affinities
Cy1CoreAffinity = 1
# Data Compression - User instance #0
Dc0Name = "Dc0"
Dc0IsPolled = 1
# List of core affinities
Dc0CoreAffinity = 2
# Data Compression - User instance #1
Dc1Name = "Dc1"
Dc1IsPolled = 1
# List of core affinities
Dc1CoreAffinity = 3