600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > nginx 异步openssl Intel QAT硬件加速方案

nginx 异步openssl Intel QAT硬件加速方案

时间:2021-10-25 08:06:46

相关推荐

nginx 异步openssl Intel QAT硬件加速方案

参考

​​​​​​​CentOS7安装QAT 1.7加密卡_Remy的学习记录-CSDN博客

GitHub - intel/QAT_Engine/sites/default/files/downloads/intelr-quickassist-technology/337003-001-intelquickassisttechnologyandopenssl-110.pdf/sites/default/files/downloads/intelr-quickassist-technology/337003-001-intelquickassisttechnologyandopenssl-110.pdf

Intel QuickAssist简介

通过内核空间中的设备驱动程序和用户空间中的库访问qat技术加速器。加密服务通过标准引擎框架提供给openssl。引擎构建在用户空间库之上,qatapi接口跨版本无需修改。这种分层和与openssl框架的集成允许应用程序无缝利用。将异步支持添加到openssl-1.1.0中意味着应用程序还可以使用标准化API驱动更高级别的性能。

ASYNC_JOB结构构建在许多原语上(在执行过程中不被打断),以允许创建和管理轻量级执行上下文。添加到openssl-1.1.0提供了创建和管理异步作业所需的所有功能(类似协程),但没有主动管理这些资源。管理留给利用此功能的用户代码。

从逻辑上讲,ASYNC_JOB 结构作为openssl-1.1.0中加密复合体的一部分实现,即libcrypto,并由TLS堆栈使用。这允许应用程序继续以与以前相同的方式使用众所周知的opensslapi,在应用程序中尽可能利用异步作业。ASYNC_JOB是openssl-1.1.0中可公开访问的API,因此,应用程序也可以直接与EVP API结合使用,或通过openssl-1.1.0 api间接使用。

qat+nginx+openssl异步的技术堆栈图

为什么选择异步?

为了有效地使用加速功能,需要一种机制,允许应用程序在等待英特尔QAT加速器完成未完成的操作时继续执行。该编程模型与非阻塞Berkeley软件分发(BSD)套接字非常相似。操作在主应用程序的上下文之外执行,允许应用程序在加速器并行处理操作时充分利用可用的处理器周期。此功能由应用程序控制,应用程序必须更新以支持异步行为,因为它最了解何时调度每个TLS连接。

异步处理流程

第一次SSL_accept 1th调用。当应用程序将TLS连接标识为具有异步功能时,标准openssl调用将获取异步作业上下文,从而允许堆栈的底层暂停执行,在本例中,在qat引擎中。

这将导致函数返回到应用程序,并显示错误状态SSL_ERROR_WANT_ASYNC。

然后,应用程序可以注册与此TLS连接关联的文件描述符(fd),并使用标准epoll/select/poll调用等待响应的可用性。

一旦应用程序收到通知,它就可以使用该TLS连接再次调用相关的openssl api 第二次SSL_accept 2nd,从而完成响应处理。

或者应用程序可以放弃使用fd和事件通知,而不是在返回成功响应之前连续调用opensslapi。

在因特尔官方文档web服务器的异步优势中提到,openssl 1.1.0以上版本支持了异步,结合intel quickassist技术和nginx* 1.0负载平衡,增加了5.6倍连接数处理,相同配置情况下3.9倍于同步调用。

openssl异步处理和同步处理流程:

以卸载TLS1.2 RSA为例,对比openssl、qat+openssl同步、qat+openssl异步每秒连接数。

流水线允许引擎在单个TLS连接上并行执行多个对称加密操作,从而提高批量传输的吞吐量。当为TLS上下文启用管道时,每个SSL_写入操作的输入缓冲区被拆分为多个独立记录,引擎可以同时处理这些记录。然后,操作结果以正确的顺序写入套接字,这对客户端是透明的。在有足够数据可用的情况下,还支持备用方向(SSL_读取)。

安装

QAT_Engine-0.6.10.tar.gz

cd QAT_Engine-0.6.10/qat_contig_mem

# make

# make load

# make test

cd QAT_Engine-0.6.10

# ./configure --with-qat_dir=/tmp/QAT\

--with-openssl_dir=/root/openssl-1.1.1g\

--with-openssl_install_dir=/usr/lib64/ssl\

--enable-upstream_driver \

--enable-usdm

# make

# make install

# cp /path/to/QAT_Engine-0.6.10/qat/config/c6xx/multi_process_event-driven_optimized/*/etc

# service qat_servicestop

# service qat_servicestart

安装qat1.7驱动

KVM虚拟机网卡和QAT SR-IOV 配置要点 - 简书

Intel® QuickAssist Technology (Intel® QAT) Driver for Linux* for Intel® Server Boards and Systems Based on Intel® 62X Chipset

cd /root/QAT

./configure

make

make install

安装openssl-1.1.1g

cd /root/openssl-1.1.1g

./config --prefix=/root/openssl-1.1.1g/.openssl -Wl,-rpath,\${LIBRPATH}

make depend

make

make install

//指定openssl安装目录下的lib

export OPENSSL_ENGINES=/root/openssl-1.1.1b/.openssl/lib/engines-1.1

//指定openssl安装目录下的lib

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64:/root/openssl-1.1.1b/.openssl/lib:/root/openssl-1.1.1b/.openssl/lib/engines-1.1/

//指定openssl源路径

export PERL5LIB=$PERL5LIB:/root/openssl-1.1.1b

export OPENSSL_CONF=/root/openssl-1.1.1b/.openssl/ssl/f

安装qat_config_mem

cd /root/QAT_Engine/qat_contig_mem/

make

make load

make test (Hello world!)

安装QAT_Engine

cd /root/QAT_Engine

./autogen.sh

./configure \

--with-qat_dir=/root/QAT \

--with-openssl_dir=/root/openssl-1.1.1b\

--with-openssl_install_dir=/root/openssl-1.1.1b/.openssl \

--enable-upstream_driver \

--enable-usdm

make

make install

qat Engine加载

# cd /root/openssl-1.1.1b/apps

# ./openssl engine -t -c-vvvv qat

(qat) Reference implementation of QAT crypto engine[RSA, DSA, DH, AES-128-CBC-HMAC-SHA1, AES-128-CBC-HMAC-SHA256, AES-256-CBC-HMAC-SHA1, AES-256-CBC-HMAC-SHA256, TLS1-PRF][ available ]ENABLE_EXTERNAL_POLLING: Enables the external polling interface to the engine.(input flags): NO_INPUTPOLL: Polls the engine for any completed requests(input flags): NO_INPUTSET_INSTANCE_FOR_THREAD: Set instance to be used by this thread(input flags): NUMERICGET_NUM_OP_RETRIES: Get number of retries(input flags): NO_INPUTSET_MAX_RETRY_COUNT: Set maximum retry count(input flags): NUMERICSET_INTERNAL_POLL_INTERVAL: Set internal polling interval(input flags): NUMERICGET_EXTERNAL_POLLING_FD: Returns non blocking fd for crypto engine(input flags): NO_INPUTENABLE_EVENT_DRIVEN_POLLING_MODE: Set event driven polling mode(input flags): NO_INPUTGET_NUM_CRYPTO_INSTANCES: Get the number of crypto instances(input flags): NO_INPUTDISABLE_EVENT_DRIVEN_POLLING_MODE: Unset event driven polling mode(input flags): NO_INPUTSET_EPOLL_TIMEOUT: Set epoll_wait timeout(input flags): NUMERICSET_CRYPTO_SMALL_PACKET_OFFLOAD_THRESHOLD: Set QAT small packet threshold(input flags): STRINGENABLE_INLINE_POLLING: Enables the inline polling mode.(input flags): NO_INPUT[ available ]ENABLE_EXTERNAL_POLLING: Enables the external polling interface to the engine.(input flags): NO_INPUTPOLL: Polls the engine for any completed requests(input flags): NO_INPUTSET_INSTANCE_FOR_THREAD: Set instance to be used by this thread(input flags): NUMERICGET_NUM_OP_RETRIES: Get number of retries(input flags): NO_INPUTSET_MAX_RETRY_COUNT: Set maximum retry count(input flags): NUMERICSET_INTERNAL_POLL_INTERVAL: Set internal polling interval(input flags): NUMERICGET_EXTERNAL_POLLING_FD: Returns non blocking fd for crypto engine(input flags): NO_INPUTENABLE_EVENT_DRIVEN_POLLING_MODE: Set event driven polling mode(input flags): NO_INPUTGET_NUM_CRYPTO_INSTANCES: Get the number of crypto instances(input flags): NO_INPUTDISABLE_EVENT_DRIVEN_POLLING_MODE: Unset event driven polling mode(input flags): NO_INPUTSET_EPOLL_TIMEOUT: Set epoll_wait timeout(input flags): NUMERICSET_CRYPTO_SMALL_PACKET_OFFLOAD_THRESHOLD: Set QAT small packet threshold(input flags): STRINGENABLE_INLINE_POLLING: Enables the inline polling mode.(input flags): NO_INPUT

service qat_service restart

lsmod | grep qat

service qat_service status

rsa2048 性能测试

./openssl speed -engine qat -elapsed -multi [num] -async_jobs [num] rsa2048

nginx async patch

GitHub - intel/asynch_mode_nginx

阿里七层流量入口 Tengine硬件加速探索之路 - 知乎

其实还有很多东西需要补充,后续会把qat相关的东西全部系统性的整理出来。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。