英特尔QAT加速卡说明(二)

异步模式操作

加速卡支持同步和异步操作模式。在同步模式下,API将阻塞,直到加速操作完成后才返回到调用代码。
在异步模式下,API将在请求提交到加速器后返回调用代码。当加速器完成操作时,通过调用回调函数来通知完成。
从性能角度看,加速器需要每个加速引擎有多个挂起的请求,提交多个未完成的请求才能最小化加速引擎上的处理延迟,实现最大的吞吐量。对于同步操作模式,必须使用多个线程来确保有多个请求。多线程的使用引入了线程间上下文切换的开销,从而导致负载转移成本的增加。
因此,使用异步模式是获得最佳性能的推荐方法。

要异步调用需要提供回调函数,如下所示图4 。将请求发送到硬件后,控制权返回给客户端加速器,并在引擎完成操作时调用回调。这个用于调用回调的机制取决于我们的模式。对于中断模式,回调将作为中断处理程序下半部分的一部分被调用。对于其他模式,回调将在轮询线程的上下文中被调用。在这种情况下,用户应用程序负责创建和调度此轮询线程。采用的中断模式,所以回调函数将作为中断处理程序的下半部分的一部分被调用。
异步操作流程

加速驱动程序配置文件

加速驱动程序具有一个配置文件,用于配置驱动程序以用于运行时操作。
CyNumConcurrentSymRequests 指定加密实例的并发对称加密请求的数目。默认为512

CyNumConcurrentAsymRequests 指定加密实例的并发非对称加密请求的数目。默认为64

DcNumConcurrentRequests 指定数据压缩的并发数据压缩请求的数目。默认为512

NumberCyInstances 指定加密实例的数量。默认为6

NumberDcInstances 指定数据压缩实例的次数。 默认为2

CyXCoreAffinity / DcXCoreAffinity 指定加密/压缩实例应被附加到的核心上。 变化取决于X的值。

加速卡驱动程序用于向加速器提交请求和检索响应的硬件环的深度可以通过配置文件使用CyXNumConcurrentSymRequests,CyXNumConcurrentAsymRequests和DcXNumConcurrentRequest参数来控制。
这些设置会影响性能:
•随着配置文件中并发请求的最大数量增加,支持该请求所需的内存也会增加。
•如果并发请求的数量设置得太低,可能没有足够的未完成请求来保持加速器繁忙,因此吞吐量将下降。保持加速器处于繁忙状态所需的并发请求的最小数量是请求大小和通过轮询或中断处理响应的速率的函数
如果并发请求的数量设置得太高,最大延迟将会增加。
•建议对并发请求的最大数量进行调优,以实现给定应用程序的内存使用、吞吐量和延迟之间的正确平衡。作为指导,配置的最大数量应该反映加速器必须处理的峰值请求率。

QAT心跳

在某些情况下,QAT设备的固件可能无法响应,需要重新设置设备才能恢复。QuickAssist心跳特性为客户应用程序提供了一种检测和重置无响应设备的机制。它还通知应用程序进程重置操作的开始和结束,并在事件之间挂起所有QAT实例。
QAT设备固件定期将计数器写入指定的物理内存位置。每个线程的一对计数器在固件内主处理循环的开始和结束时递增。检查heartbeat包括检查每个线程的计数器值对的有效性。计数器不变时表示固件挂死。
心跳初始化
在启动时,QAT设备驱动程序为固件写入的计数器对分配内存,然后向固件发送消息以启动心跳功能。
心跳管理线程应该满足以下条件:
•对于任何给定的设备,只应该监视一个这样的进程/线程
•一个进程可以监视一个或多个设备
重置失败的设备
可以通过QAT框架将设备配置为自动复位

加速卡的 /sys/kernel/debug 调试文件系统

在代码框架中预留了DebugFS文件结点用于驱动程序的调试。位于/sys/kernel/debug/qat/qat_x_xxx/目录下,有dev_cfg、frequency、fw_counters、health、heartbeat、transport组成。
dev_cfg文件下是QAT加速卡的相关配置文件
frequency文件下是加速卡引擎的时钟频率(可略)
fw_counters文件下可以在打流量的情况下查看,可以看到加速卡各个引擎的固件请求和响应次数。
heartbeat文件可以用来查看芯片中引擎的心跳(和触发引擎重载)。
transport包含固件请求/响应数据。仅适用于内核空间实例。
目录下有bank_00bank_01,每个文件下又分别有config、ring_00、ring_02、ring_06、ring_08、ring_10、ring_14组成,作为硬件的辅助环来帮助IO数据流的传输和处理。加速卡驱动程序借助硬件环与加速卡硬件对接,这些硬件环是用来作为请求和响应环的。一个中断有16个硬件环组成,硬件环用于从加速卡硬件中检索计算请求结果响应。驱动程序使用MSI中断或者让软件轮询响应环。在加速卡应用程序界面中,服务是通过实例来访问的,一组环分配一个实例。因此在服务实例上执行的任何操作都将涉及通过分配给该实例的环进行通信。
Ring 提供对一种特殊的链表队列的管理,具有先进先出、定长、无锁、并发入/出队等特性。优点:工作更快,实现简单,适用于块数据的入/出队;缺点:定长、环多导致内存占用增加。
其中ring_00为Cy0RingAsymTx,环大小为4096,msg大小为64,
Ring_02 为Cy0RingSymTx,环大小为32768,msg大小为128
Ring_06为Dc0RingDcTx,环大小为65536,msg大小为128
Ring_08为Cy0RingAsymRx,环大小为2048,msg 大小为32
Ring_10为Cy0RingSymRx,环大小为8192,msg大小为32
Ring_14为Dc0RingDcRx,环大小为16384,msg大小为32


发布了7 篇原创文章 · 获赞 8 · 访问量 485

猜你喜欢

转载自blog.csdn.net/qq_44710568/article/details/104915469