Code Monkey home page Code Monkey logo

coflowsim's Introduction

CoflowSim README

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.

How to Compile

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.

How to Run

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>

Supported Modes and Scheduling Algorithms

The simulator can work in two modes, i.e., to optimize to objectives.

  1. Minimize coflow completion time (CCT)
  2. Meet deadline

It has multiple heuristics and algorithms implemented already. For clairvoyant coflow-based scheduling CoflowSim supports the following heuristics:

  1. FIFO: First-In-First-Out at the coflow level
  2. SCF: Shortest-Coflow-First
  3. NCF: Narrowest-Coflow First
  4. LCF: Lightest-Coflow-First
  5. 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:

  1. DARK: FIFO within the queue, and for now, strict prioriries across queues.

For per-flow scheduling, CoflowSim supports:

  1. FAIR: Per-flow fair sharing
  2. PFP: Per-flow prioritization, i.e., SRTF for minimizing time and EDF(earliest-deadline-first) for meeting deadlines. Examples include PDQ and pFabric.

Workloads

CoflowSim currently provides two TraceProducer classes to generate/use workloads.

  1. CUSTOM (CustomTraceProducer) creates synthetic workload based on user-defined parameters.
  2. 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.

Documentation

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.

Contribute

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.

References

Please refer to/cite the following papers based on the scheduler you are using: the former for SEBF and the latter for DARK.

  1. Efficient Coflow Scheduling with Varys, Mosharaf Chowdhury, Yuan Zhong, Ion Stoica, ACM SIGCOMM, 2014.
  2. Efficient Coflow Scheduling Without Prior Knowledge, Mosharaf Chowdhury, Ion Stoica, ACM SIGCOMM, 2015.

coflowsim's People

Contributors

mosharaf avatar ajajoo avatar hypnotised1 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.