TCP-Fusion

TCP-Fusion is a new congestion control algorithm for high-speed networks. This scheme exploits three useful characteristics of TCP-Reno, TCP-Vegas and TCP-Westwood in its congestion avoidance strategy. In short, its congestion window size is decreased without causing too drastic reduction and is increased with smart adaptability to coexisting TCP-Reno flows according to the congestion level measurement estimated from RTT.

Paper & slide

Title

Conference

Paper

Slide

TCP-Fusion: A Hybrid Congestion Control Algorithm for High-speed Network

PFLDnet 2007, Feb.2007.

PFLDnet2007.pdf

PFLDnet2007-talk.pdf

On Hybrid TCP Congestion Control ICCCS 2008, Nov.2008. ICCCS2008.pdf ICCCS2008-talk.pdf
Simple Model Analysis and Performance Tuning of Hybrid TCP Congestion Control IEEE Globecom 2008, Dec.2008. GCOM2008.pdf GCOM2008-talk.pdf




Ns2 modules (simulation)

How to install TCP-Fusion Ns2 modules is shown below. TCP-Fusion modules have been tested on Ns2 version 2.28 & 2.31.

Code

tcp-fusion.cc
tcp-fusion.h

Installation Instructions

  • Add the modules tcp-fusion.cc and tcp-fusion.h to ns-allinone-2.28/ns-2.28/tcp directory.
  • Modify the Makefile under the Ns2 main directory so that it compiles and links the new module (i.e. add the tcp-fusion.o anywhere in the OBJ_CC variable).
  • Add the following lines into the file ns-allinone-2.28/ns-2.28/tcl/lib/ns-default.tcl

    Agent/TCP/Fusion set openadd_ 1
    Agent/TCP/Fusion set current_BE_ 0
    Agent/TCP/Fusion set current_RE_ 0
    Agent/TCP/Fusion set unaccounted_ 0
    Agent/TCP/Fusion set fr_a_ 1
    Agent/TCP/Fusion set min_rtt_estimate 10000
    Agent/TCP/Fusion set myseqno_ 1
    Agent/TCP/Fusion set rtt_estimate 0
    Agent/TCP/Fusion set lastackno_ 0
    Agent/TCP/Fusion set lastackrx_ 0
    Agent/TCP/Fusion set fr_alpha_ 0.9
    Agent/TCP/Fusion set tau_ 1.0
    Agent/TCP/Fusion set west_type_ 3.0
    Agent/TCP/Fusion set qest_ 0.0
    Agent/TCP/Fusion set fr_amin_ 0.0
    Agent/TCP/Fusion set fr_amax_ 0.0
    Agent/TCP/Fusion set total_time_ 0.0
    Agent/TCP/Fusion set total_size_ 0.0
    Agent/TCP/Fusion set interp_type_ 0.0
    Agent/TCP/Fusion set fr_prev_ 1.0
    Agent/TCP/Fusion set last_seq_ 0
    Agent/TCP/Fusion set last_echoed_ts_ 0.0
    Agent/TCP/Fusion set last_ts_ 0.0
    Agent/TCP/Fusion set last_cwnd_ 1.0
    Agent/TCP/Fusion set current_ts_ 0.0
    Agent/TCP/Fusion set current_echoed_ts_ 0.0
    Agent/TCP/Fusion set newreno_changes_ 0
    Agent/TCP/Fusion set newreno_changes1_ 1
    Agent/TCP/Fusion set partial_window_deflation_ 1
    Agent/TCP/Fusion set exit_recovery_fix_ 0
    Agent/TCP/Fusion set last_BE_sample_ 0
    Agent/TCP/Fusion set last_RE_sample_ 0
    Agent/TCP/Fusion set reno_cwnd 0
    Agent/TCP/Fusion set RTTmax 0.05
    Agent/TCP/Fusion set Rmax 0
    Agent/TCP/Fusion set dwnd_ 0
    Agent/TCP/Fusion set Dmin 1
    Agent/TCP/Fusion set Sfactor 12
  • Recompile Ns2 (make, or make clean and then make)

Simulation settings

This module has also supported TCP-Adaptive Reno and Compound TCP.

 

wnd_option_

protocol

0

TCP-Fusion

1

TCP-Adaptive Reno

2

Compound TCP

Sample script

fusion-ex.tcl
th.awk

Usage: ns fusion-ex.tcl <wnd_option_> <error rate>

When you actually use TCP-Fusion protocol in the network with 0.0001 loss rate,

# ns fusion-ex.tcl 0 0.0001

 




Linux modules (implementation)  

Linux code

tcp_fusion.c

Installation instructions

  • Configure Kernel
  • Add the modules above to the linux-2.6.**/net/ipv4/ directory.

  • Add the following lines into the linux-2.6.**/net/ipv4/Kconfig


...
config TCP_CONG_FUSION
        tristate "TCP Fusion"
        depends on EXPERIMENTAL
        default n
...

  • Add the following lines into the linux-2.6.**/net/ipv4/Makefile


...
obj-$(CONFIG_TCP_CONG_FUSION) += tcp_fusion.o
...

  • " make menuconfig " to configure the kernel. To enable advanced protocols, do the following step.


# Networking options
   ...
   * [*] TCP: advanced congestion control (NEW)
         o TCP congestion control
               + [*] TCP Fusion (NEW)
   ...
  • Compile and Install Kernel
  • "make"

  • "make modules_install"

  • "make install"

  • Reboot


  • Kernel Parameters
  • Tune Kernel parameters for high-speed networks (< 1Gbps)


# increase TCP max buffer size
  sysctl -w net.core.rmem_max=41943040
  sysctl -w net.core.wmem_max=41943040
# increase Linux autotuning TCP buffer limits min, default, and max number of bytes to use
  sysctl -w net.ipv4.tcp_rmem="4096 10485760 20971520"
  sysctl -w net.ipv4.tcp_wmem="4096 10485760 20971520"
  
  sysctl -w net.ipv4.tcp_mem="4096 10485760 20971520"
  ifconfig eth0 txqueuelen 4000

  • The congestion control algorithm used is set using the sysctl variable net.ipv4.tcp_congestion_control. To set TCP-Fusion, do the following


sysctl -w net.ipv4.tcp_congestion_control=fusion


MATLAB modules (performance analysis)

MATLAB code

GCOM001.m : Performance analysis of single flow model. This code is used to create Figure 7(a) in Globecom 2008 paper.

GCOM002.m : Performance analysis of two flow model. This code is used to create Figure 7(b) in Globecom 2008 paper.

GCOM003.m : Response function of hybrid congestion control. This code is used to create Figure 9 in Globecom 2008 paper.



Contact:

Mail to fusion@katto.comm.waseda.ac.jp