QAT中buffer的数据结构有两种:Flat Buffers和 Scatter Gather Lists。
1. Flat Buffers
2. Scatter Gather Lists
- Accelerator rings
QAT Accelerator有一系列rings来存放数据。
16个rings组成一个ring bank。
图中一个package(即一个设备)包含16个ring bank和2个accelerator,每个accelerator又包含多个engine。
Engine是专门处理数据的加速单元,分为压缩解压和加解密两类。
每个处理器有多个物理核或逻辑核。
Ring按作用可分为两类:request ring和response ring。
处理器和QAT设备之间的通信可简化为以下四个步骤:
1) 处理器发送一个request到request ring中
2) Engine设备从request ring中读出request
3) Engine处理数据完毕后,将response写入response ring中
4) 处理器从response ring中取出response
- Instance
Service instance可以看做是QAT engine和处理器之间通信的通道。如图所示:
一个Processor有n个logical core。 每个core/thread可对应n个instance。每个ring bank包括16个rings。每个DC instance 需要2个ring,每个CY instance需要6个ring。多个instance可共享同一个engine。
cpaInstanceInfo2存放instance的结构信息,包括操作类型,亲和性,ID等信息,可在相应configuration file中查看。
- Load balancing
由于存在可能多个core和多个engine,实际上有必要对instance分配进行负载平衡。几个常见的例子如下:
- Instance数目有限
以8950这一产品为例,instance的最大数目为64个(MAX_INSTANCE<=64)。Engine的数目为48个。
- 理解
上几张图解释了A service instance can be thought of as a channel between accelerators and cores/threads running on the processor, which uses the rings for communication.这句话。
对rings的分配管理,cpaInstanceInfo的配置,负载均衡应该都是对用户透明的。使用时只需调用相关API,设置相关参数即可。