Intel® QAT加速卡之Linux上编程说明

QAT Software for Linux

1. Introduction

该程序员指南提供了有关软件体系结构和使用指南的信息。 相关的英特尔®QAT软件库文档中记录了有关使用英特尔QuickAssist技术(英特尔®QAT)API的信息,这些API提供了加速服务(加密和数据压缩)的接口。

1.1 术语

  • 软件包用作硬件版本1.7的英特尔®QAT软件包的通用术语
  • 加速驱动程序用作允许英特尔®QAT软件库API访问英特尔®QAT端点的通用术语

Table 1. 常用术语列表

TermDescription
ADFAcceleration Driver Framework
AESAdvanced Encryption Standard
ASICApplication Specific Integrated Circuit
BDFBus Device Function
CBCCipher Block Chaining mode
CCMCounter with CBC-MAC mode
CnVCompress and Verify
CnVnRCompress and Verify and Recover
CYCryptography
DCData Compression
DIDDevice ID
DMADirect Memory Access
DTLSDatagram Transport Layer Security
DRAMDynamic Random Access Memory
DSADigital Signature Algorithm
ECCElliptic Curve Cryptography
EVPEnvelope (OpenSSL high-level cryptographic functions)
GCMGalois/Counter Mode
GPLGeneral Public License
HMACHash-based Message Authentication Mode
IAIntel® Architecture
IDS/IPSIntrusion Detection System/Intrusion Prevention System
IEEEInstitute of Electrical and Electronics Engineers
IKEInternet Key Exchange
Intel® QATIntel QuickAssist Technology
IOCTLInput Output Control function
IOMMUInput-Output Memory Management Unit
IPSecInternet Protocol Security
LKCFLinux* Kernel Cryptographic Framework
MGFMask Generation Function
MSIMessage Signaled Interrupts
NUMANon-uniform Memory Access
PCHPlatform Controller Hub. In this manual, a Platform Controller Hub device includes standard interfaces and Intel® QAT Endpoint and I/O interfaces.
RSARivest-Shamir-Adleman
SALService Access Layer
SATASerial Advanced Technology Attachment
SGLScatter Gather List
SHASecure Hash Algorithm
SoCSystem-on-a-Chip
SPISerial Peripheral Interconnect
SR-IOVSingle Root I/O Virtualization
SSCStorage Subsystem Class
SSLSecure Sockets Layer
TCGTrusted Computing Group
TLSTransport Layer Security
TPMTrusted Platform Module
USDMUser Space DMA-able Memory
VFVirtual Function
VPNVirtual Private Network
WANWide Area Network

Table 2. 文档索引编号

DocumentDocument #/ 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 Guide330684
Intel QuickAssist Technology Cryptographic API Reference Manual330685
Intel® QuickAssist Technology Data Compression API Reference Manual330686
Using Intel® Virtualization Technology (Intel® VT) with Intel QuickAssist Technology Application Note330689

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值