摘 要:介绍了一种在成熟以太网物理层技术的基础上使用硬件协议实现的高速可靠数据传输方法。该方法不同于一般采用的TCP机制,它利用FPGA实现数据分组打包和差错控制,用硬件的方法在保证了数据可靠传输的同时实现了软件协议无法实现的高数据率。经过测试证明,该方法相对于TCP协议具有带宽利用率高、传输速度稳定、CPU占用率低的优点,适用于点到点的高速可靠数据传输,同时还支持网络的扩展应用。
关键词:以太网;PHY;TCP;硬件协议;FPGA;高速可靠数据传输
在各种不同的场合中,人们需要将大批数据从一个设备无差错地传输到另一个设备上。对于设备间距离较近的场合,可以选择PCIE(典型距离是15~30 cm)或者USB(最长传输距离5 m)等接口。而对于距离较远的场合,可以选择RS232、RS485、以太网等传输介质,并在此基础上,通过上层协议来保证数据的可靠性。上层协议通常用检错重传机制来实现数据的可靠传输,如TFTP、TCP/IP、SCTP以及可靠UDP等。这些协议都必须依靠较为复杂的CPU运算和内存拷贝来实现数据可靠传输的功能。比如在Linux下,TCP/IP协议每发送一个数据包,CPU需要执行约14 000条指令[1]。因此CPU的工作频率、内存的读写速度、硬件I/O带宽都会影响TCP/IP的速度。一些嵌入式系统上TCP性能测试如表1所示。
CPU处理能力越强,TCP传输速度越高。与此同时,在最大传输单元为9 000 B时(即相对MTU1 500包长度增加6倍,包处理频度下降6倍),则传输速度大幅提高。这也从侧面说明了CPU处理能力对TCP传输速度的影响。
在点对点传输和局域网传输中,往往不需要完善的路由机制和流量控制,但同样需要一种可靠的数据传输手段。传统的TCP协议依赖CPU运算的特性,使得传输速度受到限制,并且受CPU负荷变化影响而速率不稳定[2]。从提高传输效率和减轻对CPU的依赖两方面考虑,提出一种基于硬件实现的高速可靠数据传输方法,将CPU从频繁的协议运算中解放出来。该方法可以在千兆以太网PHY所提供的物理层通信链路的基础上,通过编写FPGA逻辑,在硬件上实现可靠数据传输的协议,然后使用如PCIE这样的接口将数据提供给计算机系统。系统结构如图1所示。
1 选择重发机制提供可靠数据传输
保证数据传输过程中的可靠性有多种方式,如纠错码、信息反馈和检错重发机制。选择重发是检错重发的实现方法之一,相对于等待重发和退回重发,它具有高效率的特点,因而被广泛采用。比如在TCP/IP网络中,就是用检错重发机制的原理。但TCP协议中包括较为复杂的流量控制机制和拥塞控制机制,它们被设计来应对异构的、大范围的复杂网络环境。
而在点对点传输的应用中,或者在任务明确、拓扑简单的局域网中,不需要复杂的路由机制和流量控制,因而可以简化被广泛使用的检错重传机制,使得可靠性协议可以通过硬件实现。
如图2所示,将数据可靠传输的过程概括如下:
(1)待发送的数据在发送端打包,加上必要的识别信息和校验信息,存入发送端的缓存;
(2)待以太网信道可用之后将数据包通过千兆以太网发送给接收方;
(3)接收方收到数据包之后对内容进行校验,确认数据无误之后将识别信息通过ACK数据包反馈给发送方;
(4)发送方的缓存接收识别信息后确认数据已安全抵达接收方,清空缓存等待发送下一个数据包;
(5)发送方在设定的时间内没有接收到带有相应识别信息的ACK反馈,则进行重新发送,重发超过一定次数则报错。
校验信息选择使用和以太网兼容的CRC32,编码冗余度较低(为0.26%)。可以预见,在一般的误码率情况下(1×10-10),该方法可以实现高速的可靠传输[4]。
2 可靠数据传输的硬件实现
用硬件的方式实现所述的可靠传输,将会极大地降低对发送方和接收方在协议运算上对CPU资源的依赖,这点与TCP协议大为不同。
如图3所示,相较于TCP协议,硬件协议在接收数据时数据流大大简化。
TCP协议的数据流:
(1)网卡接收以太网数据通过PCIE以DMA的方式写入上位机内存,并触发中断;
(2)网络包内存拷贝进入OS协议层;
(3)对网络包的协议运算,检查包头信息和CRC校验等;
(4)确定无误后发送ACK包;
(5)将有效数据提供给上层用户。
硬件协议的数据流:
(1)设备卡FPGA检验数据正确性自发产生ACK回应包,将有效数据通过PCIE以DMA的方式写入上位机内存,可选择触发中断或轮询;
(2)驱动层直接将数据提供给用户。
发送过程与接收过程相反,情况类似,不再赘述。可见,利用FPGA实现的硬件协议省去了上位机软件协议运算和内存拷贝,直接将有效数据提供给上层用户,提高了数据传输的效率和速度,极大地减轻了CPU运算负荷,省去了对CPU的频繁中断,从而获得不依赖于CPU性能的稳定高速的可靠数据传输。这点是软件协议优化难以实现的。
2.1 硬件平台
设计PCIE接口设备卡,搭载Xilinx Spartan 6 FPGA和Broadcom千兆以太网PHY芯片。FPGA是设备的核心。在FPGA上部署PCIE接口模块和Ethernet接口模块,并设计内部逻辑实现数据的可靠传输。
2.2 FPGA逻辑模块的设计
FPGA的逻辑设计需要保证数据流的顺畅,各个模块的互联。采用硬件算法,实现对数据的分组打包和节点间的应答握手机制,保证每个数据包正确无误地抵达目标设备。FPGA内部的逻辑结构如图4所示,其中对于数据的可靠传输是在Tx和Rx模块中的状态机控制下实现的,Ethernet模块为Xilinx的TriMode Ethernet MAC Core,提供了对各种速率(10/100/1 000 M)的以太网PHY的支持。位于逻辑核心区域的InterConnect模块为多个端口之间提供了可动态配置的互联,因而为可能的网络拓扑提供支持。PCIE模块为上位机提供了访问FPGA 的数据和命令通道。
FPGA各个模块的说明:
(1)PCIE,使用Xilinx的s6_pcie:2.4 Logic Core[5]。开辟两个用户地址空间,一个用于访问内部状态控制寄存器,另一个用于访问FPGA数据。
(2)InterConnect,在内部寄存器的控制下,将各个Ethernet端口和上位机数据端口按照一定的规则互联起来,可以做到指定端口之间的转发和特定端口的收发操作。并且在verilog编码中采用参数化的风格,方便多端口的扩展。这样,在上位机控制软件的配合下,可以实现多个端口之间的灵活转发,因而可以方便地组建数据传输网络。InterConnect数据位宽可灵活配置,对于千兆网应用可配置为16位宽。该模块包括FPGA内部其他模块,时钟频率为75 MHz。
(3)Tx模块,其他端口的转发数据或者上位机的发送数据经由InterConnect传送到Tx模块中,在Tx模块的逻辑调度下以数据包为单位暂存在某一个Buffer中。每个Buffer都有独立的状态机控制。数据包在Buffer中准备好之后会在Tx模块的逻辑调度下发送至Ethernet模块,相应的Buffer状态机处于等待ACK的状态。在计数器超时后触发重传,重传一定次数依然没有正确ACK回应则报错。每个Tx模块中可以参数化地配置多个Buffer,通过多个Buffer的协作可以极大地提高信道利用效率。
(4)Rx模块,内部逻辑维护一个类似FIFO的存储结构。每当接收一个数据帧时,通过累加写指针将数据暂存入RAM中,并在状态机控制下记录当前帧的目的/源地址、帧类型,序号等信息。如果是ACK帧则把相应的帧识别信息传递给Tx模块;如果是需要接收的帧则在帧接收完后指示存储器数据有效,数据有效信号将促使待转发模块或者CPU接收FIFO读取该帧。Rx和Tx的以太网端口数据位宽为8位,接口时钟频率为125 MHz。
(5)Ethernet模块,使用Xilinx的tri_mode_eth_mac:4.6 Logic Core[6]。该模块提供CRC32编码和校验功能,提供对不同速率以太网的支持,并且对内部逻辑提供统一的数据接口。
3 系统性能测试
为了尽可能完善地测试系统性能,从逻辑仿真和实测两方面进行测试。
3.1 逻辑仿真测试
逻辑仿真是利用Xilinx ISim仿真器对FPGA逻辑的行为进行仿真预测。仿真测试的优点是测试准备简单,测试方法灵活;缺点是只能仿真FPGA逻辑部分,无法仿真其他硬件。考虑到本数据传输系统的核心在FGPA上,并通过与实测数据比对,逻辑仿真可以在很大程度上真实反映系统性能。测试的是两个节点之间的点对点传输。
(1)固定帧长1 024 B测试结果:带宽利用效率为96.4%,数据传输速度为120.5 MB/s。
(2)随机帧长测试结果:数据传输速度为99.4 MB/s,带宽利用效率为79.5%。
仿真波形如图5所示,rgmii_txen_A信号表明在这种情况下信道利用出现间隙。这是由于帧长度突然变长,需要等待内部数据写入Buffer。这种特殊情况可以通过增加Tx_buffer的数量来解决。
(3)人为添加误码测试结果:数据传输速度为106.7 MB/s,带宽利用效率为85.3%。
测试帧长度为1 024 B,设定FPGA在发送端口随机添加误码,测试添加误码率为0.000 76%。一般情况下误码率很低(平均一个误码造成一个数据包重传)。单次误码造成的等待和重传开销是一定的,因而传输速度的变化值与误码率的关系可以近似看成正比关系(?驻x:传输速率比变化;?驻e:误码率):?驻x=k?驻e。
测试时,人为添加误码率?驻e=0.000 76%,?驻x=-13.8 MB/s,求得k=-1.82×106 MB/s。由此估计,在一般情况下(即误码率为1×10-10),传输速度变化?驻x=-1.82 106 MB/s×10-10,为-18.2 KB/s,传输带宽仍接近120.5 MB/s。
3.2实际传输测试
测试两个节点间点对点传输,需要两个数据节点。节点A产生测试数据,节点B接收、校验测试数据,并通过PCIE以DMA方式发送到PC端。通过PC端软件检查并统计100 s传输数据,接收11 742 592帧,共计12.024 GB数据。
测试结果:数据传输速度为120.2 MB/s;带宽利用效率为96.2%,与仿真结果(96.4%)基本持平。
3.3 结论
根据测试结果,该硬件协议可以有效地进行可靠数据传输。在实际测试情况和可以预计的误码率情况下,顺序传输大块数据的传输速度可达到千兆以太网极限带宽125 MB/s的96%,即120 MB/s。这个数据与TCP协议在MTU 9 000超长帧设定下的PowerPC405系统上的表现基本持平(平均考虑收和发),而远高于MTU 1 500设定下的表现。TCP协议在低处理频度下可换来更高的速度,这说明软件协议的传输速度受CPU运算影响大,易产生波动。稳定的高数据率则是硬件协议的优点所在。
数据的可靠传输是一个具有普遍意义的话题。本文所阐述的在现有成熟以太网技术基础上,利用FPGA硬件实现数据的高速、可靠的传输。相较于复杂的TCP软件协议,使用硬件协议能够有效降低CPU负荷,并因此得到稳定的高速数据传输速率。本文所述的硬件平台支持多个以太网端口的扩展。节点内端口之间的可配置转发功能在板载MCU的控制下可实现灵活路由。这样多个节点可以组成数据传输网络,因而为诸如高速数据采集网络、局域网传输等网络应用提供了可行方案。
参考文献
[1] 马毅超.大规模陆上地震仪器中高速可靠数据传输方法的研究[D].合肥:中国科学技术大学,2011.
[2] DOUG GIBBS. Measuring treck TCP/IP performance using the XPS LocalLink TEMAC in an embedded processor system[J]. XAPP1043,www.xilinx.com,2008.
[3] 王圣,苏金树.TCP加速技术研究综述[J].软件学报,2004,15(11):1689-1697.
[4] 王新梅.纠错码与差错控制[M].北京:人民邮电出版社,1989.
[5] PCI express base specification revision 1.1, www.pcisig.com[Z]. 2005.
[6] XILINX. LogiCORE IP Tri-Mode Ethernet MAC v4.5 User Guide[Z]. 2011.