2. ISA-L Compression Poll Mode Driver
The ISA-L PMD (librte_pmd_isal_comp) provides poll mode compression & decompression driver support for utilizing Intel ISA-L library, which implements the deflate algorithm for both Deflate(compression) and Inflate(decompression).
ISA-L PMD has support for:
Huffman code type:
Window size support:
To enable a checksum in the driver, the compression and/or decompression xform structure, rte_comp_xform, must be filled with either of the CompressDev checksum flags supported.
compress_xform->compress.chksum = RTE_COMP_CHECKSUM_CRC32 decompress_xform->decompress.chksum = RTE_COMP_CHECKSUM_CRC32
compress_xform->compress.chksum = RTE_COMP_CHECKSUM_ADLER32 decompress_xform->decompress.chksum = RTE_COMP_CHECKSUM_ADLER32
If you request a checksum for compression or decompression,
the checksum field in the operation structure,
will be filled with the checksum.
For the compression case above, your output buffer will need to be large enough to hold the compressed data plus a scratchpad for the checksum at the end, the scratchpad is 8 bytes for CRC32 and 4 bytes for Adler32.
The ISA-L levels have been mapped to somewhat correspond to the same ZLIB level, i.e. ZLIB L1 gives a compression ratio similar to ISA-L L1. Compressdev level 0 enables “No Compression”, which passes the uncompressed data to the output buffer, plus deflate headers. The ISA-L library does not support this, therefore compressdev level 0 is not supported.
The compressdev API has 10 levels, 0-9. ISA-L has 4 levels of compression, 0-3. As a result the level mappings from the API to the PMD are shown below.
|Compressdev API Level||PMD Functionality||Internal ISA-L Level|
|0||No compression, Not Supported||—|
|1||Dynamic (Fast compression)||1|
|2||Dynamic (Higher compression ratio)||2|
|3||Dynamic (Best compression ratio)||3 (Level 2 if no AVX512/AVX2)|
|4||Dynamic (Best compression ratio)||Same as above|
|5||Dynamic (Best compression ratio)||Same as above|
|6||Dynamic (Best compression ratio)||Same as above|
|7||Dynamic (Best compression ratio)||Same as above|
|8||Dynamic (Best compression ratio)||Same as above|
|9||Dynamic (Best compression ratio)||Same as above|
The above table only shows mapping when API calls for dynamic compression. For fixed compression, regardless of API level, internally ISA-L level 0 is always used.
- Compressdev level 0, no compression, is not supported.
To build DPDK with Intel’s ISA-L library, the user is required to download the library from https://github.com/01org/isa-l.
Once downloaded, the user needs to build the library, the ISA-L autotools are usually sufficient:
make can be used to install the library on their system, before building DPDK:
make sudo make install
To build with meson, the libisal.pc file, must be copied into “pkgconfig”, e.g. /usr/lib/pkgconfig or /usr/lib64/pkgconfig depending on your system, for meson to find the ISA-L library. The libisal.pc is located in library sources:
cp isal/libisal.pc /usr/lib/pkgconfig/
In order to enable this virtual compression PMD, user must:
To use the PMD in an application, user must:
rte_vdev_init("compress_isal")within the application.
--vdev="compress_isal"in the EAL options, which will call
The following parameter (optional) can be provided in the previous two calls:
socket_id:Specify the socket where the memory for the device is going to be allocated (by default, socket_id will be the socket where the core that is creating the PMD is running on).