基于FPGA的PCI/PCI-E可扩展网络分组处理系统设计

2020-07-09 05:52孙士勇
无线电通信技术 2020年4期
关键词:状态机以太网报文

孙士勇

(中国电子科技集团公司第五十四研究所,河北 石家庄 050081)

0 引言

路由交换芯片与控制处理器之间的分组处理通道是影响路由交换系统[1]整体性能的关键因素之一。基于RC82540,WG82574等PCI/PCIE网络控制器芯片实现分组处理通道是当前中低端路由交换系统常用的解决方案,但由于可扩展网络端口数量少,且缺乏对分组解析查找处理、专用协议处理以及自定义功能扩展的支持能力,无法满足中高端或特定领域路由交换系统在端口扩展、分组处理以及自定义功能扩展等方面的应用需求。而PCI/PCIE[2]通信处理器在芯片综合效能、分组处理性能与实时性等方面达不到要求,PCI/PCIE网络处理器芯片的尺寸偏大、功耗和成本过高,也都不是中高端或特定领域路由交换系统的分组处理通道的理想选择。FPGA具有丰富的可编程逻辑资源、存储资源以及IO互连资源,基于可编程硬件资源的分组处理方式天然具有性能高、实时强、灵活可扩展等优势。为此,需要基于FPGA实现PCI/PCIE可扩展分组处理系统[3-4],在路由交换芯片与控制处理器之间、路由交换系统与其他控制系统之间提供通用分组分组解析查找处理、强实时专用协议处理以及用户自定义功能扩展等能力的分组处理通道。

1 系统架构设计

1.1 设计分析

在组成方面,可扩展网络分组处理系统应包含PCI/PCIE接口、100/1 000 Mbps网络接口、强实时专用协议处理、用户可自定义扩展以及通用网络分组处理等功能模块。其中,对于强实时专用协议处理、用户可自定义扩展和通用网络分组处理三个功能模块,其处理内核本质上都包括分组解析、分组查表、转发决策、分组封装及输出调度等处理过程[5],不同之处是分组查表处理环节所用的查表关键字、查找表及查找结果。为了避免重复处理导致FPGA逻辑资源的浪费和系统复杂性的提升,设计上考虑将这三个功能模块合并形成统一的分组查找处理模块。系统性能方面,对于整个处理系统不低于4 Gbps的综合处理性能需求,由于1 000 M以太网接口时钟为125 MHz,综合考虑FPGA时序裕度、可编程IO互连资源、跨时钟域问题以及系统设计复杂度等因素,可以选用来自全局时钟引脚的125 MHz时钟作为系统逻辑参考时钟。在125 MHz系统参考时钟条件下,如果系统总线宽度为64 bit,则系统分组处理性能理论可达8 Gbps。除去系统内部处理会产生不高于25%的调度开销和字节开销,系统实际的分组处理性能会不低于6 Gbps,完全可以满足4 Gbps的系统分组处理性能要求[6]。对于更高的分组处理性能需求,可以考虑扩展系统总线宽度和提高系统参考时钟频率。

1.2 设计原理与系统组成

可扩展分组处理系统基于一体化、可扩展的架构理念进行设计,将PCI/PCIE接口抽象并适配为网络接口,会同系统所有的100/1 000 M网络接口进行统一编号、统一调度,通过复用模块调度后形成统一的内部封装分组进行解析、查表、转发等处理,降低了系统复杂度和设计难度。与此同时,采用可扩展的复用和解复用模块实现多端口的统一调度,既解决了接口的差异化问题,又实现了可多端口扩展的灵活性。同时,分组处理过程采用多级流水线处理[7],每级流水之间采用基于统一封装的分组缓存进行隔离,便于添加与删除处理流水,实现功能的灵活扩展。可扩展分组处理系统组成如图1所示。

图1 可扩展分组处理系统架构与组成 Fig.1 Architecture and composition of scalable packet processing system

图1主要包含网络接口模块、接口复用模块、分组转发查找处理模块、接口解复用模块和CPU维护配置接口模块。其中,分组转发查找处理模块是系统的组成核心,主要完成分组解析、转发查表、转发决策、分组封装以及流量限速等分组转发查找核心处理过程,包括分组信元管理子模块、分组缓存管理子模块、分组解析与查找处理子模块、通用分组处理子模块、功能扩展处理模块、专用协议处理模块、流量限速子模块以及转发查找表子模块等。另外,CPU维护配置接口模块主要用于完成系统内部的寄存器、查找表等组成资源的配置和维护功能。

1.3 网络分组基本收发过程

在可扩展分组处理系统中,网络分组的基本收发过程包括网络接口帧接收、输入调度与分组缓存、关键字提取、转发查表、转发决策与分组重封装、流量限速、报文输出调度、网络接口帧发送等环节。具体过程及其对应的功能模块如图2所示。

图2 网络分组报文的基本收发过程Fig.2 Basic receiving and sending process of network packet

在可扩展分组处理系统对分组的转发处理过程中,分组丢弃和流控机制需要特别关注:

① 分组丢弃。由于可扩展分组处理系统内部按流水线进行分组处理,为了避免在报文处理上产生紊乱,在系统中设置了两个分组报文丢弃点:一个是在进入分组重封装时从缓存中读出原分组后同意丢弃;另一个是在分组经过流量限速模块处理时的流量违约丢弃。

② 流控机制。由于本设计实现的是基于流水的分组处理过程,为了保证分组服务质量和避免丢包,每个流水级之间都设有流控信号。当后级处理不及时,会通过流控信号反压前级,最后流控反压会传递至分组缓存和网络接口缓存,直至反压制端口产生PAUSE帧。

2 FPGA设计实现

2.1 网络接口模块

网络接口模块主要包括:接收模块和发送模块。

2.1.1 接收模块

网络接口接收模块基本组成结构如图3所示。主要包含千兆以太网MAC(接收)、PCI/PCIE IP核(接收)以及接口接收缓存。其中,千兆以太网MAC(接收)由MAC帧接收控制状态机、接收帧统计、帧CRC校验及广播门限监测等组成;PCI/PCIE IP核(接收)由PCI/PCIE接收控制状态机、串并变换、接收帧统计及帧长检测等组成;接口接收缓存由缓存控制状态机和FIFO存储单元组成。

图3 接口接收模块基本组成结构Fig.3 Basic structure of the receiving module of the interface

网络接口接收模块的基本接收过程为:① 千兆以太网MAC接收来自GMII接口的8 bit并行数据流,由MAC帧接收控制状态机控制完成帧接收和处理过程,主要包括帧同步、帧接收、接收帧CRC校验、接收帧数统计及帧长检测等处理环节。根据CRC校验结果、帧长检测结果对接收帧进行丢弃或发送到接口接收缓存及错误状态统计等处理。② 接口缓存基于接收帧状态指示,在缓存控制状态机控制下进行帧数据接收处理,同步进行缓存状态检测并指示给千兆以太网MAC接收逻辑和接口复用模块,以便它们进行相应的处理决策。PCI/PCIE接口的接收过程类似,区别在于PCI/PCIE接口接收需要进行DMA处理,但不需要进行CRC校验。

2.1.2 发送模块

网络接口发送模块基本组成结构如图4所示,主要包含千兆以太网MAC(发送)、PCI/PCIE IP核(发送)以及接口发送缓存。其中,千兆以太网MAC(发送)由MAC帧发送控制状态机、发送帧统计、帧CRC生成、流量控制等组成;PCI/PCIE IP核(发送)由PCI/PCIE发送控制状态机、并串变换及发送帧统计等组成;接口发送缓存由缓存控制状态机和FIFO存储单元组成。

图4 接口发送模块的基本组成结构Fig.4 Basic structure of the sending module of the interface

网络接口发送模块的基本发送过程为:① 接口缓存模块在缓存控制状态机控制下接收来自接口解复用模块的帧数据,同步生成缓存状态指示分别提供给千兆以太网MAC发送逻辑和接口解复用模块,支撑它们进行相应处理。② 千兆以太网MAC在MAC帧发送控制状态机控制下完成帧发送处理,主要包括同步头产生、帧发送、发送帧CRC生成、发送帧数统计及发送帧长检测等处理环节。PCI/PCIE接口的接收过程类似,区别在于PCI/PCIE接口发送需要进行DMA处理,但不需要进行CRC生成处理。

此外,网络接口模块中的以太网MAC还需要完成半双工信道的CSMA/CD算法、全双工流量控制以及通过MIIM接口对以太网物理层芯片的管理控制等功能。

网络接口模块FPGA逻辑实现的关键点包括以太网帧接收/发送控制状态机、帧接收/发送与帧缓存逻辑间的异步时钟域处理以及接收/发送帧FIFO缓存读写控制三个方面。在实现时,为了节省FPGA逻辑资源,帧统计只选取了RMON统计中的典型统计内容。

2.2 接口复用/解复用模块

接口复用模块主要完成接收侧所有接口的接收复用功能,核心组成是接口复用控制状态机,实现接收接口的轮询调度、接收分组的信元拆分、分组处理信息生成,以及拆分信元与分组信息到下级缓存的发送控制等功能。接口解复用模块主要完成向所有发送侧接口的发送复用功能,核心组成是接口解复用控制状态机,实现发送接口的轮询调度、发送分组重组与封装,以及到分组处理模块到接口发送帧缓存的发送控制、分组内存的统一回收等功能。接口复用/解复用模块的控制状态机结构如图5所示。为了确保系统整体处理性能,同时节省FPGA逻辑资源,该部分FPGA逻辑采用125 MHz时钟、64 bit数据总线,分组解析信息采用530 bit单周期传递。

图5 接口复用/解复用模块的控制状态机结构Fig.5 Control state machine structure of interface multiplexing/demultiplexing module

2.3 分组转发查找处理模块

分组转发查找处理模块是整个系统的组成核心,也是设计和实现难点,其基本组成包含分组信元管理子模块、分组缓存管理子模块、分组解析与查找处理子模块、通用分组处理子模块、功能扩展处理子模块、专用协议处理子模块、流量限速子模块以及转发查找子模块等,如图6所示。其中,功能扩展处理子模块用于提供高性能的网络测量、网络入侵检测、网络状态感知等功能扩展。专用协议处理子模块主要用于提供微秒级系统运行状态即时通告,网络级、设备级、单元级的毫秒级快速保护切换等专用协议功能。

2.3.1 分组解析与查找处理子模块

分组解析与查找处理子模块主要实现查表关键字解析与查表申请、结果控制等功能,包含分组解析与查找处理控制状态机、通用分组FIFO、功能扩展FIFO和专用协议FIFO。其基本处理过程为:分组解析与查找处理控制状态机依据CPU配置信息从解析输入数据中提取相应的关键字,主要是MAC地址和IP地址。然后向转发查找子模块进行转发查表申请,系统采用双Hash[8]查找表。如果查找匹配,则将获取的QoS[9]、目的端口号和数据包控制信息存储到通用分组FIFO、功能扩展FIFO、专用协议FIFO中对应的一个。如果查找不匹配,则依据预先配置的非匹配动作信息对数据包进行相应处理。对需要丢弃的报文设置丢弃标志,输出到解复用模块进行统一处理。

2.3.2 分组缓存管理子模块

分组缓存管理[10]子模块主要实现256 kbyte的分组数据缓存功能,包含存储管理控制状态机、分组信息缓存及管理信息缓存等。其基本处理过程为:在输入侧,存储管理控制状态机接收接口复用模块的分组数据写申请,如果缓存允许,则控制分组数据写入缓存。在输出侧,存储管理控制状态机接收分组输出子模块的数据分组读申请,读出缓存数据并存入标准的256x64 bit FIFO。当数据包长度大于一个信元长度时,需要读取分组信元管理子模块中的信元链表获取下一个信元位置,并在数据分组输出完成后进行信元标识回收。

图6 分组转发查找处理模块的基本组成结构Fig.6 Basic structure of processing module for packet forwarding and searching

2.3.3 分组信元管理子模块

分组信元管理子模块主要实现空闲分组信元链表的管理以及信元链表申请与回收等功能。其基本处理过程为:① 初始化过程完成所有信元缓存到信元链表的链接。② 接收来自接口复用模块的空闲信元申请,根据申请的信元数目,准备一个空闲信元链表并返回头指针。如果没有足够信元,则返回申请失败。③ 信元链表另一端用于实现对分组缓存管理子模块的访问,当读或写分组数据包长度大于一个信元时,用于获取头指针之外的指针值。④ 当空闲信元数量达到CPU配置门限时,输出流控信号给网络接口发送模块作为流量控制[11]依据。

2.3.4 通用分组处理子模块

通用分组处理子模块主要实现通用发送分组的读取控制与缓存标识的回收操作。其基本处理过程为:根据分组解析与查找处理子模块的分组数据的缓存标识、丢弃标志及分组长度等分组数据包信息,从分组缓存读出原始报文。如果前级分组数据丢弃标志有效,则需要进行缓存标识回收操作。

2.3.5 流量限速子模块

流量限速[12]子模块主要实现系统级、端口级、端口队列级流量限速。其基本处理过程为:① 通过软件配置系统级限速参数,对整体流量进行控制。对判断为红色的系统报文直接丢弃,对于黄色报文,若后级模块半满时丢弃,否则通过。② 通过软件配置端口限速表,对各端口输出流量进行控制。对判断为红色的端口报文直接丢弃,对于黄色报文,若后级模块半满时丢弃,否则通过。③ 通过软件配置QoS限速表,对各端口的各QoS级输出流量进行控制。该子模块不进行包丢弃,而是打上相应颜色标签,由接口解复用模块根据各队列缓存状态决定是否丢弃。

3 软件设计实现

3.1 设计实现框架

与FPGA逻辑系统对应的软件系统是基于底层硬件的多层级软件系统,基本架构组成如图7所示,主要分为驱动层、捕获层、协议层和应用层。

驱动层软件[13]是组成核心,也是设计重点,主要包括设备注册和寄存器映射、数据包接收以及数据包发送等几个部分。设计时,整个FPGA逻辑系统可以被看作一个基于PCI/PCIE总线接口的网络接口单元,具有一个PCI/PCIE设备和多个以太网接口。从操作系统角度可以看成一个逻辑统一的以太网接口,每个物理接口均可映射为该逻辑接口下的虚拟接口。每个虚拟接口都具有独立IP地址,但需要共享一个MAC地址。由于分组处理模块要求不同物理以太网接口必须具有不同MAC地址,在接收方向上,数据包需要由驱动程序更换为同一个MAC地址后再发送给上层模块。发送方向上,驱动程序根据数据包中包含的路径信息将数据包中的源MAC地址替换为相应的物理接口MAC地址。另外,在以太网报文类型字段对数据包类型进行自定义定制,如0x9A9B,接收时标准类型送到IP协议栈处理,自定义定制报文由钩子函数抓取后分发到定制协议/应用处理软件进行相应处理,发送时由驱动软件模块发送到指定网络接口。

图7 FPGA逻辑系统的软件基本设计与实现框架Fig.7 Basic software design and implementation framework of FPGA logic system

3.2 报文收发原理

系统上电时,固件初始化PCI设备的配置寄存器(组),然后操作系统内核枚举PCI设备。通过读写PCI设备配置寄存器,自动分配存贮器地址空间和PCI设备地址空间,在Linux内核中的pci_driver结构进行描述,这样驱动程序就能安全访问FPGA逻辑系统的相关硬件资源。

接收方向,驱动程序对端口接收上来的数据包更换MAC地址,然后写入驱动程序准备好的内核缓冲区sk_buff。标准IP协议报文发送到IP网络协议栈,其他报文(自定义类型的报文)由钩子函数发送到定制协议栈进行处理。发送方向,驱动程序获得来自系统上层的数据报文,根据路径信息确定数据包的输出端口,在完成QoS标记和MAC地址更换后处理输出。

FPGA逻辑系统的相关规则由CPU通过控制通道下发到FPGA中,控制通道由字符设备驱动程序实现,数据读写通过ioctl()实现,对应用层提供封装完整的APIs函数。另外,从应用软件上看,由于系统被当作一个统一的PCI/PCIE设备,因而只有一个描述符队列和一个PCI/PCIE中断。

4 仿真验证

4.1 仿真方法与过程

本设计通过激励产生模块产生信号,然后通过网络接口输入FPGA逻辑系统模块,同时写入仿真验证系统缓存。通过将在仿真过程中由网络接口输出数据的有效信号作为读控制信号,读出仿真验证系统缓存数据,并与网络接口输出数据内容进行比较和统计。

仿真系统基本数据流过程为:① 数据包从网络接口接收模块接收;② 接口复用模块公平轮询调度后存入分组信元管理子模块、分组缓存管理子模块;③ 分组解析与查找处理子模块、转发查找子模块完成二层和三层交换转发查找;④ 通用分组处理子模块根据交换转发查找结果从分组缓存管理子模块取出数据;⑤ 接口解复用模块从通用分组处理子模块读出数据并存入相应以太网接口、PCI/PCIE的相应缓存中;⑥ 由以太网接口、PCI/PCIE接口输出的数据报文又重新发回仿真指定的以太网接口进行仿真比较和分析处理。

4.2 仿真验证结果

设计中,仿真源端采用4路GMII接口并行输入数据,每一路数据包长度从64~1 518 Byte递增,发包间隔采用最大以太网接口速率。在决定网络分组处理系统性能的转发查表阶段查看仿真时序波形,如图8所示,可以看出该阶段的时序波形仍存在余量,表明系统分组处理性能超过4 Gbps,符合设计预期。

图8 分组转发查表仿真波形Fig.8 Simulation waveform of packet forwarding lookup

5 结束语

本文基于FPGA,采用一体化、可扩展架构理念设计实现的可扩展网络分组处理系统,具有分组处理性能高、实时性强、系统功能和性能可灵活扩展等特点,是中高端或特定领域路由交换系统中路由交换芯片与控制处理器间的分组处理通道的理想解决方案。其一方面有效扩展该通道的分组处理功能,提高分组处理性能;另一方面可通过自定义功能扩展弥补路由交换芯片面对特定应用需求时的功能缺失。本设计所形成的可扩展网络分组处理系统及其嵌入式仿真验证系统,可为未来基于FPGA的各种通用和专用网络交换转发系统研发提供有益的支撑和指导。

猜你喜欢
状态机以太网报文
基于J1939 协议多包报文的时序研究及应用
FPGA状态机综合可靠性探究 ①
低轨星座短报文通信中的扩频信号二维快捕优化与实现
基于有限状态机的交会对接飞行任务规划方法
浅析反驳类报文要点
基于Spring StateMachine的有限状态机应用研究
三大因素驱动创新提速以太网快步迈入“灵活”时代
三大因素驱动创新提速 以太网快步迈入“灵活”时代
谈实时以太网EtherCAT技术在变电站自动化中的应用
1588v2中的PTP报文格式及应用