PF_RING™

高速数据包捕获、过滤和分析

PF_RING™是一种新型的网络套接字,可显着提高数据包捕获速度,并且具有以下特性:

  1. 适用于Linux内核2.6.32及更高版本。
  2. 无需修补内核:只需加载内核模块。
  3. 使用商用网络适配器的10 Gbit硬件数据包过滤
  4. 用户空间ZC(新一代DNA,Direct NIC Access,直接NIC访问)驱动程序可实现极高的数据包捕获/传输速度,这是因为NIC NPU(网络处理单元)在没有任何内核干预的情况下将数据包从用户域推送/获取数据包。使用10Gbit ZC驱动程序,您可以以线速发送或接收任何大小的数据包。
  5.  PF_RING ZC库,用于在线程、应用程序、虚拟机之间以零拷贝分发数据包。
  6. 设备驱动程序独立。
  7.  支持Accolade,Exablaze,Endace,Fiberblaze,Inveatech,Mellanox,Myricom / CSPI,Napatech,Netcope和Intel(ZC)网络适配器。
  8. 基于内核的数据包捕获和采样。
  9. Libpcap支持(请参见下文)可与现有的基于pcap的应用程序无缝集成。
  10. 除BPF外,还可以指定数百个标题过滤器。
  11. 内容检查,以便仅通过与有效负载过滤器匹配的数据包。
  12. PF_RING™插件,用于高级数据包解析和内容过滤。

Vanilla PF_RING™

PF_RING™正在通过Linux NAPI轮询来自NIC的数据包。这意味着NAPI将数据包从NIC复制到PF_RING™循环缓冲区,然后userland应用程序从环读取数据包。在这种情况下,有两个轮询程序,即应用程序和NAPI,这会导致用于此轮询的CPU周期。优点是PF_RING™可以将传入的数据包同时分发到多个环(因此有多个应用程序)。

PF_RING™模块

PF_RING™具有模块化架构,可以使用除标准PF_RING™内核模块以外的其他组件。当前,其他模块集包括:

  • ZC模块。
    查看ZC页面以获取更多信息。
  • 基于FPGA的板卡模块。
    这些模块增加了对许多供应商的支持,包括Accolade,Exablaze,Endace,Fiberblaze,Inveatech,Mellanox,Myricom / CSPI,Napatech,Netcope。
  • 堆栈模块。
    该模块可用于将数据包注入linux网络堆栈。
  • 时间轴模块。
    该模块可用于使用PF_RING™API从n2disk转储集中无缝提取流量。
  • Sysdig模块。
    该模块使用sysdig内核模块捕获系统事件。

谁需要PF_RING™?

基本上每个人都必须每秒处理许多数据包。这里的“许多”根据您用于流量分析的硬件而变化。它的范围可以从1.2GHz ARM上的80k pkt / sec 到低端2.5GHz Xeon上的14M pkt / sec ,甚至更高。PF_RING™不仅使您可以更快地捕获数据包,还可以更有效地捕获数据包,从而节省CPU周期。这里列了一些数据,您可以看到nProbe(NetFlow v5 / v9探针)可以使用PF_RING™运行多快,或者看看下面的表格。

 ixgbe 
应用驱动速率
pfcount(RX)PF_RING™ZC14.8 Mpps
pfsend(TX)PF_RING™ZC14.8 Mpps

使用Core2Duo 1.86 GHz,Ubuntu Server 9.10(内核2.6.31-14)和IXIA 400流量生成器以线速(64字节数据包,1.48 Mpps)注入流量进行的1Gbit测试:

 igb 
应用驱动速率
pcount – vanilla libpcap标准544 Kpps
pcount – PF_RING™-aware libpcap标准613 Kpps
pfcount标准650 Kpps
pfcountPF_RING™ ZC1’488 Kpps

 e1000e 
应用驱动速率
pcount – vanilla libpcap标准544 Kpps
pcount – PF_RING™-aware libpcap标准730 Kpps
pfcount标准757 Kpps
pfcountPF_RING™ Z1’170 Kpps

注意

  • pfcount是在PF_RING™之上编写的应用程序,而pcount是在libcap-over-PF_RING™之上编写的。由于应用程序只是在不进行额外处理的情况下统计数据包,因此pfcount(带有-a表示活动数据包轮询)有时会较慢,但是pcount需要支付libpcap费用。这可以通过以下事实来证明:pfcount比pcount更快地处理数据包,因此它消耗所有可用数据包的速度更快,因此它更频繁地调用poll()(即等待传入数据包)。由于poll()相当昂贵,因此在这种特殊情况下,pcount性能要优于pfcount。通常,应用程序除了对数据包进行计数外还必须对数据包做一些事情,因此,基于纯PF_RING™的应用程序的性能应优于基于pcap的应用程序。
  • 即使在低端Core2Duo PF_RING™ZC(新一代DNA)上也可以进行线速数据包捕获。

操作系统

License

PF_RING™内核模块和驱动程序在GNU GPLv2许可下分发,LGPLv2.1在用户空间PF_RING库中分发,并以源代码格式提供。