TCPTuner is a kernel module with a userspace GUI to control TCP congestion using different parameters. It is the result of a research by Kevin Miller and Luke W. Hsiao from Stanford University. The congestion control parameters exposed can fine-tune the TCP CUBIC algorithm, currently used in the Linux kernel.
The tool provides access to alpha, the rate at which a sender’s congestion window grows; beta, the multiplicative factor to decrease the congestion window on a loss event; as well as CUBIC’s fast convergence and tcp friendliness parameters. Additionally, the interface provides access to ip-route parameters for the minimum retransmission time and initial congestion window size. In this paper, we describe the implementation of TCPTuner and show experimental data of the effects of adjusting congestion control parameters. – as the project brief explains.
Clone the GitHub project, compile the kernel module and the GUI:
$ git clone https://github.com/Gasparila/TCPTuner // kernel module $ cd TCPTuner/module $ make $ sudo insmod tcp_tuner.ko $ sudo sysctl -w net.ipv4.tcp_congestion_control=tuner // GUI $ sudo apt-get install qt5-qmake qt5-default $ cd ../gui/TCPTuner $ qmake $ make $ sudo ./TCPTuner
Note that the repository also includes the MahiMahi simulation environment to see the impact of any control parameters change.
The following TCP CUBIC params can be tuned from the GUI:
- alpha: Scales W_max, which adjusts the rate at which cwnd grows after a loss event (default 512)
- beta: beta for multiplicative decrease (default 717)
- fast_convergence: turn on/off fast convergence (default 1)
- tcp_friendliness: turn on/off tcp friendliness (default 1)
- rto_min: the minimum TCP retransmission timeout to use when communicating with this destination. (default None)
- initcwnd: the initial congestion window size for connections to this destination. Actual window size is this value multiplied by MSS. (default 0)
On GitHub: TCPTuner