CN106598752A - 远程零拷贝方法 - Google Patents
远程零拷贝方法 Download PDFInfo
- Publication number
- CN106598752A CN106598752A CN201611003952.4A CN201611003952A CN106598752A CN 106598752 A CN106598752 A CN 106598752A CN 201611003952 A CN201611003952 A CN 201611003952A CN 106598752 A CN106598752 A CN 106598752A
- Authority
- CN
- China
- Prior art keywords
- data
- network
- packet
- frame
- control information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 63
- 238000013467 fragmentation Methods 0.000 claims abstract description 10
- 238000006062 fragmentation reaction Methods 0.000 claims abstract description 10
- 239000000872 buffer Substances 0.000 claims description 29
- 230000008569 process Effects 0.000 claims description 29
- RTZKZFJDLAIYFH-UHFFFAOYSA-N Diethyl ether Chemical compound CCOCC RTZKZFJDLAIYFH-UHFFFAOYSA-N 0.000 claims description 16
- 239000006185 dispersion Substances 0.000 claims description 4
- 238000006116 polymerization reaction Methods 0.000 claims description 3
- 230000001934 delay Effects 0.000 claims 1
- 230000005540 biological transmission Effects 0.000 abstract description 26
- 238000004891 communication Methods 0.000 abstract description 5
- 238000012545 processing Methods 0.000 abstract description 4
- 238000005516 engineering process Methods 0.000 description 13
- 238000012546 transfer Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 9
- 230000006872 improvement Effects 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 230000004899 motility Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 235000015170 shellfish Nutrition 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/543—User-generated data transfer, e.g. clipboards, dynamic data exchange [DDE], object linking and embedding [OLE]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及网络数据传输领域,其公开了一种远程零拷贝方法,包括如下步骤:(A)接收端划分一整块连续的缓存区域用于接收待发数据;(B)发送端对待发数据进行分片处理并拼装数据包后发送至接收端;(C)接收端将接收到的数据包按接收顺序通过DMA填充到缓存区域。本发明的有益效果是:无需额外的硬件支持,可在现有广泛使用的普通硬件平台上实现零拷贝的数据网络传输,可以适用于所有网络传输需求(而不仅仅是网络侦听),传输过程中也能有效地降低通信延迟,提高网络吞吐率。
Description
技术领域
本发明涉及数据传输领域,尤其涉及一种远程零拷贝方法。
背景技术
一般来说,在传输数据的时候,用户应用程序需要在用户空间分配一块大小合适的缓冲区用来存放需要传输的数据(如果是内核模块的话需要在内核空间分配缓冲区,后文以应用程序为例,二者处理过程相似的时候就不再加以区别)。发送时应用程序从文件中读取一块数据到这个缓冲区然后通过调用协议栈经由网络发出,接收时则通过协议栈使用该缓冲区获取网络收到的数据。虽然用户应用程序只是需要调用两个系统调用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技术(Remote Direct Memory Access远程直接数据存取),把一台计算机主机的数据直接放入另一台计算机主机的内存中。RDMA通过在网卡上将可靠传输协议固化于硬件,以及绕过内核的零拷贝网络这两种途径来达到这一目标。绕过内核使应用程序不必执行内核调用就可以向网卡发出命令,当一个应用程序执行RDMA读/写请求时,系统并不执行数据拷贝动作,因此可减少处理网络通信时在内核空间和用户空间上下文切换的次数。RDMA操作用于读写操作的远程虚拟内存地址含在RDMA消息中传送,远程应用程序要做的是在其本地网卡中注册相应的内存缓冲区。远程节点的CPU在整个RDMA操作中并不提供服务,因此没有带来任何负载。通过类型值(键值)的使用,一个应用程序能够在远程应用程序对它进行随机访问的情况下保护它的内存。发布RDMA操作的应用程序必须为它试图访问的远程内存指定正确的类型值,远程应用程序在本地网卡中注册内存时获得这个类型值。发布 RDMA的应用程序也必须确定远程内存地址和该内存区域的类型值。远程应用程序会将相关信息通知给发布RDMA的应用程序,这些信息包括起始虚拟地址、内存大小和该内存区域的类型值。在发布RDMA的应用程序能够对该内存区域进行RDMA操作之前,远程应用程序应将这些信息通过发送操作传送给发布RDMA的应用程序。但是,该类零拷贝方案使用专用的应用程序绕过内核进行远程数据存取操作,并将网络传输协议固化于硬件,因此该技术不仅需要上层应用程序的支持,还需要专用的硬件支撑才能实现网络数据传输的零拷贝,代价很高而且灵活性不足,限制了该技术的大规模应用。
发明内容
为了解决现有技术中的问题,本发明提供了一种远程零拷贝方法,解决现有技术中成本高且灵活性不足的问题。
本发明是通过以下技术方案实现的:设计、制造了一种远程零拷贝方法,包括如下步骤:(A)接收端划分一整块连续的缓存区域用于接收待发数据;(B)发送端对待发数据进行分片处理并拼装数据包后发送至接收端;(C)接收端将接收到的数据包按接收顺序通过DMA填充到缓存区域。
作为本发明的进一步改进:所述步骤(A)中,缓存区域存放待发数据形成的数据包以及数据块的控制信息与包头信息。
作为本发明的进一步改进:所述步骤(B)中,当待发数据超过网络帧最大负荷大小时,则对数据进行分片处理,使得每片数据加上包头大小不超过接收端对应的网卡硬件所支持的一帧网络包大小;分片处理完毕后,启动DMA控制器,从最后一个数据片段开始,将以太网包头和数据片段打包成第一帧网络数据包,第一个数据片段与控制信息打包成最后一帧网络数据包,然后将网络数据包一帧一帧地按顺序发送出去。
作为本发明的进一步改进:所述步骤(C)中,在填充时从后往前开始填写缓存,使得下一个网络数据包能够正好覆盖掉上一个网络数据包的包头,而当一块数据的所有网络数据包接收完之后,最后一个数据包还保留着一份包头和数据块的控制信息,而控制信息后面都是连续完整的原始数据,而数据开始的地址也满足对齐要求。
作为本发明的进一步改进:所述缓存区域中,从最低字段开始存放第一帧网络数据包,第二帧的网络数据包接收后正好覆盖掉第一帧的包头,用同样的方式存放后面的网络数据包,其中最后一帧的网络数据包的包头是还保留着的,最后一帧的包头包括以太网包头和控制信息;所述缓存区域把控制信息后的原始数据映射给用户,同时把解析后的控制信息传递,其中,原始数据开始的物理地址是在申请缓存的时候就对齐好的。
作为本发明的进一步改进:所述接收端和发送端在数据传输过程中仅通过dma进行一次数据拷贝; CPU仅进行缓冲区管理以及创建和处理DMA。
作为本发明的进一步改进:所述步骤(B)中,分片操作的相关信息记录在单独的控制信息内,并与以太帧头一起加在最后一个数据片上,帧头和数据分片的拼接通过分散/聚合DMA的方式,使得帧头和数据片DMA到接收端对应的网卡的时候自动组成一帧网络数据包。
本发明的有益效果是:CPU只是需要进行缓冲区管理以及创建和处理DMA,传输中唯一的数据拷贝通过DMA完成,因此可以极大得降低CPU的负担。该方案无需额外的硬件支持,可在现有广泛使用的普通硬件平台上实现零拷贝的数据网络传输,不管是接收端还是发送端,网络数据包直接DMA到目的位置或从目的位置DMA到网卡;并且将接收到的网络数据包交给应用程序的时候能够根据应用程序需求自动进行数据拼接及对齐,可以适用于所有网络传输需求(而不仅仅是网络侦听),传输过程中也能有效地降低通信延迟,提高网络吞吐率。
【附图说明】
图1为本发明数据结构示意图;
图2为本发明分片处理示意图;
图3为本发明数据拼装发送示意图;
图4为本发明用户端重新生成一段连续的原始数据示意图;
图5为本发明一缓冲区域结构示意图;
图6为本发明用户端缓冲区示意图;
图7为本发明中一文件系统和网卡驱动的结构示意图;
图8为本发明又一缓冲区域的结构示意图;
图9为本发明接收端处理流程示意图;
图10为本发明文件系统写操作的示意图;
图11为本发明发送端发送数据包的示意图;
图12为本发明发送端处理流程示意图;
图13为本发明远程零拷贝方法的流程示意图。
【具体实施方式】
下面结合附图说明及具体实施方式对本发明进一步说明。
一种远程零拷贝方法,如图13,包括如下步骤:(A)接收端划分一整块连续的缓存区域用于接收待发数据;(B)发送端对待发数据进行分片处理并拼装数据包后发送至接收端;(C)接收端将接收到的数据包按接收顺序通过DMA填充到缓存区域。
所述步骤(A)中,缓存区域存放待发数据形成的数据包以及数据块的控制信息与包头信息。
所述步骤(B)中,当待发数据超过网络帧最大负荷大小时,则对数据进行分片处理,使得每片数据加上包头大小不超过接收端对应的网卡硬件所支持的一帧网络包大小;分片处理完毕后,启动DMA控制器,从最后一个数据片段开始,将以太网包头和数据片段打包成第一帧网络数据包,第一个数据片段与控制信息打包成最后一帧网络数据包,然后将网络数据包一帧一帧地按顺序发送出去。
所述步骤(C)中,在填充时从后往前开始填写缓存,使得下一个网络数据包能够正好覆盖掉上一个网络数据包的包头,而当一块数据的所有网络数据包接收完之后,最后一个数据包还保留着一份包头和数据块的控制信息,而控制信息后面都是连续完整的原始数据,而数据开始的地址也满足对齐要求。
所述缓存区域中,从最低字段开始存放第一帧网络数据包,第二帧的网络数据包接收后正好覆盖掉第一帧的包头,用同样的方式存放后面的网络数据包,其中最后一帧的网络数据包的包头是还保留着的,最后一帧的包头包括以太网包头和控制信息;所述缓存区域把控制信息后的原始数据映射给用户,同时把解析后的控制信息传递,其中,原始数据开始的物理地址是在申请缓存的时候就对齐好的。
所述接收端和发送端在数据传输过程中仅通过dma进行一次数据拷贝; CPU仅进行缓冲区管理以及创建和处理DMA。
所述步骤(B)中,分片操作的相关信息记录在单独的控制信息内,并与以太帧头一起加在最后一个数据片上,帧头和数据分片的拼接通过分散/聚合DMA的方式,使得帧头和数据片DMA到接收端对应的网卡的时候自动组成一帧网络数据包。
本发明提供了一种新的零拷贝方法,可以在配备普通网络接口的硬件平台上,在网络传输中实现发送和接收的零拷贝操作,并能根据应用需求进行数据拼接和地址对齐,从而大大降低CPU负载和数据访问延迟,而且不需要昂贵的专用网络设备支持。本方法首先在发送端根据数据大小及网络传输要求将待发数据进行分段,通过DMA将数据片段和相关控制信息按一定规则发送至网卡合成一个或多个网络帧,并通过网络发送到接收端;在接收端由请求数据的应用程序或内核模块提前准备好能够存储该数据的物理内存空间,将收到的一个或多个网络帧的内容按约定方式通过DMA填充该段内存空间,使得数据分段能够自动拼接成完整数据并满足地址位置对齐要求,从而能够直接被应用程序或内核模块使用。
本发明提供的远程零拷贝方法,在现有的普通硬件平台下进行数据传输,不管是接收端还是发送端,都不需要额外的专用网络硬件。该技术能够实现基于DMA的零拷贝,即接收端通过网络直接将数据DMA到目的位置或在发送端直接将数据从源位置DMA到网卡,并且在发送和接收时能够根据数据大小自动进行分片和拼接,而且同时也能根据应用程序需求实现数据对齐,整个发送或接收过程的数据拷贝仅通过一次DMA完成,完全不需要CPU介入。
在一实施例中,采用本发明提供的远程零拷贝方法,按如下步骤处理:
当上层应用程序请求接收远程数据时,在接收端申请一整块连续的缓存空间用于接收网络数据包,该块缓存比被请求数据的大小多一些,多余空间用于存放数据块的控制信息与包头信息。如果数据有对齐需求,则在申请时就注意到该缓存块中包头及控制信息之后的数据起始地址应满足这个对齐要求,如图1 底部虚线框所示。
如图1所示,发送端收到数据请求后,如果待发数据超过网络帧最大负荷大小,则对数据进行分片,使得每片数据加上包头大小不超过网卡硬件所支持的一帧网络包大小。由于所有分片的目的地址相同,因此只需另外准备一份网络头(仅考虑以太帧封装时就是以太帧头);分片操作的相关信息记录在单独的控制信息内,并与以太帧头一起加在最后一个数据片上。帧头和数据分片的拼接通过分散/聚合DMA的方式,使得帧头和数据片DMA到网卡的时候自动组成一帧网络数据包(注意最后一个网络数据包包括额外的控制信息),再将所有构造出来的网络数据包按倒序连续发送出去。
接收端网卡接收到网络数据包后,把网络数据包按接收顺序通过DMA填充到提前申请好的缓存中。在填充时从后往前开始填写缓存,使得下一个网络数据包能够正好覆盖掉上一个网络数据包的包头,而当一块数据的所有网络数据包接收完之后,最后一个数据包还保留着一份包头和数据块的控制信息,而控制信息后面都是连续完整的原始数据,而数据开始的地址也满足应用程序的对齐要求。应用程序可以从该起始地址开始正常访问接收到的数据。
在发送数据的时候,用户把待发数据的物理地址和数据长度传给网卡驱动程序,如图2所示,网卡驱动对待发数据进行分片处理,然后将分片信息记录在由网卡驱动维护的控制信息列表中,如图3所示,分片处理完毕后,启动DMA控制器,从最后一个数据片段开始,将以太网包头和数据片段打包成第一帧网络数据包,第一个数据片段与控制信息打包成最后一帧网络数据包,然后将网络数据包一帧一帧地按顺序发送出去。
接收数据的时候,用户先把映射好的缓存物理地址和虚拟地址传递给网卡驱动程序,如图4所示,网卡驱动根据发送端的数据分片形式,设置好网络数据包的接收地址,网络数据包经过DMA传输到用户缓存后,能重新组织成一段连续的原始数据,然后把数据结构信息传递回用户。
一个用户缓存的组织形式如图5所示,从最低字段开始存放第一帧网络数据包,第二帧的网络数据包接收后正好覆盖掉第一帧的包头,用同样的方式存放后面的网络数据包。其中最后一帧的网络数据包的包头是还保留着的,最后一帧的包头包括以太网包头和控制信息,如图6所示,再把控制信息后的原始数据映射给用户,同时把解析后的控制信息传递给用户,其中,原始数据开始的物理地址是在用户申请缓存的时候就根据需要对齐好的。
本发明提出发送数据时的数据分片及网络包拼装方法;提出管理和传输分片控制信息的方法;提出接收数据的拼接及网络包头自动剥离,从而得到连续的原始数据的方法。
本发明还可用于在高速传输的数据中心构建一个分布式文件系统,可极大提高远程数据的处理效率。该方法还可以用于分布式共享内存的高效网络传输。该方法还可以用于任何通过网络传输数据的网络传输应用。
在一具体实施例中,在两个装有linux操作系统的板卡上使用本发明进行文件系统的远程读写操作。其中,文件系统进行读写操作的页大小为4096B,板卡上的网卡支持的最大数据传输大小为1518B。文件系统在进行读操作的时候,如图7所示,首先申请好相应数量的缓存,每个缓存的大小为4352B,然后把每个缓存映射好的物理地址和虚拟地址传递给驱动程序,驱动程序为每个缓存配置三个缓冲区描述符BD(buffer descriptor),每个BD对应一帧网络数据包的DMA传输,配置好接收BD列表后开始接收数据,网络数据包经过DMA传输存放至缓冲区相应的位置,然后解析最后一帧网络数据包的控制信息,再把该页信息的数据结构net_buff通过函数net_buff_receive传给文件系统。
一个缓冲区的组织形式如图8所示,位置0表示页对齐的位置,一个缓冲区的大小是4352B,用于存放三帧网络数据包,第一帧网络数据包存放的起始地址是2582B,第二帧网络数据包存放的起始地址是1082B,第三帧网络数据包存放的起始地址是-256B,三帧数据接收完后,第一、二帧的以太网包头均被覆盖,第三帧的包头还保留在缓冲区的头部,其中包括了以太网包头和控制信息,大小为256B,控制信息大小为242B。接收端的处理流程如图9所示。
文件系统在进行写操作的时候,如图10所示,把待写信息的物理地址和大小通过函数net_buff_send传递给网卡驱动程序,然后驱动对齐分片并配置BD列表,如图11所示,每三片配置成一页,然后启动DMA传输,把数据片和包头打包成一帧网络数据包发送出去,第三帧的包头包括以太网包头和控制信息。发送端处理流程如图12所示。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (7)
1.一种远程零拷贝方法,其特征在于:包括如下步骤:(A)接收端划分一整块连续的缓存区域用于接收待发数据;(B)发送端对待发数据进行分片处理并拼装数据包后发送至接收端;(C)接收端将接收到的数据包按接收顺序通过DMA填充到缓存区域。
2.根据权利要求1所述的远程零拷贝方法,其特征在于:所述步骤(A)中,缓存区域存放待发数据形成的数据包以及数据块的控制信息与包头信息。
3.根据权利要求1所述的远程零拷贝方法,其特征在于:所述步骤(B)中,当待发数据超过网络帧最大负荷大小时,则对数据进行分片处理,使得每片数据加上包头大小不超过接收端对应的网卡硬件所支持的一帧网络包大小;分片处理完毕后,启动DMA控制器,从最后一个数据片段开始,将以太网包头和数据片段打包成第一帧网络数据包,第一个数据片段与控制信息打包成最后一帧网络数据包,然后将网络数据包一帧一帧地按顺序发送出去。
4.根据权利要求1所述的远程零拷贝方法,其特征在于:所述步骤(C)中,在填充时从后往前开始填写缓存,使得下一个网络数据包能够正好覆盖掉上一个网络数据包的包头,而当一块数据的所有网络数据包接收完之后,最后一个数据包还保留着一份包头和数据块的控制信息,而控制信息后面都是连续完整的原始数据,而数据开始的地址也满足对齐要求。
5.根据权利要求1所述的远程零拷贝方法,其特征在于:所述缓存区域中,从最低字段开始存放第一帧网络数据包,第二帧的网络数据包接收后正好覆盖掉第一帧的包头,用同样的方式存放后面的网络数据包,其中最后一帧的网络数据包的包头是还保留着的,最后一帧的包头包括以太网包头和控制信息;所述缓存区域把控制信息后的原始数据映射给用户,同时把解析后的控制信息传递,其中,原始数据开始的物理地址是在申请缓存的时候就对齐好的。
6.根据权利要求1所述的远程零拷贝方法,其特征在于:所述接收端和发送端在数据传输过程中仅通过dma进行一次数据拷贝; CPU仅进行缓冲区管理以及创建和处理DMA。
7.根据权利要求1所述的远程零拷贝方法,其特征在于:所述步骤(B)中,分片操作的相关信息记录在单独的控制信息内,并与以太帧头一起加在最后一个数据片上,帧头和数据分片的拼接通过分散/聚合DMA的方式,使得帧头和数据片DMA到接收端对应的网卡的时候自动组成一帧网络数据包。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611003952.4A CN106598752B (zh) | 2016-11-15 | 2016-11-15 | 远程零拷贝方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611003952.4A CN106598752B (zh) | 2016-11-15 | 2016-11-15 | 远程零拷贝方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106598752A true CN106598752A (zh) | 2017-04-26 |
CN106598752B CN106598752B (zh) | 2020-05-12 |
Family
ID=58590476
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611003952.4A Expired - Fee Related CN106598752B (zh) | 2016-11-15 | 2016-11-15 | 远程零拷贝方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106598752B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107193657A (zh) * | 2017-05-18 | 2017-09-22 | 安徽磐众信息科技有限公司 | 基于solaflare网卡的低延迟服务器 |
CN107508828A (zh) * | 2017-09-18 | 2017-12-22 | 南京斯坦德云科技股份有限公司 | 一种超远程数据交互系统及方法 |
CN109669788A (zh) * | 2018-12-10 | 2019-04-23 | 西安微电子技术研究所 | 面向直接内存访问互连通信的多核芯片的mpi实现方法 |
CN109688606A (zh) * | 2018-12-29 | 2019-04-26 | 京信通信系统(中国)有限公司 | 数据处理方法、装置、计算机设备及存储介质 |
WO2019134403A1 (zh) * | 2018-01-05 | 2019-07-11 | 华为技术有限公司 | 发送数据包的方法、装置及计算机可读存储介质 |
WO2019161557A1 (zh) * | 2018-02-24 | 2019-08-29 | 华为技术有限公司 | 一种通信的方法及装置 |
CN113746897A (zh) * | 2021-07-28 | 2021-12-03 | 浪潮电子信息产业股份有限公司 | 一种文件传输方法、装置、设备及存储介质 |
CN114090481A (zh) * | 2020-07-02 | 2022-02-25 | 北京瀚海云星科技有限公司 | 一种发送数据的方法、接收数据的方法及相关装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1761222A (zh) * | 2005-11-22 | 2006-04-19 | 华中科技大学 | 一种支持虚拟接口的存储网络适配器 |
CN101063963A (zh) * | 2006-04-26 | 2007-10-31 | 韩国电子通信研究院 | 数据零拷贝文件的移动方法 |
CN102724232A (zh) * | 2011-05-06 | 2012-10-10 | 新奥特(北京)视频技术有限公司 | 一种基于udp协议的网络字幕机的方法和系统 |
-
2016
- 2016-11-15 CN CN201611003952.4A patent/CN106598752B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1761222A (zh) * | 2005-11-22 | 2006-04-19 | 华中科技大学 | 一种支持虚拟接口的存储网络适配器 |
CN101063963A (zh) * | 2006-04-26 | 2007-10-31 | 韩国电子通信研究院 | 数据零拷贝文件的移动方法 |
CN102724232A (zh) * | 2011-05-06 | 2012-10-10 | 新奥特(北京)视频技术有限公司 | 一种基于udp协议的网络字幕机的方法和系统 |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107193657A (zh) * | 2017-05-18 | 2017-09-22 | 安徽磐众信息科技有限公司 | 基于solaflare网卡的低延迟服务器 |
CN107508828A (zh) * | 2017-09-18 | 2017-12-22 | 南京斯坦德云科技股份有限公司 | 一种超远程数据交互系统及方法 |
CN107508828B (zh) * | 2017-09-18 | 2019-10-18 | 南京斯坦德云科技股份有限公司 | 一种超远程数据交互系统及方法 |
WO2019134403A1 (zh) * | 2018-01-05 | 2019-07-11 | 华为技术有限公司 | 发送数据包的方法、装置及计算机可读存储介质 |
US11500689B2 (en) | 2018-02-24 | 2022-11-15 | Huawei Technologies Co., Ltd. | Communication method and apparatus |
WO2019161557A1 (zh) * | 2018-02-24 | 2019-08-29 | 华为技术有限公司 | 一种通信的方法及装置 |
CN110402568A (zh) * | 2018-02-24 | 2019-11-01 | 华为技术有限公司 | 一种通信的方法及装置 |
CN110402568B (zh) * | 2018-02-24 | 2020-10-09 | 华为技术有限公司 | 一种通信的方法及装置 |
CN109669788A (zh) * | 2018-12-10 | 2019-04-23 | 西安微电子技术研究所 | 面向直接内存访问互连通信的多核芯片的mpi实现方法 |
CN109688606A (zh) * | 2018-12-29 | 2019-04-26 | 京信通信系统(中国)有限公司 | 数据处理方法、装置、计算机设备及存储介质 |
CN109688606B (zh) * | 2018-12-29 | 2022-03-25 | 京信网络系统股份有限公司 | 数据处理方法、装置、计算机设备及存储介质 |
CN114090481A (zh) * | 2020-07-02 | 2022-02-25 | 北京瀚海云星科技有限公司 | 一种发送数据的方法、接收数据的方法及相关装置 |
CN113746897A (zh) * | 2021-07-28 | 2021-12-03 | 浪潮电子信息产业股份有限公司 | 一种文件传输方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106598752B (zh) | 2020-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106598752A (zh) | 远程零拷贝方法 | |
US5592622A (en) | Network intermediate system with message passing architecture | |
US6167054A (en) | Method and apparatus providing programmable thresholds for full-duplex flow control in a network switch | |
US8499137B2 (en) | Memory manager for a network communications processor architecture | |
US5828835A (en) | High throughput message passing process using latency and reliability classes | |
CN101340574B (zh) | 一种实现零拷贝发送流媒体数据的方法及系统 | |
US8072996B2 (en) | Multiple-buffer queueing of data packets with high throughput rate | |
US20220303217A1 (en) | Data Forwarding Method, Data Buffering Method, Apparatus, and Related Device | |
CN107257329B (zh) | 一种数据分段卸载发送方法 | |
CN103346949B (zh) | 基于嵌入式的双通道网络数据包的拆包和组包方法及系统 | |
CN108366111B (zh) | 一种用于交换设备的数据包低时延缓存装置与方法 | |
CN103827842B (zh) | 向控制器存储器空间写入消息 | |
CN101917350A (zh) | 一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法 | |
CN101267361A (zh) | 一种基于零拷贝技术的高速网络数据包捕获方法 | |
EP2526478B1 (en) | A packet buffer comprising a data section an a data description section | |
US11010165B2 (en) | Buffer allocation with memory-based configuration | |
CN109861931A (zh) | 一种高速以太网交换芯片的存储冗余系统 | |
CN106406764A (zh) | 一种分布式san块存储的高效能数据访问系统及方法 | |
CN113127139B (zh) | 一种基于数据面开发套件dpdk的内存分配方法和装置 | |
CN103036805A (zh) | 用于改善分组共享存储器体系结构组播性能的系统和方法 | |
CN105933325A (zh) | 一种基于NFSoRDMA的内核态RPC通信加速方法 | |
CN107025184A (zh) | 一种数据管理方法及装置 | |
CN110519180A (zh) | 网卡虚拟化队列调度方法及系统 | |
JP4516395B2 (ja) | リンク・リスト・プロセッサを持つメモリ管理システム | |
US11327890B1 (en) | Partitioning in a processor cache |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20200512 |