基于网卡的报文分流处理方法

文档序号:8433702阅读:605来源:国知局
基于网卡的报文分流处理方法
【技术领域】
[0001]本发明涉及网络数据处理领域,尤其涉及一种基于网卡的报文分流处理方法。
【背景技术】
[0002]伴随当今互联网网络环境的普及和网络流量的瞬间暴涨,网络服务器作为一种为用户提供共享信息资源和各种服务的高性能网络设备,其处理网络数据的能力显得尤为重要。
[0003]网卡作为网络服务器的网络接口部件,负责接收和处理网络数据,其网络数据处理能力决定了网络服务器的性能。随着多核CPU技术在网卡上的应用,其并行处理数据的方式大大提升了网络数据的处理速度。
[0004]在现有具体实现方式中,服务器给网卡分配了一块共享内存,当网卡接收到报文后,网卡多核CPU根据哈希算法得到传送该报文的目的CPU,该目的CPU将报文写入共享内存。在此过程中,目的CPU对共享内存的访问,需进行加锁操作,防止其他CPU访问共享内存。目的CPU完成对共享内存的访问后,将对共享内存执行解锁操作,释放对共享内存的控制,此时,其他CPU才可以访问此共享内存。
[0005]综上所述,从宏观上看是进行了并行数据处理,但是从微观上看实际各CPU对于共享内存的访问都是串行的。这种串行的访问方式降低了 CPU的利用率,导致CPU资源的浪费,从而限制了网络数据的处理能力。

【发明内容】

[0006]有鉴于此,本发明提供一种基于网卡的报文分流处理方法,应用于网络服务器,该服务器包括第一多核CPU、网卡以及共享内存,其中,网卡包括第二多核CPU,其中第一多核CPU包括第一控制核以及多个第一数据核;所述第二多核CPU包括第二控制核以及多个第二数据核,其特征在于,该方法包括以下步骤:
[0007]步骤A,第一控制核根据内存拆分算法,将共享内存拆分成多个内存块,并将共享内存基地址、内存块数量以及内存块大小发送给网卡,其中,内存块的数量不小于第一数据核的数量;
[0008]步骤B,网卡从外部接收到报文后,第二控制核根据预定调度算法确定传送该报文的第二数据核编号以及对应存放该报文的内存块编号,并将该内存块编号发送给对应的传送该报文的第二数据核;
[0009]步骤C,第二数据核从第二控制核接收到内存块编号后,根据所述共享内存基地址、内存块编号以及内存块大小,计算出存放该报文的内存块地址,将报文存入该内存块。
[0010]本发明能够有效提升网络服务器中网卡多核CPU的利用率,避免了网卡多核CPU的资源浪费,真正实现了网卡多核CPU对共享内存的并行访问。
【附图说明】
[0011]图1是本发明一种实施方式中网络服务器内部基础硬件环境的示意图。
[0012]图2是本发明一种实施方式中基于网卡的报文分流处理方法的流程图。
[0013]图3是本发明一种实施方式中基于网卡的报文分流实施例的流程图。
【具体实施方式】
[0014]以下结合附图对本发明进行详细描述。
[0015]在一种较佳的实施方式中,本发明提供一种基于软件实施方式实现的基于网卡的报文分流处理方法,该方法应用于网络服务器上,本发明并不排除诸如硬件或者逻辑器件等其他实现方式。如图1所示,该网络服务器通常包括多核CPU、共享内存、网卡以及其他硬件,该网卡又包括多核CPU和其他硬件。该基于网卡的报文分流处理方法通过所述网络服务器硬件、服务器多核CPU上运行的驱动程序以及网卡多核CPU上运行的驱动程序配合实现。请参考图2,该方法的实现包括以下步骤:
[0016]步骤101,服务器控制核根据内存拆分算法,将共享内存拆分成多个内存块,并将共享内存基地址、内存块数量以及内存块大小发送给网卡,其中,内存块的数量不小于服务器数据核的数量;
[0017]步骤102,网卡从外部接收到报文后,网卡控制核根据调度算法,确定传送该报文的网卡数据核编号和对应存放该报文的内存块编号,并将该内存块编号发送给对应的网卡数据核;
[0018]步骤103,网卡数据核从网卡控制核接收到内存块编号后,根据所述共享内存基地址、内存块编号以及内存块大小,计算出存放该报文的内存块地址,将报文存入该内存块。
[0019]上述服务器多核CPU和网卡多核CPU均包括一个控制核和多个数据核。在所述基于网卡的报文分流处理方法中,控制核用于运行驱动程序,并控制、管理其对应的数据核进行业务处理;数据核专注于数据处理。
[0020]现以具体实施例来说明该基于网卡的报文分流处理方法的实现过程,请参考图3。在一种优选的方式中,假设服务器多核CPU包括I个控制核和4个数据核,并分别称为服务器控制核、服务器数据核O、服务器数据核1、服务器数据核2以及服务器数据核3。假设网卡多核CPU包括I个控制核和2个数据核,并分别称为网卡控制核、网卡数据核O以及网卡数据核I。同时,服务器控制核为网卡开辟了一块共享内存,用于存放网卡从外部接收的报文。
[0021]为了实现网卡多核CPU对共享内存的并行访问,服务器控制核需将共享内存拆分成多个内存块,优选地,每个内存块的大小相等。服务器控制核拆分内存块的数量取决于服务器数据核的数量,根据公式y=x*2n求得,其中,X为服务器数据核的数量,η为大于或等于O的整数,y为可拆分内存块数量。此拆分内存算法充分考虑了服务器侧和网卡侧对共享内存的需求,因为服务器多核CPU处理的任务量很大,通常服务器多核CPU的数据核数量不少于网卡多核CPU的数据核数量,所以根据服务器数据核数量计算的内存块数量可以满足网卡对内存的访问需求。在一种较优的实施方式中,取η等于O,则y=x。由此可看出,当η为大于或等于O的整数时,内存块数量不小于服务器数据核的数量。如图3所示,服务器数据核的数量为4,则η=0时,服务器控制核拆分共享内存的数量为4,分别编号为内存块O、内存块1、内存块2以及内存块3。共享内存拆分完成后,服务器控制核会将整个共享内存的基地址、内存块的数量以及内存块的大小发送给网卡,以便网卡多核CPU访问共享内存使用。
[0022]当网卡从外部接收到报文时,根据预定调度算法,确定传送该报文的网卡数据核编号和对应存放该报文的内存块编号。优选地,该预定调度算法为同源同宿分担算法,但不局限于此算法。该算法在Linux操作系统中的实现方式如下:
[0023]sip=sip~dip;//计算源 IP 地址
[0024]dip=sip;//计算目的IP地址
[0025]CRC=jhash_3words (sip, (sip (dip〈〈16)),0,0x5123598) ;// 计算哈希值
[0026]Ringid=CRC%Ringnmi;//根据哈希值得到存放报文的内存块编号
[0027]dst_vc
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1