PF_RING ZC (Zero Copy) is a flexible packet processing framework that allows you to achieve 1/10 Gbit line rate packet processing (both RX and TX) at any packet size. It implements zero copy operations including patterns for inter-process and inter-VM (KVM) communications. It can be considered as the successor of DNA/LibZero that offers a single and consistent API based on the lessons learnt on the past few years.
It features a clean and flexible API that implement simple building blocks (queue, worker and pool) that can be used from threads, applications and virtual machines. This to implement 10 Gbit line-rate packet processing.
<Simple And Clean API>
PF_RING ZC comes with a simple API able to create a complex application in a few lines of code. The following example shows how to create an aggregator+balancer application in 6 lines of code.
<On-Demand Kernel Bypass with PF_RING Aware Drivers>
PF_RING ZC comes with a new generation of PF_RING aware drivers that can be used both in kernel or bypass mode. Once installed, the drivers operate as standard Linux drivers where you can do normal networking (e.g. ping or SSH). When used from PF_RING they are quicker than vanilla drivers, as they interact directly with it. If you open a device using a PF_RING-aware driver in zero copy (e.g. pfcount -i zc:eth1) the device becomes unavailable to standard networking as it is accessed in zero-copy through kernel bypass, as happened with the predecessor DNA. Once the application accessing the device is closed, standard networking activities can take place again.
<Zero Copy Operations to Virtual Machines (KVM)>
PF_RING ZC allows you to forward (both RX and TX) packets in zero-copy for a KVM virtual machine without using techniques such as PCIe passthrough. Thanks to the dynamic creation of ZC devices on VMs, you can capture/send traffic in zero-copy from your VM without having to patch the KVM code, or start KVM after your ZC devices have been created. In essence now you can do 10 Gbit line rate to your KVM using the same command you would use on a physical host, without changing a single line of code.
<Zero Copy Operations>
Similar to its predecessor LibZero, in PF_RING ZC you can perform zero copy operations across threads, applications and now also VMs. You can balance in zero-copy packets across applications or implement packet fanout. In PF_RING ZC everything happens in zero-copy, at line rate.