一种多CPU核间负载均衡的网络报文处理方法技术

技术编号:8414832 阅读:209 留言:0更新日期:2013-03-14 22:17
本发明专利技术涉及一种多CPU核间负载均衡的网络报文处理方法,该方法首先指定一个CPU核从网卡接收队列收取报文,并分发到其他CPU核的报文接收队列中,直至报文接收队列达到其最大阀值,其他CPU核从与其对应的报文接收队列收取报文,然后对报文进行协议栈处理。与现有技术相比,本发明专利技术具有充分利用CPU资源、可实现自动均衡等优点。

【技术实现步骤摘要】
一种多CPU核间负载均衡的网络报文处理方法
本专利技术涉及一种网络数据处理方法,尤其是涉及一种多CPU核间负载均衡的网络报文处理方法。
技术介绍
现有技术对于单一接收队列网卡芯片,接收报文处理往往采用硬中断触发轮询收报文方式,由于受限于单一队列的特性,报文一般送往一个CPU核上,这样其他CPU核无法和一起从单一接收队列并行取报文,当网卡接收报文负荷大于CPU处理能力时,造成一个CPU核繁忙,其他所有CPU核空闲的局面。单一接收队列网卡芯片,接收报文时只会送往CPU的一个核处理,造成处理能力无法有效利用等问题。
技术实现思路
本专利技术的目的就是为了克服上述现有技术存在的缺陷而提供一种充分利用CPU资源、可实现自动均衡的多CPU核间负载均衡的网络报文处理方法。本专利技术的目的可以通过以下技术方案来实现:一种多CPU核间负载均衡的网络报文处理方法,该方法首先指定一个CPU核从网卡接收队列收取报文,并分发到其他CPU核的报文接收队列中,直至报文接收队列达到其最大阀值,其他CPU核从与其对应的报文接收队列收取报文,然后对报文进行协议栈处理。所述的每个CPU核均设有对应的ID,所述的ID的取值范围为[0,CPU_CORE_NUMBERS-1]间的整数,其中,CPU_CORE_NUMBERS为CPU核的总数。所述的网络报文处理方法具体包括以下步骤:1)指定ID为CURRENT_CPU_ID的CPU核为当前从网卡接收队列收取报文的当前核;2)当前核从网卡接收队列收取报文,且变量recv_packet_count的值加一,所述的变量recv_packet_count表示当前核已收取的报文个数;3)判断hash_cpu是否大于或等于CURRENT_CPU_ID,若是,则hash_cpu的值加一,执行步骤4),若否,直接执行步骤4);其中,hash_cpu=recv_packet_count%(CPU_CORE_NUMBERS-1);4)判断ID为hash_cpu的CPU核上的报文接收队列中的报文数是否达到最大阀值,若是,则执行步骤5),若否,则执行步骤6);5)当前核直接对收取的报文进行协议栈处理,返回步骤1);6)当前核将收取的报文发送至ID为hash_cpu的CPU核的报文接收队列中,并通知该CPU核处理报文,返回步骤1)。所述的recv_packet_count和hash_cpu均为静态无符号整数变量。与现有技术相比,本专利技术具有以下优点:1)本专利技术方法在单一队列网卡配合多核CPU硬件架构下,能够充分使用CPU各个核,从而达到最大网络报文处理能力,不浪费CPU资源;2)本专利技术单核分发和其他核协议栈处理能力之间实现了流水的自动均衡。附图说明图1为本专利技术的结构示意图。具体实施方式下面结合附图和具体实施例对本专利技术进行详细说明。实施例如图1所示,一种多CPU核间负载均衡的网络报文处理方法,该方法总体可描述为:首先指定一个CPU核从网卡接收队列收取报文,并分发到其他CPU核的报文接收队列中,直至报文接收队列达到其最大阀值,其他CPU核从与其对应的报文接收队列收取报文,然后对报文进行协议栈处理。其中,每个CPU核均设有对应的ID,所述的ID的取值范围为[0,CPU_CORE_NUMBERS-1]间的整数,其中,CPU_CORE_NUMBERS为CPU核的总数。定义静态无符号整数变量:recv_packet_count,用于表示已接收的报文个数;定义静态无符号整数变量:hash_cpu,用于表示要分发到的CPU核的ID。所述的网络报文处理方法具体包括以下步骤:1)指定ID为CURRENT_CPU_ID的CPU核为当前从网卡接收队列收取报文的当前核;2)当前核从网卡接收队列收取报文,且变量recv_packet_count的值加一,所述的变量recv_packet_count表示当前核已收取的报文个数;3)判断hash_cpu是否大子或等于CURRENT_CPU_ID,若是,则hash_cpu的值加一,执行步骤4),若否,直接执行步骤4);其中,hash_cpu=recv_packet_count%(CPU_CORE_NUMBERS-1),采用基于已接收报文个数对CPU核总数减一后取余的完全平均算法求取;4)判断ID为hash_cpu的CPU核上的报文接收队列中的报文数是否达到最大阀值,若是,则执行步骤5),若否,则执行步骤6);5)当前核直接对收取的报文进行协议栈处理,从而减少当前核从网卡接收队列取报文的机会,减少其他核报文处理压力,达到分发和协议栈流水处理的自动均衡,然后返回步骤1);6)当前核将收取的报文发送至ID为hash_cpu的CPU核的报文接收队列中,并通知该CPU核处理报文,返回步骤1),进入下一次从网卡接收队列收报文过程。上述多CPU核间负载均衡的网络报文处理方法在单一队列网卡配合多核CPU硬件架构下,能够充分使用CPU各个核,从而达到最大网络报文处理能力,不浪费CPU资源;单核分发和其他核协议栈处理能力之间实现了流水的自动均衡。本文档来自技高网...
一种多CPU核间负载均衡的网络报文处理方法

【技术保护点】
一种多CPU核间负载均衡的网络报文处理方法,其特征在于,该方法首先指定一个CPU核从网卡接收队列收取报文,并分发到其他CPU核的报文接收队列中,直至报文接收队列达到其最大阀值,其他CPU核从与其对应的报文接收队列收取报文,然后对报文进行协议栈处理。

【技术特征摘要】
1.一种多CPU核间负载均衡的网络报文处理方法,其特征在于,该方法首先指定一个CPU核从网卡接收队列收取报文,并分发到其他CPU核的报文接收队列中,直至报文接收队列达到其最大阀值,其他CPU核从与其对应的报文接收队列收取报文,然后对报文进行协议栈处理;每个所述的CPU核均设有对应的ID,所述的ID的取值范围为[0,CPU_CORE_NUMBERS-1]间的整数,其中,CPU_CORE_NUMBERS为CPU核的总数;所述的网络报文处理方法具体包括以下步骤:1)指定ID为CURRENT_CPU_ID的CPU核为当前从网卡接收队列收取报文的当前核;2)当前核从网卡接收队列收取报文,且变量recv_packet_count的值加一,所述的变量recv_packet_count表示当前核已收取的报文个数;...

【专利技术属性】
技术研发人员:裴建成
申请(专利权)人:上海寰创通信科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1