Intel® QAT加速卡之Linux上编程说明
QAT Software for Linux
1. Introduction
该程序员指南提供了有关软件体系结构和使用指南的信息。 相关的英特尔QAT软件库文档中记录了有关使用英特尔QuickAssist技术(英特尔QAT)API的信息,这些API提供了加速服务(加密和数据压缩)的接口。
1.1 术语
- 软件包用作硬件版本1.7的英特尔QAT软件包的通用术语
- 加速驱动程序用作允许英特尔QAT软件库API访问英特尔QAT端点的通用术语
Table 1. 常用术语列表
| Term | Description |
|---|---|
| ADF | Acceleration Driver Framework |
| AES | Advanced Encryption Standard |
| ASIC | Application Specific Integrated Circuit |
| BDF | Bus Device Function |
| CBC | Cipher Block Chaining mode |
| CCM | Counter with CBC-MAC mode |
| CnV | Compress and Verify |
| CnVnR | Compress and Verify and Recover |
| CY | Cryptography |
| DC | Data Compression |
| DID | Device ID |
| DMA | Direct Memory Access |
| DTLS | Datagram Transport Layer Security |
| DRAM | Dynamic Random Access Memory |
| DSA | Digital Signature Algorithm |
| ECC | Elliptic Curve Cryptography |
| EVP | Envelope (OpenSSL high-level cryptographic functions) |
| GCM | Galois/Counter Mode |
| GPL | General Public License |
| HMAC | Hash-based Message Authentication Mode |
| IA | Intel Architecture |
| IDS/IPS | Intrusion Detection System/Intrusion Prevention System |
| IEEE | Institute of Electrical and Electronics Engineers |
| IKE | Internet Key Exchange |
| Intel QAT | Intel QuickAssist Technology |
| IOCTL | Input Output Control function |
| IOMMU | Input-Output Memory Management Unit |
| IPSec | Internet Protocol Security |
| LKCF | Linux* Kernel Cryptographic Framework |
| MGF | Mask Generation Function |
| MSI | Message Signaled Interrupts |
| NUMA | Non-uniform Memory Access |
| PCH | Platform Controller Hub. In this manual, a Platform Controller Hub device includes standard interfaces and Intel QAT Endpoint and I/O interfaces. |
| RSA | Rivest-Shamir-Adleman |
| SAL | Service Access Layer |
| SATA | Serial Advanced Technology Attachment |
| SGL | Scatter Gather List |
| SHA | Secure Hash Algorithm |
| SoC | System-on-a-Chip |
| SPI | Serial Peripheral Interconnect |
| SR-IOV | Single Root I/O Virtualization |
| SSC | Storage Subsystem Class |
| SSL | Secure Sockets Layer |
| TCG | Trusted Computing Group |
| TLS | Transport Layer Security |
| TPM | Trusted Platform Module |
| USDM | User Space DMA-able Memory |
| VF | Virtual Function |
| VPN | Virtual Private Network |
| WAN | Wide Area Network |
Table 2. 文档索引编号
| Document | Document #/ Location |
|---|---|
| Intel QuickAssist Technology Software for Linux* Release Notes (Hardware Version 1.7) | 336211 |
| Intel QuickAssist Technology Software for Linux* Getting Started Guide (Hardware Version 1.7) | 336212 |
| Intel QuickAssist Technology API Programmer’s Guide | 330684 |
| Intel QuickAssist Technology Cryptographic API Reference Manual | 330685 |
| Intel QuickAssist Technology Data Compression API Reference Manual | 330686 |
| Using Intel Virtualization Technology (Intel VT) with Intel QuickAssist Technology Application Note | 330689 |
1.2 印刷说明
略。
2. Software Overview
除了第3.1节“硬件/软件概述”中提到的硬件外,各个平台还包含一些重要的软件组件,这些组件是产品的一部分。 该软件包括在英特尔架构(IA)CPU和英特尔QAT端点上运行的驱动程序和加速代码 。
2.1 通讯芯片系列兼容性
尽管本文档的重点是针对硬件版本1.7的英特尔QAT软件,但也支持英特尔通信芯片组8925至8955系列。
2.2 逻辑实例
逻辑实例可被视为通往硬件的通道。 逻辑实例允许地址域(即内核空间和单个用户空间进程)配置要由该地址域使用的环,并定义该环的行为。
逻辑实例详细说明及各结构间的组织关系
2.2.1 响应处理
在内核空间中,可以将每个逻辑实例配置为在以下其中一个中运行:两种模式:
- 中断模式
- 轮询模式
在用户空间中,可以将每个逻辑实例配置为在两个实例之一中运行模式:
轮询模式
epoll轮询模式
2.2.1.1 中断模式
只有在内核空间中才支持中断模式。 在用户空间中,不再支持中断模式; 因此,不能再将用户空间实例配置为中断模式。在中断模式下配置时,加速器驱动程序框架(ADF)注册一个中断处理程序到响应环处理中。由于服务中断的等待时间可能很昂贵,因此硬件辅助环提供了一种机制,可将中断成本摊销为(可为多个响应提供服务的)单个中断。 配置文件的中断合并部分允许用户选择使用以下方法摊销响应中断:基于时间的中断方案或基于响应数的方案。
ADF注册了一个中断处理程序来处理环形存储区中断。 触发中断时,ADF为该中断提供服务并创建一个中断处理程序的下半部分,以消耗响应环的响应。 当支持MSI-X时,将创建中断处理程序的下半部分并将其关联到已配置的内核, 对应用程序代码的回调发生在此Tasklet的上下文中。 下图显示了此序列(为清楚起见,对整个处理流程进行了精简)。

2.2.1.2 Polled Mode
由于使用中断服务和在中断下半部中执行中断处理程序成本较高,用户不想使用中断模式,则可以选择禁用中断并轮询响应。 通过将配置文件中逻辑实例的Dc / CyXIsPolled属性设置为1,可以基于每个逻辑实例配置此机制。配置为1时,ADF不为该逻辑实例提供中断服务。
ADF框架提供了一组API,允许客户轮询给定加速器上的单个存储区或所有存储区:
icp_sal_pollBank : 轮询指定加速器上指定存储区上的响应环
icp_sal_pollAllBanks :轮询指定加速器上所有存储区上的响应环
服务访问层(SAL)提供了一组API来轮询单个逻辑实例:
icp_sal_CyPollInstance : 轮询特定的加解密逻辑实例
icp_sal_DcPollInstance :轮询特定的数据压缩逻辑实例
2.2.1.3 Epolled Mode
基于事件的轮询模式称为“ epoll模式”。 英特尔QAT技术驱动程序的新模式支持Linux epoll接口。 Linux epoll是一种可扩展的I / O事件通知机制,旨在替代较早的select / poll系统调用。
要使用Linux epoll,用户空间应用程序需要使用以下API:
- ***epoll_create()/ epoll_create1()***:创建一个epoll实例并返回引用该实例的文件描述符
- ***epoll_ctl()***:在发生轮询的地方注册文件描述符。
- ***epoll_wait()***:等待通过epoll_ctl注册的文件描述符的I / O事件,如果当前没有可用事件,则阻塞调用线程。
驱动程序的epoll模式由两部分组成:内核空间部分和用户空间部分。合并字段为epoll模式公开了相同的行为。 如果通过更改合并字段延迟了中断,则向用户空间的事件传递也将延迟。
要启用epoll模式,请确保遵循以下步骤:
①. 在配置文件中,请对用户空间实例使用“ IsPolled = 2”; 例如:
Cy0Name = “SSL0”
Cy0IsPolled = 2
②. 无论应用程序以同步方式还是异步方式使用驱动程序,它都应创建一个线程来调用英特尔QuickAssist Technology驱动程序的epoll API和Linux标准epoll接口。
QAT驱动程序的epoll API接口如下:
Crypto:
icp_sal_CyGetFileDescriptor()
icp_sal_CyPutFileDescriptor()
Compression:
icp_sal_DcGetFileDescriptor()
icp_sal_DcPutFileDescriptor()
Linux 标准epoll接口如下:
epoll_create()
epoll_ctl()
epoll_wait()
当存储区采用epoll模式时,这意味着该存储区只有一个实例(加密或压缩)。 当某一个进程正在使用此实例时,意味着此进程是该存储区的唯一用户。 其他进程暂时无法使用此存储区。 但是,如果进程释放该实例,则其他进程可以使用该库。 由于该存储区只有一个实例,因此最多有16个用户空间实例可用于为epoll模式配置所有存储区。 (对于英特尔通信芯片组8925-8955系列,最多可以使用32个用户空间实例。)
如果一个进程需要同时提供压缩和加密服务,则将需要两个实例,这意味着该进程需要两个存储体。 在这种情况下,最多只能使用八个进程。 (对于英特尔通信芯片组8925-8955系列,最多可以使用16个进程。)
为了进行比较,当CPU处于空闲状态时,对于用户空间实例,标准轮询模式(“ IsPolled = 1”)将定期轮询空环,并且轮询将消耗一些CPU周期(例如当CPU处于空闲状态时,CPU使用率可能维持在2% )。 但是,如果使用epoll模式,则当CPU处于空闲状态时,CPU使用率将保持为0%。
对于用户空间实例,不再支持中断模式。 当响应环中没有数据时,用户空间的中断模式不会占用CPU周期,而与轮询模式不同,轮询模式会按指定的时间间隔继续进行检查。 有了epoll支持,可以使用标准的Linux * epoll API,例如epoll_create()/ epoll_ctl()/ epoll_wait()。
目前,大多数Web服务器和基于套接字的应用程序(例如Nginx *,Apache *等)都会使用epoll / select / poll之一来进行通知(当套接字可用于读取或写入时),然后采取适当的措施。 通过epoll模式,QAT驱动程序将与现有应用程序进行更无缝的集成,例如作为Nginx *,因为它将使用标准的通知机制。
Intel® QAT加速卡之Linux上编程说明的更多相关文章
- Intel® QAT加速卡之加密、哈希操作流程和示例
Intel QAT 加密API介绍 文章主要讲述了Intel QAT 加密API接口的说明,以及多种应用场景下的使用方法. 文章目录 Intel QAT 加密API介绍 1. 概述 1.1 会话(se ...
- Intel® QAT加速卡之逻辑实例
Intel QAT加速卡逻辑实例 1. QAT相关的名词组织关系 在本手册中描述的平台上,处理器可以连接到一个或多个英特尔通信芯片组8925至8955系列(PCH)设备. 从软件角度来看,每个PCH设 ...
- Intel® QAT 加速卡之IPSec示例
Intel QAT 加速卡之IPSec示例 文章目录 Intel QAT 加速卡之IPSec示例 1. QAT处理IPSec入站报文 2. QAT处理IPSec出站报文 3. 组织架构 4. 示例源码 ...
- Intel® QAT加速卡之同步异步模式
QAT 的两种操作模式 Intel QAT API同时支持同步和异步两种操作模式. 为了获得最佳性能,该应用程序应能够向加速引擎提交多个未完成的请求. 提交多个未完成的请求可最大程度地减少加速引擎上的 ...
- Intel® QAT加速卡之性能简介
Intel QuickAssist Adapter 8950 设备简介 支持英特尔QuickAssist技术的英特尔QuickAssist适配器提供加密加速和压缩加速服务. 1. Key featur ...
- Intel® QAT加速卡之编程demo框架
QAT demo流程框架 示例一: 代码路径:qat1.5.l.1.13.0-19\quickassist\lookaside\access_layer\src\sample_code\functio ...
- Intel® QAT加速卡之Ring & Ring Bank
1. QAT的应用模式 Intel 通讯系列芯片对于每种受支持的加速服务(加密,数据压缩),都支持以下应用模式: 内核模式,其中应用程序和加速服务都在内核中运行空间. 用户空间直接访问在用户空间中运行 ...
- Intel® QAT 加速卡之数据面流程(图)
QAT数据面流程 sessionSetupData数据结构 pOpData数据结构
- 使用.NetCore在Linux上写TCP listen 重启后无法绑定地址
拥抱.net core的过程中, 将公司的一套java项目改成了.net core 2.0版的. 里面的tcp服务被我用msdn的SocketAsyncEventArgs方式重写了, 然而在测试的过程 ...
随机推荐
- ssrf漏洞随笔
一.ssrf漏洞定义 SSRF漏洞:SSRF是一 种由攻击者构造请求,由服务端发起请求的安全漏洞.一般情况下,ssrf攻击的目标是外网无法访问的内部系统 SSRF漏洞( 服务器端请求伪造 )也被称为跨 ...
- BUUCTF-[极客大挑战 2019]BabySQL(联合注入绕过waf)+[极客大挑战 2019]LoveSQL(联合注入)
BUUCTF-[极客大挑战 2019]BabySQL(联合注入绕过waf) 记一道联合注入的题,这道题存在过滤. 经过手工的测试,网站会检验用户名和密码是否都存在,如果在用户名处插入注入语句,语句后面 ...
- 第7篇-为Java方法创建栈帧
在 第6篇-Java方法新栈帧的创建 介绍过局部变量表的创建,创建完成后的栈帧状态如下图所示. 各个寄存器的状态如下所示. // %rax寄存器中存储的是返回地址 rax: return addres ...
- 开发一个分布式IM(即时通信)系统!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 这知识学的,根本没有忘的快呀?! 是不是感觉很多资料,点收藏起来爽.看视频时候嗨.读 ...
- Sqli-Labs less25-25a
less-25 前置基础知识:后面的关卡涉及到WAF绕过: 主要有三种方式:白盒绕过.黑盒绕过.fuzz测试 网上sql注入WAF绕过的教程有很多,可以自己查询,总之就是比谁思路猥琐 根据第25关下面 ...
- 【力扣leetcode】-787. K站中转内最便宜的航班
题目描述: 有 n 个城市通过一些航班连接.给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 p ...
- 【AIOT】智能感知--物
From: https://liudongdong1.github.io/ 1. 物体检测 .1. 流体 D. V. Q. Rodrigues, D. Rodriguez and C. Li, &qu ...
- Linux初探之如何查看帮助文档自学命令
linux命令种类繁多,参数各异,要每个都记住除非是过目不忘的神人,否则你只能记住常用的那几个,等到 要用时还是得靠--help,man,info这些命令去读文档,可是这些文档看起来也不那么直观,所以 ...
- ffmpeg 常用知识点收集
ffmpeg 常用知识点收集 一.基础简介 FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影.转换.流功能,包含了libavcodec ─这是一个用于多个项目中音频和视频的解码器库,以及l ...
- ProjectEuler 007题
题目:By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is ...