远程零拷贝方法技术

技术编号:15228368 阅读:53 留言:0更新日期:2017-04-27 12:59
本发明专利技术涉及网络数据传输领域,其公开了一种远程零拷贝方法,包括如下步骤:(A)接收端划分一整块连续的缓存区域用于接收待发数据;(B)发送端对待发数据进行分片处理并拼装数据包后发送至接收端;(C)接收端将接收到的数据包按接收顺序通过DMA填充到缓存区域。本发明专利技术的有益效果是:无需额外的硬件支持,可在现有广泛使用的普通硬件平台上实现零拷贝的数据网络传输,可以适用于所有网络传输需求(而不仅仅是网络侦听),传输过程中也能有效地降低通信延迟,提高网络吞吐率。

【技术实现步骤摘要】

本专利技术涉及数据传输领域,尤其涉及一种远程零拷贝方法。
技术介绍
一般来说,在传输数据的时候,用户应用程序需要在用户空间分配一块大小合适的缓冲区用来存放需要传输的数据(如果是内核模块的话需要在内核空间分配缓冲区,后文以应用程序为例,二者处理过程相似的时候就不再加以区别)。发送时应用程序从文件中读取一块数据到这个缓冲区然后通过调用协议栈经由网络发出,接收时则通过协议栈使用该缓冲区获取网络收到的数据。虽然用户应用程序只是需要调用两个系统调用read()和write()就可以完成这个数据传输操作,然而实际上在这个数据传输的过程中,操作系统内核会在处理数据传输的过程中进行多次拷贝操作,这些数据拷贝操作以及协议栈的处理会占用大量的CPU时间,当数据量大的时候会耗费大量计算资源并影响数据传输的性能。具体来说,当应用程序需要访问文件中的某块数据的时候,操作系统内核会先检查这块数据是不是因为前一次对相同文件的访问而已经被存放在操作系统内核地址空间的缓冲区内,如果在内核缓冲区中找不到这块数据,操作系统内核会先将这块数据从磁盘读出来放到操作系统内核的缓冲区里去,如果这个数据读取操作是由DMA完成的,那么在DMA进行数据读取的这一过程中,CPU只是需要进行缓冲区管理,以及创建和处理DMA,除此之外,CPU不需要再做更多的事情,DMA执行完数据读取操作之后,会通知操作系统做进一步的处理。操作系统会根据read()系统调用指定的应用程序地址空间的地址,把这块数据存放到请求这块数据的应用程序的地址空间中去,在接下来的处理过程中,如果应用程序要把这块数据通过网络发送出去,操作系统需要将数据再一次从用户应用程序地址空间的缓冲区拷贝到与网络堆栈相关的内核缓冲区中去,这个过程也是需要占用CPU的。数据拷贝操作结束以后,数据会被打包,然后发送到网络接口卡上去。在数据传输的过程中,应用程序可以先返回进而执行其他的操作。在调用write()系统调用之后,用户应用程序缓冲区中的数据内容可以被安全的丢弃或者更改,因为操作系统已经在内核缓冲区中保留了一份数据拷贝,当数据被成功传送到硬件上之后,这份数据拷贝就可以被丢弃。从上面的描述可以看出,在这种传统的将数据从本地文件读取并通过传输过程中,数据至少发生了四次拷贝操作,即便是使用了DMA来进行与硬件的通讯,CPU仍然需要拷贝数据两次:在read()读数据的过程中,数据并不是直接来自于硬盘,而是必须先经过操作系统的文件系统层;在write()写数据的过程中,为了和要传输的数据包的大小相吻合,数据必须要先被分割成块,而且还要预先考虑包头,并且要进行数据校验和操作,而这些都要在协议栈的内核空间中完成,也会涉及到数据内容的拷贝。从网络上读取远程数据并存储到本地文件的操作过程是上述过程的逆过程,因此也涉及到多次数据拷贝。零拷贝技术是一种避免网络读写过程中数据频繁拷贝的技术,可以直接在网络接口卡和数据目标地址空间之间通过DMA进行数据拷贝,从而完全将CPU从数据拷贝中解放出来。作用于操作系统中的设备驱动程序、文件系统以及网络协议栈而出现的各种零拷贝技术极大地提升了特定应用程序的性能,并降低这些应用程序运行时耗费的系统资源。零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而有效地提高数据传输效率。而且零拷贝技术减少了用户应用程序地址空间和操作系统内核地址空间之间因为上下文切换而带来的开销。进行大量的数据拷贝操作其实是一件简单的任务,从操作系统的角度来说,如果CPU一直被占用着去执行这项简单的任务,是很浪费资源的,如果有其他比较简单的系统部件可以代劳这件事情,从而使得CPU解脱出来可以做别的事情,那么系统资源的利用则会更加有效。对于高速网络来说,零拷贝技术是非常重要的。因为高速网络的网络处理需求可能与CPU的处理能力接近,甚至会超过CPU的处理能力,特别是在数据包大小都不大的情况下。CPU可能需要花费几乎所有的时间去拷贝要传输的数据,而没有能力再去做别的事情,这就产生了性能瓶颈,限制了网络传输效率。一般来说,一个CPU时钟周期可以处理一位的数据。举例来说,一个1GHz的处理器可以对1Gbit/s的网络链接进行传统的数据拷贝操作,但是如果是10Gbit/s的网络,那么对于相同的处理器来说,零拷贝技术就变得非常重要了,对于超过1Gbit/s的网络链接来说,零拷贝技术在超级计算机集群以及大型的商业数据中心中都有所应用。传统的数据拷贝受限于传统的操作系统或者通信协议,这就限制了数据传输性能,零拷贝技术通过减少数据拷贝次数,简化协议处理的层次,在应用程序和网络之间提供更快的数据传输方法,从而可以有效地降低通信延迟,提高网络吞吐率。一种现有的零拷贝方案是在数据传输的过程中,为了避免数据在操作系统内核地址空间的缓冲区和用户应用程序地址空间的缓冲区之间进行拷贝,使用操作系统和应用程序共用缓存区的方法。数据会先通过DMA拷贝到操作系统内核的缓冲区中去,接着,应用程序跟操作系统共享这个缓冲区,操作系统内核和应用程序存储空间就不需要再进行任何的数据拷贝操作。具体实施步骤如下:首先打开设备接口,然后在用户空间内存中申请一片数据缓冲区,构造缓冲区控制结构接着通过内存映射得到缓冲区控制结构中的信息,再把发送的数据直接DMA传送到数据发送缓冲区中,最后应用程序处理报文数据。该零拷贝方案适用于不经过协议栈拷贝发送数据,但没有考虑到经过网络发送的数据都会被封装成网络格式,比如数据如果要经过以太网传输,就必须进行打包处理并增加了以太帧头、IP头等网络信息,如果数据大于以太帧最大长度的话还需要进行分片,因此接收到的数据会包括网络头信息,而且也不再是连续的原始数据了。应用程序如果只想获得原始数据就必须对接收到的数据进行解析拼接才行,而这些操作不可避免地需要CPU介入并涉及数据拷贝操作,因此这种技术方案基本上仅仅适用于网络侦听的应用。另外一种零拷贝方案是通过RDMA技术(RemoteDirectMemoryAccess远程直接数据存取),把一台计算机主机的数据直接放入另一台计算机主机的内存中。RDMA通过在网卡上将可靠传输协议固化于硬件,以及绕过内核的零拷贝网络这两种途径来达到这一目标。绕过内核使应用程序不必执行内核调用就可以向网卡发出命令,当一个应用程序执行RDMA读/写请求时,系统并不执行数据拷贝动作,因此可减少处理网络通信时在内核空间和用户空间上下文切换的次数。RDMA操作用于读写操作的远程虚拟内存地址含在RDMA消息中传送,远程应用程序要做的是在其本地网卡中注册相应的内存缓冲区。远程节点的CPU在整个RDMA操作中并不提供服务,因此没有带来任何负载。通过类型值(键值)的使用,一个应用程序能够在远程应用程序对它进行随机访问的情况下保护它的内存。发布RDMA操作的应用程序必须为它试图访问的远程内存指定正确的类型值,远程应用程序在本地网卡中注册内存时获得这个类型值。发布RDMA的应用程序也必须确定远程内存地址和该内存区域的类型值。远程应用程序会将相关信息通知给发布RDMA的应用程序,这些信息包括起始虚拟地址、内存大小和该内存区域的类型值。在发布RDMA的应用程序能够对该内存区域进行R本文档来自技高网...

【技术保护点】
一种远程零拷贝方法,其特征在于:包括如下步骤:(A)接收端划分一整块连续的缓存区域用于接收待发数据;(B)发送端对待发数据进行分片处理并拼装数据包后发送至接收端;(C)接收端将接收到的数据包按接收顺序通过DMA填充到缓存区域。

【技术特征摘要】
1.一种远程零拷贝方法,其特征在于:包括如下步骤:(A)接收端划分一整块连续的缓存区域用于接收待发数据;(B)发送端对待发数据进行分片处理并拼装数据包后发送至接收端;(C)接收端将接收到的数据包按接收顺序通过DMA填充到缓存区域。2.根据权利要求1所述的远程零拷贝方法,其特征在于:所述步骤(A)中,缓存区域存放待发数据形成的数据包以及数据块的控制信息与包头信息。3.根据权利要求1所述的远程零拷贝方法,其特征在于:所述步骤(B)中,当待发数据超过网络帧最大负荷大小时,则对数据进行分片处理,使得每片数据加上包头大小不超过接收端对应的网卡硬件所支持的一帧网络包大小;分片处理完毕后,启动DMA控制器,从最后一个数据片段开始,将以太网包头和数据片段打包成第一帧网络数据包,第一个数据片段与控制信息打包成最后一帧网络数据包,然后将网络数据包一帧一帧地按顺序发送出去。4.根据权利要求1所述的远程零拷贝方法,其特征在于:所述步骤(C)中,在填充时从后往前开始填写缓存,使得下一个网络数据包能够正好覆盖掉上一个网络数据包的包头,而当一块数据的所有网络数据包接收完之...

【专利技术属性】
技术研发人员:李大刚陈诗雁陈小刚
申请(专利权)人:北京大学深圳研究生院
类型:发明
国别省市:广东;44

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

1