|David X. Wei||Prof. Pei Cao|
|Netlab @ Caltech||CS @ Stanford|
Revision 1 for parameter tunings: Sep 2007.
This is a patch that can run Linux TCP congestion control algorithms on NS2, with similar simulation speed and memory usages as other NS2 TCPs (e.g. Sack1). The implementation loosely follows the Linux TCP implementation, and can produce results comparable to Linux experimental results. The patch is for NS-2.31 and compatible with 2.29 and 2.30. You may need some modification if you want to install it for other versions.
The patch can be downloaded from here. It is for NS-2.31 and compatible with 2.29 and 2.30. To install the patch, you need to take the following steps, assuming you have successfully installed and run NS-2.31 in your computer:
The patch changes the following files:
The old patch for NS-2.29 with congestion control interface for Linux 2.6.13-2.6.20 kernels can be found here. (Linux changes its congestion control interface in 2.6.22.) This old version is no longer supported. However, bug fixes and patches from other contributors to this project will still be published.
This section serves as a quick reference for users who want to run different Linux TCP algorithms in the TCP Linux patch.
There is a mini-tutorial for TCP Linux . Please read the mini-tutorial for details if you want to design your own algorithms or port new algorithms from Linux to NS-2.
If you find some performance problem of some Linux algorithms, please check the known Linux bugs page to make sure it is really the problem of the algorithm, not a bug in Linux implementation.
The TCP-Linux module is call "Agent/TCP/Linux". If you have an
existing script that runs TCP and want to change to TCP-Linux, what you
need to do is:
||Congestion Control Algorithm
||cwnd dynamic of a single flow (RTT=128ms, BW=100Mbps, buffer=220pkt)
Increase Congestion control for TCP
TCP CUBIC: Binary Increase Congestion control for TCP v2.0 , an
extension of BIC-TCP
||Sally Floyd's High Speed
TCP (HS-TCP RFC 3649) congestion control
||Hamilton TCP (H-TCP) congestion control
Congestion control algorithm
Note that this "NewReno" also includes implementation of SACK and Fack.
||Tom Kelly's Scalable TCP
||TCP Vegas congestion
||TCP Low-Priority (TCP-LP)
|| TCP Illinois
||TCP Compound (C-TCP)
||(Last updated for 22.214.171.124 kernel.) Please be very careful about compound module as this module has been discontinued in the kernel code base since 2.6.17. It is here for research purpose only and the interface of this module might be out-dated for the latest kernel. We do try our best to keep the module's interface up-to-date. Extra care is still recommended for validating the results with this module. And please let us know if there is any problem.|
Add a command to change the global value of a parameter for all flows running a congestion control module:
Add a command to change the local value of a parameter for a particular flow running a congestion control module:
You can add your own congestion control module once you develop the module in Linux.
If you decide to do so, take the following steps:
You might encounter one of the following problems in the last step:
Here is a list of known problems:
The whole modules include four parts, corresponding to the four white blocks in the figure. Yellow blocks are from outside source codes such as NS-2 or Linux:
The patch can be downloaded from here. It is for NS-2.29. It is also confirmed to be compatible with NS-2.30. You may need some modification if you want to install it for other versions. To install the patch, you need to take the following steps, assuming you have successfully installed and run NS-2.29 in your computer:
The patch changes the following files:
The Linux+Dummynet experiments were carried out with WAN-in-Lab (WIL) facilities and greatly helped by Dr. Lachlan Andrew at Caltech.
The work is inspired and greatly helped by Prof. Pei Cao at Stanford and by Prof. Steven Low at Caltech. Many thanks to them!