多核网络设备报文按接口保序方法及系统的制作方法

文档序号:7861368阅读:136来源:国知局
专利名称:多核网络设备报文按接口保序方法及系统的制作方法
技术领域
本发明涉及网络通信技术领域,尤其涉及一种多核网络设备报文按接口保序方法及系统。
背景技术
在一个程序中 ,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫做“多线程处理”。多线程处理一个常见的例子就是用户界面。利用线程,用户可按下一个按钮,然后程序会立即做出响应,而不是让用户等待程序完成了当前任务以后才开始响应。当前高端网络设备大多采用多核CPU的硬件架构来提高报文的处理和转发性能,对多核CPU分别创建相应的线程与所述多核CPU进行一对一的绑定。申请号为201010289667.x,发明名称为一种基于多核构架的报文转发方法及系统的中国专利中,记载了一种将hash队列(即文中的hash表所划分的区域)与线程相绑定的方法,实现了共享资源的免锁设计,但在网络设备出现几条数据流的报文,通过hash计算后均落在了一个hash队列中时,这样就会导致与该hash队列对应的线程很繁忙,与其他hash队列对应的线程均处于闲置状态的情况出现,从而多核CPU的使用效率较低,造成资源的浪费。为了提高网络设备中多核CPU的使用效率,现有技术中采用RMI芯片将接收到的报文平均分配给各个CPU,由于将报文平均分配给各个CPU,而报文存在大小不同的情况,因此,每个CPU处理报文的速度会有些不同,在报文处理完成后,会产生报文发送时的乱序现象(测试中有千分之三的乱序几率),对于一般的需求已经足够,但对于IPSEC报文和视频报文等,如果出现乱序就会丢包或者视频马赛克,使得网络通信受到较为严重的阻滞。

发明内容
(一)要解决的技术问题本发明要解决的技术问题是提供一种多核网络设备报文按接口保序方法及系统,以防止报文发送时出现乱序现象。(二)技术方案为解决上述问题,一方面本发明提供了一种多核网络设备报文按接口保序方法,包括以下步骤SI :多核CPU的各个CPU接收当前报文后,获取所述当前报文的入接口信息,对所述当前报文进行入接口判断并按报文的入接口分组;S2 :当前报文对应的线程对所述当前报文在对应入接口组内进行排序,处理所述当前报文;S3:在当前报文被处理后,判断同一入接口的前一个报文是否已经被转发,若是,则将所述处理后的当前报文进行转发,否则等待所述前一个报文被转发后,再将所述处理后的当前报文进行转发。
优选地,在所述步骤SI之前还包括创建与每个入接口对应的入接口循环链表的步骤。优选地,所述步骤SI中对所述当前报文进行入接口判断并按报文的入接口分组的步骤具体为根据当前报文的入接口信息对当前报文所属的入接口进行判断,并找到与所述入接口对应的入接口循环链表。优选地,所述步骤S2中对所述当前报文在对应入接口组内进行排序的步骤具体为在所述找到的入接口循环链表上获取当前节点,将当前报文记录到所述当前节点中,并将所述当前节点信息记录到当前报文中,然后将该入接口循环链表的当前节点从新赋值为当前节点的下一个节点。优选地,所述步骤S3具体为在当前报文被处理后,查找此报文在对应入接口循环链表中对应的节点,查看该节点的上一个节点中记录的报文是否为空
若为空,则直接将当前报文进行转发,并将对应的节点信息清空;若不为空,则将当前报文的发送信息存入此节点中,退出此报文处理流程,等待上一个节点中记录的报文为空后再发送。优选地,所述入接口循环链表中每个节点均具有状态标志位,所述状态标志位用于反映节点所对应的报文是否已经被转发的状态;所述步骤S3中,通过所述状态标志位来判断所述入接口循环链表中的前一个报文对应的报文是否已经被转发。另一方面,本发明还提供了一种多核网络设备报文按接口保序系统,所述系统包括报文按接口分组模块,用于在多核CPU的各个CPU接收报文后,获取报文的入接口信息,对报文进行入接口判断并按报文的入接口分组;报文处理模块,用于通过对应的线程对同一入接口的报文进行排序,处理所述报文;转发模块,用于在当前报文被处理后,判断同一入接口的前一个报文是否已经被转发,若是,则将所述处理后的当前报文进行转发,否则等待所述前一个报文被转发后,再将所述处理后的当前报文进行转发。(三)有益效果本发明通过判断同一入接口接收的前一个报文是否已经被转发,来实现同一入接口报文的保序,防止报文发送时出现乱序现象。本发明的保序范围精细,由于不对不同入接口间的报文进行保序,所以转发速度相对更快,适用于高端设备。


图I是按照本发明一种实施方式报文保序方法的流程图;图2是按照本发明一种实施方式报文保序系统的结构框图。
具体实施例方式下面结合附图及实施例对本发明进行详细说明如下。
实施例一如图I所示,本实施例记载了一种多核网络设备报文按接口保序方法,包括以下步骤SI :多核CPU的各个CPU接收当前报文后,获取所述当前报文的入接口信息,对所述当前报文进行入接口判断并按报文的入接口分组;S2:当前报文对应的线程对所述当前报文在对应入接口组内进行排序,处理所述当前报文;S3 :在当前报文被处理后,判断同一入接口的前一个报文是否已经被转发,若是,则将所述处理后的当前报文进行转发,否则等待所述前一个报文被转发后,再将所述处理后的当前报文进行转发。在本实施例中,步骤SI之前还包括多核CPU分别对应生成与所述多核CPU数量 相同的线程的步骤。在本实施例中每个CPU轮询处理网卡接收来的报文。本实施例中,在所述步骤SI之前还包括创建与每个入接口对应的入接口循环链表的步骤。在本实施例中,所述步骤SI中对所述当前报文进行入接口判断并按报文的入接口分组的步骤具体为根据当前报文的入接口信息对当前报文所属的入接口进行判断,并找到与所述入接口对应的入接口循环链表。在本实施例中,所述步骤S2中对所述当前报文在对应入接口组内进行排序的步骤具体为在所述找到的入接口循环链表上获取当前节点,将当前报文记录到所述当前节点中,并将所述当前节点信息记录到当前报文中,然后将该入接口循环链表的当前节点从新赋值为当前节点的下一个节点。即假设当前节点为节点n,在当前报文记录到节点η中,并且将节点η的节点信息记录到当前报文之后,再将该保序循环链表的当前节点从新赋值为节点η+1,用于记录该入接口的下一个报文。在本实施例中,所述步骤S3具体为在当前报文被处理后,查找此报文在对应入接口循环链表中对应的节点,查看该节点的上一个节点中记录的报文是否为空若为空,则直接将当前报文进行转发,并将对应的节点信息清空;然后查看入接口循环链表上的下一个节点,如果下一个节点不为空,而且此下一个节点中的报文需要被转发(下一个节点中有记录的出接口信息),则将所述下一个节点中的报文转发,以此类推,直到获取的链表节点为空或者报文不需要被转发(也就是报文正在被别的CPU处理),则退出此处理流程若不为空,则将当前报文的发送信息(此时报文已经是一个完整的待发送报文,所述发送信息中主要记录的是报文发送的出接口)存入此节点中,退出此报文处理流程,等待上一个节点中记录的报文为空后再发送。在本实施例中,所述入接口循环链表中每个节点均具有状态标志位,所述状态标志位用于反映节点所对应的报文是否已经被转发的状态;所述步骤S3中,通过所述状态标志位来判断所述入接口循环链表中的前一个报文对应的报文是否已经被转发。实施例二
如图2所示,本实施例记载了一种多核网络设备报文按接口保序系统,所述系统包括报文按接口分组模块201,用于在多核CPU的各个CPU接收报文后,获取报文的入接口信息,对报文进行入接口判断并按报文的入接口分组;报文处理模块202,用于通过对应的线程对同一入接口的报文进行排序,处理所述报文;
转发模块203,用于在当前报文被处理后,判断同一入接口的前一个报文是否已经被转发,若是,则将所述处理后的当前报文进行转发,否则等待所述前一个报文被转发后,再将所述处理后的当前报文进行转发。本发明通过判断同一入接口接收的前一个报文是否已经被转发,来实现同一入接口报文的保序,防止报文发送时出现乱序现象。以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
权利要求
1.一种多核网络设备报文按接口保序方法,其特征在于,包括以下步骤 SI:多核CPU的各个CPU接收当前报文后,获取所述当前报文的入接口信息,对所述当前报文进行入接口判断并按报文的入接口分组; S2:当前报文对应的线程对所述当前报文在对应入接口组内进行排序,处理所述当前报文; S3:在当前报文被处理后,判断同一入接口的前一个报文是否已经被转发,若是,则将所述处理后的当前报文进行转发,否则等待所述前一个报文被转发后,再将所述处理后的当前报文进行转发。
2.如权利要求I所述的方法,其特征在于,在所述步骤SI之前还包括创建与每个入接口对应的入接口循环链表的步骤。
3.如权利要求2所述的方法,其特征在于,所述步骤SI中对所述当前报文进行入接口判断并按报文的入接口分组的步骤具体为根据当前报文的入接口信息对当前报文所属的入接口进行判断,并找到与所述入接口对应的入接口循环链表。
4.如权利要求3所述的方法,其特征在于,所述步骤S2中对所述当前报文在对应入接口组内进行排序的步骤具体为在所述找到的入接口循环链表上获取当前节点,将当前报文记录到所述当前节点中,并将所述当前节点信息记录到当前报文中,然后将该入接口循环链表的当前节点从新赋值为当前节点的下一个节点。
5.如权利要求4所述的方法,其特征在于,所述步骤S3具体为在当前报文被处理后,查找此报文在对应入接口循环链表中对应的节点,查看该节点的上一个节点中记录的报文是否为空 若为空,则直接将当前报文进行转发,并将对应的节点信息清空; 若不为空,则将当前报文的发送信息存入此节点中,退出此报文处理流程,等待上一个节点中记录的报文为空后再发送。
6.如权利要求4或5所述的方法,其特征在于,所述入接口循环链表中每个节点均具有状态标志位,所述状态标志位用于反映节点所对应的报文是否已经被转发的状态; 所述步骤S3中,通过所述状态标志位来判断所述入接口循环链表中的前一个报文对应的报文是否已经被转发。
7.一种多核网络设备报文按接口保序系统,其特征在于,所述系统包括 报文按接口分组模块,用于在多核CPU的各个CPU接收报文后,获取报文的入接口信息,对报文进行入接口判断并按报文的入接口分组; 报文处理模块,用于通过对应的线程对同一入接口的报文进行排序,处理所述报文; 转发模块,用于在当前报文被处理后,判断同一入接口的前一个报文是否已经被转发,若是,则将所述处理后的当前报文进行转发,否则等待所述前一个报文被转发后,再将所述处理后的当前报文进行转发。
全文摘要
本发明公开了一种多核网络设备报文按接口保序方法,包括以下步骤S1多核CPU的各个CPU接收当前报文后,获取所述当前报文的入接口信息,对所述当前报文进行入接口判断并按报文的入接口分组;S2对应的线程对所述当前报文在对应入接口组内进行排序,处理所述当前报文;S3在当前报文被处理后,判断同一入接口的前一个报文是否已经被转发,若是,则将所述处理后的当前报文进行转发,否则等待所述前一个报文被转发后,再将所述处理后的当前报文进行转发。此外,本发明还公开了一种实现上述按接口保序方法的按接口保序系统。本发明通过判断同一入接口的前一个报文是否已经被转发,来实现同一入接口报文的保序,防止了报文发送时所出现的乱序现象。
文档编号H04L12/863GK102891809SQ20121036142
公开日2013年1月23日 申请日期2012年9月25日 优先权日2012年9月25日
发明者陈海滨 申请人:汉柏科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1