数据分流的实现方法和装置的制作方法

文档序号:6440276阅读:213来源:国知局
专利名称:数据分流的实现方法和装置的制作方法
技术领域
本发明涉及计算机领域,并且特别地,涉及一种数据分流的实现方法和装置。
背景技术
目前的万兆零拷贝技术主要是基于htel网卡提供硬件多队列来实现,这样虽然可以提高性能,但由于硬件实现的灵活性有限,对一些特殊的协议难以使用它来实现分流, 例如,ipv4封装到ipv6中,硬件分流可以按照ipv4或者ipv6的源目的地址进行分流,但无法按照封装到ipv6中的ipv4协议进行分流,可见,硬件分流的适用情况是非常有限的。针对相关技术中硬件分流技术不能应对所有分流场景的问题,目前尚未提出有效的解决方案。

发明内容
针对相关技术中硬件分流技术不能应对所有分流场景的问题,本发明提出一种数据分流的实现方法和装置,能够借助多CPU的方式在各种场景下有效实现数据的分流。本发明的技术方案是这样实现的根据本发明的实施例,提供了一种数据分流的实现方法。根据本发明实施例的数据分流的实现方法包括多个中央处理单元CPU判断需要分流的数据是否属于各自需要处理的数据,其中,对于每个CPU判断一数据时,判断该数据对应的协议是否是该CPU对应的协议;对于每个CPU,在判断一数据是该CPU对应的协议的情况下,该CPU将该数据存储至该CPU对应的处理队列中。其中,需要分流的数据来自至少一个底层硬件队列,并且,在进行判断时,每个CPU 均轮询所有底层硬件队列。此外,每个CPU判断一数据对应的协议是否是该CPU对应的协议包括该CPU根据其协议对应的哈希方式对该数据进行哈希处理,根据处理结果判断该数据对应的协议是否是该CPU对应的协议。此外,对于每个CPU,在判断一数据不是该CPU对应的协议的情况下,该CPU继续判断下一需要分流的数据。该方法可进一步包括每个CPU对其处理队列中的数据进行处理。可选地,每个CPU对应的协议为IPv4协议或IPv6协议。根据本发明的实施例,还提供了一种数据分流的实现装置。该装置包括多个CPU,其中,每个CPU包括判断模块,用于判断需要分流的数据是否属于该CPU需要处理的数据,其中,判断模块具体用于判断该数据对应的协议是否是所在CPU对应的协议;存储模块,用于以队列的形式保存被判断为所在CPU需要处理的数据。其中,需要分流的数据来自至少一个底层硬件队列,并且,在进行判断时,每个CPU 的判断模块均轮询所有底层硬件队列。此外,判断模块用于根据所在CPU的协议对应的哈希方式对该数据进行哈希处理,并根据处理结果判断该数据对应的协议是否是所在CPU对应的协议。此外,对于每个CPU的判断模块,在判断一数据不是所在CPU对应的协议的情况下,判断模块继续判断下一需要分流的数据。本发明通过由多个CPU对需要分流的数据进行判断,并将各自需要处理的数据存入各自的队列中,能够有效克服相关技术中硬件分流存在的弊端,在各种场景下均有效实现数据分流。


图1是根据本发明实施例的数据分流的实现方法的流程图;图加是根据本发明实施例的数据分流的实现方法的原理示意图;图2b是根据本发明实施例的方案发送数据报文的原理示意图;图3是根据本发明实施例的数据分流的实现装置中CPU的框图。
具体实施例方式根据本发明的实施例,提供了一种数据分流的实现方法。如图1所示,根据本发明实施例的数据分流的实现方法包括步骤SlOl,多个中央处理单元CPU (可以是该CPU执行的线程)判断需要分流的数据是否属于各自需要处理的数据,其中,对于每个CPU判断一数据时,判断该数据对应的协议是否是该CPU对应的协议;步骤S103,对于每个CPU,在判断一数据是该CPU对应的协议的情况下,该CPU将该数据存储至该CPU对应的处理队列中。其中,需要分流的数据来自至少一个底层硬件队列,并且,在进行判断时,每个CPU 均轮询所有底层硬件队列。此外,在每个CPU判断一数据对应的协议是否是该CPU对应的协议时,该CPU根据其协议对应的哈希方式对该数据进行哈希处理,根据处理结果判断该数据对应的协议是否是该CPU对应的协议。此外,对于每个CPU,在判断一数据不是该CPU对应的协议的情况下,该CPU继续判断下一需要分流的数据。该方法可以进一步包括每个CPU对其处理队列中的数据(即,完成分流后的数据)进行处理。可选地,每个CPU对应的协议为IPv4协议或IPv6协议,当然,也可以对应更多的协议,并且,协议的类型也不仅仅限于以上两种,任何需要进行数据分流的场景中的协议都可以采用本发明的上述方案进行分流。在实际应用中,可以针对万兆网卡多接收队列的特点,为每个CPU核分配一个网卡硬件描述符队列,并且分配相应的软件描述符队列,配置万兆网卡自动将报文发送到相应队列上去。其中,对于每个队列,都为其分配独立的数据缓冲区,并通过内存映射的方式将数据缓冲区队列映射到应用程序中去,从而驱动对缓冲区的修改可以直接反映到应用程序中来,从而避免了不必要的内存拷贝。
并且,每个队列可以采用循环队列的数据结构,此算法为无锁(lock-free)算法, 避免了加锁对性能的影响。此外,在以上架构基础上,可以添加一层软件分类层。由于硬件分流的多队列已不能满足复杂的协议环境,所以对每个线程队列来说,真正的数据来源可能来自于任何一个底层的硬件队列,所以每个线程轮询每一个底层硬件队列,并按照所需的硬件协议定制的 hash方式,将计算结果符合的数据包放到自己的队列中来,不符合的数据包则不作任何操作,等其它线程队列来访问。这样就可以用软件来实现各种不同协议的分流。如图2a所示,CPUO、CPUl、CPU2和CPU3中的部分CPU可以对应于IPv4协议,另一部分可以对应于IPv6协议,这些CPU的线程(位于应用程序部分)能够对内核驱动部分中万兆网卡的数据进行处理,其中,万兆网卡的数据(网络数据报文)会存储在共享内存中, 各个CPU能够独立地访问这些内存中的数据。如图2b所示,在发送报文时,各个CPU会将报文发送至各个CPU所对应的共享内存,之后,会将报文发送至网卡,之后发送到网络。通过上述方案,就能够在硬件多队列的基础上,借助多队列的方式实现万兆零拷贝分流,并且可以实现对各种网络协议的深度解析的分流,保证分流的精度。根据本发明的实施例,提供了一种数据分流的实现装置。根据本发明实施例的数据分流的实现装置可以包括多个CPU,其中,如图3所示, 每个CPU可以包括判断模块31,用于判断需要分流的数据是否属于该CPU需要处理的数据,其中,判断模块具体用于判断该数据对应的协议是否是所在CPU对应的协议;存储模块 32,连接至判断模块31,用于以队列的形式保存被判断为所在CPU需要处理的数据。其中,需要分流的数据来自至少一个底层硬件队列,并且,在进行判断时,每个CPU 的判断模块均轮询所有底层硬件队列。具体地,判断模块用于根据所在CPU的协议对应的哈希方式对该数据进行哈希处理,并根据处理结果判断该数据对应的协议是否是所在CPU对应的协议。此外,对于每个CPU的判断模块,在判断一数据不是所在CPU对应的协议的情况下,判断模块继续判断下一需要分流的数据。综上,借助于本发明的上述技术方案,通过由多个CPU对需要分流的数据进行判断,并将各自需要处理的数据存入各自的队列中,能够有效克服相关技术中硬件分流存在的弊端,在各种场景下均有效实现数据分流。以上仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种数据分流的实现方法,其特征在于,包括多个中央处理单元CPU判断需要分流的数据是否属于各自需要处理的数据,其中,对于每个CPU判断一数据时,判断该数据对应的协议是否是该CPU对应的协议;对于每个CPU,在判断一数据是该CPU对应的协议的情况下,该CPU将该数据存储至该 CPU对应的处理队列中。
2.根据权利要求1所述的实现方法,其特征在于,需要分流的数据来自至少一个底层硬件队列,并且,在进行判断时,每个CPU均轮询所有底层硬件队列。
3.根据权利要求1所述的实现方法,其特征在于,每个CPU判断一数据对应的协议是否是该CPU对应的协议包括该CPU根据其协议对应的哈希方式对该数据进行哈希处理,根据处理结果判断该数据对应的协议是否是该CPU对应的协议。
4.根据权利要求1所述的实现方法,其特征在于,对于每个CPU,在判断一数据不是该 CPU对应的协议的情况下,该CPU继续判断下一需要分流的数据。
5.根据权利要求1所述的实现方法,其特征在于,进一步包括 每个CPU对其处理队列中的数据进行处理。
6.根据权利要求1至5中任一项所述的实现方法,其特征在于,每个CPU对应的协议为 IPv4协议或IPv6协议。
7.一种数据分流的实现装置,其特征在于,包括多个CPU,其中,每个CPU包括 判断模块,用于判断需要分流的数据是否属于该CPU需要处理的数据,其中,所述判断模块具体用于判断该数据对应的协议是否是所在CPU对应的协议;存储模块,用于以队列的形式保存被判断为所在CPU需要处理的数据。
8.根据权利要求7所述的实现装置,其特征在于,需要分流的数据来自至少一个底层硬件队列,并且,在进行判断时,每个CPU的判断模块均轮询所有底层硬件队列。
9.根据权利要求7所述的实现装置,其特征在于,所述判断模块用于根据所在CPU的协议对应的哈希方式对该数据进行哈希处理,并根据处理结果判断该数据对应的协议是否是所在CPU对应的协议。
10.根据权利要求7所述的实现装置,其特征在于,对于每个CPU的判断模块,在判断一数据不是所在CPU对应的协议的情况下,判断模块继续判断下一需要分流的数据。
全文摘要
本发明公开了一种数据分流的实现方法和装置,其中,该方法包括多个中央处理单元CPU判断需要分流的数据是否属于各自需要处理的数据,其中,对于每个CPU判断一数据时,判断该数据对应的协议是否是该CPU对应的协议;对于每个CPU,在判断一数据是该CPU对应的协议的情况下,该CPU将该数据存储至该CPU对应的处理队列中。本发明通过由多个CPU对需要分流的数据进行判断,并将各自需要处理的数据存入各自的队列中,能够有效克服相关技术中硬件分流存在的弊端,在各种场景下均有效实现数据分流。
文档编号G06F9/50GK102495764SQ20111040290
公开日2012年6月13日 申请日期2011年12月6日 优先权日2011年12月6日
发明者万伟, 刘兴彬, 刘铁, 孙一鸣, 朱春屹, 李云华, 李博文, 杨锦涛, 王泼, 董建珊, 陈科 申请人:曙光信息产业股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1