基于fpga实现的hash平均分流方法及装置的制造方法

文档序号:10660771阅读:325来源:国知局
基于fpga实现的hash平均分流方法及装置的制造方法
【专利摘要】本发明公开了基于FPGA实现的HASH平均分流方法及装置,其包括根据以太网报文的格式提取报文的源IP地址和目的IP地址;采用HASH计算方法获取源IP地址的源IP地址Hash值和目的IP地址的目的IP地址Hash值;对源IP地址Hash值和目的IP地址Hash值进行异或得到整条报文Hash值;截取整条报文Hash值中的至少3个bits,采用至少3bits作为RAM表地址,读取出该报文所对应的CPU线程号;将报文所对应的CPU线程号标记在该报文的报文头上,并将标记后的报文发送至CPU;CPU接收并处理报文的报文头,根据报文头上的CPU线程号将该报文发送至指定的线程进行处理。
【专利说明】
基于FPGA实现的HASH平均分流方法及装置
技术领域
[0001]本发明涉及报文处理技术,具体涉及一种基于FPGA实现的HASH平均分流方法及装置。
【背景技术】
[0002]在进行报文处理时,一般都是将报文分流后,送到相应的地方进行处理。目前,在进行报文分流时会根据五元组进行分流,如果报文没有五元组,那么报文就会送到特定线程,使得无法达到真正意义上的平均分流,分流后的报文在CPU中实现时,会消耗CPU的有效进程,大大降低CPU的工作效率。

【发明内容】

[0003]针对现有技术中的上述不足,本发明提供的基于FPGA实现的HASH平均分流方法及装置解决了现有报文分流时会消耗(PU有效进程,降低CPU工作效率的问题。
[0004]为了达到上述发明目的,本发明采用的技术方案为:
[0005]第一方面,提供一种基于FPGA实现的HASH平均分流方法,其包括以下步骤:
[0006]根据以太网报文的格式提取报文的源IP地址和目的IP地址;
[0007]采用HASH计算方法获取源IP地址的源IP地址Hash值和目的IP地址的目的IP地址Hash 值;
[0008]对源IP地址Hash值和目的IP地址Hash值进行异或得到整条报文Hash值;
[0009]截取整条报文Hash值中的至少3个bits,采用至少3bits作为RAM表地址,读取RAM表中与该报文所对应的CPU线程号;
[0010]将报文所对应的CPU线程号标记在该报文的报文头上,并将标记后的报文发送至(PU;以及
[0011]CPU接收并处理报文的报文头,根据报文头上的CPU线程号将该报文发送至指定的线程进行处理。
[0012]另一方面,提供一种基于FPGA实现的HASH平均分流装置,包括FPGA处理模块和CPU ;所述FPGA处理模块包括:
[0013]报文解析单元,用于根据以太网报文的格式提取报文的源IP地址和目的IP地址;
[0014]HASH计算装置,用于采用HASH计算方法获取源IP地址的源IP地址Hash值和目的IP地址的目的IP地址Hash值;并对源IP地址Hash值和目的IP地址Hash值进行异或得到整条报文Hash值;
[0015]查表单元,截取整条报文Hash值中的至少3个bits,采用至少3bits作为RAM表地址,读取RAM表中与该报文所对应的CPU线程号;以及
[0016]报文头添加单元,用于将报文所对应的CPU线程号标记在该报文的报文头上,并将标记后的报文发送至CPU;
[0017]CPU,用于接收并处理报文的报文头,根据报文头上的CPU线程号将该报文发送至指定的线程进行处理。
[0018]本发明的有益效果为:该HASH平均分流方法及装置在进行报文分流时,通过计算报文的源IP地址和目的IP地址的处理的Hash值来获取整条报文的Hash值,根据Hash值查询其对应的CPU线程号,并将CPU线程号标记在报文的报文头上,CPU在进行报文处理时,只需要读取报文头上的CPU线程号将报文送到指定的线程进行处理。
[0019]通过该种方式处理后,CPU收到报文后,直接解析报文头部信息,就可将报文送到指定线程进行处理,不需要消耗CPU的有效进程,大幅度地提高了 CPU的工作效率。
[0020]同时,由于根据以太网报文的格式提取报文的源IP地址和目的IP地址步骤至将报文所对应的CHJ线程号标记在该报文的报文头上,并将标记后的报文发送至CTU步骤是在FPGA控制模块中实现的,进一步提高了CPU的工作效率。
[0021]另外,由于本方案只需要对报文的源IP地址和目的IP地址进行处理,采用该种方法后,可以解决部分报文五元组信息不完整时,报文被送到特定线程中,无法达到真正意义上报文平均分流的问题。
[0022]由于本方案是采用并行处理的方式,提高HASH计算的吞吐量。
【附图说明】
[0023]图1为基于FPGA实现的HASH平均分流方法一个实施例的流程图。
[0024]图2为基于FPGA实现的HASH平均分流装置的原理框图。
[0025]图3 为RAM 表。
【具体实施方式】
[0026]下面对本发明的【具体实施方式】进行描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于【具体实施方式】的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
[0027]参考图1,图1示出了基于FPGA实现的HASH平均分流方法一个实施例的流程图。该方法100包括步骤1I至步骤106:
[0028]在步骤101中,根据以太网报文的格式提取报文的源IP地址和目的IP地址。此处的报文可以是IPV4报文,也可以是IPV6报文,IPV4报文的地址位宽为32bits,IPV6报文的地址位宽为128bits。
[0029]在本发明的一个实施例中,当报文为PV6报文时,本方案还还包括将IPV6报文切割成多个与IPV4报文地址位宽相等的数据片段;之后在进入步骤102中进行后续处理工作。
[0030]在步骤102中,采用HASH计算方法获取源IP地址的源IP地址Hash值和目的IP地址的目的IP地址Hash值;此处HASH计算方法的计算公式为:
[0031 ] hash' = ((hash〈〈5) + (*str) + (hash>>2))
[0032]其中,Str为一个四字节的数,为源IP地址和目的IP地址中的值,其位宽为32bits。
[0033]hash值的位宽为32bits,初值为0x4E67C6A7,源IP地址的源IP地址Hash值的计算方法为:源 IP 地址 Hash 值= 0x4E67C6A7~((0x4E67C6A7〈〈5)+0xC0A8090A+(0x4E67C6A7>>
2))=0x3B5D0901。
[0034]目的IP地址的目的IP地址Hash值的计算方法为:目的IP地址Hash值=0x4E67C6A7' ((0x4E67C6A7?5)+0xC0A80000+(0x4E67C6A7?2)) =0x3B5D003B。
[0035]在步骤103中,对源IP地址Hash值和目的IP地址Hash值进行异或得到整条报文Hash值;具体地为,整条报文Hash值=源IP地址Hash值~目的IP地址Hash值=0x3B5D0901'0x3B5D003B = 0x93A,该值供后续的查表单元进行使用。
[0036]如果源IP地址Hash值和目的IP地址Hash值地址互换时,即源IP地址Hash值=0xC0A80000(192.168.0.0)、目的IP地址Hash值= 0xC0A8090A( 192.168.9.10)。最终的HASH计算结果,整条报文Hash值=源IP地址Hash值.'目的IP地址Hash值=0x3B5D003B ~0x3B5D0901=0x93Ao
[0037]为此,采用本方案的方法进行整条报文Hash值计算时,即使源IP地址Hash值和目的IP地址Hash值地址发生互换,整条报文Hash值仍一致,仍能保证整条报文被分流到同一个CPU线程中进行处理。
[0038]在步骤104中,截取整条报文Hash值中的至少3个bits,采用至少3bits作为RAM表地址,读取RAM表中与该报文所对应的CPU线程号;
[0039]在RAM表中读取该报文所对应的CPU线程号的部分细节进行说明:
[0040]整条报文Hash值为32bits,在进行RAM表中查找报文所对应的CPU线程号时,只需要截取其中几个bits(可根据具体需求,决定采用多少的位来作为查表地址),进行查表。本方案中暂定提取低3bits,RAM表里的内容为CPU线程号。
[0041 ] RAM表在开始时可被初始化,写入固定的CPU线程值,本方案RAM的深度为8、位宽为8ο目前在RAM表中,所支持的CPU线程号为:5、8、8、0、1、A、2、D。报文最终只会被分流到这些线程号中。
[0042]由整条报文Hash值,截取低3bits作为RAM表的查表地址,如H=0x93A(1001_0011_1010),取低3bits的值为010,根据图3示出来的RAM表进行查询,地址为010的项中,得到的结果为9,为此CPU的线程号即为9。同样,如果H = OxO,取低3bits值为000,查表得到的结果为5,CPU的线程号为5。
[0043]在步骤105中,将报文所对应的CPU线程号标记在该报文的报文头上,并将标记后的报文发送至CPU;目前暂时考虑用Sbits来指示CPU线程号(已可以指示256个不同的CPU线程),为此,只需在原始报文头部增添IByte的线程号信息字段。在FPGA处理时,将原始报文延时一个时钟周期后,在头部添加上线程号,便可完成报文头的拼接。
[0044]在步骤106中,CPU接收并处理报文的报文头,根据报文头上的CPU线程号将该报文发送至指定的线程进行处理。
[0045]其中,步骤101至步骤105均在FPGA控制模块中实现,步骤106在CPU中实现,采用这种方式进一步提高了CPU的工作效率。
[0046]由于IPv6报文的IP地址位宽为128bits,如果按照32bits进行一次迭代运算,那么就需要4次迭代,消耗的时间较长,为了缩短计算时间,为此考虑将128bits的IP地址,切割成4个32bits的数据,这4个str字段独立进行HASH计算,再将4个HASH值进行异或,得到最终的结果。下面结合本方法对IPV6报文求取其整条报文Hash值的具体过程进行详细地阐述:
[0047]例如:IP V 6报文的源IP地址和目的IP地址分别为源IP地址=O X C O A 8 O 9 O A _C0A80000_C0A8090A_C0A8090A,目的 IP地址=0xC0A80000_C0A80000_C0A80000_C0A8090A时,在此,分别将源IP地址和目的IP地址,截断成4个32bits数据,独立进行HASH计算。即源IP 地址 l = 0xC0A8090A,源 IP 地址 2 = 0xC0A80000,源 IP 地址 3 = 0xC0A8090A,源 IP 地址 4 =0xC0A8090A;目的 IP地址I =0xC0A80000,目的 IP地址IP2 = 0xC0A80000,目的 IP地址3 =0xC0A80000,目的 IP地址4 = 0xC0A8090A。
[0048]详细计算流程如下:
[0049]独立计算4个切分的源IP地址Hash值:源IP地址IHash值= H(C0A8090A) =0x3B5D0901,源 IP 地址 2Hash 值= 0x3B5D003B,源 IP 地址 3Hash 值= 0x3B5D0901,源 IP 地址4Hash 值= 0x3B5D0901。
[0050]计算源IP地址的Hash值:源IP地址Hash值=源IP地址IHash值■'源IP地址2Hash值~源IP地址3Hash值■'源IP地址4Hash值= 0x93A。
[0051 ] 独立计算4个目的IP地址的Hash值:目的IP地址IHash值= 0x3B5D003B,目的IP地址2Hash值= 0x3B5D003B,目的 IP地址3Hash值=0x3B5D003B,目的 IP地址4Hash值=0x3B5D0901。
[0052]计算目的IP地址的Hash值:目的IP地址HasMt=目的IP地址IHash值.'目的IP地址21Hash值' 目的IP地址31Hash值' 目的IP地址4Hash值= 0x93A
[0053]计算整条最终的HASH值:整条报文Hash值=源IP地址Hash值.'目的IP地址Hash值
=Oo
[0054]至此,已完成对基于FPGA实现的HASH平均分流方法的描述,下面结合附图2,对基于FPGA实现的HASH平均分流装置进行详细地描述:
[0055]参考图2,图2示出了基于FPGA实现的HASH平均分流装置的流程图,如图2所示,该装置包括FPGA处理模块和CPU ;所述FPGA处理模块包括:
[0056]报文解析单元,用于根据以太网报文的格式提取报文的源IP地址和目的IP地址;
[0057]HASH计算装置,用于采用HASH计算方法获取源IP地址的源IP地址Hash值和目的IP地址的目的IP地址Hash值;并对源IP地址Hash值和目的IP地址的目的IP地址Hash值进行异或得到整条报文Hash值;
[°°58] 查表单元,截取整条报文Hash值中的至少3个bits,采用至少3bits作为RAM表地址,读取RAM表中与该报文所对应的CPU线程号;以及
[0059]报文头添加单元,用于将报文所对应的CPU线程号标记在该报文的报文头上,并将标记后的报文发送至CPU;
[0060]CPU,用于接收并处理报文的报文头,根据报文头上的CPU线程号将该报文发送至指定的线程进行处理。
[0061 ]在本发明的一个实施例中,本方案的报文可以为IPV4报文,也可以为IPV6报文;当报文为IPV6报文时,该FPGA处理模块还包括:报文拆分单元,用于将IPV6报文切割成多个与IPV4报文地址位宽相等的数据片段。
[0062]实施时,本方案的FPGA处理模块还包括报文缓存单元,用于缓存报文,当报文的CPU线程号出来时,将报文发送至报文头添加单元。
[0063]本方案的基于FPGA实现的HASH平均分流装置内部的HASH计算装置一次仅处理32bits数据,为了实现报文的快速处理,源IP地址和目的IP地址的处理分别位于不同的HASH计算装置内,也即对于地址位宽为32bits的IPV4报文需要两个HASH计算装置,对于地址位宽为128bits的IPV6报文则需要八个HASH计算装置,4个HASH计算装置用于处理源IP地址,另外4个用于处理目的IP地址。
[0064]综上所述,采用本方法对报文进行分流时,CPU直接解析报文头部信息,就可将报文送到指定线程进行处理,不需要消耗CPU的有效进程,大幅度地提高了 CPU的工作效率。
【主权项】
1.基于FPGA实现的HASH平均分流方法,其特征在于,包括以下步骤: 根据以太网报文的格式提取报文的源IP地址和目的IP地址; 采用HASH计算方法获取源IP地址的源IP地址Hash值和目的IP地址的目的IP地址Hash值; 对源IP地址Hash值和目的IP地址Hash值进行异或得到整条报文Hash值; 截取整条报文Hash值中的至少3个bits,采用至少3bits作为RAM表地址,读取RAM表中与该报文所对应的(PU线程号; 将报文所对应的CPU线程号标记在该报文的报文头上,并将标记后的报文发送至CPU;以及 CPU接收并处理报文的报文头,根据报文头上的CPU线程号将该报文发送至指定的线程进行处理。2.根据权利要求1所述的基于FPGA实现的HASH平均分流方法,其特征在于,所述报文为IPV4报文或IPV6报文; 当所述报文为IPV6报文时,还包括将IPV6报文切割成多个与IPV4报文地址位宽相等的数据片段; 之后,根据以太网报文的格式提取IPV6报文的多个数据片段的源IP地址和目的IP地址。3.根据权利要求2所述的基于FPGA实现的HASH平均分流方法,其特征在于,所述IPV4报文地址位宽为32b its,IPV6报文的地址位宽为128b its。4.根据权利要求1所述的基于FPGA实现的HASH平均分流方法,其特征在于,所述HASH计算方法的计算公式为: hash'=((hash〈〈5)+(*str)+(hash>>2)) 其中,Str为一个四字节的数,为源IP地址和目的IP地址中的值,其位宽为32bits。5.根据权利要求1-4任一所述的基于FPGA实现的HASH平均分流方法,其特征在于,所述RAM的深度为8、位宽为8。6.—种根据权利要求1-5任一所述方法的基于FPGA实现的HASH平均分流装置,其特征在于,包括FPGA处理模块和CPU ;所述FPGA处理模块包括: 报文解析单元,用于根据以太网报文的格式提取报文的源IP地址和目的IP地址; HASH计算装置,用于采用HASH计算方法获取源IP地址的源IP地址Hash值和目的IP地址的目的IP地址Hash值;并对源IP地址Hash值和目的IP地址Hash值进行异或得到整条报文Hash 值; 查表单元,截取整条报文Hash值中的至少3个bits,采用至少3bits作为RAM表地址,读取RAM表中与该报文所对应的CPU线程号;以及 报文头添加单元,用于将报文所对应的CPU线程号标记在该报文的报文头上,并将标记后的报文发送至CPU; CPU,用于接收并处理报文的报文头,根据报文头上的CPU线程号将该报文发送至指定的线程进行处理。7.根据权利要求6所述的基于FPGA实现的HASH平均分流装置,其特征在于,所述报文为IPV4报文或IPV6报文;当所述报文为IPV6报文时,所述FPGA处理模块还包括: 报文拆分单元,用于将IPV6报文切割成多个与IPV4报文地址位宽相等的数据片段。8.根据权利要求7所述的基于FPGA实现的HASH平均分流装置,其特征在于,所述IPV4报文地址位宽为32b its,IPV6报文的地址位宽为128b its。9.根据权利要求8所述的基于FPGA实现的HASH平均分流装置,其特征在于:所述HASH计算装置一次仅处理32bits数据,所述源IP地址和目的IP地址的处理分别位于不同的HASH计算装置内。10.根据权利要求6-9任一所述的基于FPGA实现的HASH平均分流装置,其特征在于:所述FPGA处理模块还包括报文缓存单元,用于缓存报文,当报文的CPU线程号出来时,将所述报文发送至报文头添加单元。
【文档编号】H04L12/935GK106027427SQ201610362307
【公开日】2016年10月12日
【申请日】2016年5月27日
【发明人】莫小妮, 袁结全, 唐锐
【申请人】深圳市风云实业有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1