Notice

This document is for a development version of Ceph.

UADK Acceleration for Compression

UADK is a framework that makes it possible for applications to access hardware accelerators in a unified, secure, and efficient way. UADK is comprised of UACCE, libwd, and many other algorithm libraries.

See Compressor UADK Support.

UADK in the Software Stack

UADK is a general-purpose user space accelerator framework that uses Shared Virtual Addressing (SVA) to provide a unified programming interface for hardware acceleration of cryptographic and compression algorithms.

UADK includes Unified/User-space-access-intended Accelerator Framework (UACCE), which enables hardware accelerators that support SVA to adapt to UADK.

Currently, HiSilicon Kunpeng hardware accelerators have been registered with UACCE. Through the UADK framework, users can run cryptographic and compression algorithms using hardware accelerators instead of CPUs, which frees up CPU computing power and improves computing performance.

Users can access the hardware accelerators by performing user-mode operations on the character devices, or the use of UADK can be achieved via frameworks that have been enabled by others including UADK support (for example, OpenSSL* libcrypto*, DPDK, and the Linux* Kernel Crypto Framework).

See OpenSSL UADK Engine.

UADK Environment Setup

UADK consists of UACCE, vendor drivers, and an algorithm layer. UADK requires the hardware accelerator to support SVA, and the operating system to support IOMMU and SVA. Hardware accelerators are registered as different character devices with UACCE by kernel-mode drivers.

      +----------------------------------+
      |                apps              |
      +----+------------------------+----+
           |                        |
           |                        |
   +-------+--------+       +-------+-------+
   |   scheduler    |       | alg libraries |
   +-------+--------+       +-------+-------+
           |                         |
           |                         |
           |                         |
           |                +--------+------+
           |                | vendor drivers|
           |                +-+-------------+
           |                  |
           |                  |
        +--+------------------+--+
        |         libwd          |
User    +----+-------------+-----+
--------------------------------------------------
Kernel    +--+-----+   +------+
          | uacce  |   | smmu |
          +---+----+   +------+
              |
          +---+------------------+
          | vendor kernel driver |
          +----------------------+
--------------------------------------------------
         +----------------------+
         |   HW Accelerators    |
         +----------------------+

Configuration

  1. Kernel Requirement

Users must ensure that UACCE is supported by the Linux kernel release in use, which should be 5.9 or later with SVA (Shared Virtual Addressing) enabled.

UACCE may be built as a loadable module or built into the kernel. Here’s an example to build UACCE with hardware accelerators for the HiSilicon Kunpeng platform.

CONFIG_IOMMU_SVA_LIB=y
CONFIG_ARM_SMMU=y
CONFIG_ARM_SMMU_V3=y
CONFIG_ARM_SMMU_V3_SVA=y
CONFIG_PCI_PASID=y
CONFIG_UACCE=y
CONFIG_CRYPTO_DEV_HISI_QM=y
CONFIG_CRYPTO_DEV_HISI_ZIP=y

Make sure all these above kernel configurations are selected.

#. UADK enablement If the architecture is aarch64, it will automatically download the UADK source code to build the static library. When building on other CPU architectures, the user may enable UADK by adding -DWITH_UADK=true to the compilation command line options. Note that UADK may not be compatible with all architectures.

#. Manually Building UADK As implied in the above paragraph, if the architecture is aarch64, the UADK is enabled automatically and there is no need to build it manually. However, below we provide the procedure for manually building UADK so that developers can study how it is built.

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 under /usr/local/lib by default. If you get the error: cannot find -lnuma, install the libnuma-dev package.

  1. Configure

    Edit the Ceph configuration file (usually ceph.conf) to enable UADK support for zlib compression:

    uadk_compressor_enabled=true
    

    The default value in global.yaml.in for uadk_compressor_enabled is false.

Brought to you by the Ceph Foundation

The Ceph Documentation is a community resource funded and hosted by the non-profit Ceph Foundation. If you would like to support this and our other efforts, please consider joining now.