Intel QAT 加速的数据压缩和 TLS 加解密技术 | 龙蜥大讲堂 102 期
内容介绍:
一、QAT Introduction
二、QAT for Compression
三、QAT for Security
四、QAT Value Proposition
本次分享的主题是Intel QAT加速的数据压缩和TLS加解密技术,由Intel网络与边缘事业部唐志军分享。
本次标题虽然是Intel QAT加速的数据压缩和TLS加解密的技术,但主要的内容是希望能在high level的层面去分享QAT到底是什么?以及如何应用QAT?并且有哪些应用场景可以用QAT的加速器?如果在业务开展过程中,发现一些瓶颈需要解决的时候,能想到使用QAT做关键业务的加速或是性能提升,本次课程的目的就已经达到了。
本次课程将围绕四个方面展开。
第一方面是QAT的介绍,主要是回答几个问题,第一是QAT是什么,第二是QAT应该怎么应用,第三是QAT在哪里需要应用QAT。第二、三方面是分别针对两个应用的场景,做了典型的使用方式或者场景的分享,最后会进行简单总结,QAT能给客户的业务带来什么样的价值?
一、QAT Introduction
首先,对QAT的认识应该是什么样的?对于QAT的认识,可以把它落到三个具体的服务,或者是三个不同的应用场景里,QAT是官方定义的加速器,就是去加速cpu处理的过程,过程是cpu计算密集型非常繁重的业务场景,所以做加速器,才有相对的意义。
目前来说,对cpu密集型的计算操作主要分这几大类,第一大类就是加密或是解密,又细分为两种,一种是对称加解密,像计算哈希,或是计算一些消息摘要的算法,主要就是对称的算法。另外一种是非对称的加解密,像htps里面做TR握手的过程中,不管是RAC算法或是椭圆取算算法,去交换密钥的过程中,都会需要非对称的算法。这两种加解密的算法,相对来说是一种cpu计算密集型的操作。
第二大类就是数据的压缩和解压缩。对QAT的第一认识,就是落在两种应用场景上,一个是加解密。另一个是数据的压缩和加缩,共同的特点就是对于cpu计算密集型,需要耗费大量的cpu指令周期的操作。
二、QAT for Compression
QAT可以应对这种应用场景之后,QAT应该怎么用?QAT对于系统,拿到带QAT的cpu的平台,QAT呈现出来的是什么形态?
首先QAT在操作系统中,尤其是常用的业务软件linux操作系统中,它是以PCIE的外围设备来呈现的。QAT本身在参与业务的拓扑中,QAT本身是可以看到的,以前插卡的QAT是没有网口,它也不是直接参与网络拓扑流量的交互,例如有数据从网络传过来,数据要做存盘的操作。但在存盘之前,需要对数据做压缩,首先通过网卡收包的方式,网卡收包可以是内核pad,也可以是DVDK这种用户态,收包收到内存后,需要把数据做封装,封装就是通过QAT提供的用户态的一些接口,然后把它换装成QAT的请求消息,发给QAT的硬件,QAT的硬件收到请求后,它会去读取发过来的请求中包含的原始数据所在的内存的位置,因为QAT本身也可以自己通过DMA的方式,把它的内存到DMA的QAT,自己处理加密或者解密,或者是压缩在场景里,把它放到自己处理的内存。处理完成后,不需要cpu进一步的参与,把处理完的结果DMA回到内存里。
在业务里面中,可以通过两种机制拿到QAT处理之后的结果,一种是可以用pulling的方式,可以针对QAT的一些接口使用pulling的方式,询问QAT的硬件,操作是否处理完成,它把数据DMA回到内存,就能拿到QAT处理的结果。
另外一种方式是call back的形式,或是用终端的形式。通过这两种方式拿到QAT处理后的数据,下一步就是根据他自己业务的需求压缩数据,数据压缩完成后进行存盘,然后直接调用相关的存储接口,把它存到NVMD磁盘里,或是其他类似存储的磁盘里,以上就是最后一步落盘的动作。
流量从内部磁盘先读出来,然后做解压缩操作,发回网络外部,以上就是反方向的过程,但整个过程其实是一样的,需要cpu进一步的参与。之后把数据变成QAT的请求消息发送给QAT,然后QAT拿到消息做处理,处理完成后,cpu再把它拿回来做下一步的处理。这是典型的QAT的Lookaside模式。
QAT另外一种模式是搭配特定的一些lcc、inline处理。inline的处理可以把数据加密或者解密的动作搭配交换芯片,这样就不需要cpu去参与,它就会直接判断这条信息是需要做加密或解密,把它通过QAT去做处理,处理完成之后的数据,需要cpu再做进一步的类似esp的加密的封包或解包的动作。
三、QAT for Security
了解QAT如何使用后,在哪些场合可以用QAT?总结就是在常见的网络中,尤其是网络安全的厂商中涉及到它的协议。除此之外还有IPSec、QUIC、Wireguard。然后是防火墙里涉及到安全,尤其对加解密需求的场景会要用到QAT,另外一个场景就是存储,QAT已经支持了几种不同的文件系统,在存储里面可以借助文件系统,对数据做落盘的时候进行压缩,在读取数据的时候做解压。因为ZFS或BTRFS在文件系统的层面已经能够去适配QAT层的业务,它可以直接和操作系统的相关接口做交互,然后操作系统内部会跟QAT做交互,把所有的数据做好压缩和解压缩的处理。数据压缩、解压缩在大数据域的场景中,也有一些应用,例如hadoop,一些数据库mysql,或者是在RocksDB里做数据,在存储的时候可以用QAT做压缩和解压缩的加速来提升整体的吞吐性能。
虚拟机在做迁移时,对内存镜像做跨网络的拷贝时,如果虚拟机的镜像很大,需要把镜像做压缩。如何快速的把镜像完成压缩,并且把它通过网络传输过去再解压回来?可以用QAT去做压缩和解压缩的处理。
四、QAT Value Proposition
在存储或者数据的压缩和解压缩方面。例如之前常用的GZAP或GLIB的压缩过程,即LZ77生成字典的过程,再加Huffman。QAT在早期完全能支持两步动作,就是LZ77压缩(字典的压缩)和Huffman的进一步压缩都可以放在QAT上进行操作。随着压缩算法的发展,现在出现了很多新的压缩算法,在LZ77的过程中,在后边又加入了新的灵活的格式或算法。
在过程中,通过QAT硬件的不断发展。例如在第四代可扩展处理器中,即在sufer rapes这一代中,通过它里面内置的QAT,可以支持像LZ4或Zstd算法的处理,处理的流程就是把关键的LZ77过程放到QAT中去做,然后生成字典,让字典再进行编码,比如Zstd这种有线状态商的编码,放到软件中做,把比较耗费cpu的过程放到QAT中去做,在场景中,QAT整体的软件形态或软件组成,提供Zstd上的plug in,Zstd本身可以支持plug in的方式,把它的外部字典以生成器的方式引入进来,里面则提供了plug in。
LZ77和Huffman的兼容zip格式的压缩,有一套完整的名为QAT zip的软件栈,可以认为是中间层,对上面的业务提供的QAT的接口,然后去完成相关算法的压缩或者解压的过程。还有一些其他的不同的,例如hadoop、spark,都会提供相应的plug in,然后提供给客户,可以直接用plug in完成QAT的调用、数据压缩和解压缩。
在做SSL或TS加速时,最关键的模块就是QAT engine,它的作用就是中间层。向下可以调用QAT,向上可以对openSSL或google的Boring SSL 做QUIC协议的加速,阿里提出SSL(童锁)。在童锁中通过QAT engine,可以兼容整套的软件栈,整体的逻辑就是上层的业务应用,通过open SSL的接口,调用open SSL的lib SSL库,然后上层的应用调用库,发起session,然后在session中,需要做加解密的过程,它在通过open SSL本身的lib cypal的库,调用完成了加解密动作的过程。QAT engine作为engine框架具体实现,把特定的加解密操作的过程注册进去。相当于可以直接用QAT engine调用到QAT的硬件上,QAT engine作为整个软件栈的中间层,还具备QAT认证的能力,可以同时用软件或硬件的方式来联合加速协议栈,软件和硬件联合加速就是英特尔的cpu内部有很多种新指令,在第三代之前,开始有一些像VAS高级的向量化加解密的新指令,新指令对于TS加速有一定的效果,QAT engine做到了联合,上层的业务调用接口没变,然后QAT engine决定请求能优先走的硬件,或是发现硬件的流量请求都已经满,再继续利用软件,达到联合增强的效果。QAT的engine层面做硬件和软件的规划。
在QAT发展的过程中,跟各个厂商有很多的合作,通过阿里巴巴的第七代英特尔的实例的ECS升级,到第八代搭载的是英特尔的第四代的可扩染服务器,即suffrages sp。它使用内置的QAT,对于压缩和open SS加解密的负载做了测试。相比于它的前一代,前一代的cpu增长的性能是非常高的。RSA非对称加解密算法有五到七倍的增长,压缩极限情况下就几十倍的增长。
QAT给客户带来的价值到底是什么?总结出两方面,一方面是向上的箭头,向上的箭头是通过QAT做关键业务的性能的增长,但增长可能代表的意义就是使用同样的cpu核数,再搭配QAT的硬件,得到的性能更高,QAT作为硬件,也要关注到硬件有自己的规格上限。在没有突破到QAT硬件上限的情况下,搭配QAT能够大幅的提升加解密或者数据的压缩和解压缩的性能。另外引入QAT之后,软件上会有一些变化,在SSL中,更注重使用QAT的异步模式,在模式的使用过程中,会引入pulling的动作,硬件一旦完成加解密或压缩、解压缩的操作,软件就能拿到它相应的结果。
整体来说,在一定程度上,能够节省cpu运行的状态,整个软件运行时,也可以得到一定的缩减,例如以前用10个核能达到的性能,加了QAT后,用4个核加QAT就能得到,所以对于cpu的节省、软件的运行时间的缩短和通过压缩对于磁盘的节省,都可以通过QAT,带来的关键的计算资源,或者是辅助资源的节省。
综上所述,QAT的价值就是提升性能、节省更多的资源。节省出来的资源可以灵活的决定部署其他的业务或是其他的一些用途。
最后的链接是关于QAT的资料,包括搭配open SSL、boring SSL、Zstd或其他的客户的案例,以及QAT本身从最早的QAT1.7到1.8,再到四代中的QAT2.0所有的资料,包括驱动、release notes都在链接的集合里。