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方式重写了, 然而在测试的过程 ...
随机推荐
- 自学linux——6.安全外壳协议(ssh服务)
ssh服务 ssh(secure shell)安全外壳协议:远程连接协议,远程文件传输协议 1.协议使用端口号默认:22 若要修改,则修改ssh服务的配置文件/etc/ssh/ssh_config a ...
- 攻防世界Web区部分题解
攻防世界Web区部分题解 前言:PHP序列化就是把代码中所有的 对象 , 类 , 数组 , 变量 , 匿名函数等全部转换为一个字符串 , 提供给用户传输和存储 . 而反序列化就是把字符串重新转换为 ...
- pwnable.kr之simple Login
pwnable.kr之simple Login 懒了几天,一边看malloc.c的源码,一边看华庭的PDF.今天佛系做题,到pwnable.kr上打开了simple Login这道题,但是这道题个人觉 ...
- 内置函数 字符串比较 strcmp 登录密码
1 //内置函数 字符串比较 strcmp 2 // 原理:将两个字符串从首字母开始,按照ASCII码的顺序逐个比较 3 //字符串1 == 字符串2 返回0 4 //字符串1 < 字符串2, ...
- 数据结构与算法-排序(六)堆排序(Heap Sort)
摘要 堆排序需要用到一种数据结构,大顶堆.大顶堆是一种二叉树结构,本质是父节点的数大于它的左右子节点的数,左右子节点的大小顺序不限制,也就是根节点是最大的值. 这里就是不断的将大顶堆的根节点的元素和尾 ...
- JavaScript学习05(操作DOM)
操作DOM DOM(文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被结构化为对象树: 通过这个对象模型,Java ...
- scrapy爬虫框架使用
一.scrapy框架 1.什么是scrapy: 爬虫中封装好的一个明星框架.功能:高性能的持久化存储,异步的数据下载,高性能的数据解析,分布式. 2.使用方法: 安装: 下载tiwisted,此处位下 ...
- 【翻译稿】Behavior Driven Development (BDD)行为驱动开发
这是一篇翻译稿,方便给不知道BDD的同学扫盲.原文链接:What is BDD (Behavior Driven Development)? | Agile Alliance Definition定义 ...
- C# 如何在编译时将 dll 复制到 bin\Release 目录下
下面假设 Project 名为 Gamma4RTD,需要调用的 dll 文件为 rtddll.dll.IDE 是 Visual Studio 2015 打开 Visual Studio 2015 -& ...
- [SWMM]出现问题及解决
1,节点顺序 [错误]:如下图,在SWMM软件中普通节点到出水口的连接线不能正常连接,提示找不到出水口节点,但在inp文件中是存在的! [解决]:需要先写入点节点再写入线节点,即先写入[JUNCTIO ...