一种基于哈希的网卡软中断负载均衡方法技术

技术编号:8593840 阅读:366 留言:0更新日期:2013-04-18 06:59
本发明专利技术公开了一种基于哈希的网卡软中断负载均衡方法,属于计算机系统及通信领域,网卡收取数据包的过程中,通过计算数据包的源IP地址、目的IP地址、端口地址的哈希值,端口地址包括源端口地址及目的端口地址,将不同哈希值的数据包挂到与其对应CPU的接收数据包队列中,由此CPU的收包软中断处理收取数据包,实现数据包在多个CPU上的均衡处理;如果数据包通过计算哈希值属于本CPU,则CPU将其数据包传递给上层协议栈继续处理,否则将数据包加入与其哈希值相应CPU的接收数据包队列中,并触发相应CPU的收包软中断进行处理。本发明专利技术的一种基于哈希的网卡软中断负载均衡方法,充分利用了cpu处理资源、使得负载均衡。

【技术实现步骤摘要】

本专利技术涉及一种计算机系统及通信领域,具体地说是。
技术介绍
哈希即Hash,翻译做“散列”或直接音译为“哈希”。就是把任意长度的输入(又叫做预映射,pre-1mage),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。传统的网卡接收数据包处理过程中,为避免在硬中断陷入太长的时间,硬中断完成数据包由网卡到内存拷贝等部分处理后,后面调度软中断运行,硬中断则直接返回,软中断继续处理并将数据包传递到上层协议栈。这种处理方式导致硬中断由某个CPU处理,相应的软中断也由此CPU处理,而目前的计算机系统上通常配置有多个CPU或CPU本身有多个核,造成处理软中断的CPU负载很高但其他CPU或核心却处于空闲状态,从而限制了系统本身网络处理带宽的能力。在Iinux系统中传统的数据包接收方式是,当网卡上有数据包接收时,首先触发网卡的硬中断处理函数,若网卡不支持napi方式,则将数据包放入接收硬中断的CPU的input_pkt_queue队列中,然后触发软中断执行,硬中断则至此完成处理直接返回。在软中断处理函数中通过调用Iinux内核的通用轮询函数process_backlog逐个在input_pkt_queue队列中取出数据包,并递交上层协议继续处理。若网卡支持napi方式,在网卡的硬中断处理函数中,首先判断网卡驱动独立的轮询收包函数poll是否在运行,如果在运行则硬中断直接返回,poll函数后续会将此数据包进行收取,否则直接触发软中断的执行。与非napi方式不同的是,在软中断中调用的轮询函数不是Iinux内核通用process_backlog函数,而是网卡驱动结合硬件特性独立实现的poll函数,在napi方式下每个网卡拥有自己独立的环形数据包接收缓存区,poll函数会从此环形缓冲区上批量收取数据包,然后递交上层协议栈处理。相对于非napi方式下每个数据包都触发中断处理,napi方式显著减少了大数据流下的网卡中断数量。但是在传统的收包处理方式下,不管网卡使用napi方式还是非napi方式收取数据包,软中断都是在处理硬中断的相应CPU上继续运行,也就是如果硬中断由cpu O处理,后面相应的软中断也会由cpu O处理,即便目前cpu I处于空闲状态也无法参加软中断的处理,从而导致网卡收包的软中断无法并行处理,造成cpu处理资源的浪费。
技术实现思路
本专利技术的技术任务是提供一种结方法简单、充分利用了 CPU处理资源、使得负载均衡的。本专利技术的技术任务是按以下方式实现的,包括计算机、计算机的CPU及网卡,计算机的系统为Iinux系统,网卡收取数据包的过程中,通过计算数据包的源IP地址、目的IP地址、端口地址的哈希值,端口地址包括源端口地址及目的端口地址,将不同哈希值的数据包挂到与其对应CPU的接收数据包队列中,由此CPU的收包软中断处理收取数据包,从而避免一个网卡上所有的数据包软中断都由一个单独的CPU处理,实现数据包在多个CPU上的均衡处理;如果数据包通过计算哈希值属于本CPU,则CPU将其数据包传递给上层协议栈继续处理,否则将数据包加入与其哈希值相应CPU的接收数据包队列中,并触发相应CPU的收包软中断进行处理。具体步骤为 (1)、在网卡要收取的数据包中提取出32位的源IP地址(src_ip)和32位的目的IP地址(dst_ip),以及16位的源端口地址(src_port)和16位的目的端口地址(dst_port);然后将数据包的源端口地址、目的端口地址连接合并为32位长的整数的端口地址(port);如果数据包中不含有源端口地址和目的端口地址,则将数据包的端口地址值直接置O; (2)、然后利用Iinux系统下通用的哈希值计算函数jhash_3words,以数据包的源IP地址、目的IP地址、端口地址三个值为参数计算哈希值; (3)、将求得的数据包的哈希值结果对计算机的CPU数取模,从而将不同的数据包映射到不同的CPU上,不同的数据包由不同的CPU的收包软中断进行处理;且采用源IP地址、目的IP地址、端口地址计算哈希值避免了将同一连接的数据包分流到不同的cpu上,避免了数据包乱序到达的问题; (4)、CPU的收包软中断处理数据包的过程中,若遇到需要在其他CPU上进行处理的数据包,则将此数据包记录在CPU的remote_cpu_mask变量中;CPU的收包软中断处理完毕后,CPU对其remote_cpu_mask变量逐位进行遍历,将记录的数据包调度到相应的cpu上进行收包软中断处理。例如在CPUO的收包软中断处理数据包的过程中,遇到需要在CPUl上进行处理的数据包,则将CPUO的remote_cpu_mask变量的第I个bit位的值置1,在CPUO的收包软中断处理完毕时对其remote_cpu_mask变量逐位进行遍历,当遇到为I的位时,则将数据包调度到相应的CPUl上进行收包软中断处理。对于网卡的非napi收包方式下,本地CPU在硬中断处理函数中,根据计算的哈希值将数据包放入不同的CPU接收数据包队列(input_pkt_queue接收队列),并标记本地CPU的变量remote_cpu_mask中相应的CPU的bit位的值置1,然后触发相应的CPU的收包软中断;在本地CPU收包软中断处理数据包过程中,调用CPU的process_backlog通用轮询函数从接收数据包队列取下数据包递交到上层协议栈;然后对rem0te_Cpu_maSk变量逐位进行遍历,若bit位的值为1,则触发相应CPU上的收包软中断进行数据包处理,最后将本地CPU的remote_cpu_mask变量的bit位的值清零,从而实现了非napi方式下的接收软中断的负载均衡。对于网卡的napi收包方式下,CPU在硬中断触发软中断执行后,网卡驱动的轮询函数poll从网卡的独立环形缓冲区中遍历数据包,通过计算数据包的哈希值,如果数据包属于本地CPU处理则直接传递到上层协议栈;如果不属于本地CPU处理则将其挂到相应CPU接收数据包队列,并标记本地CPU的remote_cpu_mask变量中对应的CPU的bit位的值置1,在网卡环形接收缓冲区遍历完毕或遍历达到一定数量后,触发相应CPU上的收包软中断执行;在此次触发的远程CPU的收包软中断处理中,调用CPU的process_backlog通用轮询函数从接收数据包队列取下数据包递交到上层协议栈。在未加均衡处理的传统napi收包方式下,数据包相当于只有一次入队操作,即从网卡到内存中环形接收缓冲区的入CPU接收数据包队列,然后就在收包软中断中对环形缓冲区的数据包进行遍历将其传递给了上层协议栈。在添加了接收均衡支持后,数据包相当于变成了两次CPU接收数据包队列入队操作,即多出了从网卡的环形接收缓冲区根据哈希值到每CPU的接收数据包队列入队操作,由此略微增加了 CPU的处理工作量,但相对中断负载均衡取得整体效果,由此增加的少量处理工作是可以接受的。本专利技术的具有以下优点设计合理、方法简便、充分利用了 CPU处理资源本文档来自技高网
...

【技术保护点】
一种基于哈希的网卡软中断负载均衡方法,包括计算机、计算机的CPU及网卡,计算机的系统为linux系统,其特征在于网卡收取数据包的过程中,通过计算数据包的源IP地址、目的IP地址、端口地址的哈希值,端口地址包括源端口地址及目的端口地址,将不同哈希值的数据包挂到与其对应CPU的接收数据包队列中,由此CPU的收包软中断处理收取数据包,实现数据包在多个CPU上的均衡处理;如果数据包通过计算哈希值属于本CPU,则CPU将其数据包传递给上层协议栈继续处理,否则将数据包加入与其哈希值相应CPU的接收数据包队列中,并触发相应CPU的收包软中断进行处理。

【技术特征摘要】
1.一种基于哈希的网卡软中断负载均衡方法,包括计算机、计算机的CPU及网卡,计算机的系统为Iinux系统,其特征在于网卡收取数据包的过程中,通过计算数据包的源IP地址、目的IP地址、端口地址的哈希值,端口地址包括源端口地址及目的端口地址,将不同哈希值的数据包挂到与其对应CPU的接收数据包队列中,由此CPU的收包软中断处理收取数据包,实现数据包在多个CPU上的均衡处理;如果数据包通过计算哈希值属于本CPU,则CPU将其数据包传递给上层协议栈继续处理,否则将数据包加入与其哈希值相应CPU的接收数据包队列中,并触发相应CPU的收包软中断进行处理。2.根据权利要求1所述的一种基于哈希的网卡软中断负载均衡方法,其特征在于具体步骤为 (1)、在网卡要收取的数据包中提取出32位的源IP地址和32位的目的IP地址,以及16位的源端口地址和16位的目的端口地址;然后将数据包的源端口地址、目的端口地址连接合并为32位长的整数的端口地址;如果数据包中不含有源端口地址和目的端口地址,则将数据包的端口地址值直接置O ; (2)、然后利用Iinux系统下通用的哈希值计算函数,以数据包的源IP地址、目的IP地址、端口地址三个值为参数计算哈希值; (3)、将求得的数据包的哈希值结果对计算机的CPU数取模,从而将不同的数据包映射到不同的CPU上,不同的数据包由不同的CPU的收包软中断进行处理; (4)、CPU的收包软中断处理数据包的过程中,若遇到需要在其他CPU上进行处理的数据包,则将此数据包记录在CPU的rem0te_Cpu_maSk变量中;CPU的...

【专利技术属性】
技术研发人员:张会健
申请(专利权)人:浪潮电子信息产业股份有限公司
类型:发明
国别省市:

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

1