该程序员指南提供了有关软件体系结构和使用指南的信息。 相关的英特尔®QAT软件库文档中记录了有关使用英特尔QuickAssist技术(英特尔®QAT)API的信息,这些API提供了加速服务(加密和数据压缩)的接口。
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 |
略。
除了第3.1节“硬件/软件概述”中提到的硬件外,各个平台还包含一些重要的软件组件,这些组件是产品的一部分。 该软件包括在英特尔®架构(IA)CPU和英特尔®QAT端点上运行的驱动程序和加速代码 。
尽管本文档的重点是针对硬件版本1.7的英特尔®QAT软件,但也支持英特尔®通信芯片组8925至8955系列。
逻辑实例可被视为通往硬件的通道。 逻辑实例允许地址域(即内核空间和单个用户空间进程)配置要由该地址域使用的环,并定义该环的行为。
逻辑实例详细说明及各结构间的组织关系
在内核空间中,可以将每个逻辑实例配置为在以下其中一个中运行:两种模式:
在用户空间中,可以将每个逻辑实例配置为在两个实例之一中运行模式:
轮询模式
epoll轮询模式
只有在内核空间中才支持中断模式。 在用户空间中,不再支持中断模式; 因此,不能再将用户空间实例配置为中断模式。在中断模式下配置时,加速器驱动程序框架(ADF)注册一个中断处理程序到响应环处理中。由于服务中断的等待时间可能很昂贵,因此硬件辅助环提供了一种机制,可将中断成本摊销为(可为多个响应提供服务的)单个中断。 配置文件的中断合并部分允许用户选择使用以下方法摊销响应中断:基于时间的中断方案或基于响应数的方案。
ADF注册了一个中断处理程序来处理环形存储区中断。 触发中断时,ADF为该中断提供服务并创建一个中断处理程序的下半部分,以消耗响应环的响应。 当支持MSI-X时,将创建中断处理程序的下半部分并将其关联到已配置的内核, 对应用程序代码的回调发生在此Tasklet的上下文中。 下图显示了此序列(为清楚起见,对整个处理流程进行了精简)。
由于使用中断服务和在中断下半部中执行中断处理程序成本较高,用户不想使用中断模式,则可以选择禁用中断并轮询响应。 通过将配置文件中逻辑实例的Dc / CyXIsPolled属性设置为1,可以基于每个逻辑实例配置此机制。配置为1时,ADF不为该逻辑实例提供中断服务。
ADF框架提供了一组API,允许客户轮询给定加速器上的单个存储区或所有存储区:
icp_sal_pollBank : 轮询指定加速器上指定存储区上的响应环
icp_sal_pollAllBanks :轮询指定加速器上所有存储区上的响应环
服务访问层(SAL)提供了一组API来轮询单个逻辑实例:
icp_sal_CyPollInstance : 轮询特定的加解密逻辑实例
icp_sal_DcPollInstance :轮询特定的数据压缩逻辑实例
基于事件的轮询模式称为“ epoll模式”。 英特尔®QAT技术驱动程序的新模式支持Linux epoll接口。 Linux epoll是一种可扩展的I / O事件通知机制,旨在替代较早的select / poll系统调用。
要使用Linux epoll,用户空间应用程序需要使用以下API:
驱动程序的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 *,因为它将使用标准的通知机制。