compress/mlx5: add supported capabilities

Add all the capabilities supported by the device.

Add the driver documentations.

Signed-off-by: Matan Azrad <matan@nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
This commit is contained in:
Matan Azrad 2021-01-20 11:29:35 +00:00 committed by Akhil Goyal
parent 37862dafcb
commit 384bac8d65
5 changed files with 136 additions and 2 deletions

View File

@ -0,0 +1,13 @@
;
; Refer to default.ini for the full list of available PMD features.
;
; Supported features of 'MLX5' compression driver.
;
[Features]
HW Accelerated = Y
Deflate = Y
Adler32 = Y
Crc32 = Y
Adler32&Crc32 = Y
Fixed = Y
Dynamic = Y

View File

@ -11,6 +11,7 @@ Compression Device Drivers
overview
isal
mlx5
octeontx
qat_comp
zlib

View File

@ -0,0 +1,94 @@
.. SPDX-License-Identifier: BSD-3-Clause
Copyright 2021 Mellanox Technologies, Ltd
.. include:: <isonum.txt>
MLX5 compress driver
====================
The MLX5 compress driver library
(**librte_compress_mlx5**) provides support for **Mellanox BlueField 2**
families of 25/50/100/200 Gb/s adapters.
Design
------
This PMD is configuring the compress, decompress amd DMA engines.
GGAs (Generic Global Accelerators) are offload engines that can be used
to do memory to memory tasks on data.
These engines are part of the ARM complex of the BlueField chip, and as
such they do not use NIC related resources (e.g. RX/TX bandwidth).
They do share the same PCI and memory bandwidth.
So, using the BlueField device (starting from BlueField 2), the compress
class operations can be supported in parallel to the net, vDPA and
RegEx class operations.
For security reasons and robustness, this driver only deals with virtual
memory addresses. The way resources allocations are handled by the kernel,
combined with hardware specifications that allow to handle virtual memory
addresses directly, ensure that DPDK applications cannot access random
physical memory (or memory that does not belong to the current process).
The PMD uses libibverbs and libmlx5 to access the device firmware
or directly the hardware components.
There are different levels of objects and bypassing abilities
to get the best performances:
- Verbs is a complete high-level generic API.
- Direct Verbs is a device-specific API.
- DevX allows to access firmware objects.
Enabling librte_compress_mlx5 causes DPDK applications to be linked against
libibverbs.
Mellanox mlx5 PCI device can be probed by number of different PCI devices,
for example net / vDPA / RegEx. To select the compress PMD ``class=compress``
should be specified as device parameter. The compress device can be probed and
used with other Mellanox classes, by adding more options in the class.
For example: ``class=net:compress`` will probe both the net PMD and the compress
PMD.
Features
--------
Compress mlx5 PMD has support for:
Compression/Decompression algorithm:
* DEFLATE.
NULL algorithm for DMA operations.
Huffman code type:
* FIXED.
* DYNAMIC.
Window size support:
1KB, 2KB, 4KB, 8KB, 16KB and 32KB.
Shareable transformation.
Checksum generation:
* CRC32, Adler32 and combined checksum.
Limitations
-----------
* Scatter-Gather, SHA and Stateful are not supported.
* Non-compressed block is not supported in compress (supported in decompress).
Supported NICs
--------------
* Mellanox\ |reg| BlueField 2 SmartNIC
Prerequisites
-------------
- Mellanox OFED version: **5.2**
see :doc:`../../nics/mlx5` guide for more Mellanox OFED details.

View File

@ -132,6 +132,12 @@ New Features
* Added support for aes-cbc sha256-128-hmac cipher combination in OCTEON TX2
crypto PMD lookaside protocol offload for IPsec.
* **Added mlx5 compress PMD.**
Added a new compress PMD driver for Bluefield 2 adapters.
See the :doc:`../compressdevs/mlx5` for more details.
Removed Items
-------------

View File

@ -76,8 +76,28 @@ static pthread_mutex_t priv_list_lock = PTHREAD_MUTEX_INITIALIZER;
int mlx5_compress_logtype;
const struct rte_compressdev_capabilities mlx5_caps[RTE_COMP_ALGO_LIST_END];
static const struct rte_compressdev_capabilities mlx5_caps[] = {
{
.algo = RTE_COMP_ALGO_NULL,
.comp_feature_flags = RTE_COMP_FF_ADLER32_CHECKSUM |
RTE_COMP_FF_CRC32_CHECKSUM |
RTE_COMP_FF_CRC32_ADLER32_CHECKSUM |
RTE_COMP_FF_SHAREABLE_PRIV_XFORM,
},
{
.algo = RTE_COMP_ALGO_DEFLATE,
.comp_feature_flags = RTE_COMP_FF_ADLER32_CHECKSUM |
RTE_COMP_FF_CRC32_CHECKSUM |
RTE_COMP_FF_CRC32_ADLER32_CHECKSUM |
RTE_COMP_FF_SHAREABLE_PRIV_XFORM |
RTE_COMP_FF_HUFFMAN_FIXED |
RTE_COMP_FF_HUFFMAN_DYNAMIC,
.window_size = {.min = 10, .max = 15, .increment = 1},
},
{
.algo = RTE_COMP_ALGO_LIST_END,
}
};
static void
mlx5_compress_dev_info_get(struct rte_compressdev *dev,