GithubHelp home page GithubHelp logo

kefanchen / net-tcp-fec Goto Github PK

View Code? Open in Web Editor NEW

This project forked from tflach/net-tcp-fec

0.0 2.0 0.0 208 KB

Modifications to the Linux networking stack to enable forward error correction in TCP

License: GNU General Public License v2.0

net-tcp-fec's Introduction

This repository hosts modifications to the Linux kernel to enable forward error
correction (FEC) in TCP.  The technique is described as the "Corrective"
approach in our SIGCOMM 2013 publication titled "Reducing Web Latency: The
Virtue of Gentle Aggression".

The modifications were originally developed for the Linux kernel version 2.6.34
and have since been rebased to version 3.10 - though without extensive testing!

We invite you to play around with the patches and welcome your feedback. We are
also happy to apply bugfixes and future rebases you might have to the existing
patch set.

WARNING: Since the modifications have not been tested extensively in the current
kernel version, we advise you to execute tests in an isolated environment with
an option for a recovery from kernel panics, etc.


### Patch components

The changes are grouped into three patches building on top of each other:
Common, Receiver, and Sender.  For a detailed description of the parts
implemented by each patch please check the description at the top of each patch
file.


### Installation

To get started fetch the Linux kernel version used as the base for the patch set
(here version 3.10):

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ cd linux
$ git checkout tags/v3.10

Next, check out the patches (or download them directly). Then apply them in the
right order (Common, then Receiver, then Sender):

$ git apply <local path to
patches>/0001-net-tcp-TCP-with-Forward-Error-Correction-Common.patch
$ git apply <local path to
patches>/0002-net-tcp-TCP-with-Forward-Error-Correction-Receiver.patch
$ git apply <local path to
patches>/0003-net-tcp-TCP-with-Forward-Error-Correction-Sender.patch

All three `apply` calls do NOT produce any console output if applied correctly.

NOTE: If you want to apply the patches to a different kernel version, keep in
mind that the apply step can fail if some changes are conflicted with the
changed code base. A possible solution is to apply a patch partially (using the
`--reject` flag when running `git apply`) and then resolve the conflicts stored
in `.rej` files manually.

Finally, you need to compile and install the modified kernel. There are many
tutorials on how to do this out there, so we avoid replicating instructions for
this here.

The FEC feature is turned off by default in an environment running with a
modified kernel. To enable it run:

$ sysctl net.ipv4.tcp_fec=1


### Testing

We developed a set of packetdrill test routines to check the proper
functionality of the FEC engine. We will publish them in this repository soon.

If you have further questions, feel free to contact any of the contributors.

net-tcp-fec's People

Contributors

flach-goog avatar

Watchers

 avatar  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.