数据访问的实现方法和装置的利记博彩app

文档序号:6444549阅读:212来源:国知局
专利名称:数据访问的实现方法和装置的利记博彩app
技术领域
本发明涉及计算机领域,并且特别地,涉及一种数据访问的实现方法和装置。
背景技术
目前,千兆网卡的零拷贝技术主要基于传统intel千兆网卡来实现。通常,在网络数据包的收包过程中,应用程序需要以拷贝的方式与内核中的网卡报文缓冲区进行交互,这种拷贝处理必然会降低性能和速率,无法在大流量场景中使用。并且,目前的千兆零拷贝都是基于单队列的技术来实现的,但是,在万兆接入的情况下,单位时间内的数据包速率将提高大约10倍,而千兆网卡下单一的传输队列以及缓冲区交互将存在很高的性能损失,所以,传统的技术将无法应对如此高的数据速率,进而成为万兆零拷贝技术发展的瓶颈。针对相关技术中无法在大流量要求下高效地实现数据接收的问题,目前尚未提出有效的解决方案。

发明内容
针对相关技术中无法在大流量要求下高效地实现数据接收的问题,本发明提出一种数据访问的实现方法和装置,能够提高数据接收的效率,减少数据接收处理的延迟。本发明的技术方案是这样实现的根据本发明的一个方面,提供了一种数据访问的实现方法。该方法包括将网卡的硬件队列中的数据存储至物理内存中的多个数据缓冲区中;由多个数据访问单元对多个缓冲区中的数据进行访问,其中,每个数据缓冲区对应于一个虚拟缓冲区,每个数据访问单元通过访问虚拟缓冲区来访问相应数据缓冲区中的数据。该方法可进一步包括预先设置多个数据缓冲区与多个虚拟缓冲区的一一对应关系。此外,网卡包括多个硬件队列,并且多个硬件队列与多个数据缓冲区一一对应,并且每个硬件队列中的数据被存储至与该硬件队列对应的数据缓冲区中。此外,数据访问单元与虚拟缓冲区一一对应,并且,每个数据访问单元对该数据访问单元对应的虚拟缓冲区进行访问。并且,优选地,上述多个虚拟缓冲区的虚拟地址连续。根据本发明的另一方面,提供了一种数据访问的实现装置。该装置包括物理内存,包括多个数据缓冲区;存储控制模块,用于将网卡的硬件队列中的数据存储至物理内存中的多个数据缓冲区中;多个数据访问单元,用于对多个缓冲区中的数据进行访问,其中,每个数据缓冲区对应于一个虚拟缓冲区,每个数据访问单元通过访问虚拟缓冲区来访问相应数据缓冲区中的数据。该装置可进一步包括映射模块,用于预先通过映射的方式设置多个数据缓冲区与多个虚拟缓冲区的一一对应关系。
此外,网卡包括多个硬件队列,并且多个硬件队列与多个数据缓冲区一一对应,并且,存储控制模块用于每个硬件队列中的数据存储至与该硬件队列对应的数据缓冲区中。此外,数据访问单元与虚拟缓冲区一一对应设置,并且,每个数据访问单元对该数据访问单元对应的虚拟缓冲区进行访问。此外,优选地,上述多个虚拟缓冲区的虚拟地址连续。本发明通过多队列的处理方式,由多个数据访问单元并行对缓冲区进行访问,并且将缓冲区直接映射给网卡驱动使用,从而避免了传统技术中缓冲区交互和报文的拷贝,有效提高了报文处理的效率,减少了数据处理延时,简化了数据处理过程。


图1是根据本发明实施例的数据访问的实现方法的流程图;图2是根据本发明实施例的数据访问的实现方案中设置多队列数据结构的流程图;图3是根据本发明实施例的数据访问的实现方法的原理示意图;图4是根据本发明实施例的数据访问的实现装置的框图。
具体实施例方式根据本发明的实施例,提供了一种数据访问的实现方法。如图1所示,根据本发明实施例的数据访问的实现方法包括步骤S101,将网卡的硬件队列中的数据存储至物理内存中的多个数据缓冲区中;步骤S103,由多个数据访问单元对多个缓冲区中的数据进行访问,其中,每个数据缓冲区对应于一个虚拟缓冲区,每个数据访问单元通过访问虚拟缓冲区来访问相应数据缓冲区中的数据。在实现本发明的方案时,可以预先设置多个数据缓冲区与多个虚拟缓冲区的一一对应关系。具体地,可以利用字符设备,从内核态分配不连续的内存页面映射到应用程序中。如图2所示,首先创建名为dash的字符设备(char device),然后定义出多队列的数据结构。定义字符设备的mmap方法以定义映射策略,真实内存页面的分配在nopage方法中实现。根据映射到的地址空间的位置,计算出对应的CPU号,并从该CPU上进行内存分配,从而利用NUMA特性提高了内存访问的效率。在本发明的方案中,网卡可以包括多个硬件队列,并且多个硬件队列与多个数据缓冲区一一对应,并且每个硬件队列中的数据被存储至与该硬件队列对应的数据缓冲区中。此外,数据访问单元与虚拟缓冲区一一对应,并且,每个数据访问单元对该数据访问单元对应的虚拟缓冲区进行访问。另外,多个虚拟缓冲区的虚拟地址连续。具体地,如图3所示,以CPUO、CPU1、CPU2和CPU3四个CPU为例,网卡队列包括队列0、队列1、队列2和队列3,每个队列对应一个CPU核,并在每个CPU核对应的物理内存区域中分配内存(不连续),并以连续的方式对应到应用程序的地址空间中,即,映射到虚拟的数据缓冲区中,应用进程地址空间中的数据缓冲区就是虚拟缓冲区,应用进程地址空间中的数据缓冲区0-3(虚拟缓冲区)与CPU0-3分别一一对应。为方便应用程序的使用,应用进程地址空间中的数据缓冲区可分配到连续的地址空间上。在相关技术中,网络数据包发包过程中,应用程序需要以拷贝的方式与内核中的网卡报文缓冲区进行交互,而本发明的上述技术方案能够通过内存映射的方式,将应用程序缓冲区直接映射给网卡驱动使用,从而减少这一次不必要的拷贝操作,提高了性能。在万兆网卡下,本发明提出了支持多个传输队列的内存缓冲区映射方式,基于多硬件队列技术实现了高速发包,由于多队列可以很好利用当前多核的架构,所以使捕包性能得到明显提升。应当注意,本发明的方案同样可以应用于其他CPU进行数据接收的场景中,并且能够达到类似的效果,其处理方式类似,本文不再一一列举。根据本发明的实施例,提供了一种数据访问的实现装置。如图4所示,根据本发明实施例的数据访问的实现装置包括物理内存41,包括多个数据缓冲区(未示出);存储控制模块42,连接至物理内存41,用于将网卡的硬件队列中的数据存储至物理内存中的多个数据缓冲区中;多个数据访问单元43(图4中仅示出了一个数据访问单元,其他未示出的数据访问单元均可以采用类似的方式进行连接),能够与物理内存41通信,用于对多个缓冲区中的数据进行访问,其中,每个数据缓冲区对应于一个虚拟缓冲区,每个数据访问单元通过访问虚拟缓冲区来访问相应数据缓冲区中的数据。该装置可以进一步包括映射模块(未示出),用于预先通过映射的方式设置多个数据缓冲区与多个虚拟缓冲区的一一对应关系。并且,网卡包括多个硬件队列,并且多个硬件队列与多个数据缓冲区一一对应,并且,存储控制模块用于每个硬件队列中的数据存储至与该硬件队列对应的数据缓冲区中。此外,数据访问单元与虚拟缓冲区一一对应设置,并且,每个数据访问单元对该数据访问单元对应的虚拟缓冲区进行访问。优选地,多个虚拟缓冲区的虚拟地址连续。综上所述,借助于本发明的上述技术方案,通过多队列的处理方式,由多个数据访问单元并行对缓冲区进行访问,并且将缓冲区直接映射给网卡驱动使用,从而避免了传统技术中缓冲区交互和报文的拷贝,有效提高了报文处理的效率,减少了数据处理延时,简化了数据处理过程。本发明的方案可以适用于多种数据接收场景,例如,可以在万兆网卡实现多队列上的零拷贝,利用numa特性提高内存访问的性能。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种数据访问的实现方法,其特征在于,包括将网卡的硬件队列中的数据存储至物理内存中的多个数据缓冲区中;由多个数据访问单元对所述多个缓冲区中的数据进行访问,其中,每个数据缓冲区对应于一个虚拟缓冲区,每个数据访问单元通过访问虚拟缓冲区来访问相应数据缓冲区中的数据。
2.根据权利要求1所述的实现方法,其特征在于,进一步包括预先设置所述多个数据缓冲区与所述多个虚拟缓冲区的一一对应关系。
3.根据权利要求1所述的实现方法,其特征在于,所述网卡包括多个硬件队列,并且所述多个硬件队列与所述多个数据缓冲区一一对应,并且每个硬件队列中的数据被存储至与该硬件队列对应的数据缓冲区中。
4.根据权利要求1所述的实现方法,其特征在于,数据访问单元与虚拟缓冲区一一对应,并且,每个数据访问单元对该数据访问单元对应的虚拟缓冲区进行访问。
5.根据权利要求1至4中任一项所述的实现方法,其特征在于,所述多个虚拟缓冲区的虚拟地址连续。
6.一种数据访问的实现装置,其特征在于,包括物理内存,包括多个数据缓冲区;存储控制模块,用于将网卡的硬件队列中的数据存储至物理内存中的所述多个数据缓冲区中;多个数据访问单元,用于对所述多个缓冲区中的数据进行访问,其中,每个数据缓冲区对应于一个虚拟缓冲区,每个数据访问单元通过访问虚拟缓冲区来访问相应数据缓冲区中的数据。
7.根据权利要求6所述的实现装置,其特征在于,进一步包括映射模块,用于预先通过映射的方式设置所述多个数据缓冲区与所述多个虚拟缓冲区的一一对应关系。
8.根据权利要求6所述的实现装置,其特征在于,所述网卡包括多个硬件队列,并且所述多个硬件队列与所述多个数据缓冲区一一对应,并且,所述存储控制模块用于每个硬件队列中的数据存储至与该硬件队列对应的数据缓冲区中。
9.根据权利要求6所述的实现装置,其特征在于,数据访问单元与虚拟缓冲区一一对应设置,并且,每个数据访问单元对该数据访问单元对应的虚拟缓冲区进行访问。
10.根据权利要求6至9中任一项所述的实现装置,其特征在于,所述多个虚拟缓冲区的虚拟地址连续。
全文摘要
本发明公开了一种数据访问的实现方法和装置,该方法包括将网卡的硬件队列中的数据存储至物理内存中的多个数据缓冲区中;由多个数据访问单元对多个缓冲区中的数据进行访问,其中,每个数据缓冲区对应于一个虚拟缓冲区,每个数据访问单元通过访问虚拟缓冲区来访问相应数据缓冲区中的数据。本发明通过多队列的处理方式,由多个数据访问单元并行对缓冲区进行访问,并且将缓冲区直接映射给网卡驱动使用,从而避免了传统技术中缓冲区交互和报文的拷贝,有效提高了报文处理的效率,减少了数据处理延时,简化了数据处理过程。
文档编号G06F12/08GK102567226SQ20111045592
公开日2012年7月11日 申请日期2011年12月31日 优先权日2011年12月31日
发明者万伟, 刘兴彬, 刘铁, 孙一鸣, 曹振南, 朱春屹, 李云华, 李博文, 杨锦涛, 王泼, 王清, 范玉峰, 董建珊, 邵宗有, 陈科 申请人:曙光信息产业股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1