TLS 加速技术:Intel QuickAssist Technology(QAT)解决方案

news2025/1/11 5:39:09

作者:vivo 互联网服务器团队- Ye Feng

本文介绍了 Intel QAT 技术方案,通过Multi-Buffer技术和QAT硬件加速卡的两种方式实现对TLS的加速

一、背景

当前 TLS 已经成为了互联网安全的主要传输协议,TLS带来更高的安全性的同时,也带来了更多的性能开销。特别是在建连握手阶段,TLS的CPU开销,相对于TCP要大很多。

业界在优化TLS性能上已经做了很多软件和协议层面的优化,包括:Session 复用、OCSP Stapling、TLS1.3等。然而在摩尔定律"失效"的今日,软件层面的优化很难满足日益增长的流量,使用专用的硬件技术卸载CPU计算成为目前通用的解决方案。本文将介绍Intel在TLS加速领域提供的QAT技术方案。

二、Intel QuickAssist Technology(QAT)技术方案

Intel 提供了TLS异步加速的完整解决方案: Intel QuickAssist Technology(QAT),简称Intel QAT技术。

如下图所示,QAT 支持加速的密码算法覆盖了TLS的整个流程,包括:握手阶段的签名、秘钥交换算法,数据传输的AES加解密算法等。

图1. QAT 对TLS流程的密码算法的支持(图片来源)

QAT提供了对称与非对称两类密码算法的支持,主要包括:

  1. 非对称加密算法:RSA, ECDSA, ECDHE

  2. 对称加密算法:AES-GCM(128,192,256) 

注:QAT加速的优势主要体现在非对称加密上,从官方的整体性能数据看,非对称算法性能提升1.6~2倍,对称算法性能提升10%~15%

2.1 QAT Engine 软件栈

QAT Engine 是QAT技术方案的核心模块,主要的作用是作为应用程序和硬件之间的中间层,负责 “加解密操作的输入输出数据” 在用户应用程序与硬件卡之间进行传递,主要操作就是IO的读写。

QAT Engine 是以 OpenSSL 第三方插件的方式提供给用户,这个意味用户可以使用 OpenSSL 标准的API,就可以实现对TLS的加速,只需要对原有代码做OpenSSL异步改造,就可以享受QAT技术带来的TLS性能加速,业务侵入性较小。

图2. Intel QAT Engine 软件栈(图片来源)

如上图所示,QAT  Engine 支持两种加速方式:

  • 软件加速(qat_sw):使用 Multi-Buffer (SIMD)技术,对密码算法进行并行处理优化。

  • 硬件加速(qat_hw):使用QAT硬件加速卡,将密码算法计算从CPU OffLoad到硬件加速卡。

下面将介绍软件和硬件两种加速路径的实现方式。

三、软件加速:采用 Intel Multi-Buffer 技术

Intel 从 whitely 平台开始加入了新的指令集,结合intel Multi-Buffer技术,实现对密码算法的SIMD优化方案。

3.1 Intel Multi-Buffer 技术

Intel Multi-buffer 基本原理就是使用CPU的SIMD机制,通过 AVX-512 指令集并行处理数据,来提升RSA/ECDSA算法性能。

  • SIMD (Single Instruction Multiple Data) 即单指令流多数据流,是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。简单来说就是一个指令能够同时处理多个数据。

  • Multi-Buffer 技术基于SIMD AVX-512指令集,通过队列和批量提交策略,结合OpenSSL的异步能力,每次可以最多并行处理8个密码算法操作。

Intel 的 Multi-Buffer 方案,实际上是对应Intel两个开源工程(Multi Buffer技术实现的通用密码算法底层lib库),集成在 QAT Engine 里,从而实现软件加速。

图3. Intel Engine集成了基于Multi-Buffer技术的密码算法lib

1、IP SEC lib

  • 提供了multi-buffer 技术优化的对称加解密算法,如:AES-GCM

  • 开源项目:https://github.com/intel/intel-ipsec-mb

2、IPP CRYPTO lib

  • 提供了multi-buffer 技术优化的RSA/EDCSA/EDCHE算法接口,基于 Intel® Advanced Vector Extensions 512 (Intel® AVX-512) integer fused multiply-add (IFMA) 指令实现SIMD优化。

  • 开源项目:https://github.com/intel/ippcrypto/tree/develop/sources/ippcp/crypto_mb

简而言之,QAT的软件加速的本质就是通过 AVX-512 指令集进行并行处理优化,针对并发场景性能有显著提升(下文有针对Mult-Buffer优化场景的性能测试)。

四、 硬件加速:采用QAT硬件加速卡卸载

除了通过Multi-Buffer技术进行软件加速外,QAT Engine 还支持QAT硬件加速卡,通过将密码算法的计算卸载(OffLoad)到硬件加速卡,实现性能加速。

硬件加速核心是将TLS中的非对称加解密操作剥离出来,放到硬件加速卡里计算,即解放了CPU,同时专用的硬件加速卡也提供了更高的加解密性能,这是典型的硬件OffLoad技术方案。

下图为典型的 Nginx+ Intel QAT Software Stack + QAT硬件加速卡的典型应用场景:

图4.  nginx+ Intel QAT Software Stack + QAT硬件加速卡的典型应用场景(图片来源)

这个典型应用场景包括四个部分:

  1. Nginx (Async Mode):  Intel 基于官方nginx(version 1.18)提供了patch,支持nginx工作在openssl的异步模式。Patch开源在:GitHub - intel/asynch_mode_nginx

  2. OpenSSL(支持Async Mode):  OpenSSL-1.1.1 新增了async mode 特性,应用层软件可以通过标准的openssl接口,实现异步调用,提升性能。

  3. QAT Engine:   OpenSSL Engine 插件。向下和QAT API交互,将处理请求提交给硬件。详见项目开源地址:GitHub - intel/QAT_Engine: Intel QuickAssist Technology( QAT) OpenSSL Engine (an OpenSSL Plug-In Engine) which provides cryptographic acceleration for both hardware and optimized software using Intel QuickAssist Technology enabled Intel platforms. https://developer.intel.com/quickassist

  4. QAT Driver:QAT加速卡的驱动程序。分为用户态和内核态两个部分。用户态的lib库提供QAT API,内核态的driver则直接和QAT硬件加速卡打交道。

Intel QAT 依赖了OpenSSL的两个特性 OpenSSL Async Mode 和 OpenSSL Engine:

  • OpenSSL Async Mode 能够在 async_job 执行过程中,在等待加速卡结果的时候,将 cpu 让出去;如果没有开启 async 模式,调用 openssl 函数会阻塞,cpu会阻塞等待。

  • OpenSSL Engine 则是提供了自定义注册加解密的方法,可以不使用 OpenSSL 自带的加解密库,指定调用第三方的加解密库。

基于两个特性,应用程序的加解密操作只需要保持使用原来相同openssl api,只需要做异步模式的兼容。另外,可以在调用OpenSSL的API时,指定到engine QAT上就行,不需要做任何额外的修改,就可以使用QAT卡进行加解密加速。

4.1 OpenSSL 的Async Mode特性

通过上面的介绍,我们可以看到QAT卡的本质是让一部分原本由CPU进行的计算转移到QAT卡上进行,因此提高QAT的利用率,降低CPU的切换开销和等待时间是性能最大化的核心工作。

OpenSSL 未启用异步ASYNC模式时,OpenSSL 调用是同步阻塞的,直到QAT_Engine返回结果。如下图的同步模式,在并发处理执行流的场景,大量CPU处于空闲等待的状态(图中虚线表示CPU处于空闲状态),无法有效地利用CPU。

图5. QAT_Engine + OpenSSL 同步模式(图片来源)

OpenSSL 开启异步ASYNC模式后,OpenSSL 调用是非阻塞的。如下图的异步模式,openssl的调用不需要等待QAT_engine的处理完成,可以有效地利用CPU,提高QAT的利用率,提升并发处理性能。

图6. QAT_Engine + OpenSSL 异步模式(图片来源)

通过OpenSSL的同步和异步模式的对比,可以看到OpenSSL-1.1.1 新增的异步Async特性,支持了异步非阻塞调用,提高了QAT的利用率,可以显著提升加解密性能。

4.2 QAT Engine ASYNC运行流程

接下来还有一个问题,CPU 如何知道 QAT 卡完成了计算呢? 

Async模块为了达到并行的目的,在单线程中实现了协程(async job)。加解密操作抽象为job,多个job同时运行,使用协程进行调度。

在async job执行的过程中,当计算操作提交给QAT卡后,CPU可以把当前任务暂停,切换上下文(保存/恢复栈,寄存器等)返回给用户态。

用户态需要主动去poll这个async job的状态,是否是ASYNC_FINISHED状态。如果是,说明之前的任务已经完成,则可以继续后面的操作(取回加密/解密结果)。

注:QAT Engine 通过轮询来获取QAT卡的计算状态,基本原理是启动一个线程,不停的调用qatdriver的polling api,轮训获取qat的计算状态,得到相应结果后,写入eventfd,唤醒async job。

图7. QAT engine ASYNC运行流程(图片来源)

如上图所示,QAT Engine Async的基本流程为:

  1. 主job调用 SSL_accept,等待 TLS客户端发起 TLS handshake。

  2. SSL内部组织了一个状态机,将握手,读写等操作抽象为两个job,ssl_io_intern(读写), ssl_do_handshake_intern(握手), 统一通过api ASYNC_start_job()进行job调度。这里启动了一个握手的job协程。

  3. 握手job执行 RSA_sign签名操作时,将sign算法卸载到硬件上计算。调用 ASYNC_pause_job()  切回主job, 并将job状态设置为ASYNC_PAUSE, 这个时候CPU会交还给主job进行其它计算工作,同时QAT并行的进行自己的计算。

  4. 主job通过SSL_waiting_for_async()接口获得的一个eventfd,并epoll这个eventfd。当QAT卡计算完成,会执行回调写入eventfd,通知主job计算已完成。

  5. 主job切换回握手job,握手job的完成剩余流程后,再调用ASYNC_pause_job()切换主job,并将job状态设置为ASYNC_FINISH,结束协程完成握手动作。

五、QAT 性能评测

通过上面的介绍,我们了解了QAT技术方案的基本原理,下面我们看下QAT的实际加速效果。

QAT Multi-Buffer 加速方案,依赖的 OpenSSL、QAT Engine、ipp-crypto、 Intel-ipsec-mb 软件栈都是开源项目,我们可以方便的使用 openssl speed 原生加解密算法对Multi-Buffer方案进行性能评估。

硬件环境

  • Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz

  • CPU(s): 8

软件环境

  • Linux Kernel: 4.19.91-24.1.al7.x86_64

  • OpenSSL 1.1.1g

  • gcc (GCC) 8.3.0

  • cmake version 3.15.5

  • NASM version 2.15.05

  • GNU Binutils 2.32

  • 安装 QAT Engine

  • 安装ipp-crypto、 Intel-ipsec-mb 开源lib库

测试数据

  • numactl -C 0 ./openssl speed rsa2048

  • numactl -C 0 ./openssl speed -engine qatengine -async_jobs 8 rsa2048

  • numactl -C 0 ./openssl speed ecdhp384

  • numactl -C 0 ./openssl speed -engine qatengine -async_jobs 8 ecdhp384

  • numactl -C 0 ./openssl speed aes-256-cbc

  • numactl -C 0 ./openssl speed -engine qatengine -async_jobs 8 aes-256-cbc

TLS 握手阶段的签名和秘钥交换算法

  • RSA 2048 sign/verify  提升 4.9/2.9倍

  • ECDH key exchange 提升 12倍

对称加解密算法

  • AES-256-CBC 性能持平

根据性能测试结果,QAT的加速优势在于TLS握手阶段的签名和秘钥交换算法,适合频繁进行TLS建连的应用场景,比如:nginx网关、长连接网关等。

六、总结

本文介绍了 Intel QAT 技术方案,并讨论了方案提供的Multi-Buffer软件加速以及QAT硬件加速两种方式。同时,通过性能评估测试,我们可以看到QAT技术对TLS握手阶段的加解密算法有显著的性能提升。

最后,我们讨论一下 Intel QAT 技术的优缺点和应用场景:

6.1 优点和缺点

主要的优点

  • 高性能:可以显著提高计算密集型任务的性能,减少 CPU 的负载,提高系统吞吐量和响应速度。

  • 低功耗:可以将计算密集型任务卸载到专用硬件上,降低系统功耗,提高能效比。

主要的缺点

  • 成本较高:需要额外的硬件支持,增加了系统的成本。

  • 应用范围受限:主要适用于计算密集型任务,对于其他类型的任务可能没有显著的性能提升。

  • 不支持所有处理器:只支持Intel特定系列的处理器,需要特定的硬件和软件支持。

  • 改造成本高:需要对应用程序进行QAT异步化改造,需要一定的学习成本和技术支持。

6.2 应用场景

除了加解密算法之外,Intel QAT还支持压缩和解压缩、随机数生成、数字签名、视频编解码等算法。Intel QAT主要可以用于以下场景:

  • 接入网关:比如nginx网关、长连接网关。QAT可以加速TLS协议处理,提升网关的性能

  • 虚拟私人网络(VPN):QAT 可以加速 VPN 流量的加密和解密过程,提高吞吐量,减少延迟

  • 存储加速:QAT 可以加速数据压缩和解压缩,减少需要传输和存储的数据量

  • 视频编解码:QAT 可以加速视频编解码算法,提高视频处理的效率和质量

总的来说,Intel QAT 可以将计算密集型任务从 CPU 中分离出来,显著提高系统的性能和能效比,可以广泛应用于计算密集型任务的加速,包括网络安全、数据处理、云计算、存储加速、视频处理等多个领域。

参考资料:

  1. Github:intel/QAT_Engine

  2. Intel® QuickAssist Technology (Intel® QAT)

  3. Intel® QuickAssist Technology & OpenSSL-1.1.0: Performance

  4. TLS

  5. Intel® Processor Architecture: SIMD InstructionsSIMD Instructions

  6. [openssl] openssl async模块框架分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/558632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】用红黑树迭代器封装map和set

封装有点难 - . - 文章目录 前言一、红黑树原先代码的修改二、红黑树迭代器的实现总结 前言 因为我们要将红黑树封装让map和set使用,所以我们要在原来的基础上将红黑树代码进行修改,最主要的是修改模板参数,下面我们直接进入正题&#xff1a…

C++ 布隆过滤器哈希切割

前言 现实生活中,存在很多key_value的模型,我们可以使用哈希或者红黑树存储这些数据。但是二者只是内存的存储方式,无法处理海量数据。 海量数据的处理我们可以使用位图处理。但是位图的局限性是,其只能映射整型,对于…

【k8s】Jenkins实现springcloud应用CI、CD实践 【三】【待写】

一、运行Jenkins流水线流程思路: 场景:java微服务应用, 单体仓库,多个微服务模块,(并行构建、自动化构建、根据模块变更仅更新特定模块) java、nodejsCI阶段 并行方式; 根据模块变…

港联证券|标普500指数年内涨逾9%,美股牛市已至?

今年以来,美国标普500指数累计上涨超过9%,这引发了一场关于美股牛市是否已经到来的辩论。 持悲观态度的摩根士丹利股票策略师威尔逊(Michael Wilson)警告称,最近的反弹不过是一种假象。而美国银行的萨勃拉曼尼亚&#…

四、数据仓库详细介绍(规范)

大家好,这是数据仓库系列的第三个话题,排序在架构之后、建模之前。为什么会提的这么靠前呢? 因为规范约束的是数仓建设的全流程,以及后续的迭代和运维。事实上,数仓规范文档,应该随着架构设计文档&#xf…

chatgpt赋能Python-python_lambdify

Python Lambdify: 一个方便的数学表达式转换工具 Python是一种广泛使用的编程语言,适用于各种领域,如数据科学、机器学习和科学计算等。在这些领域中,数学表达式起到了至关重要的作用,而Python Lambdify(简称为“lamb…

计算机操作系统(慕课版)第四章课后题答案

一、简答题 1.什么是临界资源?什么是临界区? 临界资源:以互斥形式访问的资源;临界区:访问临界资源的代码。 2.同步机制应遵循的准则有哪些? 空闲让进;忙则等待;有限等待&#xff1b…

Windows本地快速搭建SFTP服务共享文件【外网访问】

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#xff0…

数据结构与算法-单调栈1

先介绍一下单调栈是什么 一种特别设计的栈结构,为了解决如下的问题: 给定一个可能含有重复值的数组arr,i位置的数一定存在如下两个信息 1)arr[i]的左侧离i最近并且小于(或者大于)arr[i]的数在哪? 2)arr[…

买法拍房注意事项

1、查清法拍房房屋属性。 竞拍前需查清楚法拍房的使用年限、能否办理房产证、土地性质等。 若土地为划拨属性,房屋可能需补缴土地出让金,该费用最好提前咨询当地不动产登记中心了解。 2、产权是否涉及二次过户。 二次过户指的是房屋已经过2次交易&…

苦卷一个月,P9大佬给我的Alibaba面试手册,终于成功踹开字节大门

怎么说呢,今年真的是寒气逼人啊!在这个大环境下,裁员已经不算是特别的事情,粗暴裁员也许是未来一种趋势…在职的卷的起飞,离职的找不到好工作。 做点能做的:跑跑步骑骑车多锻炼;当当上面正版书…

分布式全局唯一id实现-2 springCloud-MyBatis-Plus集成百度分布式全局id(uid-generator)

前言:MyBatis-Plus 集成百度的uid-generator ,实现业务实体在insert 实体时,可以自动获取全局id,完成数据保存; 1 uid-generator 全局id 生成的方式了解: Snowflake算法描述:指定机器 & 同…

如何避免孩子独自在家偷偷使用电脑?

电脑为我们的生活带来了极大的便利,但是对于孩子来说,过早的接触网络很容易影响其健康的成长。家长在家的话,还可以监督孩子,但如果家长出门了,该如何避免孩子偷偷使用电脑呢?其实方法很简单,只…

网络进阶学习:交换机二层

交换机二层 交换机的概念和作用交换机的划分交换机第二层的内容⭐第一部分:MAC地址⭐第二部分:逻辑链路控制子层⭐第三部分:介质访问控制子层⭐第四部分:交换机转发表⭐第五部分:VLAN⭐第六部分:STP 交换机…

Hudi系列25: Flink SQL使用checkpoint恢复job异常

文章目录 一. 通过Flink SQL将MySQL数据写入Hudi二. 模拟Flink任务异常2.1 手工停止job2.2 指定checkpoint来恢复数据2.3 整个yarn-session上的任务恢复 三. 模拟源端异常3.1 手工关闭源端 MySQL 服务3.2 FLink任务查看 FAQ:1. checkpoint未写入数据2. checkpoint 失败3. 手工取…

自然语言处理技术简介

长期以来,研究人员进行自然语言处理研究主要依赖各种机器学习模型,以及手工设计的特征,但这样做带来的隐患是由于语言信息被稀疏表征表示,会出现维度诅咒之类的问题。而随着近年来词嵌入(低维、分布式表征)…

港联证券|A股船舶板块景气反转即将到来

在经历了去年的爆发后,2023年的中国造船业仍然处在订单交付两旺的高度景气周期之中。 5月22日,中国船舶集团有限公司旗下沪东中华造船(集团)有限公司宣布交付全球最大级别24116TEU超大型集装箱船系列3号船“地中海吉玛”号。据报道…

3D 对象转换器应该如何将 OBJ 转换为 FBX ?

Aspose.3D 是一个功能丰富的游戏软件和计算机辅助设计(CAD)的API,可以在不依赖任何3D建模和渲染软件的情况下操作文档。API支持Discreet3DS, WavefrontOBJ, FBX (ASCII, Binary), STL (ASCII, Binary), Universal3D, Collada, glTF, GLB, PLY…

SpringMVC框架理解

JavaEE体系结构包括四层,从上到下分别是应用层、Web层、业务层、持久层。Struts和SpringMVC是Web层的框架,Spring是业务层的框架,Hibernate和MyBatis是持久层的框架。 为什么要使用SpringMVC? 很多应用程序的问题在于处理业务数据…

一对一项目指导,在线购物网站webform+SQLServer技术架构

我是Tom老师,10开发经验, 我先后在携程网、陆金所,两家互联网和金融行业领头公司 担任高级开发工程师, 技术深厚,开发经验丰富,认真负责。 我现在专门做一对一编程辅导。 希望我的专业辅导,…