网络数据捕获之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):

e1000e
Applicationtransparent_mode=0transparent_mode=1transparent_mode=2
pfcount (with -a flag)757 Kpps795 Kpps843 Kpps
pfcount (without -a flag)661 Kpps700 Kpps762 Kpps
pcount (with PF_RING-aware libpcap)730 Kpps763 Kpps830 Kpps
pcount (with vanilla libpcap)544 Kpps
pfcount (with PF_RING DNA)1’170 Kpps
igb
Applicationtransparent_mode=0transparent_mode=1transparent_mode=2
pfcount (with -a flag)650 Kpps686 Kpps761 Kpps
pfcount (without -a flag)586 Kpps613 Kpps672 Kpps
pcount (with PF_RING-aware libpcap)613 Kpps644 Kpps711 Kpps
pcount (with vanilla libpcap)544 Kpps
pfcount (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,而非框架性能瓶颈。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值