CentOS7安装QAT 1.7加密卡_Remy的学习记录-CSDN博客
GitHub - intel/QAT_Enginehttps://01.org/sites/default/files/downloads/intelr-quickassist-technology/337003-001-intelquickassisttechnologyandopenssl-110.pdfhttps://01.org/sites/default/files/downloads/intelr-quickassist-technology/337003-001-intelquickassisttechnologyandopenssl-110.pdf
通过内核空间中的设备驱动程序和用户空间中的库访问qat技术加速器。加密服务通过标准引擎框架提供给openssl。引擎构建在用户空间库之上,qat api接口跨版本无需修改。这种分层和与openssl框架的集成允许应用程序无缝利用。将异步支持添加到openssl-1.1.0中意味着应用程序还可以使用标准化API驱动更高级别的性能。
ASYNC_JOB结构构建在许多原语上(在执行过程中不被打断),以允许创建和管理轻量级执行上下文。添加到openssl-1.1.0提供了创建和管理异步作业所需的所有功能(类似协程),但没有主动管理这些资源。管理留给利用此功能的用户代码。
从逻辑上讲,ASYNC_JOB 结构作为openssl-1.1.0中加密复合体的一部分实现,即libcrypto,并由TLS堆栈使用。这允许应用程序继续以与以前相同的方式使用众所周知的openssl api,在应用程序中尽可能利用异步作业。ASYNC_JOB是openssl-1.1.0中可公开访问的API,因此,应用程序也可以直接与EVP API结合使用,或通过openssl-1.1.0 api间接使用。
为了有效地使用加速功能,需要一种机制,允许应用程序在等待英特尔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和事件通知,而不是在返回成功响应之前连续调用openssl api。
在因特尔官方文档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
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
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/openssl.cnf
cd /root/QAT_Engine/qat_contig_mem/
make
make load
make test (Hello world!)
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
# 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_INPUT
POLL: Polls the engine for any completed requests
(input flags): NO_INPUT
SET_INSTANCE_FOR_THREAD: Set instance to be used by this thread
(input flags): NUMERIC
GET_NUM_OP_RETRIES: Get number of retries
(input flags): NO_INPUT
SET_MAX_RETRY_COUNT: Set maximum retry count
(input flags): NUMERIC
SET_INTERNAL_POLL_INTERVAL: Set internal polling interval
(input flags): NUMERIC
GET_EXTERNAL_POLLING_FD: Returns non blocking fd for crypto engine
(input flags): NO_INPUT
ENABLE_EVENT_DRIVEN_POLLING_MODE: Set event driven polling mode
(input flags): NO_INPUT
GET_NUM_CRYPTO_INSTANCES: Get the number of crypto instances
(input flags): NO_INPUT
DISABLE_EVENT_DRIVEN_POLLING_MODE: Unset event driven polling mode
(input flags): NO_INPUT
SET_EPOLL_TIMEOUT: Set epoll_wait timeout
(input flags): NUMERIC
SET_CRYPTO_SMALL_PACKET_OFFLOAD_THRESHOLD: Set QAT small packet threshold
(input flags): STRING
ENABLE_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_INPUT
POLL: Polls the engine for any completed requests
(input flags): NO_INPUT
SET_INSTANCE_FOR_THREAD: Set instance to be used by this thread
(input flags): NUMERIC
GET_NUM_OP_RETRIES: Get number of retries
(input flags): NO_INPUT
SET_MAX_RETRY_COUNT: Set maximum retry count
(input flags): NUMERIC
SET_INTERNAL_POLL_INTERVAL: Set internal polling interval
(input flags): NUMERIC
GET_EXTERNAL_POLLING_FD: Returns non blocking fd for crypto engine
(input flags): NO_INPUT
ENABLE_EVENT_DRIVEN_POLLING_MODE: Set event driven polling mode
(input flags): NO_INPUT
GET_NUM_CRYPTO_INSTANCES: Get the number of crypto instances
(input flags): NO_INPUT
DISABLE_EVENT_DRIVEN_POLLING_MODE: Unset event driven polling mode
(input flags): NO_INPUT
SET_EPOLL_TIMEOUT: Set epoll_wait timeout
(input flags): NUMERIC
SET_CRYPTO_SMALL_PACKET_OFFLOAD_THRESHOLD: Set QAT small packet threshold
(input flags): STRING
ENABLE_INLINE_POLLING: Enables the inline polling mode.
(input flags): NO_INPUT
service qat_service restart
lsmod | grep qat
service qat_service status
./openssl speed -engine qat -elapsed -multi [num] -async_jobs [num] rsa2048
进程数 |
加密算法 |
异步 |
实例数 |
sign/s |
verify/s |
8 |
rsa2048 |
是 |
72 |
101860.5 |
882608.9 |
8 |
rsa2048 |
否 |
72 | 17362.0 |
110056.6 |
GitHub - intel/asynch_mode_nginx
阿里七层流量入口 Tengine硬件加速探索之路 - 知乎
其实还有很多东西需要补充,后续会把qat相关的东西全部系统性的整理出来。