ns3-dcn is a project for implementing and evaluating data-center algorithms in ns-3. As a derivative of ns-3, it is free, licensed under the GNU GPLv2 license, and is publicly available for research, development, and use.
ns3-dcn aims to provide an unified and standard benchmark platform for data-center research. It encourages the community contribution, and recommend all DCN researchers chose it as the benchmark for simulation.
Here is our project website ns3-dcn
[Our project is still undergoing, currently we are refactoring our code to make it meet the standard]
However, the real quick and dirty way to get started is to type the command
./waf configure --enable-examples
followed by
./waf
On recent Linux systems, once you have built ns-3 (with examples enabled), it should be easy to run the sample programs with the following command, such as:
./waf --run DCTCP
or you can add some parameters.
./waf --run DCTCP --writeForPlot=1 --writePcap=1
- You can find the example code in
./examples/dcn
, every algorithm has an independent directory. The available algorithms are listed below. - We offer an readme for each algorithm, in the readme, you can find where is the implementation code and how to use the code.
- [IMPORTANT!] While you are free to use the code1, you need to cite the related work in your paper2. Since we want to bulid a community, this way can encourage the code contributors.
ns3-dcn aims to be a community work, and we are unable to estiablish a comprehensive and high quality platform just by us. Therefore, we hope everyone implement your algorithms by ns3 and join the platform. You paper can be easier to reproduce and used by other people. What's more, other people can implement their work with the code your provide, and your work can get more cites.
We heavily recommend you submit your code via Pull Request. We offer some example [to do] ####Submission standard Unlike the ns3 main project, we do not request strict code format and the test module. Our goal is, both friendly to users and developers.
-
Standard for implementation code
- Name for algorithm: you need to name you algorithm first, e.g. dctcp and pfabric, please use lowercases and numbers. If name clashes happens, please add addition information, e.g. author name, public year.
- Name for code file: when you write a model, please name it with your alg name and the function, for example, tcp-neno.cc -> tcp-dctcp.cc, red-queue-disc.cc -> dctcp-queue-disc.cc
- Keep independence with other implementations: Even if one module of your algorithm is very similar with others, please add a new file with your alg name, e.g. if the switch impl in my alg(name myalg) just need modify serval lines of dctcp-queue-disc.cc, please copy from dctcp-queue-disc.cc and add a new file named myalg-queue-disc.cc. In one word, Please add instead of modify.
- Whitelist of files that can be modified:In some cases, you have the modify the files, e,g, wscript, new packet tag class defined in socket.h. Here, we offer the whitelist in
./utils/dcn/whitelist.txt
-
Standard for example code and documents
- You need to create a new directory at
./example/dcn/
, named with your algorithm name. - Please create an example in your directory. You can use any code style and setting.
- Please add an readme in your directory, which contains:1) source code location. 2) basic usage of you algorithm. 3) code refence: if your implementation is based on others' code, please write down the names.
- You need to create a new directory at
-
Standard for validation [to do]
- google group
Name | Paper | Come from | Public Year |
---|---|---|---|
dctcp | Data Center TCP (DCTCP) | SIGCOMM | 2010 |
Footnotes
-
Here, directly use the code as the benchmark or implement you algorithm based on the code all means "use the code" ↩
-
Here, “the related” is inheritable, for example, if you use the code of paper A, meanwhile paper A use the code of paper B, you need to cite both paper A and paper B. For your convience, we write a script in
./utils/dcn/gen_refence.sh
, you can generate all the referenced papers you need in one shot. ↩