CCP

CCP: Congestion Control Plane

The congestion control plane is a new API for writing congestion control algorithms. It provides three benefits:

  1. Supporting Sophisticated Algorithms. Many modern congestion control proposals use sophisticated processing to make control decisions. It is often difficult to implement these algorithms within the “datapath” - any module that provides data transmission and reception interfaces between higher-layer applications and lower-layer network hardware. CCP allows algorithm implementations to take advantage of useful user-space libraries independent of the target datapath.
  2. Write-Once, Run-Anywhere. Recently, new datapaths have emerged, leading to the “matrix of sadness,” where congestion control algorithm developers must re-implement their algorithms anew on each datapath. CCP provides a runtime for algorithms which interfaces with each datapath, so the same algorithm code runs in multiple datapaths without modification.
  3. New Capabilities. It is difficult to implement new congestion control capabilities such as the congestion manager in current datapaths. CCP allows developers to add these capabilities without datapath modification.

To get started using CCP, please see our guide. It provides detailed setup instructions for running existing algorithms on CCP and a tutorial for writing new algorithms.

To learn more, please refer to our SIGCOMM 2018 paper.

If you have questions, you can reach us at ccp@csail.mit.edu.

Implementation

We have implemented several components in the CCP ecosystem:

  1. Portus is a user-space CCP agent. It provides a runtime and API for developers to implement congestion control algorithms. It is published with documentation on crates.io.
  2. libccp is a convenience library which, given an IPC mechanism and the definitions of various congestion control primitives in the context of a datapath, can communicate with Portus to run a congestion control algorithm.
  3. ‘ccp-kernel](https://github.com/ccp-project/ccp-kernel) implements a Linux kernel TCP datapath using the pluggable TCP API. We have also [explored` an ebpf-powered Linux datapath.
  4. ccp-mtcp is a fork of mTCP, a TCP stack on top of DPDK, which implements CCP support.
  5. ccp-quic hosts a patch to QUIC which implements CCP support.
  6. ccp-mvfst: Facebook’s production QUIC datapath, mvfst, includes support for CCP algorithms.

We also have spoken with other datapath authors who are interested or in the process of implementing CCP datapaths as an easy way to support congestion control.

Finally, we have implemented or are aware of various congestion control algorithm implementations (bbr, copa, nimbus, Verus, BIC-DCTCP and more). If you have implemented a congestion control algorithm using CCP, or are considering doing so, please get in touch with us!

Fidelity

CCP algorithms perform similarly to their in-datapath counterparts. While we evaluate this more thoroughly in the paper, it it simplest to view this demo, comparing the Linux kernel implementation of BBR:

The CCP implementation of BBR performs similarly:

Reproduce Our Results

Should you wish to replicate the experiments in our paper, this set of scripts may be useful.