PF_RING™
高速数据包捕获、过滤和分析
PF_RING™是一种新型的网络套接字,可显着提高数据包捕获速度,并且具有以下特性:
- 适用于Linux内核2.6.32及更高版本。
- 无需修补内核:只需加载内核模块。
- 使用商用网络适配器的10 Gbit硬件数据包过滤
- 用户空间ZC(新一代DNA,Direct NIC Access,直接NIC访问)驱动程序可实现极高的数据包捕获/传输速度,这是因为NIC NPU(网络处理单元)在没有任何内核干预的情况下将数据包从用户域推送/获取数据包。使用10Gbit ZC驱动程序,您可以以线速发送或接收任何大小的数据包。
- PF_RING ZC库,用于在线程、应用程序、虚拟机之间以零拷贝分发数据包。
- 设备驱动程序独立。
- 支持Accolade,Exablaze,Endace,Fiberblaze,Inveatech,Mellanox,Myricom / CSPI,Napatech,Netcope和Intel(ZC)网络适配器。
- 基于内核的数据包捕获和采样。
- Libpcap支持(请参见下文)可与现有的基于pcap的应用程序无缝集成。
- 除BPF外,还可以指定数百个标题过滤器。
- 内容检查,以便仅通过与有效负载过滤器匹配的数据包。
- 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™ZC | 14.8 Mpps |
pfsend(TX) | PF_RING™ZC | 14.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 |
pfcount | PF_RING™ ZC | 1’488 Kpps |
e1000e | ||
---|---|---|
应用 | 驱动 | 速率 |
pcount – vanilla libpcap | 标准 | 544 Kpps |
pcount – PF_RING™-aware libpcap | 标准 | 730 Kpps |
pfcount | 标准 | 757 Kpps |
pfcount | PF_RING™ Z | 1’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库中分发,并以源代码格式提供。