Science Score: 54.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: zenodo.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (18.6%) to scientific vocabulary
Last synced: 6 months ago · JSON representation ·

Repository

Basic Info
  • Host: GitHub
  • Owner: atlarge-research
  • License: mit
  • Language: Kotlin
  • Default Branch: master
  • Size: 29 MB
Statistics
  • Stars: 0
  • Watchers: 8
  • Forks: 0
  • Open Issues: 5
  • Releases: 0
Created about 2 years ago · Last pushed almost 2 years ago
Metadata Files
Readme Contributing License Citation

README.md

OpenDC logo

Evaluation of Datacenter Scheduler Programming Abstractions

This repository contains the evaluation code and experiments written in Kotlin for the research work that investigates the performance impact of various datacenter scheduler programming abstractions.

MIT License Documentation GitHub release Build

Prerequisites

  • An x86 machine with at least 16GB RAM.
  • Any desktop Linux distribution with build tools installed. For example, build-essential package on Ubuntu.
  • Java 17 or greater.
  • Python 3.11 (We recommend conda, virtualenv, or a similar environment).

Reproducibility instructions

  • Run ./download-traces.sh. This will download all required traces from Zenodo and copy them to the relevant directories for experiments.
  • Setup a python 3.11 virtual environment. Install dependencies using pip install -r plot/script/requirements.txt.
  • Use ./run-experiments.sh to run the simulations and plot the results.
  • Figure 7 in the paper is plot/output/migrations-results-packing-azure.pdf. Figure 8 is plot/output/migrations-results-totaltime-azure.pdf. Figure 10 is plot/output/metadata-results-ibm.pdf.

Getting Started

Detailed instructions to build individual experiments and modify them start here. The code for all the specific experiments can be found in the opendc-experiments/studying-apis directory of the repository. To run the experiments, make sure to place the relevant traces in the corresponding experiment folder within this directory. For example, an example trace bitbrains-small is provided in the traces directory for your reference.

Setup Traces

  1. Clone the repository to your local machine.
  2. Navigate to the opendc-experiments/studying-apis folder.
  3. Place the relevant traces for the experiment you want to run in the corresponding experiment folder.

Here are the steps for proper trace placing:

  1. Download the necessary traces from the following link: https://zenodo.org/record/7996316.
  2. Store the downloaded traces in the directory structure: opendc-experiments/studying-apis/<experiment>/src/main/resources/trace.
  3. Create a folder within the trace directory with a name corresponding to the source of the trace (e.g., google, azure, bitbrains).
  4. Place the trace Parquet file inside the respective source folder.
  5. Make sure to rename the trace file as meta.parquet when copying it.

These steps ensure that the traces are properly organized and available for the evaluation experiments using the OpenDC platform.

Compile and Run

  1. Open the terminal and navigate to the opendc project directory.
  2. Run the command ./gradlew :opendc-experiments:studying-apis:<experiment>:experiment to compile and run the desired experiment.

Plotting Experiment Results

To plot the experiment results, please follow these steps:

  1. Install the required Python packages by running the following command: pip install -r plot/script/requirements.txt

  2. Ensure that all the necessary files for plotting are located under the ./plot folder in the repository.

  3. Set up the trace data by copying the corresponding trace files to the ./plot/trace/<dataset> directory. Rename the trace file to meta.parquet. For example, if you are working with the Azure dataset, the path would be ./plot/trace/azure/meta.parquet.

  4. Prepare the input folder for the experiments you have run. Copy the experiment output to the path ./plot/input/<experiment>/<dataset>. To locate the output of the experiments, you can find them under the following directory structure: opendc-experiments/studying-apis//output/. Each experiment and dataset combination will have its own corresponding folder under the output directory. For instance, if you ran the migrations experiment using the Azure dataset, the path would be ./plot/input/migrations/azure.

  5. Choose one of the available scripts located in the ./plot/script directory based on the experiment type. The available scripts are:

    • migrations_plot_results.py
    • reservations_plot_results.py
    • metadata_plot_results.py
    • metadata_plot_preview.py
  6. Run the selected script with the desired dataset parameter. For example, to plot the results for the Azure dataset using the reservations experiment, run the following command: python3 ./plot/script/reservations_plot_results.py azure

  7. The generated plots and visualizations will be available in the ./plot/output/<experiment>/<dataset> directory.

Please note that the dataset parameter is mandatory when running the plotting script, as it determines which dataset the script will process.

Feel free to explore the generated plots and visualizations to analyze and interpret the experiment results.

That's it! You should now be able to plot your experiment results using the provided scripts and instructions.

OpenDC

The evaluation experiments are performed using OpenDC, an open-source data center simulation platform. OpenDC allows for accurate and realistic simulations of data center environments, enabling thorough evaluation and analysis of various scheduling APIs and their impact on performance.


OpenDC is a free and open-source platform for datacenter simulation aimed at both research and education.

Datacenter construction in OpenDC

Users can construct datacenters (see above) and define portfolios of scenarios (experiments) to see how these datacenters perform under different workloads and schedulers (see below).

Datacenter simulation in OpenDC

The simulator is accessible both as a ready-to-use website hosted by us at opendc.org, and as source code that users can run locally on their own machine, through Docker.

To learn more about OpenDC, have a look through our paper OpenDC 2.0 or on our vision.

🛠 OpenDC is a project by the @Large Research Group.

🐟 OpenDC comes bundled with Capelin , the capacity planning tool for cloud datacenters based on portfolios of what-if scenarios. More information on how to use and extend Capelin coming soon!

Documentation

The documentation is located in the docs/ directory and is divided as follows:

  1. Deployment Guide
  2. Architectural Overview
  3. Toolchain Setup
  4. Research with OpenDC
  5. Contributing Guide

Contributing

Questions, suggestions and contributions are welcome and appreciated! Please refer to the contributing guidelines for more details.

License

This work is distributed under the MIT license. See LICENSE.txt.

Owner

  • Name: @Large Research
  • Login: atlarge-research
  • Kind: organization
  • Email: info@atlarge-research.com

Massivizing Computer Systems

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use this software, please cite it as below."
title: "OpenDC"
authors:
- family-names: Mastenbroek
  given-names: Fabian
- family-names: Andreadis
  given-names: Georgios
- family-names: Jounaid
  given-names: Soufiane
- family-names: Lai
  given-names: Wenchen
- family-names: Burley
  given-names: Jacob
- family-names: Bosch
  given-names: Jaro
- family-names: van Eyk
  given-names: Erwin
- family-names: Versluis
  given-names: Laurens
- family-names: van Beek
  given-names: Vincent
- family-names: Iosup
  given-names: Alexandru
version: 2.0
preferred-citation:
  type: conference-paper
  title: "OpenDC 2.0: Convenient Modeling and Simulation of Emerging Technologies in Cloud Datacenters"
  collection-title: "21st IEEE/ACM International Symposium on Cluster, Cloud and Internet Computing, CCGrid 2021, Melbourne, Australia, May 10-13, 2021"
  collection-type: proceedings
  conference:
     name: "CCGrid 2021"
  publisher:
    name: "IEEE"
  doi: "10.1109/CCGrid51090.2021.00055"
  year: "2021"
  start: "455"
  end: "464"
  authors:
  - family-names: Mastenbroek
    given-names: Fabian
  - family-names: Andreadis
    given-names: Georgios
  - family-names: Jounaid
    given-names: Soufiane
  - family-names: Lai
    given-names: Wenchen
  - family-names: Burley
    given-names: Jacob
  - family-names: Bosch
    given-names: Jaro
  - family-names: van Eyk
    given-names: Erwin
  - family-names: Versluis
    given-names: Laurens
  - family-names: van Beek
    given-names: Vincent
  - family-names: Iosup
    given-names: Alexandru
  editors:
  - family-names: Lefèvre
    given-names: Laurent
  - family-names: Patterson
    given-names: Stacy
  - family-names: Lee
    given-names: Young Choon
  - family-names: Shen
    given-names: Haiying
  - family-names: Ilager
    given-names: Shashikant
  - family-names: Goudarzi
    given-names: Mohammad
  - family-names: Toosi
    given-names: Adel Nadjaran
  - family-names: Buyya
    given-names: Rajkumar

GitHub Events

Total
Last Year

Dependencies

.github/workflows/build.yml actions
  • actions/checkout v3 composite
  • actions/setup-java v3 composite
  • actions/upload-artifact v3 composite
  • codecov/codecov-action v3 composite
  • gradle/gradle-build-action v2 composite
  • gradle/wrapper-validation-action v1 composite
  • mikepenz/action-junit-report v3.0.1 composite
.github/workflows/deploy.yml actions
.github/workflows/publish.yml actions
  • docker/build-push-action v2 composite
  • docker/login-action v1 composite
.github/workflows/release.yml actions
  • actions/checkout v3 composite
  • actions/setup-java v3 composite
  • gradle/gradle-build-action v2 composite
  • gradle/wrapper-validation-action v1 composite
  • softprops/action-gh-release v1 composite
.github/workflows/test-gradle-rc.yml actions
  • actions/checkout v3 composite
  • actions/setup-java v3 composite
  • gradle/gradle-build-action v2 composite
.github/workflows/test-java-ea.yml actions
  • actions/checkout v3 composite
  • actions/setup-java v3 composite
  • gradle/gradle-build-action v2 composite
docker-compose.override.yml docker
  • dpage/pgadmin4 latest
docker-compose.prod.yml docker
docker-compose.yml docker
  • atlargeresearch/opendc v2.1
  • atlargeresearch/opendc-web-api v2.1
  • atlargeresearch/opendc-web-ui v2.1
  • postgres latest
opendc-web/opendc-web-api/Dockerfile docker
  • openjdk 17-slim build
opendc-web/opendc-web-runner/Dockerfile docker
  • openjdk 17-slim build
opendc-web/opendc-web-ui/Dockerfile docker
  • node 16 build
  • node 16-slim build
build.gradle.kts maven
buildSrc/build.gradle.kts maven
opendc-common/build.gradle.kts maven
opendc-compute/build.gradle.kts maven
opendc-compute/opendc-compute-api/build.gradle.kts maven
opendc-compute/opendc-compute-service/build.gradle.kts maven
opendc-compute/opendc-compute-simulator/build.gradle.kts maven
opendc-compute/opendc-compute-workload/build.gradle.kts maven
opendc-experiments/build.gradle.kts maven
opendc-experiments/opendc-experiments-capelin/build.gradle.kts maven
opendc-experiments/opendc-experiments-serverless20/build.gradle.kts maven
opendc-experiments/opendc-experiments-tf20/build.gradle.kts maven
  • org.jetbrains.kotlin:kotlin-reflect 1.6.10 implementation
opendc-experiments/studying-apis/metadata/build.gradle.kts maven
opendc-experiments/studying-apis/migrations/build.gradle.kts maven
opendc-experiments/studying-apis/reservations/build.gradle.kts maven
opendc-faas/build.gradle.kts maven
opendc-faas/opendc-faas-api/build.gradle.kts maven
opendc-faas/opendc-faas-service/build.gradle.kts maven
opendc-faas/opendc-faas-simulator/build.gradle.kts maven
opendc-harness/build.gradle.kts maven
opendc-harness/opendc-harness-api/build.gradle.kts maven
opendc-harness/opendc-harness-cli/build.gradle.kts maven
opendc-harness/opendc-harness-engine/build.gradle.kts maven
opendc-harness/opendc-harness-junit5/build.gradle.kts maven
opendc-simulator/build.gradle.kts maven
opendc-simulator/opendc-simulator-compute/build.gradle.kts maven
opendc-simulator/opendc-simulator-core/build.gradle.kts maven
opendc-simulator/opendc-simulator-flow/build.gradle.kts maven
opendc-simulator/opendc-simulator-network/build.gradle.kts maven
opendc-simulator/opendc-simulator-power/build.gradle.kts maven
opendc-telemetry/build.gradle.kts maven
opendc-telemetry/opendc-telemetry-api/build.gradle.kts maven
opendc-telemetry/opendc-telemetry-compute/build.gradle.kts maven
opendc-telemetry/opendc-telemetry-sdk/build.gradle.kts maven
opendc-trace/build.gradle.kts maven
opendc-trace/opendc-trace-api/build.gradle.kts maven
opendc-trace/opendc-trace-azure/build.gradle.kts maven
opendc-trace/opendc-trace-bitbrains/build.gradle.kts maven
opendc-trace/opendc-trace-gwf/build.gradle.kts maven
opendc-trace/opendc-trace-opendc/build.gradle.kts maven
opendc-trace/opendc-trace-parquet/build.gradle.kts maven
opendc-trace/opendc-trace-swf/build.gradle.kts maven
opendc-trace/opendc-trace-tools/build.gradle.kts maven
opendc-trace/opendc-trace-wfformat/build.gradle.kts maven
opendc-trace/opendc-trace-wtf/build.gradle.kts maven
opendc-web/build.gradle.kts maven
opendc-web/opendc-web-api/build.gradle.kts maven
opendc-web/opendc-web-client/build.gradle.kts maven
opendc-web/opendc-web-proto/build.gradle.kts maven
opendc-web/opendc-web-runner/build.gradle.kts maven
opendc-web/opendc-web-ui/build.gradle.kts maven
opendc-web/opendc-web-ui-quarkus/build.gradle.kts maven
opendc-web/opendc-web-ui-quarkus/deployment/build.gradle.kts maven
opendc-web/opendc-web-ui-quarkus/runtime/build.gradle.kts maven
opendc-workflow/build.gradle.kts maven
opendc-workflow/opendc-workflow-api/build.gradle.kts maven
opendc-workflow/opendc-workflow-service/build.gradle.kts maven
opendc-workflow/opendc-workflow-workload/build.gradle.kts maven
opendc-web/opendc-web-ui/package.json npm
  • eslint ^8.12.0 development
  • eslint-config-next ^12.1.4 development
  • @auth0/auth0-react ^1.7.0
  • @fortawesome/fontawesome-svg-core ^1.2.35
  • @fortawesome/free-brands-svg-icons ^5.15.3
  • @fortawesome/free-solid-svg-icons ^5.15.3
  • @fortawesome/react-fontawesome ^0.1.14
  • @patternfly/react-core ^4.198.19
  • @patternfly/react-icons ^4.49.19
  • @patternfly/react-table ^4.67.19
  • @sentry/react ^5.30.0
  • @sentry/tracing ^5.30.0
  • approximate-number ^2.1.0
  • classnames ^2.3.1
  • husky ^4.3.8
  • immer ^9.0.6
  • konva ^7.2.5
  • lint-staged ^10.5.4
  • mathjs ^7.6.0
  • next ^12.1.0
  • next-global-css ^1.3.0
  • normalizr ^3.6.1
  • prettier ^2.3.2
  • prop-types ^15.7.2
  • react ^17.0.2
  • react-dom ^17.0.2
  • react-hotkeys ^2.0.0
  • react-konva ^17.0.2-5
  • react-query ^3.22.0
  • react-redux ^7.2.5
  • recharts ^2.1.2
  • redux ^4.1.1
  • redux-logger ~3.0.6
  • redux-saga ~1.1.3
  • redux-thunk ~2.3.0
  • sass ^1.39.0
  • svgsaver ^0.9.0
  • use-resize-observer ^8.0.0
  • uuidv4 ^6.2.12
opendc-web/opendc-web-ui/yarn.lock npm
  • 457 dependencies
plot/script/requirements.txt pypi
  • Pillow ==9.2.0
  • Pygments ==2.13.0
  • black ==22.10.0
  • boto3 ==1.26.1
  • botocore ==1.29.1
  • click ==8.1.3
  • commonmark ==0.9.1
  • contourpy ==1.0.5
  • cycler ==0.11.0
  • darker ==1.5.1
  • fonttools ==4.37.3
  • jmespath ==1.0.1
  • kiwisolver ==1.4.4
  • matplotlib ==3.6.0
  • mypy-extensions ==0.4.3
  • numpy ==1.23.3
  • packaging ==21.3
  • pandas ==1.5.0
  • pathspec ==0.10.1
  • platformdirs ==2.5.2
  • pyarrow *
  • pyparsing ==3.0.9
  • python-dateutil ==2.8.2
  • pytz ==2022.2.1
  • rich ==12.6.0
  • s3transfer ==0.6.0
  • scipy ==1.10.0
  • seaborn ==0.12.0
  • setuptools-scm ==7.0.5
  • six ==1.16.0
  • toml ==0.10.2
  • tomli ==2.0.1
  • typer ==0.6.1
  • typing_extensions ==4.3.0
  • urllib3 ==1.26.12