PFQ

Functional Networking Framework for Multi-core Architectures

View the Project on GitHub pfq/PFQ

pfq-logo

What is PFQ?

PFQ is a functional networking framework designed for the Linux operating system that allows efficient packets capture/transmission (10g and beyond), in-kernel functional processing and packets steering across sockets/end-points.

PFQ is highly optimized for multi-core architecture, as well as for network devices equipped with multiple hardware queues. It works with any network device driver and provides a script designed to obtain accelerated versions starting from source codes.

The framework enables the development of high-performance networking applications with different programming languages: C, C++ and Haskell. In addition, a pure functional language designed for early stages in-kernel processing is included: PFQ/lang.

PFQ/lang is inspired by Haskell and allows the creation of small 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 package provides the source code of the PFQ kernel module, user-space libraries for C, C++11-14 and Haskell language, an implementation of PFQ/lang as eDSL for C++11-14 and Haskell, and a set of diagnostic tools.

Features

Performance

PFQ performance is highly dependent on the hardware in use.

Running on top of a Xeon processor equipped and the Intel 82599 10G controller, PFQ can process and steer to user-space and transmit the line speed (~14,8 Million packets per second) deploying 2 or 3 kernel threads.

The following link shows the configuration file and the performance measured running PFQ on top of Intel 82599 10/20G NICs.

Releases

The current stable release is the master branch (v4.3).

Source code

The package provides the source code of the PFQ kernel module, user-space libraries for the C, C++11 and Haskell language, utilities, scripts a set of diagnostic tools.

Gcc/g++ 4.7 (or higher), GHC 7.8, alex, happy, CMake and make tool are required for the compilation.

Wiki

New to PFQ programming? The wiki pages can get you started quickly.

Twitter

Interested in daily-based tweets about pfq and pfq-lang facts, updates and tricks? Follow me on Twitter.

Publications

  • "PFQ: a Novel Engine for Multi-Gigabit Packet Capturing With Multi-Core Commodity Hardware" Best-Paper-Award at PAM2012
  • "A Purely Functional Approach to Packet Processing" ANCS 2014 Conference - Marina del Rey (LA)

  • Licenses

    The PFQ kernel module and user-space libraries are distributed under the GPL license.

    Author

    Nicola Bonelli nicola@pfq.io