《2022龙蜥社区全景白皮书》——06 “龙蜥+”精选方案与案例——6.1 精选典型方案——6.1.2 系统安全场景的加解密加速方案(上) https://developer.aliyun.com/article/1229109
实践验证
我们关注通用CPU计算和Intel® Crypto Acceleration(qat_sw)方案的加速对比,同时参考QAT(qat_hw)方案的数据。
系统环境:基于阿里云ECS云服务器
软件包:基于龙蜥操作系统Anolis OS 8.4
兼容性:Anolis BabaSSL文档,BabaSSL兼容openssl-1.1.1的全部能力。下面在AnolisOS 8.4上验证BabaSSL兼容qatengine, 支持Ice Lake加速和QAT offload。
OpenSSL性能:CPU指令加速属于底层特性,我们按照自下而上的方法逐层验证,首先对比OpenSSL底层的基础加解密算力。
对称密码:Ice Lake单核平均比Skylake高42%,比Rome高12%,比Ampere高20%:
1、符合Intel发布的Ice Lake单核1.4倍于Cascade Lake;
2、符合ECS发布的实时音视频通信加密的场景性能最大提升40%。
非对称密码:Ice Lake单核平均比Skylake高35%,比Rome高15%,是Ampere的3.5倍:
1、符合RSA特点:sign签名计算的消耗高运行慢,verify验证计算的消耗低运行快;
2、符合EC特性:sign签名计算比RSA快一个量级以上,verify验证计算比RSA慢;
3、Ampere的公钥密码计算性能较低(ARMv8 crypto extension)。
加速性能
# openssl speed -engine qatengine [algo] #包含qat_sw加速效果,无qat_hw offload
对称密码:Ice Lake加速效果符合预期的最高3.1倍:
1、block size大于256Byte时,AES-GCM能达到加速3~4倍。
2、block size小于64Byte时,AES-GCM有少量20%回退 。小于64Byte场景较少, Nginx默认ssl_buffer_size为16KB,可选4KB加速time to first byte响应。
非对称密码:部分场景可以达到预期的优化3~6倍:
1、同步模式没有指令加速效果,有30%左右单核通用计算的提升;
2、异步模式jobs大于8时有优化,RSA 2K sign 6倍,verify 3倍,ECDSA P256 sign 2倍,ECDH 3~倍;
3、异步模式jobs小于8时有回退。参考2.3.2章节分析,低负载场景没有加速需求,应该关闭加速。
Nginx性能:在OpenSSL底层加解密算力基础上,继续验证典型的端到端场景Nginx SSL/TLS性能:
1、复用QAT加速Nginx方案(需要Nginx支持SSL/TLS异步加速);
2、Nginx https SSL/TLS handshake的标准性能测试方法文档。
加速效果:Nginx SSL/TLS性能在单核Ice Lake加速后可提升2~3倍,是单核Skylake的3~4倍:
1、RSA有以上加速效果,ECDSA有60%通用计算提升。经分析是由于4核的client压力不足,在core通用提升基础上,nginx还有17%的加速效果。
2、Client connect数少于10时有回退,和OpenSSL异步低负载回退一致,低负载场景没有加速需求,应该关闭加速;
3、TLSv1.2的加速效果比TLSv1.3更好;
Tengine性能:Tengine从2.2.2版本开始支持async SSL,使用QAT offload SSL/TLS,支持的底层lib版本为:OpenSSL-1.1.0f和QAT_Engine-0.5.30。我们引入CPU加速后升级到:OpenSSL-1.1.1g和QAT_Engine-0.6.6,同时不需要QAT驱动和qatlib。
加速效果:Tengine SSL/TLS性能在单核Ice Lake加速后可提升2.7~3.2倍,是单核Skylake的3.5~4.2倍:
1、RSA有以上加速效果,ECDSA有60%通用计算提升。经分析是由于4核的client压力不足,在core通用提升基础上,tengine还有36%的加速效果;
2、tengine效果和asynch_mode_nginx类似;
3、仅对比TLSv1.2,TLSv1.3 tengine有专门的实践方案,此处略过。
总结
经过实践分析,Intel® Crypto Acceleration在Anolis OS 8.4可以达到理想的SSL/TLS加速效果。
传统主流的AES和RSA加速效果最好,Ice Lake的底层OpenSSL计算AES和RSA达到上一代Cascade Lake的3.4和5.1倍。应用层 Nginx SSL/TLS性能相应地加速到Cascade Lake的3.2倍,Tengine是3.3倍。整机多核性能随核数并发扩展,OpenSSL的AES和 RSA加速效果增加到3.8和5.7倍,Nginx增加到4.3倍,Tengine是3.8倍。
新兴的ECDSA加速效果相对较小,底层的OpenSSL计算ECDSA和ECDH加速了2倍和4.3倍,但应用层Nginx SSL/TLS性能小幅加速 1.5倍,Tengine是1.6倍,和上一代Intel® QAT的1.26倍效果类似。EC椭圆密码算法大幅优化了以往server端RSA的计算消耗,同等 安全性保证下的OpenSSL计算ECDSA性能已经达到RSA的10倍了。因此SSL/TLS性能中的密码学计算瓶颈不再凸显,端到端效果小 于底层加速是合理的结果。
兼容性方面,BabaSSL全兼容OpenSSL支持Intel® Crypto Acceleration。适配过QAT的应用也支持Ice Lake的CPU指令加速 SSL/TLS,例如Tengine, Envoy, DPDK等。其他应用可以参考asynch_mode_nginx进行异步SSL改造。tengine承载大量应用稳定 运行多年,我们推荐tengine作为Anolis OS 8.4的最佳SSL/TLS性能实践方案。