Packet I/O Engine
This page is under construction. Thank you for your patience.

Introduction

Packet I/O Engine is a high-performance device driver for Intel 82598/82599-based network interface cards. This program is based on Intel IXGBE driver (version 2.0.38.2), but heavily modified for throughput-oriented user-level applications. The modifications include batch processing, huge packet buffer, aggressive software prefetch, etc. See details here.

Is this for me? or not?

Are you not sure if this source code is for you? Check below.

Performance

Packet I/O is able to handle multi-10G traffic even with very small packets. It allows user-level applications to have enough computation power under high load. We present some micro-benchmark results here.

  1. Low-end desktop configuration: Core i3 540 (two cores), X520-DA2 (two 10GbE ports)
  2. (planning to conduct experiments on various systems)

Usage

This driver is implemented as a Linux kernel module (you may need some packages to build a kernel module). The installation steps are as easy as:

$ make
$ sudo ./install.py 0 0 (yes, you need Python)

Examples

The release includes three example codes to help your understanding:

  1. list_devices: This simple example shows the list of activated 10GbE interfaces.
  2. rx_dump: A tiny version of tcpdump (but only receive-side packets will be shown). It simply dumps received packets through specified interfaces. Since it tosses packets to the kernel, you can use normal network applications as usual while it's running on.
  3. echo: This program demonstrates how to do basic I/O with this driver. It transmits all received packets back to the same interface the packets came in (without any modification on the packets). It also gives a basic idea about how to utilize multi-core CPUs to align with Receive-Side Scaling (RSS).
  4. packet_generator: generates IPv4 or IPv6 UDP packets at its maximum speed. You can use this program to test the performance of your application. It is capable of having a specified number of flows (5-tuple combination).

Documentation

See the Github wiki pages.

Releases

Source Code Repository

The development version is at Github. You may fork and send us pull requests.

License

This source code is distributed under GNU General Public License v2.