1、概述
C6678中的数据移动非常复杂,多核导航器是C6678中协助完成在器件内高速数据包移动的外围设备。
2、组成
多核导航器由1个队列管理子系统(QMSS)+1个包DMA(Packet DMA PKTDMA)来控制和实现器件内的高速数据包移动。
QMSS(队列管理子系统)是一个硬件模块,它负责包队列的加速管理。可以通过向队列管理器写入32位描述符地址,将包加入到特定地址的包队列中。然后可以通过读取特定队列的地址,使包出队。
PKTDMA(Packet DMA)与普通DMA不同,它的目标地址由目标主体和空闲描述符队列索引决定,并不是一个绝对的存储地址。在接收模式中,PKTDMA传输负载数据到缓存中,并且将描述符加入到目标队列中。在发送模式,PKTDMA使描述符从发送队列中出队,从缓存中读取负载数据,并将负载数据发送到发送端口。
3、特征
对于Keystone I器件:
(1)1个硬件队列管理器,包括:
1、8192个队列(一些用于专门用途)
2、20个存储器区域(用于描述符存储)
3、2个连接存储器(Linking RAMs)
(2)几个PKTDMA,位于下列子系统
1、QMSS(基础结构或核到核的PKTDMA):
2、AIF2
3、BCP
4、FFTC(A,B,C)
5、NETCP(PA)
6、SRIO
(3)通过产生中断,通知多核主机
多核导航器具有以下一般特征:
(1)集中管理缓冲
(2)集中包队列管理
(3)协议独立的包级接口
(4)支持多通道/多优先级队列
(5)支持多空闲缓冲队列
(6)高效的主机配合减少主处理器需求
(7)零复制包切换
多核导航器为主机提供:
(1)每个通道1个不限制数量的包排队机制
(2)在包传输完成后,归还缓冲给主机
(3)在传输通道关闭后,修复队列缓冲
(4)分配缓冲资源给一个给定的接收端口
(5)在完成一个包接收后,传输缓冲给主机
(6)如果接收通道关闭,适度停止接收机制
上图中,QMSS包含一个队列管理器、PKTDMA基础结构和2个有定时器的累加器PDSP。硬件块(Hardware Block)是一个多核导航器外围设备(如SRIO)。
4、PDSP固件
在QMSS中有2个PDSP,每个PDSP都能运行执行QMSS相关功能的固件,如累加、QoS或事件管理。
累加固件(Accumulator Firmware)可以轮询选定数量的队列,查找已经推入其中的描述符。描述符将从队列中弹出并放在主机提供的缓冲区中。当列表变满或设置的时限到期时,累加器触发主机的中断以读取缓冲区中的描述符信息。还有个回收功能,可以自动将描述符回收到队列中,就像已经被Tx PKTDMA处理了一样。
QoS固件的职责是确保外围设备和主机CPU不会被数据包淹没。通过入口(Ingrass)和出口(Egress)队列的配置来管理,也被称为流量调整。
事件管理由开放事件管理器(Open Event Manager,OEM)软件处理,该软件是PDSP固件(Scheduler)和CorePac软件(Dispatcher)的组合。
5、Packet DMA
Packet DMA是一种DMA,其中数据目的地由一个目的地和空闲描述符队列索引决定,而不是绝对内存地址决定。
在接收模式下,PKTDMA获取一个空闲描述符,遍历该描述符以查找缓冲区,PKTDMA将有效负载传到缓冲区,并将该描述符放入目的地队列。
在发送模式下,PKTDMA从Tx队列弹出描述符,遍历描述符,从缓冲区读取有效负载,DMA将有效负载发送到发送端口。
与大多数DMA一样,PKTDMA主要关注点对点移动数据。通过正确初始化描述符、PKTDMA Rx/Tx通道和Rx流来完成PKTDMA编程。
6、队列管理器
队列用于在主机与系统中任何端口之间传递数据包时保存指向这些数据包的指针,队列在队列管理器中维护。
队列管理器是一个硬件模块,负责加速包队列的管理。通过将32位描述符地址写入队列管理器模块中的特定内存映射位置,将包添加到包队列。通过读取该特定队列的相同位置,数据包将被弹出队列。
主机包描述符:大小固定,包含一个指向数据缓存的指针。
单一包描述符:与主机包描述符不同,它将负载数据包含在了描述符内
主机缓存描述符:主机缓存描述符用于链接到主机包描述符或者其他的主机缓存描述符。
7、包发送流程
1.主机(Processor)感知到内存中的一个或多个数据块需要作为一个数据包传输。
2.主机分配一个描述符(通常从发送完成队列获取),填充该描述符中的字段,以及负载数据。
3.对于主机包描述符,主机根据需要分配和填充主机缓冲区描述符,以指向属于该包的任何剩余数据块。
4.主机将数据包描述符的指针写到队列管理器内的特定内存映射位置,该位置对应于所需的DMA通道的一个传输队列。
5.DMA控制器从队列管理器中读取包描述符指针和描述符的大小信息。
6.DMA控制器从存储器中读取包描述符。
7.当包的所有数据都传输完成时,DMA将把指向包描述符的指针写到数据包描述符的返回队列管理器或者返回队列编号字段中指定的队列。
8.在写入包描述符指针之后,队列管理器将使用状态行来向其他端口/处理器/prefetcher块指示发送完成队列的状态。当队列为非空时,就设置这些状态行
9.主机响应队列管理器的状态更改,并根据需要对包执行回收。
8、包接收流程
1.当在一个给定的通道上接收包时,端口将首先从FDQ(空闲描述符队列)获取空闲描述符,之后开始接收数据,并将数据填充到缓存中。
2.对于主机包,该端口将根据需要获取额外的描述符+缓冲区。
3.对于单体包,端口会在SOP(包首)偏移之后连续写,直到EOP(包尾)时停止。(主机必须确定包的长度不要超过上限,否则会覆盖下一个描述符。)
4.在整个包接收过程中,PKTDMA会将包描述符写到存储区域,然后将包描述符指针写到合适的接收队列中。
5.队列管理器负责向使用了状态线的其他端口或嵌入式处理器告知接收队列的状态。当队列不为空时,就会设置这些状态线。
6.主机响应队列管理器的状态更改,并根据需要对包执行回收。