基于零拷贝的网络数据包捕获技术简述

所谓零拷贝是指在某节点的报文收发过程中不会出现任何内存间的拷贝,发送时数据包由应用程序的用户缓冲区直接经过网络接口到达外部网络,接收时网络接口直接将数据包送入用户缓冲区。这是“真正的零拷贝(True Zero Copy)”。

如图1零拷贝工作流程图所示,图形的上部为传统的捕包模块,下部为采用零拷贝技术的捕包模块。零拷贝技术通过操作系统给网卡和用户区开了一段共用内存,网卡接收到的数据都被写到这段共用内存中,在这段内存区中存在着接收环和发送环,接收环存储着从网卡上接收来的数据,发送环存储着要通过网卡进行发送的用户数据。因为这段内存是网卡和用户区共用的,所以只要网卡接收到数据,用户程序就可以直接对这些数据进行访问和操作。同样的只要用户区程序有网络数据要发送,就可以由网卡程序直接发送。这减少了不必要的系统数据调用,减少了中断,使CPU能够有更多的时间来处理其它事情。

零拷贝具有很高的性能,我们将Libpcap捕包模块与零拷贝技术进行试验对比,得出下表 的性能对比图,其中网卡为Intel 845系列千兆光纤网卡。

包都是传统的Libpcap系统的5倍以上,该技术极大地提高了系统的数据处理能力,使得CPU能够有更多的宝贵时间来处理其他的高级应用。

阅读更多
个人分类: 网络编程
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭