Framework for TCP Prague simulations in ns-3

Student: Shravya K. S

Mentor: Mohit P. Tahiliani

Organization: The ns-3 Network Simulator Project
Project Overview

During GSoC 2017, I started developing a framework for simulating TCP Prague in the ns-3 network simulator. "TCP Prague" is a term used to refer to current research work on extending TCP (the dominant transport protocol in the Internet) to provide lower latency service in a wide-area network, similar to what can be achieved in data centers, but with a congestion control and in-network queuing elements that are backward compatible with legacy implementations. TCP Prague is targeted to be an evolution of Data Center TCP (DCTCP), and the research community is parallely implementing and standardising it.

DCTCP starves the throughput of other TCP flows (e.g., Reno, Cubic, etc) when they co-exist; so one of the goals of research community is to ensure that TCP Prague can co-exist with other TCP flows without degrading their throughput. Although still a work-in-progress, a few modules of TCP Prague have been finalised and briefly experimented by the research community, such as: the Low Latency, Low Loss, Scalable throughput (L4S) service architecture, DualQ Coupled Active Queue Management (AQM) and Modified ECN Semantics for Ultra Low Queuing Delay.

I developed a framework to simulate above mentioned TCP Prague modules in ns-3 with necessary examples, tests and documentation. This work is important to the ns-3 and research community, because this is a contemporary research topic and because network simulators are extensively used for performance evaluation. This report presents the details of the work done during GSoC 2017, and provides the necessary information to reproduce this work.

Deliverables

This project was split into three phases, and each phase has been completed with documentation, tests, and example programs, and is ready to be reviewed for merging to the ns-3 mainline. My patches integrate with ns-3-dev as of changeset 13050, and contain 7848 lines of new or changed C++ code.

assignment_turned_in

Phase 1
Implementation of Data Center TCP in ns-3

Implemented Data Center TCP (DCTCP) algorithm in ns-3 and documented its functionality. A test suite and an example program (aligned with the ACM SIGCOMM 2010 paper of DCTCP) are also provided.

assignment_turned_in

Phase 2
Topology Helpers for Data Center Networks in ns-3

Implemented BCube and Fat Tree topology helpers for Data Center Network simulations in ns-3, and documented their functionality. An example program for each helper with NetAnim support is also provided.

assignment_turned_in

Phase 3
DualQ Coupled AQM support in ns-3

Extended CoupledAQM support for PiSquare queue discipline and implemented DualQ Coupled PiSquare queue discipline. Example, test-suite and documentation are provided for both.

Steps to build the code for Phase 1
  1. Download ns-3-dev, checkout version 13050
  2. Download the 'raw' patch from the above link and save it (e.g., dctcp-raw.patch)
  3. Run the following patch command: patch -p1 -i dctcp-raw.patch
  4. Compile and run the example program: ./waf --run "dctcp-example"
  5. To run the test suite: ./test.py --suite=tcp-dctcp-test
Steps to build the code for Phase 2
  1. Download ns-3-dev, checkout version 13050
  2. Download the 'raw' patch from the above link and save it (e.g., topology-helper.patch)
  3. Run the following patch command: patch -p1 -i topology-helper.patch
  4. Compile and run the BCube example program: ./waf --run "bcube-animation"
  5. Compile and run the Fat-Tree example program: ./waf --run "fat-tree-animation"
Steps to build the code for Phase 3
  1. Download ns-3-dev, checkout version 13050
  2. Download the 'raw' patch from the above link and save it (e.g., aqm.patch)
  3. Run the following patch command: patch -p1 -i aqm.patch
  4. Compile and run the PiSquare example program ./waf --run "pi-square-example"
  5. Compile and run the PiSquareQueueDisc test-suite: ./test.py --suite=pi-square-queue-disc
  6. Compile and run the DualQCoupledPiSquare example program: ./waf --run "dual-q-coupled-pi-square-example"
  7. Compile and run the DualQCoupledPiSquare test-suite: ./test.py --suite=dual-q-coupled-pi-square-queue-disc
Possible Extensions

This project can be extended further as suggested below:

  1. DCTCP model currently works with RED queue discipline only. It could be extended to work with the basic PfifoFast queue discipline. PfifoFast does not support ECN marking yet, which is mandatory for the working of DCTCP.
  2. DualQ Coupled framework implemented in this project is specific to PiSquare queue discipline. It could be more generalised to support other queue disciplines like Curvy RED.
  3. DualQ implementation can be further optimised using integer arithmetic as described in the Internet draft of DualQ Coupled AQM.
Online References

More details about this project, source code and final patch are available on the links given below: