Code Monkey home page Code Monkey logo

pcc-uspace's Introduction

Performance-oriented Congestion Control

This repository houses the userspace implementations of the Performance-oriented Congestion Control (PCC) project.

PCC is a new transport rate control architecture which uses online learning. By empirically observing what actions lead to high performance, PCC achieves substantially higher performance than legacy TCP congestion controllers that are based on fixed rules. For more, see our original paper on PCC Allegro in USENIX NSDI 2015, and the paper on PCC Vivace in USENIX NSDI 2018.

Implementations

This repository contains files for two implementations of PCC:

  • An implementation based on UDT, used for example for experiments in the NSDI'18 paper
  • An implementaton in the QUIC framework

The files in src/pcc/* can be used to build either a UDT or QUIC version of the code; however, the files must be copied to a full QUIC codebase (either Chromium or a QUIC server) before building PCC-QUIC. The UDT version can be built in this repository as described in the next section.

Note: The QUIC version of PCC may require minor type or convention changes depending on the QUIC implementation it is built with because the Chromium and QUIC server codebases have different rules enforced by their build systems. We are working on additional documentation to walk through building PCC QUIC with each of the QUIC codebases.

Building

To build PCC for UDT, run the following:

cd src
sunifdef -r -UQUIC_PORT -UQUIC_PORT_LOCAL ./pcc/\*
make

This will produce two apps (pccclient and pccserver) in the src/app directory.

To test that PCC is functioning, create a PCC server that listens on port 9000 and receives data:

./app/pccserver recv 9000

Then, create a PCC client that connects to the local host (IP 127.0.0.1) at port 9000, then sends data to the server at that address:

./app/pccclient send 127.0.0.1 9000

The code in this repository is broken into 3 parts:

  1. The application code (located in src/app)
  2. The UDT library code (located in src/core)
  3. The PCC implementation (located in src/pcc)

The PCC code is split into two main parts:

  1. The rate control algorithm (located in the src/pcc/pcc_sender files)
  2. The monitor interval and utility calculation algorithms (located in the src/pcc/pcc_monitor_interval_queue files)

pcc-uspace's People

Contributors

brighten avatar nathanhjay avatar meng-tong avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.