intel快速辅助技术(intel QAT)已扩展为通过intel 高级矢量扩展 512(intel AVX-512)系列中的指令提供基于软件的加密操作加速。 这种基于软件的加速已被整合到intel QAT Engine for OpenSSL 中,这是一个使用 OpenSSL ENGINE 框架的动态可加载模块,允许管理员将此功能添加到 OpenSSL,而无需重建或替换现有的 OpenSSL 库。
为以下算法提供软件加速:

  • RSA with 2048, 3072, and 4096 bit keys
  • ECDH for the Montgomery Curve X25519 and NIST Prime Curves P-256 and P-384
  • ECDSA for the NIST Prime Curves P-256 and P-384
  • AES-GCM with 128, 192, and 256 bit keys

    关于本指南

    本指南将引导你完成在以下 Linux 发行版上构建 Intel QAT Engine for OpenSSL 的过程,但它可以适应其他发行版。

  • CentOS Linux 8.2

  • Ubuntu* Server 20.04 LTS

提供了两种构建过程:一种使用发行版提供的 OpenSSL 构建,另一种使用从源代码构建的 OpenSSL 创建自定义安装。 每种方法都有其优点和缺点,你可以选择适合你的环境的方法。
使用发行版提供的 OpenSSL 意味着你在标准系统路径之外运行 OpenSSL 时的复杂性更低,但它会将你绑定到与操作系统集成的特定版本。
从源代码构建 OpenSSL 使你可以独立于发行版提供的构建来控制你部署的版本,并且可以根据需要执行版本更新,而不会中断系统操作。 然而,这种增加的灵活性是有代价的,因为你需要将 OpenSSL 二进制目录添加到 PATH 并更新 LD_LIBRARY_PATH 以包含 OpenSSL 及其依赖库的共享库目录。

使用发行版提供的 OpenSSL

本节介绍如何为你的操作系统发行版的预打包 OpenSSL 构建 Intel QAT Engine for OpenSSL。

构建要求

要为 OpenSSL 构建intel QAT engines,你需要确保默认发行版的 OpenSSL 版本为 1.1.1e 或更高版本,因为该engines与早期版本不兼容。 你可以通过运行以下命令检查你的 OpenSSL 版本:
openssl version
你还需要一些必备软件包才能构建engines及其依赖项。

Ubuntu 20.04 LTS

要在 Ubuntu 上构建 QAT engines及其依赖项,你需要从 apt 安装以下软件包:
sudo apt install autoconf build-essential libtool cmake cpuid libssl-dev
libssl-dev 包提供 OpenSSL 的头文件,并确保存在 OpenSSL 库。
你还需要安装 nasm 2.15 或更高版本,Ubuntu 20.04 发行版默认不提供该版本。 你必须手动获取并安装此软件包:
wget http://archive.ubuntu.com/ubuntu/pool/universe/n/nasm/nasm_2.15.04-1_amd64.deb
sudo dpkg -i nasm_2.15.04-1_amd64.deb

CentOS 8.2

CentOS 需要一些存储库更新才能安装必要的软件包。 具体来说,需要添加 Extra Packages for Enterprise Linux (EPEL) 存储库。
sudo dnf install epel-release
sudo dnf update
使用 dnf 安装以下软件包:
sudo dnf group install "Development Tools"
sudo dnf install cpuid cmake openssl-devel
openssl-devel 包提供 OpenSSL 的头文件,并确保存在 OpenSSL 库。
你还需要安装 nasm2.15 或更高版本,CentOS 8.2 发行版默认不提供该版本。 你必须手动获取并安装此软件包:
wget https://www.nasm.us/pub/nasm/releasebuilds/2.15.02/linux/nasm-2.15.02-0.fc31.x86_64.rpm
sudo rpm -i nasm-2.15.02-0.fc31.x86_64.rpm

运行时要求

要使用面向 OpenSSL 的intel QAT engines中的软件加速功能,你需要一个支持intel® AVX-512 并具有以下指令集扩展的系统:

  • AVX512F
  • AVX512_IFMA
  • VAES
  • VPCLMULQDQ

后两个扩展是在某些第 10 代 Intel® Core™ 处理器和第 3 代 Intel® Xeon® Scalable 处理器(以前代号为 Ice Lake 的产品)中引入的。 验证你的系统是否支持必要功能的一种快速方法是运行 cpuid 命令。 运行以下命令并检查输出是否匹配。
$ cpuid -1 | egrep 'VAES|VPCLM|GFNI|AVX512F|AVX512IFMA'
AVX512F: AVX-512 foundation instructions = true
AVX512IFMA: fused multiply add = true
VAES instructions = true
VPCLMULQDQ instruction = true
所有指令集都必须存在。
这些输出字段仅存在于 cpuid 版本 20200211 或更高版本中, 这是 Ubuntu 20.04 和 CentOS 8.2 中提供的默认版本。

为软件加速构建intel QAT OpenSSL Engines

intel QAT Engine for OpenSSL 中的软件加速支持取决于以下两个库。 它们必须先构建,无先后顺序:

安装这些库后,你可以构建Intel Quick Assist Technology OpenSSL Engine

构建 Intel® Integrated Performance Primitives Cryptography

首先,从 GitHub 克隆源代码存储库:
git clone https://github.com/intel/ipp-crypto.git
cd ipp-crypto
确保你正在构建代码的release版本,而不是开发分支。 在撰写本文时,最新release版本是2020, update 3:
git checkout ipp-crypto_2020u3
你只需要构建intel IPP 包的多缓冲区部分,因此更改为多缓冲区加密库子目录。 然后,通过运行 cmake 准备构建:
cd sources/ippcp/crypto_mb
cmake . -Bbuild -DCMAKE_INSTALL_PREFIX=/usr
这会将库配置为安装到 /usr 中。 要执行完整构建,请运行:
cd build
make -j
sudo make install
这会将共享库放在 /usr/lib 中,这意味着我们不需要修改 LD_LIBRARY_PATH。

构建 Intel® Multi-Buffer Crypto for IPsec Library

首先,从 GitHub 克隆源代码存储库:
git clone https://github.com/intel/intel-ipsec-mb.git
cd intel-ipsec-mb
确保你正在构建代码的release版本,而不是开发分支。 在撰写本文时,最新release版本是 0.55:
git checkout v0.55
没有配置步骤。 使用以下命令构建库:
make -j SAFE_DATA=y SAFE_PARAM=y SAFE_LOOKUP=y
安装:
sudo make install NOLDCONFIG=y
这会将共享库放在 /usr/lib 中,这意味着LD_LIBRARY_PATH 没有修改。

构建 Intel Quick Assist Technology (Intel QAT) Engine for OpenSSL

从 GitHub 克隆软件存储库:
git clone https://github.com/intel/QAT_Engine.git
cd QAT_Engine
接下来,确保你构建的是代码的release版本,而不是开发分支。 在撰写本文时,最新release版本是 0.6.5:
$ git checkout v0.6.5
intel QAT 硬件设备优先于多缓冲区软件实现,并且engines目前不支持运行时选择操作模式。 要在具有intel QAT 硬件的系统上使用软件加速,必须在编译时通过添加 —disable-qat_hw 配置选项在库中明确禁用硬件卸载支持。
为所有软件加速功能配置 Intel QAT Engine for OpenSSL:
./autogen.sh
./configure --enable-qat_sw
要安装,请运行:
make -j
sudo make install
由于这使用了系统提供的 OpenSSL 安装,因此我们无需修改 LD_LIBRARY_PATH 即可使用该engines。
安装完成后,你应该会在 OpenSSL 的engines目录中看到该engines。 在 Ubuntu 20.04 中,它位于 /usr/lib/x86_64-linux-gnu/engines-1.1 中。 对于非标准构建,可以通过“openssl version”命令获取engines目录。
$ openssl version -e
ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-1.1"
通过运行“ls”验证engines是否存在。 你应该在目录列表中看到 qatengine.so:
$ ls -l /usr/lib/x86_64-linux-gnu/engines-1.1
total 396
-rw-r--r-- 1 root root 23104 Apr 20 2020 afalg.so
-rw-r--r-- 1 root root 14120 Apr 20 2020 capi.so
-rw-r--r-- 1 root root 26688 Apr 20 2020 padlock.so
-rwxr-xr-x 1 root root 334160 Sep 28 13:27 qatengine.so

构建后配置

在 CentOS 8.2 上,你需要更新动态链接器缓存:
sudo ldconfig

从源代码构建 OpenSSL

本节介绍如何在从源代码构建 OpenSSL 时为 OpenSSL 构建intel QAT engines。

构建要求

你需要一些必备软件包来构建 OpenSSL、用于 OpenSSL 的intel QAT engines以及engines的依赖项。

Ubuntu 20.04 LTS

要在 Ubuntu 上构建 Intel QAT Engine for OpenSSL 及其依赖项,你需要从 apt 安装以下软件包:
sudo apt install autoconf build-essential libtool cmake cpuid
还需要安装 nasm 2.15 或更高版本,Ubuntu 20.04 发行版默认不提供该版本。 你必须手动获取并安装此软件包:
wget http://archive.ubuntu.com/ubuntu/pool/universe/n/nasm/nasm_2.15.04-1_amd64.deb
sudo dpkg -i nasm_2.15.04-1_amd64.deb

CentOS 8.2

CentOS 需要一些存储库更新才能安装必要的软件包。 具体来说,你需要添加 Extra Packages for Enterprise Linux (EPEL) 存储库。
sudo dnf install epel-release
sudo dnf update
现在使用 dnf 安装以下软件包:
sudo dnf group install "Development Tools"
sudo dnf install cpuid cmake
你还需要安装 nasm* 2.15 或更高版本,CentOS 8.2 发行版默认不提供该版本。 你必须手动获取并安装此软件包:
wget https://www.nasm.us/pub/nasm/releasebuilds/2.15.02/linux/nasm-2.15.02-0.fc31.x86_64.rpm
sudo rpm -i nasm-2.15.02-0.fc31.x86_64.rpm

运行时要求

要使用面向 OpenSSL 的intel QAT engines中的软件加速功能,你需要一个支持intel AVX-512 并具有以下指令集扩展的系统:

  • AVX512F
  • AVX512_IFMA
  • VAES
  • VPCLMULQDQ

后两个扩展是在某些第 10 代 Intel® Core™ 处理器和第 3 代 Intel® Xeon® Scalable 处理器(以前代号为 Ice Lake 的产品)中引入的。 验证你的系统是否支持必要功能的一种快速方法是运行 cpuid 命令。 运行以下命令并检查输出是否匹配。
$ cpuid -1 | egrep 'VAES|VPCLM|GFNI|AVX512F|AVX512IFMA'
AVX512F: AVX-512 foundation instructions = true
AVX512IFMA: fused multiply add = true
VAES instructions = true
VPCLMULQDQ instruction = true
所有指令集都必须存在。
这些输出字段仅存在于 cpuid 版本 20200211 或更高版本中。 这是 Ubuntu 20.04 和 CentOS 8.2 中提供的默认版本。

选择目录结构

在我们继续构建之前,我们需要决定在哪里安装 OpenSSL 和intel QAT Engine for OpenSSL 的完整包和库。 由于从源代码构建的目标是生成可以根据需要升级而不干扰现有应用程序的构建,因此我们需要一个允许并行安装同一工具的多个版本的目录层次结构。 为了保持文件系统整洁,我们将使用以下结构将这些包放在 /opt 中:
/opt/tool/version
构建 OpenSSL v1.1.1
获取 OpenSSL 1.1.1 的最新版本。 你可以从 GitHub 查看源代码存储库,也可以下载其中一个预打包的 tarball。 我们会做后者,在撰写本文时,最新版本是 1.1.1k:
wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
tar xf openssl-1.1.1k.tar.gz
cd openssl-1.1.1k
要配置 OpenSSL,请运行 config 程序并将 —prefix 和 —openssldir 选项设置为我们想要的安装目录,即 /opt/openssl/1.1.1k
./config --prefix=/opt/openssl/1.1.1k --openssldir=/opt/openssl/1.1.1k
然后构建并安装:
make -j
sudo make install
因为我们已经将 OpenSSL 安装到了一个非标准的构建目录中,所以我们需要对环境进行一些更改。 为确保你获得此版本的 OpenSSL 而不是你的系统版本,请将 OpenSSL 目录添加到你的 PATH 变量中:
export PATH=/opt/openssl/1.1.1k/bin:$PATH
你还需要在我们的环境中设置 LD_LIBRARY_PATH 以运行二进制文件:
export LD_LIBRARY_PATH=/opt/openssl/1.1.1k/lib
要验证所有内容,请运行以下命令:
$ openssl version -v -e
OpenSSL 1.1.1k 25 Mar 2021
ENGINESDIR: "/opt/openssl/1.1.1k/lib/engines-1.1"
你应该会看到正确的版本,并且 ENGINESDIR 应该指向你在 /opt/openssl 中的安装。
你可以在脚本中设置这些环境变量,以确保 OpenSSL 来自预期位置。
如果你不设置 LD_LIBRARY_PATH,OpenSSL 将从发行版的默认位置加载等效库,导致库和二进制版本不匹配。 这将阻止 QAT engines在 OpenSSL 中加载,并且还可能导致 OpenSSL 本身出现零星的运行时错误。

为软件加速构建intel QAT OpenSSL Engines

intel QAT Engine for OpenSSL 中的软件加速支持取决于以下两个库。 它们必须先构建,但可以按任何顺序构建:

安装这些库后,你可以构建 Intel Quick Assist Technology OpenSSL Engine

构建 Intel® Integrated Performance Primitives Cryptography

首先,从 GitHub 克隆源代码存储库:
git clone https://github.com/intel/ipp-crypto.git
cd ipp-crypto
确保你正在构建代码的固定版本,而不是开发分支。 在撰写本文时,最新版本是 2020,update3:
git checkout ippcp_2020u3
你只需要构建intel IPP 包的多缓冲区部分,因此更改为多缓冲区加密库子目录。
该库需要知道在哪里可以找到你的 OpenSSL 源,它会在环境变量 OPENSSL_ROOT_DIR 中查找安装路径:
export OPENSSL_ROOT_DIR=/opt/openssl/1.1.1k/
然后,通过运行 cmake 准备构建:
cd sources/ippcp/crypto_mb
cmake . -Bbuild -DCMAKE_INSTALL_PREFIX=/opt/crypto_mb/2020u3
请注意,我们使用 crypto_mb 作为我们的工具名称,因为我们没有构建整个 IPP 包。
要执行构建,请运行:
cd build make -j
sudo make install
我们还需要更新 LD_LIBRARY_PATH 以包含这个新的库目录:
export LD_LIBRARY_PATH=/opt/openssl/1.1.1k/lib:/opt/crypto_mb/2020u3/lib

构建 the Intel® Multi-Buffer Crypto for IPsec Library

首先,查看来自 GitHub 的源代码存储库:
git clone https://github.com/intel/intel-ipsec-mb.git
cd intel-ipsec-mb
确保你正在构建代码的固定版本,而不是开发分支。 在撰写本文时,最新release版本是 v0.55:
git checkout v0.55
没有配置步骤。 使用以下命令构建库:
make -j SAFE_DATA=y SAFE_PARAM=y SAFE_LOOKUP=y
要安装到我们的目的地,请在运行“make install”时定义 PREFIX:
sudo make install NOLDCONFIG=y PREFIX=/opt/ipsec-mb/0.55
我们还需要将这个新的安装目录添加到 LD_LIBRARY_PATH 中:
export LD_LIBRARY_PATH=/opt/openssl/1.1.1k/lib:/opt/crypto_mb/2020u3/lib:/opt/ipsec-mb/0.55/lib

构建 Intel Quick Assist Technology Engine for OpenSSL

从 GitHub 克隆软件存储库:
git clone https://github.com/intel/QAT_Engine.git
cd QAT_Engine
接下来,确保你构建的是代码的固定版本,而不是开发分支。 在撰写本文时,最新release版本是 0.6.5:
git checkout v0.6.5
intel QAT 硬件设备优先于多缓冲区软件实现,并且engines目前不支持运行时选择操作模式。 要在具有intel QAT 硬件的系统上使用软件加速,必须在编译时通过添加 —disable-qat_hw 配置选项在库中明确禁用硬件卸载支持。
要为所有软件加速功能配置intel QAT OpenSSL engines,我们需要执行以下操作:

  • 设置 LDFLAGS 和 CPPFLAGS 以确保通过配置找到用于 IPSec 库的intel IPP 加密和多缓冲区库。 尽管为此目的提供了 —with-qat_sw_install_dir 选项,但它要求将两个库安装在同一位置。
  • 通过 —with-openssl_install_dir 选项提供我们的 OpenSSL 库的位置。
  • 添加 —with-openssl_dir 选项,该选项指向 OpenSSL 源代码。 这将从 OpenSSL 的源代码重新生成错误文件

在这里,我们假设你是从主目录构建的。 请务必更新路径以匹配你的构建环境。
./autogen.sh
LDFLAGS="-L/opt/ipsec-mb/0.55/lib -L/opt/crypto_mb/2020u3/lib" CPPFLAGS="-I/opt/ipsec-mb/0.55/include -I/opt/crypto_mb/2020u3/include" ./configure --prefix=/opt/openssl/1.1.1k --with-openssl_install_dir=/opt/openssl/1.1.1k --with-openssl_dir=$HOME/openssl-1.1.1k --enable-qat_sw
构建和安装,我们还需要在命令行中设置 PERL5LIB,这样 Perl 才能在 OpenSSL 源目录中找到 configdata.pm 文件。 由于 QAT engines构建配置中的错误,此步骤是必要的,它将在未来的版本中修复。
PERL5LIB=$HOME/openssl-1.1.1k make -j
sudo PERL5LIB=$HOME/openssl-1.1.1k make install
安装完成后,你应该会在 OpenSSL 的engines目录中看到该engines:
$ ls -l /opt/openssl/1.1.1k/lib/engines-1.1/qatengine.*
-rwxr-xr-x 1 root root 1011 Mar 26 15:16 /opt/openssl/1.1.1k/lib/engines-1.1/qatengine.la
-rwxr-xr-x 1 root root 170520 Mar 26 15:16 /opt/openssl/1.1.1k/lib/engines-1.1/qatengine.so
记住既要设置 LD_LIBRARY_PATH 又要修改自己的 PATH,否则下面的示例将失败。

测试Engine

一旦Engine就位,你就可以继续进行功能测试。
第一个测试是确保Engine加载。
$ openssl engine -v qatengine
(qatengine) Reference implementation of QAT crypto engine(qat_sw) v0.6.5
ENABLE_EXTERNAL_POLLING, POLL, ENABLE_HEURISTIC_POLLING,
GET_NUM_REQUESTS_IN_FLIGHT, INIT_ENGINE
如果上述命令返回如下错误:
139667965596992:error:25066067:DSO support routines:dlfcn_load:could not load the
shared library:../crypto/dso/dso_dlfcn.c:118:filename(/usr/lib/x86_64-linux-gnu/engines-1.1/qatengine.so): libcrypto_mb.so: cannot open shared object file: No such file or directory
139667965596992:error:25070067:DSO support routines:DSO_load:could not load the shared library:../crypto/dso/dso_lib.c:162:
139667965596992:error:260B6084:engine routines:dynamic_load:dso not found:../crypto/engine/eng_dyn.c:414:
139667965596992:error:2606A074:engine routines:ENGINE_by_id:no such engine:../crypto/engine/eng_list.c:334:id=qatengine

如果你使用的是发行版提供的 OpenSSL

  • 确保 Intel® Multi-Buffer Crypto for IPsec Library 和 Intel IPSec Library 都安装在 /usr/lib 中。 如果你没有为前者设置前缀,它将安装到 /usr/local 并且你需要在你的环境中设置 LD_LIBRARY_PATH。
  • 如果你在 CentOS 8.2 上运行,请确保你已运行 ldconfig。

    如果你从源代码构建 OpenSSL

  • 确保将 LD_LIBRARY_PATH 设置为 OpenSSL、Intel Multi-Buffer Crypto for IPsec Library 和 Intel IPSec Library 的路径。 所有三个路径都必须存在。

  • 验证你的安装路径并确保它们位于 /opt/tool/version

假设Engine加载正确,你可以测试每个启用的算法的软件加速。 为此,我们将对各个算法运行“openssl speed”,并将engines性能与基线进行比较。
在 Intel Xeon Scalable 处理器系列上,你必须使用处理器关联(也称为 CPU pinning)将这些进程绑定到内核。 多缓冲区实现利用产生内部电源转换的 AVX-512 功能,如果 CPU 调度程序在执行期间将这些作业移动到其他内核,从而抵消性能提升。 大多数服务器应用程序都以某种形式支持 CPU 关联掩码,但是为了“openssl speed”,我们必须依靠 taskset 命令来为我们执行此操作。

RSA

RSA 加速利用了一种异步调度算法,intel称之为多缓冲区,它并行处理多个操作。 要测试加速器性能,你必须将 -async_jobs 参数提供给“openssl speed”。 在当前的intel架构上,8 个异步作业可提供最佳性能。
虽然签名和验证操作都加快了,但最大的收益是在签名方面。 这转化为使用 RSA 证书处理 TLS 握手的服务器的性能提升。

2048-bit keys

Baseline taskset 0x1 openssl speed rsa2048
Intel QAT Engine for OpenSSL taskset 0x1 openssl speed -engine qatengine -async_jobs 8 rsa2048

3072-bit keys

Baseline taskset 0x1 openssl speed rsa3072
Intel QAT Engine for OpenSSL taskset 0x1 openssl speed -engine qatengine -async_jobs 8 rsa3072

4096-bit keys

Baseline taskset 0x1 openssl speed rsa4096
Intel QAT Engine for OpenSSL taskset 0x1 openssl speed -engine qatengine -async_jobs 8 rsa4096

ECDH

与 RSA 一样,ECDH 加速使用异步调度算法。

Montgomery EC Curve X25519

Baseline taskset 0x1 openssl speed ecdhx25519
Intel QAT Engine for OpenSSL taskset 0x1 openssl speed -engine qatengine -async_jobs 8 ecdhx25519

NIST Curve P-256

Baseline taskset 0x1 openssl speed ecdhp256
Intel QAT Engine for OpenSSL taskset 0x1 openssl speed -engine qatengine -async_jobs 8 ecdhp256

NIST Curve P-384

Baseline taskset 0x1 openssl speed ecdhp384
Intel QAT Engine for OpenSSL taskset 0x1 openssl speed -engine qatengine -async_jobs 8 ecdhp384

ECDSA

ECDSA 算法也使用异步调度。

NIST Curve P-256

Baseline taskset 0x1 openssl speed ecdsap256
Intel QAT Engine for OpenSSL taskset 0x1 openssl speed -engine qatengine -async_jobs 8 ecdsap256

NIST Curve P-384

Baseline taskset 0x1 openssl speed ecdsap384
Intel QAT Engine for OpenSSL taskset 0x1 openssl speed -engine qatengine -async_jobs 8 ecdsap384

AES GCM Encryption

AES GCM 加密加速是各个 EVP 密码的纯矢量化实现。 支持 128、192 和 256 位的密钥大小,但在实践中几乎从不使用 192 位加密。
“Openssl speed”报告了几种块大小的性能,但实际应用程序倾向于使用 8k 或更大的缓冲区来提高效率和性能。 这也是看到最大收益的地方。

128-bit keys

Baseline taskset 0x1 openssl speed -evp aes-128-gcm
Intel QAT Engine for OpenSSL taskset 0x1 openssl speed -engine qatengine -evp aes-128-gcm

256-bit keys

Baseline taskset 0x1 openssl speed -evp aes-256-gcm
Intel QAT Engine for OpenSSL taskset 0x1 openssl speed -engine qatengine -evp aes-256-gcm

典型的性能提升

以“openssl speed”衡量的每种算法的性能将根据你的硬件、系统配置和 BIOS 设置而有所不同。 由于正常系统活动的波动,运行之间也会存在差异。

客户端系统性能

下面给出的结果是典型值,从表 1 中描述的系统获得。

System Dell Inc. XPS 13 7390 2-in-1 Laptop
CPU Intel® CoreTM i7-1065G7 (4 cores, 8 threads) @ 1.30 GHz
CPU FEATURES Intel® Hyper-Threading Technology enabled
Intel® Turbo Boost Technology 2.0 disabled
Memory 16 GB (2x 8GB) LPDDR4 SDRAM 3733 MT/s
Storage 512 GB M.2 NVMe SSD
OS Ubuntu 20.04 LTS

请注意,intel® Turbo Boost Technology 2.0 在这些运行中被禁用,因此显示的性能提升仅来自面向 OpenSSL 的intel QAT Engine,而不是来自时钟速度的变化。这是 OpenSSL for RSA 的完整输出,使用 2048 位密钥,没有intel QAT Engine:

$ openssl speed rsa2048 Doing 2048 bits private rsa's for 10s: 5799 2048 bits private RSA's in 10.00s
Doing 2048 bits public rsa's for 10s: 202497 2048 bits public RSA's in 10.00s
OpenSSL 1.1.1k 25 Mar 2021
built on: Fri Mar 26 22:09:23 2021 UTC
options:bn(64,64) rc4(16x,int) des(int) aes(partial) idea(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG
sign verify sign/s verify/s
rsa 2048 bits 0.001724s 0.000049s 579.9 20249.7
这是用于 OpenSSL 的intel QAT engines的输出:
$ openssl speed -engine qatengine -async_jobs 8 rsa2048
engine "qatengine" set.
Doing 2048 bits private rsa's for 10s: 26640 2048 bits private RSA's in 9.99s
Doing 2048 bits public rsa's for 10s: 577880 2048 bits public RSA's in 9.37s
OpenSSL 1.1.1k 25 Mar 2021 built on: Fri Mar 26 22:09:23 2021 UTC options:bn(64,64) rc4(16x,int) des(int) aes(partial) idea(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG
sign verify sign/s verify/s
rsa 2048 bits 0.000375s 0.000016s 2666.7 61673.4
每秒的符号操作数从 579.9 跃升至 2666.7,表明使用 Intel QAT Engine for OpenSSL 时性能提高了大约 4.6 倍。
表 2 中提供了所有启用算法的结果。

Algorithm Operation Baseline Intel QAT Engine for OpenSSL Speedup
RSA 2048 sign 579.9 2667.7 signs/sec 4.60x
RSA 3072 sign 194 673.3 signs/sec 3.47x
RSA 4096 sign 88 348.5 signs/sec 3.96x
ECDH X25519 n/a 10796 49200 ops/sec 4.56x
ECDH P-256 n/a 7191 22783 ops/sec 3.17x
ECDH P-384 n/a 417 5939.4 ops/sec 14.24x
ECDSA P-256 sign 17059 44524.4 signs/sec 2.61x
ECDSA P-384 sign 394 13905.2 signs/sec 35.29x
AES-128-GCM encrypt (8k blocks) 2368791 4723040.3 kB/sec 1.99x
AES-256-GCM encrypt (8k blocks) 2013831 4093460.5 kB/sec 2.03x

在目标系统上,RSA 标志的性能增益范围为 3.5 到 4.6 倍。 ECDH X25519 操作的增益超过 4 倍。 GCM 显示 128 位和 256 位密钥的 2 倍增益。 NIST 曲线 P-384 算法显示出相当大的收益,尤其是与 NIST 曲线 P-256 算法相比,后者仅看到 2.6 到 3 倍的改进,但这是因为 P-384 的起点是通用软件实现,没有其他代码优化。 所有其他算法都从 AVX-2 代码路径开始,因此 P-384 代码的改进空间明显更大。

服务器系统性能

第 3 代intel至强可扩展处理器的某些 SKU 包含两个 Fuse Multiply ADD (FMA) 单元,而不是一个,这意味着更好的性能。 下面给出的结果是表 3 中描述的系统的典型值,该系统具有两个 FMA 单元。

System Intel® Server Board M50CYP Family
CPU 2x Intel® Xeon® Platinum 8368 CPU @ 2.40GHz
CPU FEATURES Intel® Hyper-Threading Technology enabled
Intel® Turbo Boost Technology 2.0 disabled
Memory 64 GB (4x 16GB) DDR4 Registered SDRAM 3200 MT/s
Storage 960 GB M.2 NVMe SSD
OS Ubuntu 20.04 LTS
Algorithm Operation Baseline Intel QAT Engine for OpenSSL Measure Speedup
RSA 2048 sign 1134.6 6908.3 signs/sec 6.09x
RSA 3072 sign 371.2 1294.6 signs/sec 3.49x
RSA 4096 sign 167.6 802.1 signs/sec 4.79x
ECDH x25519 n/a 20158.6 120003.8 ops/sec 5.95x
ECDH p256 n/a 13490.5 44741.4 ops/sec 3.32x
ECDH p384 n/a 803.6 12882.6 ops/sec 16.03x
ECDSA p256 signs 32103.9 81653.3 signs/sec 2.54x
ECDSA p384 signs 779.4 29880.2 signs/sec 38.34x
AES-128-GCM encrypt (8k blocks) 4374242 9467142 kB/sec 2.16x
AES-256-GCM encrypt (8k blocks) 3721579 8326487 kB/sec 2.24x

请注意,“openssl spedd”衡量的是算法本身的原始性能。 实际应用程序的性能会因工作负载和其他因素而异。 将应用程序配置为使用 QAT engines是一个特定于应用程序的过程,并且至少需要应用程序支持 OpenSSL 的异步接口。
参考链接Building Software Acceleration Features in the Intel® Quick Assist Technology (Intel® QAT) Engine for OpenSSL 1.1.1