This repository contains a collection of scripts used to run the experiemnts and generate the figures in our SIGCOMM 2018 paper: Restructuring Endpoint Congestion Control.
To make the process of reproducing our results easier, this repository contains
a Vagrantfile that tells Vagrant how to setup a machine running the proper
version of Linux with all of the proper dependencies. Simply install
Vagrant and then run vagrant up
. This will
create a new Linux VM with this directory (eval-scripts/) linked as /ccp
inside the VM. You can access the VM by running vagrant ssh
.
Once you have a machine setup, simply running make
inside this directory (or /ccp
inside the Vagrant VM) should build all of the necessary components.
Below is a list of all figures in the paper and the commands necessary to run the corresponding experiment.
If you already have a Linux machine or VM and you do not wish to use Vagrant you can simply clone this
repository and run the ccp-system-setup.sh
. All of our original experiments were run on
a machine with Ubuntu 17.10 (Linux 4.13).
For certain experiments, we relied on tcpprobe
for congestion window instrumentation, which was removed in newer kernel versions. Therefore, some scripts may not work on newer kernels, but newer versions of CCP (which this repository now points to) run on newer kernels (we have tested kernel 5.4).
- Load ccp-kernel:
cd ccp-kernel && sudo ./ccp_kernel_load ipc=0
- Start BBR:
cd bbr && sudo ./target/release/bbr --ipc=netlink
- Start an iperf server:
iperf -s -p 5000
- Start mahimahi with logging:
mm-delay 10 mm-link --cbr 48M 48M --uplink-queue="droptail" --downlink-queue="droptail" --uplink-queue-args="packets=160" --downlink-queue-args="packets=160" --uplink-log=bbr.log
- Inside the mahimahi shell, start a CCP-enabled iperf sender:
iperf -c $MAHIMAHI_BASE -p 5000 -t 30 -i 1 -Z ccp
- Graph the result:
mm-graph mahimahi.log 20
- Result will be in
bbr.eps
.
This process is automated in the following script.
See the fidelity
target in the Makefile and modify to your preference. This script can take quite a while to run, and generates a lot of output, so by default the Makefile target does not run the same experiments as described in the paper.
The relevant arguments to the run-fidelity-exp.py
script are:
--alg=(cubic|reno)
for Cubic and Reno--scenario=(fixed|cell|drop)
for the three scenarios described in Section 7.1.1 of the paper--iters
for the number of iterations to run each experiment. As Section 7.1.1 describes, we use a value of 20. However, with this value the*-*-cwndevo.pdf
graphs become quite large in size: you may have to modify the scripts (perhaps by modifying the sampling on line 105 of run-fidelity-exp.py) to view the results efficiently.
For Figure 9, pick one run for cubic for each of the above and run
./plot/cwnd-evo-single.r fidelity/cwndevo-subsampled.log cubic fixed <ccp_iteration> <kernel_iteration> <output_file> light
make ipc
python3 fct_scripts/fct_exp.py
./scripts/run-scalability-exp.py
The experiments corresponding to Figures 7, 8, and 14 require significant setup external to CCP. As a result we do not currently support them. Please contact us for further information.