doc: add QAT compression guide
Extend QAT guide to cover crypto and compression and common information, particularly about kernel driver dependency. Update release note. Update compression feature list for qat. Signed-off-by: Fiona Trahe <fiona.trahe@intel.com>
This commit is contained in:
parent
2519de891e
commit
bb44fb6fe7
@ -491,7 +491,7 @@ CONFIG_RTE_LIBRTE_PMD_DPAA_SEC=n
|
|||||||
CONFIG_RTE_LIBRTE_DPAA_MAX_CRYPTODEV=4
|
CONFIG_RTE_LIBRTE_DPAA_MAX_CRYPTODEV=4
|
||||||
|
|
||||||
#
|
#
|
||||||
# Compile PMD for QuickAssist based devices
|
# Compile PMD for QuickAssist based devices - see docs for details
|
||||||
#
|
#
|
||||||
CONFIG_RTE_LIBRTE_PMD_QAT=y
|
CONFIG_RTE_LIBRTE_PMD_QAT=y
|
||||||
CONFIG_RTE_LIBRTE_PMD_QAT_SYM=n
|
CONFIG_RTE_LIBRTE_PMD_QAT_SYM=n
|
||||||
|
12
doc/guides/compressdevs/features/qat.ini
Normal file
12
doc/guides/compressdevs/features/qat.ini
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
;
|
||||||
|
; Refer to default.ini for the full list of available PMD features.
|
||||||
|
;
|
||||||
|
; Supported features of 'QAT' compression driver.
|
||||||
|
;
|
||||||
|
[Features]
|
||||||
|
HW Accelerated = Y
|
||||||
|
Deflate = Y
|
||||||
|
Adler32 = Y
|
||||||
|
Crc32 = Y
|
||||||
|
Adler32&Crc32 = Y
|
||||||
|
Fixed = Y
|
@ -11,3 +11,4 @@ Compression Device Drivers
|
|||||||
|
|
||||||
overview
|
overview
|
||||||
isal
|
isal
|
||||||
|
qat_comp
|
||||||
|
49
doc/guides/compressdevs/qat_comp.rst
Normal file
49
doc/guides/compressdevs/qat_comp.rst
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
.. SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
Copyright(c) 2018 Intel Corporation.
|
||||||
|
|
||||||
|
Intel(R) QuickAssist (QAT) Compression Poll Mode Driver
|
||||||
|
=======================================================
|
||||||
|
|
||||||
|
The QAT compression PMD provides poll mode compression & decompression driver
|
||||||
|
support for the following hardware accelerator devices:
|
||||||
|
|
||||||
|
* ``Intel QuickAssist Technology C62x``
|
||||||
|
* ``Intel QuickAssist Technology C3xxx``
|
||||||
|
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
QAT compression PMD has support for:
|
||||||
|
|
||||||
|
Compression/Decompression algorithm:
|
||||||
|
|
||||||
|
* DEFLATE
|
||||||
|
|
||||||
|
Huffman code type:
|
||||||
|
|
||||||
|
* FIXED
|
||||||
|
|
||||||
|
Window size support:
|
||||||
|
|
||||||
|
* 32K
|
||||||
|
|
||||||
|
Checksum generation:
|
||||||
|
|
||||||
|
* CRC32, Adler and combined checksum
|
||||||
|
|
||||||
|
Limitations
|
||||||
|
-----------
|
||||||
|
|
||||||
|
* Chained mbufs are not yet supported, therefore max data size which can be passed to the PMD in a single mbuf is 64K - 1. If data is larger than this it will need to be split up and sent as multiple operations.
|
||||||
|
|
||||||
|
* Compressdev level 0, no compression, is not supported.
|
||||||
|
|
||||||
|
* Dynamic Huffman encoding is not yet supported.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
The QAT compression PMD is built by default with a standard DPDK build.
|
||||||
|
|
||||||
|
It depends on a QAT kernel driver, see :ref:`qat_kernel_installation`.
|
@ -68,12 +68,32 @@ Limitations
|
|||||||
* Queue pairs are not thread-safe (that is, within a single queue pair, RX and TX from different lcores is not supported).
|
* Queue pairs are not thread-safe (that is, within a single queue pair, RX and TX from different lcores is not supported).
|
||||||
|
|
||||||
|
|
||||||
Installation
|
Extra notes on KASUMI F9
|
||||||
------------
|
------------------------
|
||||||
|
|
||||||
To enable QAT in DPDK, follow the instructions for modifying the compile-time
|
When using KASUMI F9 authentication algorithm, the input buffer must be
|
||||||
|
constructed according to the 3GPP KASUMI specifications (section 4.4, page 13):
|
||||||
|
`<http://cryptome.org/3gpp/35201-900.pdf>`_.
|
||||||
|
Input buffer has to have COUNT (4 bytes), FRESH (4 bytes), MESSAGE and DIRECTION (1 bit)
|
||||||
|
concatenated. After the DIRECTION bit, a single '1' bit is appended, followed by
|
||||||
|
between 0 and 7 '0' bits, so that the total length of the buffer is multiple of 8 bits.
|
||||||
|
Note that the actual message can be any length, specified in bits.
|
||||||
|
|
||||||
|
Once this buffer is passed this way, when creating the crypto operation,
|
||||||
|
length of data to authenticate (op.sym.auth.data.length) must be the length
|
||||||
|
of all the items described above, including the padding at the end.
|
||||||
|
Also, offset of data to authenticate (op.sym.auth.data.offset)
|
||||||
|
must be such that points at the start of the COUNT bytes.
|
||||||
|
|
||||||
|
|
||||||
|
Building the DPDK QAT cryptodev PMD
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
To enable QAT crypto in DPDK, follow the instructions for modifying the compile-time
|
||||||
configuration file as described `here <http://dpdk.org/doc/guides/linux_gsg/build_dpdk.html>`_.
|
configuration file as described `here <http://dpdk.org/doc/guides/linux_gsg/build_dpdk.html>`_.
|
||||||
|
|
||||||
|
|
||||||
Quick instructions are as follows:
|
Quick instructions are as follows:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
@ -81,29 +101,95 @@ Quick instructions are as follows:
|
|||||||
cd to the top-level DPDK directory
|
cd to the top-level DPDK directory
|
||||||
make config T=x86_64-native-linuxapp-gcc
|
make config T=x86_64-native-linuxapp-gcc
|
||||||
sed -i 's,\(CONFIG_RTE_LIBRTE_PMD_QAT\)=n,\1=y,' build/.config
|
sed -i 's,\(CONFIG_RTE_LIBRTE_PMD_QAT\)=n,\1=y,' build/.config
|
||||||
|
sed -i 's,\(CONFIG_RTE_LIBRTE_PMD_QAT_SYM\)=n,\1=y,' build/.config
|
||||||
make
|
make
|
||||||
|
|
||||||
To use the DPDK QAT PMD an SRIOV-enabled QAT kernel driver is required. The VF
|
|
||||||
devices exposed by this driver will be used by the QAT PMD. The devices and
|
.. _qat_kernel_installation:
|
||||||
available kernel drivers and device ids are :
|
|
||||||
|
Dependency on the QAT kernel driver
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
To use the QAT PMD an SRIOV-enabled QAT kernel driver is required. The VF
|
||||||
|
devices created and initialised by this driver will be used by the QAT PMD.
|
||||||
|
|
||||||
|
Instructions for installation are below, but first an explanation of the
|
||||||
|
relationships between the PF/VF devices and the PMDs visible to
|
||||||
|
DPDK applications.
|
||||||
|
|
||||||
|
|
||||||
|
Acceleration services - cryptography and compression - are provided to DPDK
|
||||||
|
applications via PMDs which register to implement the corresponding
|
||||||
|
cryptodev and compressdev APIs.
|
||||||
|
|
||||||
|
Each QuickAssist VF device can expose one cryptodev PMD and/or one compressdev PMD.
|
||||||
|
These QAT PMDs share the same underlying device and pci-mgmt code, but are
|
||||||
|
enumerated independently on their respective APIs and appear as independent
|
||||||
|
devices to applications.
|
||||||
|
|
||||||
|
.. Note::
|
||||||
|
|
||||||
|
Each VF can only be used by one DPDK process. It is not possible to share
|
||||||
|
the same VF across multiple processes, even if these processes are using
|
||||||
|
different acceleration services.
|
||||||
|
|
||||||
|
Conversely one DPDK process can use one or more QAT VFs and can expose both
|
||||||
|
cryptodev and compressdev instances on each of those VFs.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Device and driver naming
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
* The qat cryptodev driver name is "crypto_qat".
|
||||||
|
The rte_cryptodev_devices_get() returns the devices exposed by this driver.
|
||||||
|
|
||||||
|
* Each qat crypto device has a unique name, in format
|
||||||
|
<pci bdf>_<service>, e.g. "0000:41:01.0_qat_sym".
|
||||||
|
This name can be passed to rte_cryptodev_get_dev_id() to get the device_id.
|
||||||
|
|
||||||
|
.. Note::
|
||||||
|
|
||||||
|
The qat crypto driver name is passed to the dpdk-test-crypto-perf tool in the -devtype parameter.
|
||||||
|
|
||||||
|
The qat crypto device name is in the format of the slave parameter passed to the crypto scheduler.
|
||||||
|
|
||||||
|
* The qat compressdev driver name is "comp_qat".
|
||||||
|
The rte_compressdev_devices_get() returns the devices exposed by this driver.
|
||||||
|
|
||||||
|
* Each qat compression device has a unique name, in format
|
||||||
|
<pci bdf>_<service>, e.g. "0000:41:01.0_qat_comp".
|
||||||
|
This name can be passed to rte_compressdev_get_dev_id() to get the device_id.
|
||||||
|
|
||||||
|
|
||||||
|
Available kernel drivers
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
Kernel drivers for each device are listed in the following table. Scroll right
|
||||||
|
to check that the driver and device supports the servic you require.
|
||||||
|
|
||||||
|
|
||||||
.. _table_qat_pmds_drivers:
|
.. _table_qat_pmds_drivers:
|
||||||
|
|
||||||
.. table:: QAT device generations, devices and drivers
|
.. table:: QAT device generations, devices and drivers
|
||||||
|
|
||||||
+-----+----------+--------+---------------+------------+--------+------+--------+--------+
|
+-----+----------+---------------+---------------+------------+--------+------+--------+--------+-----------+-------------+
|
||||||
| Gen | Device | Driver | Kernel Module | Pci Driver | PF Did | #PFs | Vf Did | VFs/PF |
|
| Gen | Device | Driver/ver | Kernel Module | Pci Driver | PF Did | #PFs | VF Did | VFs/PF | cryptodev | compressdev |
|
||||||
+=====+==========+========+===============+============+========+======+========+========+
|
+=====+==========+===============+===============+============+========+======+========+========+===========+=============+
|
||||||
| 1 | DH895xCC | 01.org | icp_qa_al | n/a | 435 | 1 | 443 | 32 |
|
| 1 | DH895xCC | linux/4.4+ | qat_dh895xcc | dh895xcc | 435 | 1 | 443 | 32 | Yes | No |
|
||||||
+-----+----------+--------+---------------+------------+--------+------+--------+--------+
|
+-----+----------+---------------+---------------+------------+--------+------+--------+--------+-----------+-------------+
|
||||||
| 1 | DH895xCC | 4.4+ | qat_dh895xcc | dh895xcc | 435 | 1 | 443 | 32 |
|
| " | " | 01.org/4.2.0+ | " | " | " | " | " | " | Yes | No |
|
||||||
+-----+----------+--------+---------------+------------+--------+------+--------+--------+
|
+-----+----------+---------------+---------------+------------+--------+------+--------+--------+-----------+-------------+
|
||||||
| 2 | C62x | 4.5+ | qat_c62x | c6xx | 37c8 | 3 | 37c9 | 16 |
|
| 2 | C62x | linux/4.5+ | qat_c62x | c6xx | 37c8 | 3 | 37c9 | 16 | Yes | No |
|
||||||
+-----+----------+--------+---------------+------------+--------+------+--------+--------+
|
+-----+----------+---------------+---------------+------------+--------+------+--------+--------+-----------+-------------+
|
||||||
| 2 | C3xxx | 4.5+ | qat_c3xxx | c3xxx | 19e2 | 1 | 19e3 | 16 |
|
| " | " | 01.org/4.2.0+ | " | " | " | " | " | " | Yes | Yes |
|
||||||
+-----+----------+--------+---------------+------------+--------+------+--------+--------+
|
+-----+----------+---------------+---------------+------------+--------+------+--------+--------+-----------+-------------+
|
||||||
| 2 | D15xx | p | qat_d15xx | d15xx | 6f54 | 1 | 6f55 | 16 |
|
| 2 | C3xxx | linux/4.5+ | qat_c3xxx | c3xxx | 19e2 | 1 | 19e3 | 16 | Yes | No |
|
||||||
+-----+----------+--------+---------------+------------+--------+------+--------+--------+
|
+-----+----------+---------------+---------------+------------+--------+------+--------+--------+-----------+-------------+
|
||||||
|
| " | " | 01.org/4.2.0+ | " | " | " | " | " | " | Yes | Yes |
|
||||||
|
+-----+----------+---------------+---------------+------------+--------+------+--------+--------+-----------+-------------+
|
||||||
|
| 2 | D15xx | p | qat_d15xx | d15xx | 6f54 | 1 | 6f55 | 16 | Yes | No |
|
||||||
|
+-----+----------+---------------+---------------+------------+--------+------+--------+--------+-----------+-------------+
|
||||||
|
|
||||||
|
|
||||||
The ``Driver`` column indicates either the Linux kernel version in which
|
The ``Driver`` column indicates either the Linux kernel version in which
|
||||||
@ -196,9 +282,9 @@ Consult the *Getting Started Guide* at the same URL for further information.
|
|||||||
|
|
||||||
The steps below assume you are:
|
The steps below assume you are:
|
||||||
|
|
||||||
* Building on a platform with one ``DH895xCC`` device.
|
* Building on a platform with one ``C62x`` device.
|
||||||
* Using package ``qatmux.l.2.3.0-34.tgz``.
|
* Using package ``qat1.7.l.4.2.0-000xx.tar.gz``.
|
||||||
* On Fedora21 kernel ``3.17.4-301.fc21.x86_64``.
|
* On Fedora26 kernel ``4.11.11-300.fc26.x86_64``.
|
||||||
|
|
||||||
In the BIOS ensure that SRIOV is enabled and VT-d is disabled.
|
In the BIOS ensure that SRIOV is enabled and VT-d is disabled.
|
||||||
|
|
||||||
@ -206,21 +292,30 @@ Uninstall any existing QAT driver, for example by running:
|
|||||||
|
|
||||||
* ``./installer.sh uninstall`` in the directory where originally installed.
|
* ``./installer.sh uninstall`` in the directory where originally installed.
|
||||||
|
|
||||||
* or ``rmmod qat_dh895xcc; rmmod intel_qat``.
|
|
||||||
|
|
||||||
Build and install the SRIOV-enabled QAT driver::
|
Build and install the SRIOV-enabled QAT driver::
|
||||||
|
|
||||||
mkdir /QAT
|
mkdir /QAT
|
||||||
cd /QAT
|
cd /QAT
|
||||||
|
|
||||||
# Copy qatmux.l.2.3.0-34.tgz to this location
|
# Copy the package to this location and unpack
|
||||||
tar zxof qatmux.l.2.3.0-34.tgz
|
tar zxof qat1.7.l.4.2.0-000xx.tar.gz
|
||||||
|
|
||||||
export ICP_WITHOUT_IOMMU=1
|
./configure --enable-icp-sriov=host
|
||||||
./installer.sh install QAT1.6 host
|
make install
|
||||||
|
|
||||||
|
You can use ``cat /sys/kernel/debug/qat<your device type and bdf>/version/fw`` 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<your device type and bdf>/version/fw
|
||||||
|
|
||||||
|
|
||||||
|
Confirm the presence of 48 VF devices - 16 per PF::
|
||||||
|
|
||||||
|
lspci -d:37c9
|
||||||
|
|
||||||
You can use ``cat /proc/icp_dh895xcc_dev0/version`` to confirm the driver is correctly installed.
|
|
||||||
You can use ``lspci -d:443`` to confirm the of the 32 VF devices available per ``DH895xCC`` device.
|
|
||||||
|
|
||||||
To complete the installation - follow instructions in `Binding the available VFs to the DPDK UIO driver`_.
|
To complete the installation - follow instructions in `Binding the available VFs to the DPDK UIO driver`_.
|
||||||
|
|
||||||
@ -261,6 +356,7 @@ To complete the installation - follow instructions in `Binding the available VFs
|
|||||||
|
|
||||||
sudo yum install zlib-devel
|
sudo yum install zlib-devel
|
||||||
sudo yum install openssl-devel
|
sudo yum install openssl-devel
|
||||||
|
sudo yum install libudev-devel
|
||||||
|
|
||||||
.. Note::
|
.. Note::
|
||||||
|
|
||||||
@ -343,35 +439,6 @@ Another way to bind the VFs to the DPDK UIO driver is by using the
|
|||||||
./usertools/dpdk-devbind.py -b igb_uio 0000:03:01.1
|
./usertools/dpdk-devbind.py -b igb_uio 0000:03:01.1
|
||||||
|
|
||||||
|
|
||||||
Extra notes on KASUMI F9
|
|
||||||
------------------------
|
|
||||||
|
|
||||||
When using KASUMI F9 authentication algorithm, the input buffer must be
|
|
||||||
constructed according to the 3GPP KASUMI specifications (section 4.4, page 13):
|
|
||||||
`<http://cryptome.org/3gpp/35201-900.pdf>`_.
|
|
||||||
Input buffer has to have COUNT (4 bytes), FRESH (4 bytes), MESSAGE and DIRECTION (1 bit)
|
|
||||||
concatenated. After the DIRECTION bit, a single '1' bit is appended, followed by
|
|
||||||
between 0 and 7 '0' bits, so that the total length of the buffer is multiple of 8 bits.
|
|
||||||
Note that the actual message can be any length, specified in bits.
|
|
||||||
|
|
||||||
Once this buffer is passed this way, when creating the crypto operation,
|
|
||||||
length of data to authenticate (op.sym.auth.data.length) must be the length
|
|
||||||
of all the items described above, including the padding at the end.
|
|
||||||
Also, offset of data to authenticate (op.sym.auth.data.offset)
|
|
||||||
must be such that points at the start of the COUNT bytes.
|
|
||||||
|
|
||||||
Device and driver naming
|
|
||||||
------------------------
|
|
||||||
|
|
||||||
The qat crypto driver name is "crypto_qat".
|
|
||||||
This name is passed to the dpdk-test-crypto-perf tool in the -devtype parameter.
|
|
||||||
The rte_cryptodev_devices_get() can return the devices exposed by a driver.
|
|
||||||
|
|
||||||
Each qat crypto device has a unique name, in format
|
|
||||||
<pci bdf>_<service>, e.g. "0000:41:01.0_qat_sym".
|
|
||||||
This name can be passed to rte_cryptodev_get_dev_id() to get the device_id.
|
|
||||||
This is also the format of the slave parameter passed to the crypto scheduler.
|
|
||||||
|
|
||||||
Debugging
|
Debugging
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
|
|
||||||
|
@ -74,6 +74,12 @@ New Features
|
|||||||
* Add handlers to add/delete VxLAN port number.
|
* Add handlers to add/delete VxLAN port number.
|
||||||
* Add devarg to specify ingress VLAN rewrite mode.
|
* Add devarg to specify ingress VLAN rewrite mode.
|
||||||
|
|
||||||
|
* **Added a new compression PMD using Intel's QuickAssist (QAT) device family.**
|
||||||
|
|
||||||
|
Added the new ``QAT`` compression driver, for compression and decompression
|
||||||
|
operations in software. See the :doc:`../compressdevs/qat_comp` compression
|
||||||
|
driver guide for details on this new driver.
|
||||||
|
|
||||||
|
|
||||||
API Changes
|
API Changes
|
||||||
-----------
|
-----------
|
||||||
|
Loading…
x
Reference in New Issue
Block a user