零拷贝技术及其运用Zero-CopyTechniqueanditsUsage李星辰夏浩茗廖山河LiXingchen,XiaHaomingandLiaoShanhe摘要:零拷贝(zero-copy)是实现主机或路由器等设备高速网络接口的主要技术。零拷贝技术通过减少或消除关键通信路径影响速度的操作,降低数据传输的操作系统开销和协议处理开销,从而有效提高通信性能,实现高速数据传输。Abstract:Zero-copyisanimportanttechnologytorealizehigh-speednetworkinterfacingforhostsandrouters.Itachieveshigh-speeddatatransferthroughdecreasingtheoverheadofdatatransmissioncausedbytheoperatingsystemandtransmissionprotocols.Itsmainideaistoreduceoreliminatesomemanipulationsthataffectspeedinthecriticaltransmissionpath.关键词:零拷贝;高速网络接口;操作系统;协议;网络处理器;RAID;Keywords:zero-copy;high-speednetworkinterfacing;OS;protocol;networkconductor;RAID1引言新的应用需求如多媒体、VOD以及WEB服务等加重了通信负载,要求网络具有更多的带宽和更短的传输延迟。高速网络链路技术(SDH、光互连等)的发展提供了高带宽的网络。信息传输更加关注数据从主机或其他设备到网络接口的有效移动。零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除通信数据在存储器之间不必要的中间拷贝过程,有效地提高通信效率,是设计高速接口通道、实现高速服务器和路由器的关键技术之一。数据拷贝受制于传统的操作系统或通信协议,限制了通信性能。采用零拷贝技术,通过减少数据拷贝次数,简化协议处理的层次,在应用和网络间提供更快的数据通路,可以有效地降低通信延迟,增加网络吞吐率。零拷贝技术的主要研究涉及到数据的传输途径、传输控制、缓冲区管理机制、地址变换和地址空间的保护机制等设计问题,并且需要考虑与操作系统或协议的结合关系。目前零拷贝技术的主要实现是用户级的高速网络通信接口。2零拷贝的主要技术研究零拷贝技术的研究主要针对以下两个方面:(1)创建有效的用户级通信接口,即应用程序直接将数据从通信接口发送出去或接收进来,消除系统内核中不必要的拷贝过程;(2)路由器的入端到出端的直接数据传输,即接收的报文只经过一次存储器缓冲,而缓冲队列中的报文经过必要的控制信息处理后,直接传送到输出端口发送出去,实现报文快速转发。用户级网络接口的设计和实现的关键在于应用和网络间的接口,为此需要考虑以下一些关键问题。2.1数据传输机制通常,协议优化的数据传输过程至少涉及到三次传送。每一个发送或接收数据的应用,其传输缓冲区在网络接口都有对应的传输描述块(发送或接收环中),它包含传输报文的目标地址、缓冲区起始地址和缓冲区大小等信息。进一步优化则无需经过网络接口的存储,应用程序直接将数据从自己的缓冲区通过网络接口发送出去,不在NIC的存储器中停留;而接收端将收到的报文直接传送给应用处理,如图1所示。主机至接口的数据传输机制可使用DMA或可编程I/O(PIO)方法。PIO方式通常一次传送1~2个字,涉及到许多总线操作。而DMA使用专门的DMA引擎突发性地传送整个报文,并可与主机并行操作。用户进程和网络接口都可以启动DMA而无需操作系统的干预。由于DMA是异步完成的,操作系统在进行页交换时,可能会把正在进行DMA传输的信息交换出去,从而使部分传送的目标信息受到损坏。解决这一问题的方法之一是让应用程序将用于数据传送的页帧固定于其地址空间,从而避开页交换。接口至接口传输机制使用接口的DMA引擎或PIO发送和接收网络数据,采用DMA传输较快。在流控方面,如果接收方没有取走数据,则发送方暂停网络接口数据的发送。为了防止死锁,暂停有一个时间限制,如果接收方在该时间限制内没有取走所有阻塞的网络数据,则网络接口就会复位,放弃阻塞的报文。为避免复位,接收方拷贝应足够快。接收方网络接口至主机的传输同样可以使用DMA或PIO。大多数协议都使用DMA,也有少数协议使用主机PIO接收小信息,而用DMA传送大块数据。2.2地址变换技术集成应用和网络接口间的缓冲区管理带来了另外的问题,因为应用使用的是缓冲区的虚拟地址,而网络接口的DMA引擎则需要用物理存储器地址进行传输。因此,必须有一个可信任的实体将虚拟地址变换为物理地址,再交给网络接口。此外,操作系统必须跟踪接口用来进行DMA传输的内存页,以便保持映射的进行。地址变换可采用:(1)由应用管理虚拟地址到物理地址的变换。用户从操作系统取得内存区的映射,并使用其作为缓冲区,其优点是将所有映射装在网络接口后,即可使用简单查找实现变换,但应用必须小心而理智地管理其内存区。(2)由网络接口完成虚拟地址到物理地址的变换。用户可将其缓冲区设在其虚拟地址空间的任何地方,网络接口包含一个TLB,负责将进程ID,虚拟地址映射为物理页帧和读/写访问权。(3)编制一个简单的内核附加模块实现虚拟地址到物理地址的变换。用户负责固定其页帧并从该模块取得物理地址,该方法的缺点是网络接口无法检查其接收的物理地址的合法性。解决方法之一是让网络接口与该内核模块协同以便跟踪有效的地址变换。网络接口可以缓存部分有效地址变换,以便快速引用页帧。当网络接口在其缓存中发现用户指定的地址变换时,就可以使用DMA直接访问。当网络接口无法变换一个地址时,则产生一个中断,内核模块接收该中断,在页表中查找该地址,固定该页,并将变换信息传给网络接口。2.3保护机制当初始化发送描述块时,如果多个应用共享网络接口,某个应用可能会破坏另一个应用的发送描述块。可使用一部分网络接口存储器作为高速缓存,存放活跃的通信端点,将非活跃的端点存放于主机内存。当一个进程想通过非活跃端点发送信息时,网络接口和操作系统协作激活该端点,将其状态移到网络接口存储器中。另一种方法是将通信建立和数据传输分开。在建立期间,操作系统介入完成保护检查以确保应用彼此不会相互干扰。在数据传输期间,网络接口旁路操作系统并进行简单检查以加强保护。2.4传输控制传输控制一般采用中断或轮询方式。中断方式通常开销比较大,故需要结合一定形式的轮询。轮询是一种快速而开销低的机制,能够及时检查到达信息。方法之一:让网络接口在其存储器中设置标志,并让主机检测之。由于I/O总线存在开销,这一方法是低效的。方法之二:当信息到达时,网络接口将标志写入主机内存,主机就地进行轮询,减少I/O总线传输开销。由于标志通常驻留于Cache中,这样,频繁执行轮询时,不成功的轮询就不会产生访存。可以综合使用中断和轮询:在网络接口中设置一个轮询守护机制,当报文到达时,启动一个定时器,定时器计时到零时,如果主机还没有发出轮询,则产生一个中断。2.5可靠性基于可靠网络假设的可靠性处理较简单,不需要重发和超时机制,罕见的错误可交由高层软件处理或者只设应答重发机制而不设超时机制。对于信息量大的通信,系统可采用主机级信用卡机制实现流控:信用卡代表接收方的报文缓冲区量,必须执有接收方的信用卡,才能发送报文。一旦发送方用完信用卡,则必须阻塞以等待新的信用卡。基于网络不可靠的系统则在主机或网络接口中实现重发机制,设置定时器和应答处理。2.6多播实现考虑可以将所有多播目的地址传送到网络接口,然后在网络接口将同一报文发往每一个多播目的。这一方法在网络接口形成串行发送的瓶颈。通过在网络接口转发多播报文,可有效地实现基于生成树的协议,当它与中断驱动的报文传递方式相结合时,则更加有效,因为它消除了转发路径上的中断处理代价。3网络设备中零拷贝技术的实现3.1用户级网络接口设计实现3.1.1U-NetU-Net由美国康耐尔大学研制,是基于信息的用户级网络接口,它定义了一个很薄的软件层而对网络硬件呈现出一致的接口。U-Νet描述硬件操作,直接提供给应用一个标准硬件接口。在U-Net中,端节点作为应用进入网络的句柄,包含三个环形队列,分别保存各自的信息缓冲区描述块:发送队列、可接收信息的空闲队列和已接收信息的接收队列。网络接口读取描述块,验证应用的目的地址,将虚拟缓冲区地址变换为物理地址,并使用DMA传送数据。每一个端节点的队列只映射到对应进程的地址空间。3.1.2VMMC-2和AM-Ⅱ由美国普林斯顿大学实现的VMMC-2和由伯克利大学实现的AM-Ⅱ(ActiveMessage)均使用通信原语与虚拟共享存储器结合的方法,消除了接收端的一次拷贝:将接收信息放入缓冲区并使应用程序可访问之,应用将其数据拷贝到最终目的以释放缓冲区。AM-Ⅱ使用通信原语put将本地内存块传送给远端地址,get读取远端块。只要发送者和接收者预先协调好远端内存地址,则无需接收方干预,即可将数据移动到最终位置。VMMC-2使用了一个用户TLB(UTLB)进行存储管理,要求通信过程使用的内存必须先进行注册登记(固定)以避开内核的页交换。3.1.3VIA虚拟接口体系结构VIA是用户级网络接口的工业标准。在VIA中,进程首先打开VI(到网络的句柄),每一个VI有两个队列:发送和接收信息描述块链表,每一个描述块指向一个和多个缓存区。信息发送后,VIA置描述块中的完成位,从而应用可最终释放描述块。VIA也提供本地内存与远端内存间的直接传输,即远端DMA(RDMA)读和写。VIA的地址变换机制位于网络接口,所有用于通信的内存(队列、描述块和缓冲区)在使用前必须进行注册。注册一个内存区返回一个句柄,句柄和虚拟地址共同描述通信的区域。3.2主机式路由器中的零拷贝实现基于主机的路由器采用商品化的主机平台和网络接口,它比专用路由器产品更为便宜,其安全性、可配置性和可编程性更好,常常作为路由测试床以及动态可重编程的路由器。主机式路由器的主要缺点是缺乏高带宽接口的支持。主机式路由器由主机和至少两块网络接口卡(NIC)组成。每一块NIC都有一个DMA控制器和一些存储器。DMA控制器管理从NICRAM直接到主机RAM的数据传输,无需主机CPU的干预。在传统的基于主机的转发处理中,数据通路是低效的,因为报文必须拷贝两次:一次进入主机存储器,一次从主机存储器中拷贝出来。采用零拷贝技术,将报文从其到达的NIC直接传送到其发出的NIC,使I/O端口上的报文从两次拷贝降为零次,可以有效地降低通过路由器的传输延迟。实现上采用网络接口之间的对等DMA直接进行报文传输:报文的大部分内容留在接收报文的NIC中,等待其目的地址的确定,然后通过DMA直接将报文从源NIC传送到目的NIC。其原理过程如图2所示。对等DMA转发的实现技术有两种:定位转发和报文头拷贝转发。实现需要修改网络接口驱动程序,但不修改内核代码,修改只影响到接收端NIC的报文传输。对于定位转发,整个报文留在NIC中,主机通过PCI总线直接读取报文头的相关字段进行处理,然后通过对等DMA将报文传送到发送端NIC。该方法对驱动程序只作很小的修改:例程中的报文缓冲区指针指向NIC存储器而非内核RAM。对于报文头转发,主机将报文头拷到主机内存中,使用本地RAM对其进行操作后,拷贝新的报文头覆盖原报文头,然后将整个报文通过对等DMA传送到目的NIC,减少了总线访问。报文头转发比定位转发更有效。对等DMA转发在报文尺寸较大时(大于或等于1K字节),吞吐率比常规方法高,它通过避免额外的报文拷贝,有效地提高了吞吐率和报文转发速率。我们将对等DMA转发进一步改进:在主机处理报文头时,接收NIC将报文传送给发送NIC,报文头处理完毕后,直接拷贝到发送的NIC中。该实现技术需要主机和发送NIC分别建立一个对应的FIFO队列,以完成报文的关联匹配。3.3路由器中零拷贝技术的实现采用零拷贝技术,减少报文转