Fastpass is a datacenter network framework that aims for high utilization with zero queueing. It provides low median and tail latencies for packets, high data rates between machines, and flexible network resource allocation policies. The key idea in Fastpass is fine-grained control over packet transmission times and network paths.
A logically centralized arbiter controls and orchestrates all network transfers.
Note (August 2017): Flowtune is developing network monitoring and scheduling based on principles derived from this work. See the website for more details.
Because the arbiter has knowledge of all current and scheduled transfers, it can choose slots and paths that yield the "zero-queue" property: the arbiter arranges for each packet to arrive at a switch on the path just as the next link to the destination becomes available.
A loadable kernel module implements a Linux qdisc (queueing discipline) that intercepts outgoing packets just before they are passed to the NIC. The qdisc sends requests to the arbiter using specialized control sockets also in the kernel module, implemented as a Fastpass transport protocol.
The arbiter is implemented on the DPDK framework. The arbiter processes each request, performing two functions:
Clone the Fastpass git repository:
git clone https://github.com/yonch/fastpass.git export FASTPASS_DIR=`pwd`/fastpass
git clone git@github.com:DPDK/dpdk.git pushd dpdk git checkout v16.07 popdAfter compiling DPDK (can use tools/setup.sh), set environment variables RTE_SDK and RTE_TARGET, for example:
export RTE_SDK=`pwd`/dpdk export RTE_TARGET=x86_64-default-linuxapp-gcc
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git pushd linux-stable git checkout v4.1Create a .config file here (there is an example for Linux v3.10.25 in $FASTPASS_DIR/src/kernel-mod/kernel-config-3.10.25).
unset KBUILD_OUTPUT # build in the source directory unset KDIR # build in the source directory make oldconfig cp $FASTPASS_DIR/src/kernel-mod/pkt_sched.h include/uapi/linux/ make -j22 popdThen set environment variables:
export KBUILD_OUTPUT=`pwd`/linux-stable export KDIR=$KBUILD_OUTPUT
sudo apt-get install flex bison iptables-dev libdb6.0-devNow it's time to get the iproute2-fastpass repository and compile. The
tc
utility will be in iproute2-fastpass/tc/tc
.
git clone http://github.com/yonch/iproute2-fastpass pushd iproute2-fastpass make -j22 popd
fastpass@mit.edu