Pfq - Functional Network Framework For Multi-Core Architectures


PFQ is a functional framework designed for the Linux operating arrangement built for efficient packets capture/transmission (10G, 40G too beyond), in-kernel functional processing, kernel-bypass too packets steering across groups of sockets/end-points.
It is highly optimized for multi-core architecture, equally good equally for network devices equipped amongst multiple hardware queues. Compliant amongst whatsoever NIC, it provides a script that generates accelerated network device drivers starting from the source code.
PFQ enables the evolution of high-performance network applications, too it is shipped amongst a custom version of libpcap that accelerate too parallelize legacy applications. Besides, a pure functional linguistic communication designed for early on stages in-kernel package processing is included: pfq-lang.
Pfq-Lang is inspired yesteryear Haskell too is intended to define applications that run on top of network device drivers. Through pfq-lang it is possible to construct efficient bridges, port mirrors, elementary firewalls, network balancers too and thence forth.
The framework includes the source code of the PFQ meat module, user-space libraries for C, C++11-14, Haskell language, an accelerated pcap library, an implementation of pfq-lang equally eDSL for C++/Haskell, an experimental pfq-lang compiler too a laid upward of diagnostic tools.

Features
  • Data-path amongst amount lock-free architecture.
  • Preallocated pools of socket buffers.
  • Compliant amongst a plethora of network devices drivers.
  • Rx too Tx line-rate on 10-Gbit links (14,8 Mpps), tested amongst Intel ixgbe vanilla drivers.
  • Transparent back upward of meat threads for asynchronous packets transmission.
  • Transmission amongst active timestamping.
  • Groups of sockets which enable concurrent monitoring of multiple multi-threaded applications.
  • Per-group package steering through randomized hashing or deterministic classification.
  • Per-group Berkeley too VLAN filters.
  • User-space libraries for C, C++11-14 too Haskell language.
  • Functional engine for in-kernel package processing amongst pfq-lang.
  • pfq-lang eDLS for C++11-14 too Haskell language.
  • pfq-lang compiler used to parse too compile pfq-lang programs.
  • Accelerated pcap library for legacy applications (line-speed tested amongst captop).
  • I/O user<->kernel memory-mapped communications allocated on top of HugePages.
  • pfqd daemon used to configure too parallelize (pcap) legacy applications.
  • pfq-omatic script that automatically accelerates vanilla drivers.

Publications
  • "PFQ: a Novel Engine for Multi-Gigabit Packet Capturing With Multi-Core Commodity Hardware": Best-Paper-Award at PAM2012, newspaper avaiable from here
  • "A Purely Functional Approach to Packet Processing": ANCS 2014 Conference (October 2014, Marina del Rey)
  • "Network Traffic Processing amongst PFQ": JSAC-SI-MT/IEEE periodical Special Issue on Measuring too Troubleshooting the Internet (March 2016)
  • "Enabling Packet Fan--Out inward the libpcap Library for Parallel Traffic Processing": Network Traffic Measurement too 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 too Software Defined Networks (NFV-SDN '17)

Invited talks
  • "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)

Author
Nicola Bonelli nicola@pfq.io

Contributors (in chronological order)
Andrea Di Pietro andrea.dipietro@for.unipi.it
Loris Gazzarrini loris.gazzarrini@iet.unipi.it
Gregorio Procissi g.procissi@iet.unipi.it
Giacomo Volpi volpi.gia@gmail.com
Luca Abeni abeni@dit.unitn.it
Tolysz tolysz@gmail.com
LSB leebutterman@gmail.com
Andrey Korolyov andrey@xdel.ru
MrClick valerio.click@gmx.com
Paul Emmerich emmericp@net.in.tum.de
Bach Le bach@bullno1.com
Marian Jancar jancar.marian@gmail.com
nizq ni.zhiqiang@gmail.com
Giuseppe Sucameli brush.tyler@gmail.com
Sergio Borghese s.borghese@netresults.it
Fabio Del Vigna fabio.delvigna@larthia.com

HomePages
PFQ home-page is www.pfq.io