/PCC-Kernel

Primary LanguageCOtherNOASSERTION

PCC

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.

History

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

Using PCC

Environment

This module was tested and developed on kernel version 4.15

Compilation

Install git and clone this repository.
cd src
make
sudo insmod tcp_pcc.ko

Usage

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

Code

All PCC code resides under src/tcp_pcc.c