Skip to content
Paul Khuong edited this page Jul 4, 2017 · 38 revisions

Architecture

architecture

PFQ is a Linux Kernel module for packet capture and in-kernel functional processing designed to be efficient on multi-core architectures.

PFQ works by registering itself as a network sniffer (as PF_PACKET), or through accelerated drivers obtained by recompiling the source codes by pfq-omatic script.

Module parameters

filename:       /opt/PFQ/kernel/./pfq.ko
description:    Functional Networking Framework for Multi-core Architectures
author:         Nicola Bonelli <nicola@pfq.io>
license:        GPL
depends:        
vermagic:       4.9.0-1-amd64 SMP mod_unload modversions 
parm:           max_slot_size: Maximum socket slot size (default=2048 bytes) (int)
parm:           max_pool_size: Maximum socket buffer pool size (default=2048) (int)
parm:           capt_batch_len: Capture batch queue length (int)
parm:           xmit_batch_len: Transmit batch queue length (int)
parm:           vlan_untag: Enable vlan untagging (default=0) (int)
parm:           skb_tx_pool_size: Socket buffer Tx pool size (default=1024) (int)
parm:           skb_rx_pool_size: Socket buffer Rx pool size (default=1024) (int)
parm:           tx_cpu: Tx k-threads cpu (array of int)
parm:           tx_retry: Tx retry attempts (default 1) (int)

Performance

PFQ provides similar performance to that of PF_RING-DNA and Netmap, while maintaining a total flexible design and the full compatibility with a plethora of network device drivers.

The software acceleration is achieved with a lock-free architecture and by overloading certain kernel functions at compile with more efficient implementations. Additional information is available in the section pfq-omatic.

PFQ takes advantage from:

  • A total lock-free architecture on the fast-data path.
  • Efficient implementations of queues (MPSC, SPMC) with amortized atomic operations.
  • Reduced inter-cache traffic (cache coherence) among cores.
  • Ad-hoc socket buffer memory allocator.
  • Shared memory between user and kernel space on-top-of HugePages.
  • Lightweight sparse counters.
  • No false-sharing.
Clone this wiki locally