MulTFRC

The goal of MulTFRC is to provide weighted congestion control. The idea is to emulate multiple TFRC streams by replacing the equation in TFRC with a new equation which yields the throughput of multiple TCP flows.

MulTFRC was developed by Dragana Damjanovic for her Ph.D. thesis, carried out in the context of the European project "EC-GIN".


Documentation

The equation


The mechanism


Both

 


Code

ns-2

We implemented MulTFRC using ns-2 version 2.31. The code can be found here. It extends the TFRC protocol with an additional parameter n.

The value of n (the MulTFRC aggression) can be changed by setting the parameter n_mulTFRC_.

As an example:

Agent/TFRC set n_mulTFRC_ 3

is setting the value of n to 3.

Setting the value of n_mulTFRC_ to 1 yields a behavior that is similar to the standard TFRC protocol.

Simulation script used for validating the behavior of MulTFRC (from Dragana's thesis) can be found here.



Real-life implementation

The first MulTFRC implementation is based on the TFRC implementation from http://www.icir.org/tfrc/code/. This is still work in progress.
There are two versions of the implementation:


MulTFRC without reliability: in this is extension of the original TFRC code from http://www.icir.org/tfrc/code/, the equation used for the calculation of the rate was changed. An additional parameter -m for the MulTFRC aggression is added. Setting this parameter to 1 yields a behavior that is similar to the standard TFRC protocol.

The code can be found here.

How to use it:

Optional parameters are almost the same as in the original implementation. The only difference is an additional parameter on the receiver side for MulTFRC aggression:

-m - aggression of the MulTFRC protocol


MulTFRC with reliability: reliability was added to mulTFRC, and a simple tool for transferring files was implemented.

The code can be found here.

How to use it:

Optional parameter:

-m - aggression of the MulTFRC protocol

Setting this parameter to yields a behavior that is similar to the standard TFRC protocol. This parameter can be set on the sender side or on the receiver side (if it is set on both sides the value set on the sender side overwrites the value set on the receiver side).

Florian Schatz implemented the reliable version of MulTFRC as his master thesis under Dragana's supervision. Implementations using "go-back-n" and "selective repeat" were developed. They are documented in his master thesis. His implementation can be found here.


 

The second MulTFRC implementation is a patch to the DCCP implementation in the Linux kernel, written by Adrian Jørgensen for his master thesis. It contains an experimental version of the equation that works without floating point operations. This tar file contains all files that were modified and a small README with all necessary steps/commands in order to get the kernel compiled for Debian 6 "Squeeze" with kernel version 2.6.32.
For testing, this version of iperf can be used to emulate traffic for DCCP. To install it, do: ./configure; make; make install

 

Equation programs in java

Here are two very short and simple Java programs that can be used to test various input / output values in a GUI, and obtain reference values for validating an implementation.
TFRC.java, MulTFRC.java

 


Last update: 9. January 2024
Back to Michael's page