7. UADK Compression Poll Mode Driver

UADK compression PMD provides poll mode compression & decompression driver. All compression operations are using UADK library compression API, which is algorithm-level API, abstracting accelerators’ low-level implementations.

UADK compression PMD relies on UADK library.

UADK is a framework for user applications to access hardware accelerators. UADK relies on IOMMU SVA (Shared Virtual Address) feature, which shares the same page table between IOMMU and MMU. As a result, the user application can directly use the virtual address for device DMA, which enhances performance as well as easy usability.

7.1. Features

UADK compression PMD has support for:

Compression/Decompression algorithm:

  • DEFLATE - using Fixed and Dynamic Huffman encoding

Window size support:

  • 32K

7.2. Test steps

  1. Build UADK

    git clone https://github.com/Linaro/uadk.git
    cd uadk
    mkdir build
    ./autogen.sh
    ./configure --prefix=$PWD/build
    make
    make install
    

    Note

    Without --prefix, UADK will be installed to /usr/local/lib by default.

    Note

    If get error: “cannot find -lnuma”, please install the libnuma-dev.

  2. Run pkg-config libwd to ensure env is setup correctly

    export PKG_CONFIG_PATH=$PWD/build/lib/pkgconfig
    pkg-config libwd --cflags --libs -I/usr/local/include -L/usr/local/lib -lwd
    

    Note

    export PKG_CONFIG_PATH is required on demand, not needed if UADK is installed to /usr/local/lib.

  3. Build DPDK

    cd dpdk
    mkdir build
    meson setup build (--reconfigure)
    cd build
    ninja
    sudo ninja install
    
  4. Prepare hugepages for DPDK (see also dpdk-hugepages Application)

    echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
    echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
    echo 1024 > /sys/devices/system/node/node2/hugepages/hugepages-2048kB/nr_hugepages
    echo 1024 > /sys/devices/system/node/node3/hugepages/hugepages-2048kB/nr_hugepages
    mkdir -p /mnt/huge_2mb
    mount -t hugetlbfs none /mnt/huge_2mb -o pagesize=2MB
    
  5. Run test app

    sudo dpdk-test --vdev=compress_uadk
    RTE>>compressdev_autotest
    RTE>>quit