This repo includes the ns3 simulation environment for testing various congestion control in a typical 2-tier leaf-spine topologies. Currently, it contains the configuration for TIMELY, pFabric, DCTCP and TCP Reno. The code is intentionally developed in modules so that it can be extended with further congestion control schemes in the future. It has been tested with NS-3.33 and NS-3.35, but it should work with other versions as well.
- ns-allinone-3.35 It contains the latest tested version of ns3 simulator. The simulation code is developed in modules, therefore it should also work with other versions as well. I put this directory here for the sake of simplicity in installation.
- pfabric It contains the implementation for a pFabric switching device
- timely It contains the implementation of Timely congestion control over UDP. For simplicity, it has two sender and receiver components. This directory also contains the Timely headers.
- simulation This is the main directory to start the simulations. The contains the code necessary to build the data center topology, together with the flow-generator and the distribution for RPC's lengths.
- traces Finally, this directory keeps track of the simulation results.
Here I show the commands required to install the ns3 within this repo. If you are willing to use an external code base, the steps should be similar.
git clone [email protected]:usi-systems/cc.git
cd cc/ns-allinone-3.35/ns-3.35/
./waf configure #<-d optimized> for faster execuation
./waf build # it takes a while
./waf --run "scratch/tcp-leafspine.cc --sType=X" # X=3:pFabric, 4:TCP, 5:DCTCP
./waf --run "scratch/timely-leafspine.cc " # Timely
You can fully configure your simulation using command line arugments or some other global variables in the code. Below you may find a few of them. For more, please check the code.
option | Type | Description | Plausible Values |
---|---|---|---|
--distro | Command-Line | The distribution file to generate RPCs from | "Facebook_HadoopDist_All.txt" |
--interval | Command-Line | The mean value for the pausing time between two sequential RPCs. The pausing time follows an exponential distribution | "Facebook_HadoopDist_All.txt" |
--TimelyThLow | Command-Line | Timely lower threshold | "70us" |
--TimelyThHigh | Command-Line | Timely higher threshold | "170us" |
- There is no PFC implementation.
For technical questions, please create an issue in this repo, so other people can benefit from your questions.
For other questions, please contact Ali ([email protected]).