[发明专利]远程零拷贝方法有效
| 申请号: | 201611003952.4 | 申请日: | 2016-11-15 |
| 公开(公告)号: | CN106598752B | 公开(公告)日: | 2020-05-12 |
| 发明(设计)人: | 李大刚;陈诗雁;陈小刚 | 申请(专利权)人: | 北京大学深圳研究生院 |
| 主分类号: | G06F9/54 | 分类号: | G06F9/54;G06F9/50 |
| 代理公司: | 深圳市科吉华烽知识产权事务所(普通合伙) 44248 | 代理人: | 严涓逢 |
| 地址: | 518000 广东省深圳*** | 国省代码: | 广东;44 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 远程 拷贝 方法 | ||
本发明涉及网络数据传输领域,其公开了一种远程零拷贝方法,包括如下步骤:(A)接收端划分一整块连续的缓存区域用于接收待发数据;(B)发送端对待发数据进行分片处理并拼装数据包后发送至接收端;(C)接收端将接收到的数据包按接收顺序通过DMA填充到缓存区域。本发明的有益效果是:无需额外的硬件支持,可在现有广泛使用的普通硬件平台上实现零拷贝的数据网络传输,可以适用于所有网络传输需求(而不仅仅是网络侦听),传输过程中也能有效地降低通信延迟,提高网络吞吐率。
技术领域
本发明涉及数据传输领域,尤其涉及一种远程零拷贝方法。
背景技术
一般来说,在传输数据的时候,用户应用程序需要在用户空间分配一块大小合适的缓冲区用来存放需要传输的数据(如果是内核模块的话需要在内核空间分配缓冲区,后文以应用程序为例,二者处理过程相似的时候就不再加以区别)。发送时应用程序从文件中读取一块数据到这个缓冲区然后通过调用协议栈经由网络发出,接收时则通过协议栈使用该缓冲区获取网络收到的数据。虽然用户应用程序只是需要调用两个系统调用read()和write()就可以完成这个数据传输操作,然而实际上在这个数据传输的过程中,操作系统内核会在处理数据传输的过程中进行多次拷贝操作,这些数据拷贝操作以及协议栈的处理会占用大量的CPU时间,当数据量大的时候会耗费大量计算资源并影响数据传输的性能。
具体来说,当应用程序需要访问文件中的某块数据的时候,操作系统内核会先检查这块数据是不是因为前一次对相同文件的访问而已经被存放在操作系统内核地址空间的缓冲区内,如果在内核缓冲区中找不到这块数据, 操作系统内核会先将这块数据从磁盘读出来放到操作系统内核的缓冲区里去,如果这个数据读取操作是由DMA完成的,那么在DMA进行数据读取的这一过程中,CPU只是需要进行缓冲区管理,以及创建和处理DMA,除此之外,CPU不需要再做更多的事情,DMA执行完数据读取操作之后,会通知操作系统做进一步的处理。操作系统会根据read()系统调用指定的应用程序地址空间的地址,把这块数据存放到请求这块数据的应用程序的地址空间中去,在接下来的处理过程中,如果应用程序要把这块数据通过网络发送出去,操作系统需要将数据再一次从用户应用程序地址空间的缓冲区拷贝到与网络堆栈相关的内核缓冲区中去,这个过程也是需要占用CPU的。数据拷贝操作结束以后,数据会被打包,然后发送到网络接口卡上去。在数据传输的过程中,应用程序可以先返回进而执行其他的操作。在调用write()系统调用之后,用户应用程序缓冲区中的数据内容可以被安全的丢弃或者更改,因为操作系统已经在内核缓冲区中保留了一份数据拷贝,当数据被成功传送到硬件上之后,这份数据拷贝就可以被丢弃。
从上面的描述可以看出,在这种传统的将数据从本地文件读取并通过传输过程中,数据至少发生了四次拷贝操作,即便是使用了DMA来进行与硬件的通讯,CPU仍然需要拷贝数据两次:在read()读数据的过程中,数据并不是直接来自于硬盘,而是必须先经过操作系统的文件系统层;在write()写数据的过程中,为了和要传输的数据包的大小相吻合,数据必须要先被分割成块,而且还要预先考虑包头,并且要进行数据校验和操作,而这些都要在协议栈的内核空间中完成,也会涉及到数据内容的拷贝。从网络上读取远程数据并存储到本地文件的操作过程是上述过程的逆过程,因此也涉及到多次数据拷贝。
零拷贝技术是一种避免网络读写过程中数据频繁拷贝的技术,可以直接在网络接口卡和数据目标地址空间之间通过DMA进行数据拷贝,从而完全将CPU从数据拷贝中解放出来。作用于操作系统中的设备驱动程序、文件系统以及网络协议栈而出现的各种零拷贝技术极大地提升了特定应用程序的性能,并降低这些应用程序运行时耗费的系统资源。零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而有效地提高数据传输效率。而且零拷贝技术减少了用户应用程序地址空间和操作系统内核地址空间之间因为上下文切换而带来的开销。进行大量的数据拷贝操作其实是一件简单的任务, 从操作系统的角度来说,如果CPU一直被占用着去执行这项简单的任务,是很浪费资源的,如果有其他比较简单的系统部件可以代劳这件事情,从而使得CPU解脱出来可以做别的事情,那么系统资源的利用则会更加有效。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学深圳研究生院,未经北京大学深圳研究生院许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201611003952.4/2.html,转载请声明来源钻瓜专利网。





