一种报文转发方法和装置的制作方法

文档序号:7701930阅读:100来源:国知局
专利名称:一种报文转发方法和装置的制作方法
技术领域
本发明涉及多核系统技术领域,尤指一种报文转发方法和装置。
背景技术
随着中央处理器(CPU)的频率提升速度的放緩,出现了多核技术以提 升处理性能。目前越来越多的网络设备配备了多核CPU,以提升软件性能。
例如,多核路由器设备通过增加核的数量来提升数据转发的性能。
报文在进入多核系统后,通常先要经过分发处理,将不同业务流的报文
分发到不同的核进行处理,以充分利用CPU的各个核。
图1是现有的多核系统中的报文分发示意图。如图l所示,多核系统包 括分发核和多个转发核。分发核在接收到报文后,根据报文的指定字段中的
值,如IP头中的源、目的地址等,进行哈希(Hash)计算,不同的哈希计 算结果与不同的转发核对应,将报文写入其哈希计算结果所对应核的队列 中。经过这样的步骤,多核系统收到的报文就能够相对均衡地分发到各个转 发核上。各个转发核从各自的队列中读取报文,并进行转发处理
但是,在图l所示的报文分发方案中,分发的均衡性并不理想,很可能 出现部分转发核承担了系统绝大多数的报文转发工作,而部分转发核只转发 了少量的报文的情况。例如某一段时间进入多核系统的报文的源IP地址相 同,则根据图1所示的方案,会将源IP地址相同的报文全部分发给同一个 核。实际中这种情况是不希望出现的,因为CPU资源出现了浪费,同时, 可能转发核的能力不足,导致报文的丢失,从而降低了系统的转发能力。
上述问题同样存在于以负载分担模式工作的其他多处理器系统中。例 如,在包括分发模块和多个转发模块的系统中,分发模块对所接口的报文通过哈希运算对应的转发模块,并将报文发送给对应的转发模块进行转发处理 的系统。
综上所述,现有的以负载分担方式工作的多转发模块系统中的报文分发 方案的均衡性不足,转发能力低。

发明内容
本发明提供了一种报文转发方法,该方法使得报文转发更加均衡,且提 高了转发能力。
本发明还提供了 一种报文转发装置,该装置中的报文转发更加均衡且转 发能力高。
为达到上述目的,本发明的技术方案具体是这样实现的
本发明公开了 一种报文转发方法,在包括一个分发模块和多个转发模块 的系统中创建多个数据流对象,并建立哈希值与数据流对象之间的对应关 系,则该方法包括
分发模块在接收到报文后,根据报文指定字段中的内容进行哈希运算得 到哈希值,将报文写入哈希值所对应的数据流对象的队列中;
空闲的转发模块获取一个"无人处理"的数据流对象,然后从该数据流 对象的队列中获取报文,进行转发处理;其中,"无人处理"的数据流对象 指没有转发模块处理其队列中的报文的数据流对象。
本发明还公开了一种报文转发装置,该装置包括分发模块和多个转发 模块,该装置还包括多个数据流对象,数据流对象和哈希值之间存在对应关 系,其中,
分发模块,用于在接收到报文后,根据报文指定字段中的内容进行哈希 运算得到哈希值,将报文写入哈希值所对应的数据流对象的队列中;
每一个转发模块,用于在空闲时,获取一个"无人处理"的数据流对象, 然后从该数据流对象的队列中获取报文,进行转发处理;其中,"无人处理" 的数据流对象指没有转发模块处理其队列中的报文的数据流对象。由上述技术方案可见,本发明这种在包括一个分发模块和多个转发模块 的系统中创建多个数据流对象,并建立哈希值与数据流对象之间的对应关
系;分发模块在接收到报文后,根据报文指定字段中的内容进行哈希运算得 到哈希值,将报文写入哈希值所对应的数据流对象的队列中;空闲的转发模 块获取一个"无人处理,,的数据流对象,然后从该数据流对象的队列中获取 报文,进行转发处理的技术方案,使得多核系统中的报文转发更加均衡,且 提高了多核系统的转发能力。


图1是现有的多核系统中的报文分发示意图2是本发明实施例中的多核系统的示意图3是图2所示的多核系统中的报文转发方法;
图4是本发明实施例一种报文转发装置的组成结构框图。
具体实施例方式
本发明的核心思想是在包括分发模块和多个转发模块,且分发模块将 所接收大报文以一定的负载分担策略分发到各个转发模块进行处理的系统 中,在分发模块与转发模块之间再引入一个实体,即数据流对象;分发模块 不再将报文直接写入转发模块的队列中,而是写入数据流对象的队列中;各 个转发模块动态地选择各个数据流对象并处理其队列中的报文。通常地,一 个数据流对象对应一个队列。
为4吏本发明的目的、技术方案及优点更加清楚明白,在以下的实施例中 以在如图1所示的多核系统为应用场景,对本发明的方案进行说明。即在以 下的实施例中分发核对应分发模块,转发核对应转发模块。
图2是本发明实施例中的多核系统的示意图。如图2所示,该多核系统 与图1所示的多核系统的区别在于,在分发核和转发核之间引入了数据流对 象。在本发明的一个实施例中,数据流对象的个数大于转发核的个数,并且根据本发明的方案,数据流对象的个数越多,则流入多核系统的数据可以更 加均衡地分发到各个转发核上。但是数据流对象的个数越多,通常所占用的 内存也越多。因此具体数据流对象的数量,可以根据实际的应用情况而定。
图3是图2所示的多核系统中的报文转发方法。首先建立哈希值与数据 流对象之间的对应关系,则如图3所示,该方法包括
步骤301,分发核在接收到报文后,根据报文指定字段中的内容进行哈 希运算得到哈希值,将报文写入哈希值所对应的数据流对象的队列中。
在本步骤中,可以根据报文的IP头中的五元组信息,或源地址,或目 的地址,或源地址和目的地址进行哈希运算得到哈希值。所采用的哈希算法, 以及哈希值与数据流对象之间的对应关系是预先设置好的。例如,当数据流 对象的个数为5个,而所采用的哈希算法的取值为0-9的整数时,则每个 数据流对象可以对应两个哈希值,如数据流对象1与哈希值0和1对应、数
据流对象与哈希值2和3对应........数据流对象5与哈希值8和9对应。
用户可以根据实际情况选择哈希算法以及哈希值与数据流对象之间的对应 关系。
步骤302,空闲的转发核获取一个"无人处理"的数据流对象,然后从 该数据流对象的队列中获取报文,进行转发处理;其中,"无人处理"的数 据流对象指没有转发核处理其队列中的报文的数据流对象。
本步骤中,相应地,有转发核处理其队列中的报文的数据流对象称为"有 人处理,,的数据流对象,则每一个数据流对象都有两种状态"有人处理" 状态和"无人处理"状态。
本步骤中,空闲的转发核指当前没有处理数据流对象的报文的转发核。 当一个空闲的转发核获取一个"无人处理"的数据流对象,从该数据流对象 的队列中获取报文进行转发处理时,变为忙碌的转发核。
本步骤中,空闲的转发核获取一个"无人处理,,的处理流对象的方案, 可以保证每个数据流对象在同一时刻只能被一个转发核处理,这样,可以确 保一个流中的报文不会出现转发和处理上的乱序。转发核在转发数据前,需要先选择并持有,即获取有一个"无人处理"的数据流对象,并从所获取数 据流对象的队列中获取待转发的教据。 一旦一个数据流对象被某个转发核获 取(处于"有人处理"状态),直到它被释放(处于"无人处理,,状态)前, 其他转发核不能获取到该数据流对象。在本发明的实施例中可以通过为每个 数据流对象设置一个标志位来区分一个数据流对象当前是处于"有人处理,, 状态还是处于"无人处理"状态。例如,标志位为l表示"有人处理',,标
志位为o表示"无人处理,,,默认值是o,转发核获取到一个数据流对象时, 将其标志位置l,当释放一个数据流对象时,将其标志位置o。
本步骤中,转发核处理完所获取的数据流对象的队列中的报文后释放该 数据流对象,此时转发核又变为空闲的转发核。
通过图2所示的方案,使得多核系统中的报文转发更加均衡,且提高了 多核系统的转发能力。
在本发明实施例中,有两种具体实现方式来实现图3步骤302中所述的 空闲的转发核获取一个"无人处理"的数据流对象,具体包括
方式一分发核查询所述多个数据流对象,当发现一个数据流对象处于 "无人处理"的状态时,向一个空闲的转发核发送核间消息;所述空闲的转 发核接收到所述核间消息后,通过数据流对象管理接口,获取一个"无人处 理"的数据流对象,对该数据流对象的队列中的报文进行转发。
在方式一中,转发核可以设计成需要处理多个事务,并需要在事务之间 调度的时候,就需要显示的发送核间消息,如核间中断消息,以触发转发核 处理相应的事务。例如,转发核当前在处理报文转发以外的其他事务,如果
多个事务中报文转发的优先级最高,则可以通过发送核间消息来中断转发当 前所处理的事务,进而处理报文转发任务。由于转发核最基本的任务是进行 报文转发,即报文转发任务的优先级最高,因此转发核在处理报文转发以外 的其他事务时,对于报文转发任务来说,可以将转发核视为"空闲"。
方式二每个转发核在空闲时查询所述多个数据流对象,当发现一个数 据流对象处于"无人处理"的状态时,获取该没有转发核处理的数据流对象,对该数据流对象的队列中的报文进行转发。
在方式二中,转发核被设计成无限循环的轮询模式,即转发核在空闲时 就进行轮询寻找"无人处理"的数据流对象,当找到后就处理该数据流对象 队列中的报文,处理完后继续进行轮询,如此反复。
在上述方案中, 一个转发核获取到 一个数据流对象后会处理完其队列中 的全部报文。这种方案在有限情况会使得部分数据流对象一直处于"无人处
理"的状态。例如,有5个数据流对象、1个分发核和3个转发的多核系统 中,如果其中的3个数据流对象的队列中一直有源源不断的报文进入,则3 个转发核会一直处理这3个数据流对象中的报文,而另外2个数据流对象的 报文则会一直没有转发来处理。为了避免这种部分数据流对象一直得不到服 务的情况本发明实施例在上述方案的基础上给出了如下的解决方案转发核 在获取一个数据流对象后,只处理其队列中的指定数量的报文后,就释放该 数据流对象,然后从新获取一个无人处理的处理流对象,重复上述动作。
则图3步骤302中所述的从该数据流对象的队列中获取报文,进行转发 处理具体为从该数据流对象的队列中获取指定数量的报文,进行转发处理, 然后释放该数据流对象;当该数据流对象的队列中的报文数量少于指定数量 时,获取该数据流对象的队列中的全部报文,进行转发处理后,释放该数据 流对象》
可以看出,本发明实施例中所述的数据流对象,是与一个报文队列对应 的,且能够标识该报文队列的状态(有人处理或无人处理)的逻辑标识。因 此,可以将数据流对象认为是其对应的报文队列的名称。
基于上述实施例,接下来给出本发明中的报文转发装置的组成结构框图。
图4是本发明实施例一种报文转发装置的组成结构框图。如图4所示, 该装置包括分发模块、多个转发模块,以及多个数据流对象,数据流对象 和哈希值之间存在对应关系。
在图4中,分发模块,用于在接收到报文后,根据报文指定字段中的内容进行哈希运算得到哈希值,将报文写入哈希值所对应的数据流对象的队列
中;每一个转发模块,用于在空闲时,获取一个"无人处理,,的数据流对象, 然后从该数据流对象的队列中获取报文,进行转发处理;其中,"无人处理,, 的数据流对象指没有转发模块处理其队列中的报文的数据流对象。
在图4中,每一个转发模块,用于在接收到分发模块发送个核间消息时, 获取"无人处理"的数据流对象;所述核间消息,是所述分发模块查询所述 多个数据流对象,当发现一个数据流对象的队列中的报文没有转发模块处理 时,向一个空闲的转发模块发送的;
或者,在图4中,每一个转发模块,用于在空闲时查询所述多个数据流 对象,当发现一个数据流对象的队列中的报文没有转发模块处理时,获取该 没有转发模块处理的数据流对象。
在图4中,每一个转发模块,用于从获取的数据流对象的队列中获取指 定数量的报文,进行转发处理,然后释放该数据流对象;或者,当获取的数 据流对象的队列中的报文数量少于指定数量时,获取该数据流对象的队列中 的全部报文,进行转发处理后,释放该数据流对象。
由上实施例可见,本发明这种在包括一个分发模块和多个转发模块的系 统中创建多个数据流对象,并建立哈希值与数据流对象之间的对应关系;分 发模块在接收到报文后,根据报文指定字段中的内容进行哈希运算得到哈希 值,将报文写入哈希值所对应的数据流对象的队列中;空闲的转发模块获取 一个"无人处理,,的数据流对象,然后从该数据流对象的队列中获取报文, 进行转发处理的技术方案,使得报文转发更加均衡,且提高了转发能力。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护 范围,凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等, 均应包含在本发明的保护范围之内。
权利要求
1、一种报文转发方法,其特征在于,在包括一个分发模块和多个转发模块的系统中创建多个数据流对象,并建立哈希值与数据流对象之间的对应关系,则该方法包括分发模块在接收到报文后,根据报文指定字段中的内容进行哈希运算得到哈希值,将报文写入哈希值所对应的数据流对象的队列中;空闲的转发模块获取一个“无人处理”的数据流对象,然后从该数据流对象的队列中获取报文,进行转发处理;其中,“无人处理”的数据流对象指没有转发模块处理其队列中的报文的数据流对象。
2、 如权利要求l所述的方法,其特征在于,所述空闲的转发模块获取 一个"无人处理"的数据流对象包括分发模块查询所述多个数据流对象,当发现 一 个数据流对象的队列中的 报文没有转发模块处理时,向一个空闲的转发模块发送核间消息;所述空闲 的转发模块接收到所述核间消息后,获取"无人处理"的数据流对象。
3、 如权利要求1所述的方法,其特征在于,所述空闲的转发模块获取 一个"无人处理"的数据流对象包括每个转发模块在空闲时查询所述多个数据流对象,当发现一个数据流对 象的队列中的报文没有转发模块处理时,获取该没有转发模块处理的数据流 对象。
4、 如权利要求l、 2或3所述的方法,其特征在于,所述从该数据流对 象的队列中获取报文,进行转发处理包括从该数据流对象的队列中获取指定数量的报文,进行转发处理,然后释 放该数据流对象;或者,当该数据流对象的队列中的报文数量少于指定数量时,获取该数 据流对象的队列中的全部报文,进行转发处理后,释放该数据流对象。
5、 如权利要求2或3所述的方法,其特征在于,所述发现一个数据流对象的队列中的报文没有转发模块处理包括当一个数据流对象的标志位表 示"无人处理,,时,确定该数据流对象的队列中的报文没有转发模块处理。
6、 如权利要求l、 2或3所述的方法,其特征在于,所述报文指定字段 中的内容为报文头中的五元组信息,或报文IP头中的源地址和/或目的地 址。
7、 一种报文转发装置,该装置包括分发模块和多个转发模块,其特 征在于,该装置还包括多个数据流对象,数据流对象和哈希值之间存在对应 关系,其中,分发模块,用于在接收到报文后,根据报文指定字段中的内容进行哈希 运算得到哈希值,将报文写入哈希值所对应的数据流对象的队列中;每一个转发模块,用于在空闲时,获取一个"无人处理"的数据流对象, 然后从该数据流对象的队列中获取报文,进行转发处理;其中,"无人处理,, 的数据流对象指没有转发模块处理其队列中的报文的数据流对象。
8、 如权利要求7所述的装置,其特征在于,每一个转发模块,用于在接收到分发模块发送个核间消息时,获取"无 人处理"的数据流对象;所述核间消息,是所述分发模块查询所述多个数据 流对象,当发现一个数据流对象的队列中的报文没有转发模块处理时,向一 个空闲的转发模块发送的。
9、 如权利要求7所述的装置,其特征在于,每一个转发模块,用于在空闲时查询所述多个数据流对象,当发现一个 数据流对象的队列中的报文没有转发模块处理时,获取该没有转发模块处理 的数据流对象。
10、 如权利要求7、 8或9所述的装置,其特征在于, 每一个转发模块,用于从获取的数据流对象的队列中获取指定数量的报文,进行转发处理,然后释放该数据流对象;或者,当获取的数据流对象的 队列中的报文数量少于指定数量时,获取该数据流对象的队列中的全部报 文,进行转发处理后,释放该数据流对象。
全文摘要
本发明公开了一种报文转发方法和装置。所述方法包括在包括一个分发模块和多个转发模块的系统中创建多个数据流对象,并建立哈希值与数据流对象之间的对应关系;分发模块在接收到报文后,根据报文指定字段中的内容进行哈希运算得到哈希值,将报文写入哈希值所对应的数据流对象的队列中;空闲的转发模块获取一个“无人处理”的数据流对象,然后从该数据流对象的队列中获取报文,进行转发处理;其中,“无人处理”的数据流对象指没有转发模块处理其队列中的报文的数据流对象。本发明的技术方案使得多核系统中的报文转发更加均衡,且提高了多核系统的转发能力。
文档编号H04L12/56GK101616083SQ20091009036
公开日2009年12月30日 申请日期2009年8月6日 优先权日2009年8月6日
发明者巍 魏 申请人:杭州华三通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1