Skip to content
No description, website, or topics provided.
C C++ Rust Makefile Shell Go Assembly
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
apps README updates Feb 24, 2019
bindings dune: remove (unused) Feb 21, 2019
dpdk @ 0da7f44
inc dune: remove (unused) Feb 21, 2019
iokernel cleanup some compile warnings Feb 22, 2019
net checkpoint Jan 2, 2018
scripts runtime: shrink tx buffer pool Feb 22, 2019
shim shim: cleanup c++ refs Jul 11, 2018
.gitmodules iokernel: Add a basic DPDK echo server and DPDK 17.08.0 as a git subm… Nov 10, 2017
Makefile dune: remove (unused) Feb 21, 2019
ixgbe.patch runtime/iokernel: enable IP and TCP checksum offloading for ixgbe vec… Aug 28, 2018
ixgbe_18_11.patch iokernel/dpdk: restore TCP offloads and vector TX path Dec 19, 2018
mlx4_18_11.patch iokernel/dpdk: manually register memory for mlx4 driver Jan 13, 2019
mlx5_18_11.patch iokernel: support mlx5 Jan 31, 2019
sample.config checkpoint Jan 2, 2018
server.config more detailed instructions for getting started Oct 25, 2018


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.

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/

You can’t perform that action at this time.