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 *,因为它将使用标准的通知机制。

猜你喜欢

转载自blog.csdn.net/s2603898260/article/details/107924289