PFQ是一款针对Linux操作系统的功能性框架,可帮助研究人员捕捉网络传输数据包(10G、40G及以上),内核功能处理,内核绕过,以及获取多节点间的套接字/数据包。
该工具针对多核心架构以及配备了多硬件队列的网络设备进行了高度的定制优化,可兼容任意NIC,工具提供的脚本还可以生成加速网络设备驱动器。
PFQ允许研究人员自己开发高性能网络应用程序,工具内置了自定义版本的libpcap,可加速或并行处理遗留应用程序。此外,PFQ还支持专为内核数据包处理设计的纯函数语言:pfq-lang。
Pfq-lang受到了Haskell的启发,主要针对的是运行在网络设备驱动器上的特定应用程序。在pfq-lang的帮助下,研究人员可以构建高效的网桥、端口镜像、简单的防火墙以及网络负载均衡器等等。
工具框架包含了PFQ内核模块、用户空间库(C、C++11-14)、Haskell语言和加速pcap库的源代码,而且内置了pfq-lang编译器和一系列诊断工具。
工具功能
1、 获取完整无锁结构的数据路径。
2、 预先分配套接字缓冲区。
3、 兼容大量网络设备驱动器。
4、 对支持异步数据包传输的内核线程提供透明支持。
5、 支持多线程应用程序监控。
6、 通过随机散列或确定性分类进行分组数据包转发。
7、 VLAN数据过滤。
8、 针对C、C++11-14和Haskell语言的用户空间库。
9、 用于分析和编译pfg-lang程序的pfq-lang编译器。
10、针对遗留应用的加速PCAP库。
11、I/O用户<->内核内存映射。
12、Pfq-omatic脚本,自动加速普通驱动程序。
工具下载&安装
$ git clone git://github.com/pfq/PFQ.git
许可证协议
PFQ框架遵循GPL许可证协议。