注意

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

加密和压缩的 QAT 加速

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

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

软件栈中的QAT

应用开发者可以通过QAT API访问快速辅助功能。QAT API是快速辅助技术的顶级API,并使客户应用程序和快速辅助加速驱动器之间的接口变得容易。

QAT API访问快速辅助驱动器,该驱动器反过来驱动快速辅助加速器硬件。快速辅助驱动器负责向应用程序软件暴露加速服务。

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

QAT环境设置

  1. 要使用加速加密和压缩服务,需要快速辅助加速器硬件。并且内核空间中的QAT驱动器必须被加载来驱动硬件。

树外的QAT驱动程序包可以从Intel快速辅助技术.

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

Note

树外的QAT驱动程序正在逐渐迁移到树内驱动程序+QATlib。

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

请参阅QATzip.

实现

  1. 基于QAT的RGW加密

OpenSSL对RGW加密的支持已经合并到Ceph中,Intel还提供了一个OpenSSL的QAT引擎。理论上,Ceph中的基于QAT的加密可以通过OpenSSL+QAT引擎直接支持。 for OpenSSL. Theoretically, QAT-based encryption in Ceph can be directly supported through the OpenSSl+QAT Engine.

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

  1. QAT对压缩的支持

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

配置

  1. 前提条件

    对于树外的QAT

    确保已安装版本为v1.7.L.4.14.0或更高的树外的QAT驱动程序。记得为你的QAT驱动程序包根目录设置一个环境变量。ICP_ROOT为你的QAT驱动程序包根目录设置一个环境变量。

    要启用基于QAT的加密和压缩,用户必须修改QAT配置文件。例如,对于Intel快速辅助适配器8970产品,修订c6xx_dev0/1/2.conf目录中的内容/etc/并保持它们相同。例如:

    #...
    # 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中必须启用Intel VT-d和SR-IOV参数。

    • 一些QATlib功能需要较新的内核驱动程序或固件版本。参见QATlib内核驱动程序版本.

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

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

    Note

    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时触发基于QAT的压缩时,必须配置以下CMake选项:

    ./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源代码,Cephcmake构建默认启用了qatlib和qatzip选项。我们的正常编译已经包括与QAT压缩器相关的代码。

    ./do_cmake.sh
    

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

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

    对于树外的QAT和树内的QAT

    编辑Ceph的中心配置DB或配置文件(通常为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内的最大会话数

type:

uint

default:

256

qat_compressor_busy_polling

设置QAT忙bolling以降低延迟,但可能会增加CPU使用率

type:

bool

default:

false

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.