数据访问的实现方法和装置制造方法及图纸

技术编号:7519245 阅读:156 留言:0更新日期:2012-07-12 01:09
本发明专利技术公开了一种数据访问的实现方法和装置,该方法包括:将网卡的硬件队列中的数据存储至物理内存中的多个数据缓冲区中;由多个数据访问单元对多个缓冲区中的数据进行访问,其中,每个数据缓冲区对应于一个虚拟缓冲区,每个数据访问单元通过访问虚拟缓冲区来访问相应数据缓冲区中的数据。本发明专利技术通过多队列的处理方式,由多个数据访问单元并行对缓冲区进行访问,并且将缓冲区直接映射给网卡驱动使用,从而避免了传统技术中缓冲区交互和报文的拷贝,有效提高了报文处理的效率,减少了数据处理延时,简化了数据处理过程。

【技术实现步骤摘要】

本专利技术涉及计算机领域,并且特别地,涉及一种数据访问的实现方法和装置
技术介绍
目前,千兆网卡的零拷贝技术主要基于传统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通信,用于对多个缓冲区中的数据进行访问,其中,每个数据缓冲区对应于一个虚拟缓冲区,每个数据访问单元通过访问虚拟缓冲区来访问相应数据缓冲区中的数据。该装置可以进一步包括映射模块(未示出),用于预先通过映射的方式设置多个数据缓冲区与多个虚拟缓冲区的一一对应关系。并且,网卡包括多个硬件队列,并且多个硬件队列与多个数据缓冲区一一对应,并且,存储控制模块用于每个硬件队列中的数据存储至与该硬件队列对应的数据缓冲区中。此外,数据访问单元与虚拟缓冲区一一对应设置,并且,每个数据访问单元对该数据访问单元对应的虚拟缓冲区进行访问。优选地,多个虚拟缓冲区的虚拟地址连续。综上所述,借助于本专利技术的上述技术方案,通过多队列的处理方式,由多个数据访问单元并行对缓冲区进行访问,并且将缓冲区直接映射给网卡驱动使用,从而避免了传统技术中缓冲区交互和报文的拷贝,有效提高了报文处理的效率,减少了数据处理延时,简化了数据处理过程。本专利技术的方案可以适用于多种数据接收场景,例如,可以在万兆网卡实现多队列上的零拷贝,利用本文档来自技高网...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:万伟刘兴彬王泼刘铁陈科朱春屹王清李云华李博文董建珊杨锦涛孙一鸣范玉峰曹振南邵宗有
申请(专利权)人:曙光信息产业股份有限公司
类型:发明
国别省市:

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

1
相关领域技术