Performance-oriented Congestion Control.
This is a Linux kernel module implementing the PCC Allegro and PCC Vivace.
master branch is for PCC Allegro, the first version of PCC, introduced in NSDI15.
vivace branch is for PCC Vivace, the second version of PCC, introduced in NSDI18.
PCC heavily relies on the pacing mechanism.
Until recently, this mechanism did not exist in the Linux kernel.
2014 - Implementation of PCC using UDT by
Mo Dong - https://github.com/modong/pcc
2016 - Google publishes their BBR congestion algorithm (CA) - an algorithm
with similar goals to PCC but slightly different, as a Linux kernel module.
2016 - Google adds pacing mechanism to the Linux kernel in order to support
their BBR CA approach.
2017 - Google's BRR team adds more changes - allowing internal timers to
implement pacing and multiple bug fixes.
2018 - PCC Vivace released with userspace implementation over UDT - https://github.com/PCCproject/PCC-Uspace
This module was tested and developed on kernel version 4.15
Install
git
and clone this repository.cd src
make
sudo insmod tcp_pcc.ko
Now you can use pcc
as a congestion algorithm:
import socket
TCP_CONGESTION = getattr(socket, 'TCP_CONGESTION', 13)
s = socket.socket()
s.setsockopt(socket.IPPROTO_TCP, TCP_CONGESTION, 'pcc')
# Use s
All PCC code resides under
src/tcp_pcc.c