零拷贝技术在网络流量控制系统中的应用

2013-08-05 09:39张素娟马军
关键词:拷贝网卡内核

张素娟,马军

(河北联合大学网络中心,河北唐山063009)

随着高速局域网的快速发展和各种网络应用的日益丰富,对网络管理提出了越来越高的要求,流量控制应运而生[1]。流量控制就是要对网络非关键业务的带宽加以限制,以保证与工作和研究相关的关键业务的带宽和服务质量。然而目前的流量控制系统在实际的应用环境中,工作效率往往不尽人意。流控系统对系统吞吐量和网络处理能力要求非常高,如果达不到要求会造成网络性能下降,甚至成为网络出口的瓶颈[2-4]。因此对流量控制系统的数据处理能力的研究十分必要,本文研究了数据包的行走路径,分析了数据包的收发过程中对系统资源的消耗,研究现有的技术,提出一种改进的零拷贝方案实现数据包的传输。

1 零拷贝技术

对于传统网卡,处理一个64KB的文件,需要与主机CPU进行60次交互,大约40次数据包交换,20次应答。另外,在时间代价方面,数据拷贝操作的时间消耗占整个收包过程的57%左右[5-6]。因此,如果能减少数据拷贝和上下文切换,将会极大提高系统的处理性能,零拷贝就是在这种情况下提出的[7]。零拷贝技术是指某节点的报文收发过程中不会出现任何内存间的拷贝,数据包由用户缓冲区直接经过网络接口到达外部网络。主要采用DMA和内存映射等技术[8],通过用户层和网络接口交互,避免内存间拷贝和上下文切换,缩短数据包行走路径,节省CPU开销。

PF_RING套接字是一个第三方内核数据包捕获接口,有一种DNA(Direct NIC Access)的工作模式,一些系统用它来实现内存零拷贝[9]。PF_RING在内核中维护一个环状缓存(RING),RING提供两个接口,一个与网卡交互接口,一个与应用程序交互的接口,网卡接收数据时[10],把数据包拷贝到RING中,数据不经过内核协议栈,应用程序则通过mmap来访问这个RING。

PF_RING中RING的大小固定为1024个slot,网卡接收报文后放到RING中属于硬件处理,速度非常快。应用程序处理数据包的速度要快,否则网卡就没有空间再接收新的数据包。流量控制系统要对数据包进行分析,显然不具备这样的速度,必须把数据拷贝出来,再进行处理。如果在流量控制系统中采用PF_RING会发生一次拷贝过程,因此必须对PF_RING进行优化。

2 优化的零拷贝方案

在优化的零拷贝方案中,系统在内核中同样维护一个环状缓存,如图1所示。

与PF_RING不同的是,环状缓存里面存放是报文的描述符,即报文内存指针的页的起始地址和偏移位置,同时,内核建立一个数据管理区,用户程序和网卡处理报文时不断的向这个管理区申请可用内存,并在用完后及时的释放,以此来解决内存紧张的状况。网卡接收到达流控设备的数据包,通过DMA方式放到内核缓冲区,应用程序通过mmap映射实现用户空间和内核空间的内存共享。这样应用程序可以像访问自己空间一样快速的访问到内核空间的数据。在这个过程中网络数据包跳过了内核协议栈,实现了真正的零拷贝。

图1 零拷贝系统结构

2.1 数据包捕获过程

在优化的零拷贝方案中,网络数据包的捕获过程如下:

(1)首先把内核中连续的若干页映射到用户空间,内核模块自行管理这些页的内存,并且作为DMA地址交给网卡收发包使用。

(2)一旦数据包到达网卡,网卡先对数据包进行预处理,如果需要交给应用程序处理,就把报文的描述符放到指定的用户缓冲区中,等待用户空间读取,相应的报文内存引用计数增加。

(3)用户空间读取报文描述符,并计算出对应的用户空间地址,即可访问报文;在报文生命周期结束后,减少内核空间引用计数,如果引用计数为1,内核模块则释放之。

(4)用户空间发报文也采取类似的方式,只不过报文内存由用户空间发起命令,内核分配,再交由用户空间使用。

2.2 同步问题

零拷贝中涉及对共享内存的读写,一边是处于内核空间的网卡驱动向内存写入数据,一边是用户进程直接对内存数据进行处理,两者处于不同的空间,使得同步问题的解决非常关键,本方案采用的是增加标志位的方式。

首先,把环状缓存分为四种类型:1空闲可供网卡使用的缓存,2存放等待用户空间处理的数据的缓存,3存放正在被用户空间处理的数据的缓存,4数据已经被处理可以释放的缓存。

网卡接到报文后,如果要交到用户空间,则将报文的描述符放到标记为1的缓存中,并将标记改为2,如果没有标记为1的,就把数据写入标记为2的缓存中。同时,用户空间会读这个ring,如果发现有标记为2的,则先把标记改为3,然后处理。用户空间处理完数据后把相应的缓存标记为4。

内核中有一个定时器线程,扫描这个ring,如果发现有标记为4的,则将相应的空间释放,并把标记改为1。

2.3 零拷贝内存管理

该零拷贝方案主要靠共享内存的方式实现,为了节约内存,在内核中维护一个数据管理区,负责内存的分配、管理和释放。

Node表示内存页中元信息的存储单元,chunk表示被释放或分配的存储区。存储区域按最小的单元划分,大小为L1 cache的尺寸,每个node包括一个mask字段,用于标记与此node连接的chunk是否被使用。所有free chunk都被放到一个数组中的双向链表中,以大小索引。

模块初始化时,为每个CPU分配一个结构体,其中建造一个三维链表,当用户申请内存时,他的尺寸调整到能够满足要求的最小尺寸,并记录进相应的字段,然后去chunk数组中查找,直到匹配成功一个合适的list。如果这个list比用户要求的尺寸大,剩余的空间被放到其它list中供大小合适的请求使用,这个被选定的chunk被定义为一个node,相应的mask被置为used。

当释放内存的请求发出时,首先记录相应的node和CPU信息,如果当前CPU不是要求释放的CPU,那么相应的chunk被记录成一个单链表,并放置到semi-free对象的list中等待在相应的CPU中释放。如果当前CPU就是要求释放的CPU,则根据相应的node信息,查找与之连接的chunk,这些chunk以双向列表元素格式赋值,然后所有free chunks合并成一个,并且节点中的相应mask置为unused;这样更大一点的chunk就按双向链表格式被重新赋值,并被放到空闲对象list中供大小合适的对象使用。释放算法检查semi-freed list,如果list不空,则按照上述方法对该list中的chunk进行释放。

除了semi-free list可以通过相应的lock被不同CPU访问外,其余的所有lists和arrays不能被不同的CPU访问。

内存管理中重要的数据结构:

3 零拷贝方案测试

测试平台主要配置如下:双至强CPU3.00GHz,4GB内存,Intel82575千兆网卡,修改网卡驱动程序支持零拷贝方案。linux的版本号为2.6.2,采用开源软件netperf控制发包速率和数据包长,分别测试了使用传统方式和零拷贝方式的报文捕获情况,测试数据如表1所示:通过上面的数据可以看出,相比传统数据包采集,采用零拷贝方案后CPU的占用率明显降低,尤其是在大包的情况下性能提高的更为明显,可以做到传统方式的4倍,而且不丢包。

表1 数据包捕获情况对比

在流量控制系统中应用该零拷贝方案可以有效的提高网络数据的传输效率,由于消除了内存拷贝对系统资源的消耗,系统性能得到明显改善,该方案还可以用于其他存在大数据传输的系统中,比如入侵检测系统,同样可以降低CPU开销,提高网络吞吐量。

[1] 王超,赵文杰.IP骨干网络流量控制系统分析及方案部署[J].山东科技大学学报(自然科学版),2009,28(2):88-91.

[2] WangWeihua,Marimuthu P..Application-Oriented Flow Control:Funddamentals,Algorithms and Faimess[J].IEEE/ACM Transactions on networking,2006 ,14:793-801.

[3] 王钟,雷为民.零拷贝技术在实时PCM捕获中的应用[J].微计算机信息,2009,34(3):193-195.

[4] 李胜利,徐力,张明虎.基于实时微内核的零拷贝通信协议[J].华中科技大学学报(自然科学版),2007,35(1):35-39.

[5] 顾鹏,汪敏,卢旌平.零拷贝技术在网络行为分析系统中的应用与改进[J].计算机工程与设计,2010,31(7):1462-1464.

[6] MPC8572EPowerQUICC(TM)integrated host processor family referencemanual[M].Freescale Semiconductor,2008.

[7] 石飞,史岚,乔建忠,等.网络数据采集技术研究[J].小型微型计算机系统,2008,29(10):1913-1914.

[8] 夏鸿,程克非.基于零拷贝技术的千兆网络性能优化研究[J].网络与通信,2008,24:155-157.

[9] Yousif M F.On generalizations of PF-rings[J].Communications in algebra,2004,32(2):65-69.

[10] LiuTian-hua,Zhu Hong-feng,Chang Gui-ran,et al.The design and implementation of zero-copy for linux[C].Eighth International Conference on Intelligent Systems Design and Applications,2008,(3):121-123.

猜你喜欢
拷贝网卡内核
强化『高新』内核 打造农业『硅谷』
Server 2016网卡组合模式
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
唐氏综合征是因为“拷贝”走样了
文化拷贝应该如何“拷”
微生物内核 生态型农资
挑战Killer网卡Realtek网游专用Dragon网卡
RHEL7 Network Teaming(网卡绑定)配置与测试
基于硬盘还原卡的数据传送技术在高校网络机房中的应用