直接缓存访问DCA:网卡原本DMA写是将接收到的数据帧写入系统内存,DCA机制是网卡DMA写输入的数据能直接发送到属于CPU内部的L2高速缓存中,从而提高网络IO的性能。
设备驱动程序要初始化网卡的DCA功能,将CPU ID号(通过获取当前CPUID号)和总线号设置到相关寄存器;网卡控制器就会在DMA写的PCIe TLP事务报文头部的tag域做相应的标记;这些DMA写内存事务报文在经过inbound的PCIe主桥、片上网络NoC处理,就直接将数据送到CPU内部的高速缓存。(在Intel82599手册中,提到tag标签报文会触发硬件的预取机制)。
PCIe TLP格式(DCA1.0):
8位(7:0), 全零表示DCA关闭,不支持DCA功能的内存写必须全零;其他表示目标处理核ID号。
寄存器描述:
DMA请求者ID信息寄存器DCA_ID:描述了网卡上开启DCA功能的逻辑(总线号,功能号,设备号)。
DCA的控制寄存器DCA_CTRL:功能开关和DCA的版本号(当前有两个版本,一个是Legacy,一个是DCA1.0)。
在启动DCA的前提下,网卡上的DCA_ID逻辑发出的内存写TLP才会被设置成DCA。
每个DMA都有一个DCA专用控制寄存器。
1) 对于接收队列的DMA而言, DCA_RXCTRL[n]
2)对于发送队列的DMA而言,DCA_TXCTRL[n]
DCA支持接收队列和发送队列相关的PCIe内存写事务!!!因此,DCA专用控制寄存器,会指出哪些PCIe内存写事务开启DCA、哪些内存写事务要不要保序、以及DCA的目标CPU号。