首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

网络数据擒获之PF_RING

2013-03-12 
网络数据捕获之PF_RINGLinux环境下需要监听网络数据最简单的可以使用SOCK_RAW原始套接字或者直接调用专门

网络数据捕获之PF_RING

Linux环境下需要监听网络数据最简单的可以使用SOCK_RAW原始套接字或者直接调用专门进行网络抓包的库接口libpcap,

但是是针对千兆网数据捕获就会有瓶颈,而且随着数据流量的增大捕获主机的CPU会有很大的负担,本人曾亲测使用原始套

接字进行千兆网数据捕获评测,i7服务器主机,网络数据全是1400Byte大包,码率加到600Mbps左右就会出现间歇性丢包

(丢包通过在发包端对数据打上连续计数值,而在接收端校验该连续计数值判断),而且CPU占用率高达40%。

明显存在性能瓶颈,不是很好的千兆网数据捕获解决方案,为此调研了一款开源的高效数据捕获框架PF_RING.


http://www.ntop.org/products/pf_ring/


该捕获方案采用在内核层开出一个比较大的环形缓冲,然后应用层通过mmap映射到内核的缓冲空间,从增加底层缓存到减少

应用层系统调用等方面做了优化,数据捕获性能有了质的提高,而且其从驱动到应用层的接口库都是开源的,例子程序也很全。


官方的测试结果:


1 Gigabit tests performed using a Core2Duo 1.86 GHz, Ubuntu Server 9.10 (kernel 2.6.31-14), and an IXIA 400 traffic generator injecting traffic at wire rate (64 byte packets, 1.48 Mpps):

e1000eApplicationtransparent_mode=0transparent_mode=1transparent_mode=2pfcount (with -a flag)757 Kpps795 Kpps843 Kppspfcount (without -a flag)661 Kpps700 Kpps762 Kppspcount (with PF_RING-aware libpcap)730 Kpps763 Kpps830 Kppspcount (with vanilla libpcap)544 Kppspfcount (with PF_RING DNA)1’170 KppsigbApplicationtransparent_mode=0transparent_mode=1transparent_mode=2pfcount (with -a flag)650 Kpps686 Kpps761 Kppspfcount (without -a flag)586 Kpps613 Kpps672 Kppspcount (with PF_RING-aware libpcap)613 Kpps644 Kpps711 Kppspcount (with vanilla libpcap)544 Kppspfcount (with PF_RING DNA)



e1000e\igb分别为intel的两款网卡驱动,transparent_mode为PF_RING驱动加载时的参数。PF_RING效率最高的是DNA (Direct NIC Access)模式,

但是该模式代码并未全部开源,而且使用有限制。


本人亲测在Atom D525上,intel 82574网卡芯片,1400Byte大包可以达到960Mbps满速率,24小时没有任何丢包。而且CPU使用率仅为10左右。

但是官方的提供的PF_RING 5.2.3版本及以下存在一个bug,长时间运行会出现丢包问题,特别是在Atom系列这样性能比较弱的处理器上比较明显,

属于软件bug,而非框架性能瓶颈。

热点排行