CoflowSim is a flow-level simulator to compare various coflow scheduling heurisitcs against traditional per-flow scheduling techniques.
The entire project (CoflowSim and the actual implementation Varys) is still in closed beta stage. The master branch is in version 0.2.0-SNAPSHOT.
CoflowSim does not have any dependency on external library.
- You can compile from command line using Maven. Simply type
mvn package
from the root directory. - Import the project into Eclipse also works.
The main method of CoflowSim is in the coflowsim.CoflowSim
class, which takes and various inputs, creates appropriate scheduler, and performs the simulation.
Using the exec-maven
plugin:
mvn exec:java -Dexec.mainClass="coflowsim.CoflowSim" -Dexec.args="<arguments>"
From the command-line (assuming the jar to be in the target
directory):
java -cp target/coflowsim-*.jar coflowsim.CoflowSim <arguments>
The simulator can work in two modes, i.e., to optimize to objectives.
- Minimize coflow completion time (CCT)
- Meet deadline
It has multiple heuristics and algorithms implemented already. For clairvoyant coflow-based scheduling CoflowSim supports the following heuristics:
- FIFO: First-In-First-Out at the coflow level
- SCF: Shortest-Coflow-First
- NCF: Narrowest-Coflow First
- LCF: Lightest-Coflow-First
- SEBF: Smallest-Effective-Bottleneck-First / Smallest-Skew-First
CoflowSim also has a non-clairvoyant coflow-based scheduler that divides coflows into multiple logical queues based on how much they have already sent:
- DARK: FIFO within the queue, and for now, strict prioriries across queues.
For per-flow scheduling, CoflowSim supports:
- FAIR: Per-flow fair sharing
- PFP: Per-flow prioritization, i.e., SRTF for minimizing time and EDF(earliest-deadline-first) for meeting deadlines. Examples include PDQ and pFabric.
CoflowSim currently provides two TraceProducer
classes to generate/use workloads.
- CUSTOM (
CustomTraceProducer
) creates synthetic workload based on user-defined parameters. - COFLOW-BENCHMARK (
CoflowBenchmarkTraceProducer
) reads workloads based on traces from the filesystem. These workloads are part of the Coflow-Benchmark project that focuses on synthesizing coflow traces from real-world workloads.
You can take a quick look at the coflowsim.CoflowSim
class to know more about how to pass the aforementioned parameters to it.
The code itself is fairly documented with javadoc
, and you can run the mvn javadoc:javadoc
to generate the documentation.
Please submit an issue or a pull request to help us keep CoflowSim up-to-date. If you are using Eclipse, run your code through this project's code formatter before sending the pull request.
Please refer to/cite the following papers based on the scheduler you are using: the former for SEBF and the latter for DARK.
- Efficient Coflow Scheduling with Varys, Mosharaf Chowdhury, Yuan Zhong, Ion Stoica, ACM SIGCOMM, 2014.
- Efficient Coflow Scheduling Without Prior Knowledge, Mosharaf Chowdhury, Ion Stoica, ACM SIGCOMM, 2015.