WLAN控制器 – CVMX报文硬件加速原理

来源:互联网 发布:钓鱼网站 知乎 编辑:程序博客网 时间:2024/05/22 12:28

WLAN控制器 – CVMX报文硬件加速原理

 

1.   背景简介

为了适应路由流表的灵活性,AC设备使用软件来对报文进行转发处理。从AC-AP的业务架构知道,AC是整个企业WLAN的报文转发的集中点,其转发速率至关重要,纯软件是无法达到足够的转发速率的,会成为整个WLAN的速率瓶颈所在。为了解决上述问题,采用硬件来对报文处理进行加速。目前采用Cavium的OCTEON处理器,这种处理器是多核结构,可以达到多路并行处理报文的效果,而且内部有硬件单元可以保证并行处理后的报文也是按照输入顺序流入下一步。同时处理器还有报文硬件加速机制,可以满足报文处理速率。另外,由于AC设备采用路由流表和CAPWAP协议进行转发,涉及到TCP/UDP层,并不只是IP头解析可以解决,所以AC设备上采用软件进行进一步解析工作。

 

2.   处理器硬件单元

OCTEON处理器对于报文处理,有一系列的硬件单元来进行硬件加速处理。本节对这些硬件单元进行介绍

 

OCTEON芯片报文硬件处理单元如下:

  • CORE:指多核处理器以及其上运行的软件,该硬件单元通过其上运行的软件对报文进行处理。这里的软件指的是运行在多核上专门处理报文的虚拟机及其操作系统。
  • L2/DRAM:内存单元,用来分配处理器所需要的内存,通过FPA单元对L2/DRAM进行分配/释放管理。
  • FPA:Free Pool Allocator Unit,管理内存的硬件单元。当报文到达的时候,处理器会通过FPA接口请求分配WQE Buffer和Packet Data Buffer的内存,FPA会从L2/DRAM中真正分配内存。WQE Buffer用来填充调度相关内容,并将WQE的指针加入到SSO中等待调度;Packet Buffer中记录了接受到的报文和相关的解析玩的内容。WQE中保留有Packet Buffer的指针,当调度到WQE的时候,就可以找到相关的报文了。
  • IOB:IO Bridge,IO总线桥接器。使用IOBI作为输入报文的总线,IOBO作为输出报文的总线。
  • Simplified PacketInterface Block:非常简单,负责的报文收发。Interface RX Port负责接收报文;Interface TX Port负责发送报文
  • PKI:Packet InputBlock。负责输入报文的预处理工作。内部有两个子硬件单元如下

IPD: Input Packet Data:负责从interfaceRX Port接收报文,并从FPA申请内存报文报文内容。

PIP:Packet Input Process:负责对输入报文进行预处理,完成如报文保证IP报文解析,填写WQE信息等。

  • SSO:Schedule /Synchronization / Order Unit ,SSO硬件单元是OCTEON处理器的“心脏”,负责调度报文处理功能。OCTEON处理器是多核结构,但是在一个OCTEON芯片上只有一个SSO硬件单元。硬件收到报文后,会对每个报文形成一个独立的任务体WQE(Work Queue Entry),并将WQE的指针加入到SSO的调度队列中等待SSO按照QoS策略对其进行调度。SSO硬件处理单元提供以下特性:

Schedule:根据QoS策略对报文进行调度处理。

Synchronization:提供了硬件支持的报文锁(packet-linkedlocks),这个锁可以保证报文按照入方向的顺序被串行处理。

Order:维护报文的输入顺序。被维护了顺序的报文可能被处理器并行处理,但是在处理完成后,SSO会按照输入顺序恢复报文;

  • PKO:Packet Output Unit,负责报文的输出预处理,如封装IP头和MAC头,并发送给Interface TX Port将报文进行输出。报文输出的QoS是通过CORE上运行的操作系统软件进行流控,后面的实现章节中将介绍软件报文流控处理。PKO中有多个报文输出队列用来进行QoS的区分。
  • RED:Random Early Dropping. 当报文错误,在RED单元会将报文进行丢弃。如果输入报文缓存快使用完的时候,在处理器报文入方向上,RED单元中会对报文进行随机的丢弃。

 

3.   报文硬件加入流程

3.1    报文输入处理流程

图 1 报文输入处理流程

 

报文输入处理流程如下:

1.      Interface RX Port接收报文并完成错误校验处理。然后通过IOBI将报文直接发送到PKI的IPD单元。IPD单元同PIP单元共享内存,这两个单元在一起完成输入报文的预处理工作。

2.      IPD单元将报文共享给PIP后,PIP完成对报文ETH头和IP头进行报文的解析和软件配置的校验工作。然后PIP开始根据QoS策略计算IPD所需要的WQE各个域的值。

3.      如果报文没有被RED丢弃的话,IPD会从FPA中请求分配WQE Buffer 的内存和 Packet Data Buffer的内存。(FPA负责管理空闲缓存内存)

4.      IPD将WQE的各个域的值写入到分配好的WQEBuffer中,并同时将解析的报文内核和原始报文内容写入到Packet Data Buffer中。注意这里实际是写入到了L2/DRAM中。

5.      IPD调用add_work方法,并将WQE的指针添加到SSO中相应的QoS队列中,等待SSO调度处理

3.2    SSO和CORE的报文处理流程

 

图 2 SSO和CORE的报文处理流程

 

SSO和CORE的报文处理路程如下:

SSO根据报文输入顺序,报文锁和QoS策略来对报文进行调度处理。

6.      6a,6b:CORE调用get_work操作,从SSO中获取一个新的WQE指针。WQE中包含了PacketData Buffer的指针。

7.      CORE对报文进行处理,也就是上送操作系统协议栈。CORE对报文进行读写,此时报文处于L2/DRAM中。

8.      在CORE上的软件完成对报文的处理后,core发送Packet Data Buffer 指针和偏移量到PKO中合适的报文输入队列中。这些输出队列是按照系统软件的QOS策略配置的,默认情况下是按照报文的输入顺序。

9.      CORE释放报文对应的WQEBuffer回FPA。注意,此时Packet Data Buffer使用的内存并未释放,是因为报文尚处于PKO中,还没有真正的发送出去。

 

3.3    报文发送流程

图 3 报文发送处理流程

 

报文发送处理流程如下:

10.  PKO通过DMA的方式将Packet DataBuffer内容从L2/DRAM读取到PKO的内部内存中(通过PKOB总线)

11.  PKO计算添加TCP或UDP的校验和(可选),然后将内部内存的报文内容通过POB总线发送到输出端口。Interface TX Port单元完成报文的传送工作。根据软件的配置,PKO可以选择通知CORE报文已经送出。

12.  PKO释放Packet DataBuffer到FPA单元。


0 0