GithubHelp home page GithubHelp logo

hartl3y94 / pfq Goto Github PK

View Code? Open in Web Editor NEW

This project forked from pfq/pfq

0.0 0.0 0.0 24.97 MB

Functional Network Framework for Multi-Core Architectures

License: GNU General Public License v2.0

Haskell 6.91% Makefile 1.27% C 74.87% C++ 9.37% CMake 0.83% Shell 0.49% Assembly 0.46% HTML 2.87% Yacc 0.68% Lex 0.37% Batchfile 0.01% M4 1.50% Roff 0.07% Python 0.30%

pfq's Introduction

PFQ v6.2

Stability Gitter

Introduction

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.

Features

  • 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.

Publications

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

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)

Licenses

The PFQ kernel module is distributed with GPL license. User-space libraries and tools, instead, are distributed with a dual license scheme, so they are available either as GPL or with a Commercial License. For more information contact the author.

Author

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]

HomePages

PFQ home-page is www.pfq.io

pfq's People

Contributors

awgn avatar brushtyler avatar bullno1 avatar emmericp avatar lsb avatar marian-jancar avatar mr-click avatar nizq avatar pfq avatar tolysz avatar xdel avatar yoskini avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.