注意
本文档适用于 Ceph 的开发版本。
UADK 加速压缩
UADK 是一个框架,使应用程序能够以统一、安全和高效的方式访问硬件加速器。UADK 由 UACCE、libwd 和许多其他算法库组成。
软件堆栈中的 UADK
UADK 是一个通用的用户空间加速器框架,它使用共享虚拟寻址 (SVA) 为加密和压缩算法的硬件加速提供统一的编程接口。
UADK 包括统一/用户空间访问加速器框架 (UACCE),它使支持 SVA 的硬件加速器能够适应 UADK。
目前,海思鲲鹏硬件加速器已经注册到 UACCE。通过 UADK 框架,用户可以使用硬件加速器而不是 CPU 来运行加密和压缩算法,从而释放 CPU 计算能力并提高计算性能。
用户可以通过对字符设备执行用户模式操作来访问硬件加速器,或者通过其他已启用 UADK 支持的框架(例如 OpenSSL* libcrypto*、DPDK 和 Linux* 内核加密框架)来实现 UADK 的使用。
UADK 环境设置
UADK 由 UACCE、供应商驱动程序和算法层组成。UADK 要求硬件加速器支持 SVA,并且操作系统支持 IOMMU 和 SVA。内核模式驱动程序将硬件加速器注册为 UACCE 的不同字符设备。
+----------------------------------+
| apps |
+----+------------------------+----+
| |
| |
+-------+--------+ +-------+-------+
| scheduler | | alg libraries |
+-------+--------+ +-------+-------+
| |
| |
| |
| +--------+------+
| | vendor drivers|
| +-+-------------+
| |
| |
+--+------------------+--+
| libwd |
User +----+-------------+-----+
--------------------------------------------------
Kernel +--+-----+ +------+
| uacce | | smmu |
+---+----+ +------+
|
+---+------------------+
| vendor kernel driver |
+----------------------+
--------------------------------------------------
+----------------------+
| HW Accelerators |
+----------------------+
配置
内核要求
用户必须确保正在使用的 Linux 内核版本支持 UACCE,该版本应为 5.9 或更高版本,并启用 SVA(共享虚拟寻址)。
UACCE 可以构建为可加载模块或内置到内核中。这是一个为海思鲲鹏平台构建带硬件加速器的 UACCE 的示例。
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
确保选择了所有上述内核配置。
#. UADK 启用如果架构是 aarch64,它将自动下载 UADK 源代码来构建静态库。在其他 CPU 架构上构建时,用户可以通过在编译命令行选项中添加 -DWITH_UADK=true 来启用 UADK。请注意,UADK 可能不兼容所有架构。
#. 手动构建 UADK 如上所述,如果架构是 aarch64,UADK 会自动启用,无需手动构建。但是,下面我们提供了手动构建 UADK 的过程,以便开发人员可以研究其构建方式。
git clone https://github.com/Linaro/uadk.git cd uadk mkdir build ./autogen.sh ./configure --prefix=$PWD/build make make install注意
如果没有
--prefix,UADK 将默认安装在/usr/local/lib下。如果出现错误:cannot find -lnuma,请安装libnuma-dev包。
配置
编辑 Ceph 配置文件(通常是
ceph.conf)以启用 zlib 压缩的 UADK 支持uadk_compressor_enabled=true
global.yaml.in 中 uadk_compressor_enabled 的默认值为
false。