PFQ is a functional framework designed for the Linux operating system built for efficient packets capture/transmission (10G, 40G and beyond), in-kernel functional processing, kernel-bypass and packets steering across groups of sockets/end-points.
It is highly optimized for multi-core architecture, as well as for network devices equipped with multiple hardware queues. Compliant with any NIC, it provides a script that generates accelerated network device drivers starting from the source code.
PFQ enables the development of high-performance network applications, and it is shipped with a custom version of libpcap that accelerate and parallelize legacy applications. Besides, a pure functional language designed for early stages in-kernel packet processing is included: pfq-lang.
Pfq-Lang is inspired by Haskell and is intended to define applications that run on top of network device drivers. Through pfq-lang it is possible to build efficient bridges, port mirrors, simple firewalls, network balancers and so forth.
The framework includes the source code of the PFQ kernel module, user-space libraries for C, C++11-14, Haskell language, an accelerated pcap library, an implementation of pfq-lang as eDSL for C++/Haskell, an experimental pfq-lang compiler and a set of diagnostic tools.
- Data-path with full lock-free architecture.
- Preallocated pools of socket buffers.
- Compliant with a plethora of network devices drivers.
- Rx and Tx line-rate on 10-Gbit links (14,8 Mpps), tested with Intel ixgbe vanilla drivers.
- Transparent support of kernel threads for asynchronous packets transmission.
- Transmission with active timestamping.
- Groups of sockets which enable concurrent monitoring of multiple multi-threaded applications.
- Per-group packet steering through randomized hashing or deterministic classification.
- Per-group Berkeley and VLAN filters.
- User-space libraries for C, C++11-14 and Haskell language.
- Functional engine for in-kernel packet processing with pfq-lang.
- pfq-lang eDLS for C++11-14 and Haskell language.
- pfq-lang compiler used to parse and compile pfq-lang programs.
- Accelerated pcap library for legacy applications (line-speed tested with captop).
- I/O user<->kernel memory-mapped communications allocated on top of HugePages.
- pfqd daemon used to configure and parallelize (pcap) legacy applications.
- pfq-omatic script that automatically accelerates vanilla drivers.
- "PFQ: a Novel Engine for Multi-Gigabit Packet Capturing With Multi-Core Commodity Hardware": Best-Paper-Award at PAM2012, paper avaiable from here
- "A Purely Functional Approach to Packet Processing": ANCS 2014 Conference (October 2014, Marina del Rey)
- "Network Traffic Processing with PFQ": JSAC-SI-MT/IEEE journal Special Issue on Measuring and Troubleshooting the Internet (March 2016)
- "Enabling Packet Fan--Out in the libpcap Library for Parallel Traffic Processing": Network Traffic Measurement and Analysis Conference (TMA 2017)
- "A Pipeline Functional Language for Stateful Packet Processing": IEEE International Workshop on NEtwork Accelerated FunctIOns (NEAF-IO '17)
- "The Acceleration of OfSoftSwitch": IEEE Conference on Network Function Virtualization and Software Defined Networks (NFV-SDN '17)
- "Functional Network Programming" at Tyrrhenian International Workshop on Digital Communication - (Sep. 2016)
- "Software Accelerations for Network Applications" at NetV IRISA / Technicolor Workshop on Network Virtualization (Feb. 2017)
Nicola Bonelli [email protected]
Contributors (in chronological order)
Andrea Di Pietro [email protected]
Loris Gazzarrini [email protected]
Gregorio Procissi [email protected]
Giacomo Volpi [email protected]
Luca Abeni [email protected]
Tolysz [email protected]
LSB [email protected]
Andrey Korolyov [email protected]
MrClick [email protected]
Paul Emmerich [email protected]
Bach Le [email protected]
Marian Jancar [email protected]
nizq [email protected]
Giuseppe Sucameli [email protected]
Sergio Borghese [email protected]
Fabio Del Vigna [email protected]
PFQ home-page is www.pfq.io