Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time
dpdk @ 7001c8f


Shenango is a system that enables servers in datacenters to simultaneously provide low tail latency and high CPU efficiency, by rapidly reallocating cores across applications, at timescales as small as every 5 microseconds.

For similar behavior to Shenango but with higher throughput, see Caladan, which builds on Shenango but enables higher throughput by moving the IOKernel off the datapath with directpath.

How to Run Shenango

  1. Clone the Shenango repository.
git clone
cd shenango
  1. Setup DPDK and build the IOKernel and Shenango runtime.
make clean && make

To enable debugging, build with make DEBUG=1.

  1. Install Rust and build a synthetic client-server application.
curl -sSf | sh
rustup default nightly
cd apps/synthetic
cargo clean
cargo update
cargo build --release
  1. Run the synthetic application with a client and server. The client sends requests to the server, which performs a specified amount of fake work (e.g., computing square roots for 10us), before responding.

On the server:

sudo ./iokerneld
./apps/synthetic/target/release/synthetic --config server.config --mode spawner-server

On the client:

sudo ./iokerneld
./apps/synthetic/target/release/synthetic --config client.config --mode runtime-client

Supported Platforms

This code has been tested most thoroughly on Ubuntu 18.04, with kernel 4.15.0. It has been tested with Intel 82599ES 10 Gbits/s NICs and Mellanox ConnectX-3 Pro 10 Gbits/s NICs. If you use Mellanox NICs, you should install the Mellanox OFED as described in DPDK's documentation. If you use Intel NICs, you should insert the IGB UIO module and bind your NIC interface to it (e.g., using the script ./dpdk/usertools/