Skip to content

SUSSdeveloper/SUSSprg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SUSS: Improving TCP Performance by Speeding Up Slow Start

Table of Contents

  1. Overview
  2. List of Modifications in the Linux Source Code
  3. Installation Guide
  4. Working with SUSS
  5. Contact Us
  6. References

Overview

Welcome to SUSS (Speeding Up Slow Start), an open-source project aimed at tackling the issue of bandwidth under-utilization during the TCP slow-start phase. Our lightweight sender-side add-on, compatible with CUBIC [1] and implemented in Linux kernel 5.19.10, focuses on reducing flow completion time (FCT), a vital performance metric for the Internet end-users [2]. With SUSS, users simply need to apply the changes to the Linux kernel's source code and recompile it for seamless integration. This README provides an installation guide and excerpts from our paper, SUSS: Improving TCP Performance by Speeding Up Slow-Start, published in SIGCOMM 2024. For a comprehensive understanding of SUSS, including its theoretical foundation and performance evaluation, please refer to the paper. We value community contributions and will share the contributing guidelines shortly. Join us in optimizing TCP connections for faster, more efficient data transfer.

List of Modifications in the Linux Source Code

SUSS introduces multiple modifications to the Linux TCP source code. We also added lines of code for logging and performance tracking, which can be removed in the final product. The original Linux files can be found in the sourceCode/linux-VER/orig directory, while the altered versions are stored in the sourceCode/linux-VER/suss directory within the project. These changes are as follows:

  • a) In the file tcp.h, SUSS defines a set of global variables within the struct tcp_sock.
  • b) The slow-start mechanism of CUBIC has been altered by SUSS in the file tcp_cubic.c.
  • c) SUSS has made a small modification to the file tcp_output.c to enable data transmission during the pacing period.
  • d) In the file tcp_input.c, which deals with incoming acknowledgments (ACKs), SUSS adds a few lines of code.
  • e) To assign a random ID for each test, a few lines of code have been added to the file tcp_cong.c.

You can identify SUSS's specific modifications in the Linux source code by searching for the "/* suss" comments in the files located in the sourceCode/linux-VER/suss directory.

Installation Guide

SUSS is currently implemented in Linux kernel 5.19.10 and 6.8.4. We recommend using a Debian-based Linux distribution: we have been using Ubuntu. Since SUSS is a server-side approach, no changes need to be applied at the client side. The simple installation process involves the following steps:

  1. Prepare a Linux server. We recommend Ubuntu Server 24.04 LTS; you can download the ISO file from here.

  2. Update the local package index and install necessary build tools:

    sudo apt-get update
    sudo apt-get install -y build-essential libncurses-dev libssl-dev make gcc gawk flex  \
     		   openssl dkms libelf-dev libudev-dev  libpci-dev libiberty-dev \
     		   bison autoconf llvm zstd dwarves
    
  3. Install the Linux source package from the repository, then navigate to the source directory and extract the files.

    sudo apt-get install linux-source-6.8.0=6.8.0-51.52
    cd /usr/src
    sudo tar -xvf linux-source-6.8.0.tar.bz2
    
  4. Copy the current kernel configuration file from the boot directory to the extracted directory, renaming it as .config. This step ensures that the existing kernel settings are preserved and used as a baseline for further configuration.

    cd /usr/src/linux-source-6.8.0/
    sudo cp /boot/config-$(uname -r) .config
    sudo make oldconfig
    
  5. Open the .config file located at /usr/src/linux-source-6.8.0 with a text editor and find keys of CONFIG_SYSTEM_TRUSTED_KEYS and CONFIG_SYSTEM_REVOCATION_KEYS and empty their values.

  6. Prior to compiling the kernel, download the sourceCode directory from the project and replace the corresponding files with the modified ones. In this example, run:

    sudo cp  sourceCode/linux-6.8/suss/tcp_cubic.c   /usr/src/linux-source-6.8.0/net/ipv4/tcp_cubic.c
    sudo cp  sourceCode/linux-6.8/suss/tcp_input.c   /usr/src/linux-source-6.8.0/net/ipv4/tcp_input.c
    sudo cp  sourceCode/linux-6.8/suss/tcp_output.c  /usr/src/linux-source-6.8.0/net/ipv4/tcp_output.c
    sudo cp  sourceCode/linux-6.8/suss/tcp_cong.c    /usr/src/linux-source-6.8.0/net/ipv4/tcp_cong.c
    sudo cp  sourceCode/linux-6.8/suss/tcp.h         /usr/src/linux-source-6.8.0/include/linux/tcp.h
    
  7. Compile the kernel:

    cd /usr/src/linux-source-6.8.0/
    sudo make -j $(nproc)
    


    The compilation process may take some time, depending on your system's hardware.

  8. After successful compilation, install the new kernel using:

    sudo make modules_install -j $(nproc)
    sudo make install
    


    This will install the kernel image, kernel modules, and update the bootloader configuration.

  9. Update GRUB Configuration:

    sudo update-grub
    
  10. After the installation and GRUB configuration update, reboot your system to use the newly compiled kernel:

   sudo reboot
   

If the server fails to boot with the new kernel, enter the BIOS settings and disable the Secure Boot option.

  1. To verify a successful installation, confirm that suss appears in the output of:
   ls /sys/module/tcp_cubic/parameters
   

Please note that the value of the module parameter suss indicates whether SUSS is enabled (1) or disabled (0).

Working with SUSS

Please see usageGuide.

Contact Us

For questions, feedback, or issues related to this project, feel free to reach out to Mahdi Arghavani via email: ma.arghavani[at]yahoo.com

References

  1. S. Ha, I. Rhee, and L. Xu, “CUBIC: a new TCP-friendly high-speed TCP variant,” ACM SIGOPS operating systems review, vol. 42, no. 5, pp. 64–74, 2008.
  2. N. Dukkipati and N. McKeown, “Why Flow-Completion Time is the Right Metric for Congestion Control,” ACM SIGCOMM Computer Communication Review, vol. 36, no. 1, pp. 59–63, 2006.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •