2. ISA-L Compression Poll Mode Driver

The ISA-L PMD (librte_compress_isal) 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).

2.1. Features

ISA-L PMD has support for:

Compression/Decompression algorithm:


Huffman code type:



Window size support:

  • 32K


  • CRC32

  • ADLER32

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, op->output_chksum, 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.

Level guide:

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.

Table 2.2 Level mapping from Compressdev to ISA-L PMD.

Compressdev API Level

PMD Functionality

Internal ISA-L Level


No compression, Not Supported


Dynamic (Fast compression)



Dynamic (Higher compression ratio)



Dynamic (Best compression ratio)

3 (Level 2 if no AVX512/AVX2)


Dynamic (Best compression ratio)

Same as above


Dynamic (Best compression ratio)

Same as above


Dynamic (Best compression ratio)

Same as above


Dynamic (Best compression ratio)

Same as above


Dynamic (Best compression ratio)

Same as above


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.

2.2. Limitations

  • Compressdev level 0, no compression, is not supported.

2.3. Installation

  • 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:

    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/

2.4. Initialization

To use the PMD in an application, user must:

  • Call rte_vdev_init("compress_isal") within the application.

  • Use --vdev="compress_isal" in the EAL options, which will call rte_vdev_init() internally.

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).