CN101123586B - 光网络中采用fpga分流处理网络数据报文的方法 - Google Patents

光网络中采用fpga分流处理网络数据报文的方法 Download PDF

Info

Publication number
CN101123586B
CN101123586B CN2007101221548A CN200710122154A CN101123586B CN 101123586 B CN101123586 B CN 101123586B CN 2007101221548 A CN2007101221548 A CN 2007101221548A CN 200710122154 A CN200710122154 A CN 200710122154A CN 101123586 B CN101123586 B CN 101123586B
Authority
CN
China
Prior art keywords
fifo
readable
message
data
gigabit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN2007101221548A
Other languages
English (en)
Other versions
CN101123586A (zh
Inventor
孙明浩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Ruian Technology Co Ltd
Original Assignee
Beijing Ruian Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Ruian Technology Co Ltd filed Critical Beijing Ruian Technology Co Ltd
Priority to CN2007101221548A priority Critical patent/CN101123586B/zh
Publication of CN101123586A publication Critical patent/CN101123586A/zh
Application granted granted Critical
Publication of CN101123586B publication Critical patent/CN101123586B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明提供了一种光网络中采用FPGA分流处理网络数据报文的方法,包括以下步骤:1.在FPGA内部设置n个缓冲区,实例化为FIFO,用于存储待转发的网络数据报文及其相关信息;2.对n个FIFO轮询是否可读,对于可读的FIFO进行读操作并将读取的数据转发给所述n个千兆出口,每个可读的FIFO读取两个以上的时钟节拍,然后切换到下一个FIFO;3.在对所述n个FIFO进行轮询和读操作一遍之后,回到步骤(2)。本发明的方法,可以大幅度提高多输出端口的出口带宽,缓冲某个端口的冲击流量,避免因为冲击流量造成某个端口的缓冲区溢出产生错误的数据报文。

Description

光网络中采用FPGA分流处理网络数据报文的方法
技术领域:
本发明属于光网络通讯技术领域,尤其涉及光网络中采用FPGA分流处理网络数据报文的方法,可以应用于10G光网络的接入设备中。
背景技术:
目前有线通讯领域的骨干网络大部分都是10G光网络,必须通过硬件接入设备将10G的光信号转化为多条线路的1000base信号,才能通过千兆的以太网卡直接接入pc机或服务器,来分析处理网络数据报文。在硬件接入设备中,采用基于FPGA设计的技术对网络数据报文进行分流处理。从10G光网络中接入的数据报文进入FPGA内部之后,经过某些处理,最终要从n个千兆出口发出,接入后端的设备。FPGA承担着数据的分流、缓存、转发等功能。由于千兆出口频率的限制,必须有8到12个千兆出口才能达到分流10G线路接入的数据报文的能力,达到流量的均衡,而不会因为带宽的不匹配产生大量报文的丢失。
在现阶段接入设备的数据分流策略大多数基于数据报文的“sip、dip”产生的哈希值(hash值)的不同而通过不同的端口输出,这样从宏观上可以保证每个千兆出口的流量基本相同,从而尽可能的利用千兆端口的带宽,提高其效率。但是在微观上存在如下一些问题。
首先,在某个瞬间可能从10G光网络接入的数据报文全都是某个或某段哈希值的,从而造成某个微观的时间段内某个千兆端口的数据量特别大,出现10Gbps的入口带宽和1Gbps的出口带宽,因此必须要求FPGA内部有较大的缓冲区来缓冲“冲击流量”。
其次,由于千兆端口芯片本身的数据报文缓冲区也有限,如果FPGA内部按照满带宽的效率从每个出口缓冲区读取数据报文转发到千兆端口芯片,即某个瞬间也会出现以10Gbps的带宽转发,但对于千兆端口芯片来说,它只能以1Gbps的带宽对外发送,因此也有可能造成千兆端口芯片缓冲区溢出,产生错误报文,所以FPGA内部逻辑必须能监控外围芯片的状态,根据其千兆端口的缓冲区的水位来决定是否转发数据报文。
再次,由于数据转发对应的n个千兆出口共用一套数据和时钟总线,如果以一个完整的数据报文为单位,传输完一个完整的数据报文之后再进行其他千兆端口的数据报文的传输就会造成其他千兆端口缓冲区的闲置,也会造成FPGA内部缓冲区的“紧张”,最终造成了千兆端口的效率不高,以及FPGA内部丢弃大量的数据报文。在图1所示,是一种采用FPGA分流处理网络数据报文的方法示意图,该方法用一个大的缓冲区存储所有出口的数据报文,然后根据每个报文的出口指向依次以一个完整报文为单位转发数据;它的优点是接口单一,逻辑简单,实现方便,缺点是效率不高,不能充分利用千兆芯片内部的缓冲区;比如FPGA内部连续要发送数据报文1、2、3、4,如果按照以一个完整的数据报文为单位进行转发,那么当在发送报文1直到1发送完毕,千兆其他端口都会处于闲置状态,降低了千兆出口的效率。
发明内容:
本发明的目的是提供一种光网络中采用FPGA分流处理网络数据报文的方法,以充分利用FPGA内部缓冲区,提高FPGA内部的对冲击流量的容忍度。
本发明的技术方案如下:
一种光网络中采用FPGA分流处理网络数据报文的方法,所述光网络中接入的网络数据报文进入FPGA内部经过处理后从n个千兆出口发出,包括以下步骤:
1.在所述FPGA内部设置n个缓冲区,采用FIFO来表示,用于存储待转发的网络数据报文及其相关信息;
2.对n个FIFO轮询是否可读,对于可读的FIFO进行读操作并将读取的数据转发给所述n个千兆出口,每个可读的FIFO读取两个以上的时钟节拍,然后切换到下一个FIFO;
3.在对所述n个FIFO进行轮询和读操作一遍之后,回到步骤(2)。
进一步,上述的分流处理网络数据报文的方法,所述步骤(1)中,所述FIFO的深度设置为能容忍连续接收存储4个网络中定义的最大的数据报文。
进一步,上述的分流处理网络数据报文的方法,所述步骤(2)中,在轮询当前FIFO是否可读时,如果该FIFO不空并且在本轮轮询中没有读取过,同时对应的千兆出口内部缓冲区不满,并且该FIFO之前的所有FIFO已经读取过,则该FIFO可读;否则不可读。进一步,在轮询当前FIFO是否可读时,如果当前FIFO为空,则将该FIFO标记为“已读”;如果当前FIFO可读,则进行读操作的同时或者读操作后将当前FIFO标记为“已读”;当对下一个FIFO轮询时,该FIFO之前的所有标记有“已读”的FIFO即为已经读取过的FIFO;在本轮轮询并对可读的FIFO进行读操作之后有一个时钟的延迟,将所有标记信号全部归零。
进一步,上述的分流处理网络数据报文的方法,所述步骤(2)中,每个可读的FIFO每次读取两个时钟节拍,切换到下一个FIFO时是零延迟的。进一步,在对每个可读的FIFO进行读操作时,如果连续读出的两拍数据是前一个报文的尾和下一个报文的头,那么将下一个报文的头寄存在FPGA内部的寄存器中,将报文尾转发;在下一轮循环中,如果该FIFO可读,并且有一拍的报文头寄存在内部寄存器中,那么对该FIFO只进行一个时钟节拍的读操作,将寄存器中的数据和读出的一节拍数据一同转发。
进一步,上述的分流处理网络数据报文的方法,所述光网络中的数据报文依次从不同的千兆出口转发。可以根据不同的网络情况,采用一个开关来控制是否安排光网络中的数据报文依次从不同的千兆出口转发。
本发明的优点和积极效果:
本发明的采用FPGA分流处理光网络中数据报文的方法,在FPGA内部用n个FIFO存储网络报文及其相关信息,采用轮询方式读取各个缓冲区的内容,该分流处理网络数据报文的方法应用于单输入多输出的系统中,有利于大幅度提高多输出端口的出口带宽,缓冲某个端口的冲击流量,避免因为冲击流量造成某个端口的缓冲区溢出产生错误的数据报文。进一步,可以按照固定的时间片在FPGA内部缓冲区之间进行切换(譬如两个时钟周期),而不是以一个完整的网络报文为单位,各个缓冲区之间切换零延迟,同时兼顾外围芯片各个通道的流控信息。还可以根据网络情况开启数据轮撒开关,这样能大幅度的提高性能,经现场测试的结果看在不开启数据轮撒开关时千兆出口流量在800Mbps时丢包率在万分之二,比以前的性能提高了百倍有余,而在开启数据轮撒开关时,在多大流量下都不会出现丢包的现象。
附图说明:
图1为现有技术中一种采用FPGA分流处理网络数据报文的方法示意图。
图2为本发明的采用FPGA分流处理网络数据报文的方法示意图。
图3为本发明中FPGA内部缓冲区的一个具体设置示意图。
图4为本发明中FPGA内部控制模块某个缓冲区“已读”信号的生成流程图,n个缓冲区有n个“已读”信号,并且在每个时钟周期都会被更新。
图5为本发明中FPGA内部FIFO是否进行读操作的流程图,每个FIFO都有如图所示的判断逻辑,而且每个时钟周期此逻辑要进行判断一次。
具体实施方式:
下面结合附图,详细地描述本发明的具体实施方式。本具体实施方式针对10G光网络接入设备在单输入多输出时FPGA内部如何分流、缓存、转发网络报文,给出了详细的方法。如图2所示,是本发明的采用FPGA分流处理网络数据报文的方法示意图。
第一,在FPGA内部设置n个缓冲区,缓冲区的个数与千兆端口的个数相同,缓冲区的设置采用FPGA内部的blockram资源,实例化为FIFO,FIFO的宽度为接入FPGA内部的数据位宽加上一些表示该数据是完整报文的开始,结束还是报文中间内容以及此报文最末有效字节等信息。FIFO的深度一般设置为能容忍连续接收存储4个网络中定义的最大的数据报文,如此设置主要是为了容忍冲击流量。
第二,对n个FIFO轮询是否可读,对于可读的FIFO进行读操作并将读取的数据转发给所述n个千兆出口,每个可读的FIFO读取两个时钟节拍,然后零延迟地切换到下一个FIFO。
判断当前轮询的FIFO是否可读的依据为:如果该FIFO不空并且在本轮轮询中没有读取过,同时对应的千兆出口内部缓冲区不满,并且该FIFO之前的所有FIFO已经读取过,则该FIFO可读;否则不可读。
为方便后续的轮询和读操作,在本步骤中,还根据当前轮询的FIFO的状态决定是否打上“已读”的标记,只要当前FIFO为空或者当前FIFO可读,就将该FIFO标记“已读”,否则不标记。即:如果当前FIFO为空,则将该FIFO标记为“已读”;如果当前FIFO可读即当前读该FIFO的信号有效,则进行读操作的同时或者读操作后将当前FIFO标记为“已读”。在本轮轮询并对可读的FIFO进行读操作之后有一个时钟的延迟,将所有标记信号全部归零。
按照前述方法进行标记后,当轮询下一个FIFO是否可读时,所有带“已读”标记的FIFO即为已经读取过的FIFO,轮询该下一个FIFO是否可读时,是根据该FIFO是否为空、千兆出口内部缓冲区芯片是否不满以及是否有该FIFO的“已读”标记、是否该FIFO之前的所有FIFO在当前循环中被标记为“已读”,确定当前轮询的FIFO是否可读;只有该FIFO不空,对应的千兆出口内部缓冲区不满,并且该FIFO没有“已读”的标记,该FIFO之前的所有FIFO存在“已读”标记,才能对该FIFO进行读操作,否则不可读。如图4所示,是本发明中FPGA内部控制模块某个缓冲区“已读”信号的生成流程图,n个缓冲区有n个“已读”信号,并且在每个时钟周期都会被更新。
在本具体实施方式中,在FPGA内部增加一个控制模块(Distribute),该模块负责收集上游FIFO的状态信息,主要是千兆出口内部缓冲区是否不满信息,该FIFO的“已读”标记、是否该FIFO之前的所有FIFO在当前循环中被标记为“已读”,从而确定当前轮询的FIFO是否可读。通过收集的状态信息来判断是否进行读操作,循环的对n个FIFO进行判断。同时对已经读过的或者本身为空不能读的FIFO打上“已读”的标记,在每次轮询时要判断这个标记信号以决定是否进行读操作,而且每个可读的FIFO每次读取两个时钟节拍,然后零延迟地切换到下一个可读的FIFO。如果连续读出的两拍数据是前一个数据报文的尾和下一个报文的头,那么将下一个报文的头寄存在FPGA内部的寄存器中,将报文尾转发,在下一个循环中,如果该FIFO可读,并且有一拍的报文头寄存在内部寄存器中,那么对该FIFO只进行一个时钟节拍的读操作,将寄存器中的数据和读出的一节拍数据一同转发。并且做到FIFO间切换零延迟,只有在n个FIFO中可以读的全都轮询一边之后有一个时钟的延迟,将所有标记信号全部归零,重新进行下一轮的循环。这样在保证了千兆端口芯片的高效率的同时,最大限度的利用了FPGA内部的缓冲区。如图5所示,是本发明中FPGA内部FIFO是否进行读操作的流程图,每个FIFO都有如图所示的判断逻辑,而且每个时钟周期此逻辑要进行判断一次。
第三,因为FPGA与外部千兆端口芯片间总线为不同通道的数据共用,只是通过控制信号字来区分不同通道的数据,因此如何高速的实现此功能是一个不小的问题,在这点上我们采用了FPGA内部的IP CORE-spi4.2core,它与千兆端口芯片上的spi4.2硬核相互交互,保证芯片间的高速可靠的互联。
第四,如若实际网络中按照“哈希”方式均衡流量也会有很大的冲击流量,而且FPGA内部的缓冲区不足以缓冲如此大的冲击流量,那么可以按照“轮撒策略”分流各个千兆出口的流量,即定义10G光网络中的数据报文依次从不同的千兆端口转发,即10G光网络的开始n个报文依次从千兆端口的1、2......n端口转发,余下的报文也按照如此顺序转发。这样就可以人为的避免了网络中由于本身“哈希”设置而造成的冲击流量。而且由于与n个缓冲区连接的控制模块也是按照从1到n的顺序轮询这n个缓冲区,所以最大限度的利用了FPGA内部缓冲区的作用,也提高了千兆端口的效率。“轮撒策略”的开启与关闭可以设置一个开关,根据不同的网络情况决定是否开启此功能。
下面给出一个具体的网络数据报文的转发过程:
假设千兆端口有10个,即n=10,那么FPGA内部缓冲区设置如图3所示。图中,1到10的标注为10个缓冲区,A0到A7表示一个报文的不同内容,也可以是两个报文的不同内容,但都是表示要转发到对应的千兆端口1的数据。同样Bn、Cn......Jn也表示同样的含义。
1.假设某段时间内上述10个缓冲区均有数据,内容也如上图所示,而且这段时间内外围千兆端口芯片的缓冲区的状态全为可写的,即缓冲区没满,允许FPGA向其转发数据,那么FPGA转发数据的顺序,按照时间顺序如下:A0,A1,B0,B1,C0,C1,D0,D1,E0,E1,F0,F1,G0,G1,H0,H1,I0,I1,J0,J1,IDLE,A2,A3,B2,B3,C2,C3,D2,D3,E2,E3,F2,F3,G2,G3,H2,H3,I2,I3,J2,J3,IDLE如此循环。其中IDLE表示此刻为空闲状态,FPGA逻辑在此刻复位控制循环的逻辑,开始新的一轮循环。
2.由于spi4.2core也有一些逻辑限制,因此在上述循环中如果按照每个通道读取两个时钟节拍,读出的两拍数据为两个不同报文的内容,即上一个报文尾和下一个报文头,那么只转发上一个报文尾,下一个报文头寄存在内部寄存器中,等待下一循环转发。例如在上述顺序中,如果2通道的B0,B1是不同的报文的内容那么上诉循环序列为:A0,A1,B0,C0,C1,D0,D1,E0,E1,F0,F1,G0,G1,H0,H1,I0,I1,J0,J1,IDLE,A2,A3,B1,B2,C2,C3,D2,D3,E2,E3,F2,F3,G2,G3,H2,H3,I2,I3,J2,J3,IDLE......
3.如果基于1的情况,并且没有发生连续读取的两拍数据为不同的报文的内容的情况,但在第一轮循环后3通道的千兆端口芯片反馈为即将溢出的缓冲区状态信息,那么FPGA内部转发数据报文的序列为:A0,A1,B0,B1,C0,C1,D0,D1,E0,E1,F0,F1,G0,G1,H0,H1,I0,I1,J0,J1,IDLE,A2,A3,B2,B3,D2,D3,E2,E3,F2,F3,G2,G3,H2,H3,I2,I3,J2,J3,IDLE......如果在第三轮循环时3通道又变成可写的通道,2通道变成即将溢出,那么接下来的序列为:A4,A5,C2,C3,D4,D5,E4,E5,F4,F5,G4,G5,H4,H5,I4,I5,J4,J5,IDLE......
4.如果基于1的情况,在第一轮循环后通道2、3缓冲区变空,即没有可发送的数据报文,那么转发的数据报文序列为:A0,A1,B0,B1,C0,C1,D0,D1,E0,E1,F0,F1,G0,G1,H0,H1,I0,I1,J0,J1,IDLE,A2,A3,D2,D3,E2,E3,F2,F3,G2,G3,H2,H3,I2,I3,J2,J3,IDLE......
5.如果存在FPGA内部10个缓冲区的某个或某些将近溢出或已经溢出的情况,那么在进行数据分流策略时应该开启“轮撒策略”,即报文写入10个缓冲区是按照轮撒策略,即按照先后顺序依次向1到10的缓冲区内写入,如此循环。而读这10个缓冲区的机制与上述一致。

Claims (8)

1.光网络中采用FPGA分流处理网络数据报文的方法,所述光网络中接入的网络数据报文进入FPGA内部经过处理后从n个千兆出口发出,其特征在于,包括以下步骤:
(1)在所述FPGA内部设置n个缓冲区,采用FIFO来表示,用于存储待转发的网络数据报文及其相关信息;
(2)对n个FIFO轮询是否可读,对于可读的FIFO进行读操作并将读取的数据转发给所述n个千兆出口,每个可读的FIFO读取两个以上的时钟节拍,然后切换到下一个FIFO;
(3)在对所述n个FIFO进行轮询和读操作一遍之后,回到步骤(2)。
2.如权利要求1所述的方法,其特征在于,所述步骤(1)中,所述FIFO的深度设置为能容忍连续接收存储4个网络中定义的最大的数据报文。
3.如权利要求1所述的方法,其特征在于,所述步骤(2)中,在轮询当前FIFO是否可读时,如果该FIFO不空并且在本轮轮询中没有读取过,同时对应的千兆出口内部缓冲区不满,并且该FIFO之前的所有FIFO已经读取过,则该FIFO可读;否则不可读。
4.如权利要求3所述的方法,其特征在于,所述步骤(2)中,在轮询当前FIFO是否可读时,如果当前FIFO为空,则将该FIFO标记为“已读”;如果当前FIFO可读,则进行读操作的同时或者读操作后将当前FIFO标记为“已读”;当对下一个FIFO轮询时,该FIFO之前的所有标记有“已读”的FIFO即为已经读取过的FIFO;在本轮轮询并对可读的FIFO进行读操作之后有一个时钟的延迟,将所有标记信号全部归零。
5.如权利要求1所述的方法,其特征在于,所述步骤(2)中,每个可读的FIFO每次读取两个时钟节拍,切换到下一个FIFO时是零延迟的。
6.如权利要求5所述的方法,其特征在于,所述步骤(2)中,在对每个可读的FIFO进行读操作时,如果连续读出的两拍数据是前一个报文的尾和下一个报文的头,那么将下一个报文的头寄存在FPGA内部的寄存器中,将报文尾转发;在下一轮循环中,如果该FIFO可读,并且有一拍的报文头寄存在内部寄存器中,那么对该FIFO只进行一个时钟节拍的读操作,将寄存器中的数据和读出的一节拍数据一同转发。
7.如权利要求1所述的方法,其特征在于,所述光网络中的数据报文依次从不同的千兆出口转发。
8.如权利要求7所述的方法,其特征在于,所述方法采用一个开关来控制是否安排光网络中的数据报文依次从不同的千兆出口转发。
CN2007101221548A 2007-09-21 2007-09-21 光网络中采用fpga分流处理网络数据报文的方法 Active CN101123586B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2007101221548A CN101123586B (zh) 2007-09-21 2007-09-21 光网络中采用fpga分流处理网络数据报文的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2007101221548A CN101123586B (zh) 2007-09-21 2007-09-21 光网络中采用fpga分流处理网络数据报文的方法

Publications (2)

Publication Number Publication Date
CN101123586A CN101123586A (zh) 2008-02-13
CN101123586B true CN101123586B (zh) 2010-09-15

Family

ID=39085765

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2007101221548A Active CN101123586B (zh) 2007-09-21 2007-09-21 光网络中采用fpga分流处理网络数据报文的方法

Country Status (1)

Country Link
CN (1) CN101123586B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102420752B (zh) * 2011-11-28 2015-02-04 曙光信息产业(北京)有限公司 一种10Gbps流量下的动态分流装置
CN103066997B (zh) * 2012-11-29 2016-03-30 电子科技大学 一种基于fpga的双通道无缝数字延迟实现方法
CN113691421B (zh) * 2021-08-27 2022-08-02 烽火通信科技股份有限公司 一种报文生成方法和装置

Also Published As

Publication number Publication date
CN101123586A (zh) 2008-02-13

Similar Documents

Publication Publication Date Title
US7298756B1 (en) System and method for programming cell packet headers
US7439763B1 (en) Scalable shared network memory switch for an FPGA
JP2000349789A (ja) メモリー幅の非常に広いtdmスイッチシステム
US20050013311A1 (en) Switching device with asymmetric port speeds
US20010030961A1 (en) High-speed router
CN101123586B (zh) 光网络中采用fpga分流处理网络数据报文的方法
WO2000076256A1 (en) Photonic switch using time-slot interchange
US6904046B2 (en) Self-route multi-memory packet switch adapted to have an expandable number of input/output ports
CN100375466C (zh) 一种数据包转发控制装置和方法
CN101425960B (zh) 实现负载均分的方法和设备
US7568074B1 (en) Time based data storage for shared network memory switch
JP3753435B2 (ja) Atmスイッチ・コア
KR100339463B1 (ko) 고정길이셀의순차적스트림처리장치,비동기전송방식의스위치어댑터및스위칭유닛
CN102308538B (zh) 报文处理方法及装置
US6819675B2 (en) Self-route multi-memory expandable packet switch with overflow processing means
JPH1098483A (ja) Atm交換機とそのipcセル伝送方法
US7254139B2 (en) Data transmission system with multi-memory packet switch
EP2754050A1 (en) A method and apparatus for storing data
US7420968B2 (en) High-speed switch architecture
CN103414660A (zh) 一种支持传感接入和光分组传输的传感网络的节点装置
US7142515B2 (en) Expandable self-route multi-memory packet switch with a configurable multicast mechanism
CN100579288C (zh) 用于电信网络单元的交换矩阵
CN106683694A (zh) 一种速率自适应的存储器接口电路
CN103401739B (zh) 一种支持传感接入和光分组传输的传感网络的节点装置
CN112631985A (zh) 一种链路共享的片上网络

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant