注意

本文档适用于 Ceph 的开发版本。

加密和压缩的QAT加速

英特尔QAT(QuickAssist Technology,快速辅助技术)可以通过将实际的加密和压缩请求卸载到硬件QuickAssist加速器来提供扩展的加速加密和压缩服务。对于这些计算密集型工作负载,QuickAssist加速器在成本和功耗方面比通用CPU更高效。

请参阅QAT 压缩支持基于QAT的RGW加密

软件堆栈中的QAT

应用程序开发人员可以通过QAT API访问QuickAssist功能。QAT API是QuickAssist技术的顶层API,可实现客户应用程序与QuickAssist加速驱动程序之间的轻松接口。

QAT API访问QuickAssist驱动程序,该驱动程序又驱动QuickAssist加速器硬件。QuickAssist驱动程序负责向应用程序软件公开加速服务。

用户可以直接编写QAT API,也可以通过其他人(包括英特尔)启用的框架使用QAT(例如,zlib*、OpenSSL* libcrypto* 和 Linux* 内核加密框架)。

QAT环境设置

  1. QuickAssist加速器硬件是使用加速加密和压缩服务所必需的。并且必须加载内核空间中的QAT驱动程序来驱动硬件。

开箱即用的QAT驱动程序包可以从英特尔Quickassist技术下载。

QATlib可以从qatlib下载,它用于树内QAT驱动程序。

注意

开箱即用的QAT驱动程序正在逐步迁移到树内驱动程序+QATlib。

  1. 基于QAT的加密实现直接基于QAT API,该API包含在驱动程序包中。然而,QAT对压缩的支持依赖于QATzip项目,这是一个基于QAT API构建的用户空间库。在撰写本文时(2024年7月),QATzip加速了gzip的压缩和解压缩。

请参阅QATzip

实施

  1. 基于QAT的RGW加密

OpenSSL对RGW加密的支持已合并到Ceph中,英特尔还为OpenSSL提供了QAT引擎。从理论上讲,Ceph中基于QAT的加密可以通过OpenSSl+QAT引擎直接支持。

然而,用于OpenSSL的QAT引擎目前仅支持链式操作,这意味着Ceph将无法利用基于OpenSSL加密插件的加密操作的QAT硬件功能。因此,在加密框架中添加了一个基于原生QAT API的QAT插件。

  1. QAT压缩支持

如上所述,QAT对压缩的支持基于用户空间中的QATzip库,该库旨在充分利用QuickAssist技术提供的性能。与基于QAT的加密不同,基于QAT的压缩是通过用于QAT加速的工具类而不是压缩器插件来支持的。这个通用工具类可以透明地加速现有的压缩类型,但在撰写本文时仅支持zlib压缩器。这意味着如果QAT硬件可用,此工具类可用于加速zlib压缩器。

配置

  1. Prerequisites

    对于开箱即用的QAT

    确保已安装版本为v1.7.L.4.14.0或更高的开箱即用QAT驱动程序。请记住为QAT驱动程序包根目录设置环境变量ICP_ROOT

    要启用基于QAT的加密和压缩,用户必须修改QAT配置文件。例如,对于英特尔QuickAssist Adapter 8970产品,修改目录/etc/中的c6xx_dev0/1/2.conf并保持它们相同。例如

    #...
    # User Process Instance Section
    ##############################################
    [CEPH]
    NumberCyInstances = 1
    NumberDcInstances = 1
    NumProcesses = 8
    LimitDevAccess = 1
    # Crypto - User instance #0
    Cy0Name = "SSL0"
    Cy0IsPolled = 1
    # List of core affinities
    Cy0CoreAffinity = 0
    
    # Data Compression - User instance #0
    Dc0Name = "Dc0"
    Dc0IsPolled = 1
    # List of core affinities
    Dc0CoreAffinity = 0
    

    对于树内QAT

    使用QATlib有一些先决条件。确保您的系统满足QATlib系统要求

    • 为了正确使用QATlib库,必须在平台BIOS中启用英特尔VT-d和SR-IOV参数。

    • 某些QATlib功能需要较新的内核驱动程序或固件版本。请参阅QATlib内核驱动程序版本

    • 支持的平台包含4xxx英特尔通信设备或更新的版本。

    • 必须启用intel_iommu参数。通过运行以下命令来验证是否启用了此设置

      cat /proc/cmdline | grep intel_iommu=on
      sudo sh -c 'echo "@qat - memlock 204800" >> /etc/security/limits.conf'
      sudo su -l $USER
      

    有关配置和调整,请参阅QATlib配置和调整

  2. 基于QAT的RGW加密

    必须设置CMake选项WITH_QATDRV=ON。如果您从源代码构建Ceph(请参阅:构建Ceph),请导航到克隆的Ceph存储库并执行以下操作

    cd ceph
    ./do_cmake.sh -DWITH_QATDRV=ON
    cd build
    ininja
    

    注意

    QAT配置文件中的节名称必须为CEPH,因为在Ceph加密源代码中节名称设置为CEPH

    编辑Ceph配置文件(通常是ceph.conf)以使用基于QAT的加密插件

    plugin crypto accelerator = crypto_qat
    
  3. QAT压缩支持

    对于开箱即用的QAT

    对于开箱即用的QAT驱动程序包,在构建之前确保已安装QAT驱动程序和QATzip。除了ICP_ROOT之外,将环境变量QZ_ROOT设置为QATzip源代码树的根目录。

    构建Ceph时必须配置以下CMake选项以触发基于QAT的压缩

    ./do_cmake.sh -DWITH_QATDRV=ON -DWITH_QATZIP=ON -DWITH_SYSTEM_QATZIP=ON -DWITH_QATLIB=OFF
    

    设置环境变量以阐明QAT配置文件中用户进程实例节的名称。例如

    export QAT_SECTION_NAME=CEPH
    

    对于树内QAT

    对于树内QAT,确保您的系统满足QATlib系统要求。QATlib可以从预构建包或源代码安装。请参阅QATlib安装。安装QATlib后,您可以运行cpa_sample_code来检查QAT环境是否正常。

    如果您使用的是QATlib源代码,Ceph cmake 构建默认启用qatlib和qatzip选项。我们的正常编译已经包括与QAT压缩器相关的代码。

    ./do_cmake.sh
    

    如果您使用的是安装在系统上的预构建包,则在构建Ceph时必须配置以下CMake选项

    ./do_cmake.sh -DWITH_SYSTEM_QATLIB=ON -DWITH_SYSTEM_QATZIP=ON
    

    对于开箱即用QAT和树内QAT

    编辑Ceph的中心配置数据库或配置文件(通常是ceph.conf)以启用对zlib压缩的QAT支持

    qat compressor enabled=true
    

    设置RGW压缩方法

    # for storage class(STANDARD)
    radosgw-admin zone placement modify --rgw-zone=default --placement-id=default-placement --compression=zlib
    # or create a new storage class(COLD) and define data pool(default.rgw.cold.data)
    radosgw-admin zonegroup placement add --rgw-zonegroup default --placement-id default-placement --storage-class COLD
    radosgw-admin zone placement add --rgw-zone default --placement-id default-placement --storage-class COLD --compression zlib --data-pool default.rgw.cold.data
    

配置参考

以下与QAT相关的设置可以添加到Ceph配置文件(通常是ceph.conf)的[client.rgw.{instance-name}]节中。

qat_compressor_session_max_number

使用QAT压缩器时,设置Qatzip中会话的最大数量

类型:

uint

默认值:

256

qat_compressor_busy_polling

设置QAT忙轮询以减少延迟,代价是可能增加CPU使用率

类型:

bool

默认值:

false

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入