天天看点

SylixOS 网络零拷贝技术

SylixOS 网络零拷贝技术

1.   网络零拷贝介绍

网络零拷贝技术指的是在数据报文从网络设备到用户程序传递的过程中,一种减少数据拷贝次数,减少系统调用,实现CPU的零参与,从而减轻 CPU负载的技术。

1.1 SylixOS网络现状

SylixOS网络使用的是Lwip协议栈,其数据报文从网络设备到用户程序只需要一次拷贝即可实现。产生这次拷贝的原因是数据报文从网络设备往协议栈传输时,数据格式不一样。网络协议栈需要专门的数据结构(pbuf)来管理报文,而设备层只会将数据本身存放在一块内存缓冲区中。

1.2   SylixOS零拷贝技术使用前提

SylixOS目前版本已经支持网络零拷贝,但这只适用于x86架构的CPU。主要原因是使用零拷贝技术后,网络协议栈对报文数据的管理并不会使用cache。这种方式在ARM等架构上使用时,协议栈需要对报文不停的访问,但由于没有cache,因此访问效率反而会降低。

2.    网络零拷贝技术实现

2.1   不使用零拷贝的报文接收流程

不使用零拷贝的数据接收流程如图 21 所示。      
SylixOS 网络零拷贝技术
图 21 不使用零拷贝接收      

不使用零拷贝时,报文从网络设备到用户应用程序,只会进行一次拷贝操作,这一次拷贝操作位于网卡驱动中,即网络设备在接收到DMA搬运的数据报文时,会将报文的内容拷贝到协议栈支持的数据管理结构(pbuf)中。如图 21 ,拷贝后的报文位于Lwip协议栈管理的内存区内。

拷贝完成后,协议栈会对pbuf管理的报文做各种分析,最后,通过IPC(进程通信方式)与用户程序进行交互。使用IPC就可以不进行数据拷贝,应用程序通过信号量、消息邮箱等机制去通知协议栈,让协议栈进行对应的处理。

2.2   使用零拷贝的报文接收流程

使用零拷贝接收流程如图 22 所示。      
SylixOS 网络零拷贝技术
图 22 使用零拷贝接收      

继续阅读