summaryrefslogtreecommitdiff
path: root/opendc-experiments
AgeCommit message (Collapse)Author
2022-11-13refactor: Replace use of CoroutineContext by DispatcherFabian Mastenbroek
This change replaces the use of `CoroutineContext` for passing the `SimulationDispatcher` across the different modules of OpenDC by the lightweight `Dispatcher` interface of the OpenDC common module.
2022-11-13refactor(sim/core): Re-implement SimulationScheduler as DispatcherFabian Mastenbroek
This change updates the `SimulationScheduler` class to implement the `Dispatcher` interface from the OpenDC Common module, so that OpenDC modules only need to depend on the common module for dispatching future task (possibly in simulation).
2022-11-13refactor: Use InstantSource as time sourceFabian Mastenbroek
This change updates the modules of OpenDC to always accept the `InstantSource` interface as source of time. Previously we used `java.time.Clock`, but this class is bound to a time zone which does not make sense for our use-cases. Since `java.time.Clock` implements `java.time.InstantSource`, it can be used in places that require an `InstantSource` as parameter. Conversion from `InstantSource` to `Clock` is also possible by invoking `InstantSource#withZone`.
2022-11-04refactor: Use RandomGenerator as randomness sourceFabian Mastenbroek
This change updates the modules of OpenDC to always accept the `RandomGenerator` interface as source of randomness. This interface is implemented by the slower `java.util.Random` class, but also by the faster `java.util.SplittableRandom` class
2022-10-31feat(sim/compute): Add support for snapshotting workloadsFabian Mastenbroek
This change updates the interface of `SimWorkload` to support snapshotting workloads. We introduce a new method `snapshot()` to this interface which returns a new `SimWorkload` that can be started at a later point in time and on another `SimMachine`, which continues progress from the moment the workload was snapshotted.
2022-10-28feat(compute/sim): Model host boot timeFabian Mastenbroek
This change updates `SimHost` to support modeling the time and resource consumption it takes to boot the host. The boot procedure is modeled as a `SimWorkload`.
2022-10-28refactor(compute/sim): Use workload chaining for boot delayFabian Mastenbroek
This change updates the implementation of `SimHost` to use workload chaining for modelling boot delays. Previously, this was implemented by sleeping 1 millisecond using Kotlin coroutines. With this change, we remove the need for coroutines and instead use the `SimDurationWorkload` to model the boot delay. In the future, we envision a user-supplied stochastic boot model to model the boot delay for VM instances.
2022-10-28refactor(sim/compute): Provide workload constructors in SimWorkloadsFabian Mastenbroek
This change introduces a new class SimWorkloads which provides construction methods for the standard workloads available in OpenDC.
2022-10-21fix: Add log4j-core dependencyFabian Mastenbroek
This change adds the log4j-core dependency to various modules of OpenDC using log4j2, to ensure logging keeps working. The upgrade to SLF4J 2.0 broke the Log4j2 functionality, since the log4j-core artifact is not automatically shipped with the SLF4J implementation.
2022-10-21refactor(sim/compute): Re-implement using flow2Fabian Mastenbroek
This change re-implements the OpenDC compute simulator framework using the new flow2 framework for modelling multi-edge flow networks. The re-implementation is written in Java and focusses on performance and clean API surface.
2022-10-10fix(compute/service): Expose number of registered serversFabian Mastenbroek
This change updates the compute service telemetry to also expose the number of servers that are registered with the service.
2022-10-06build: Switch to Spotless for formattingFabian Mastenbroek
This change updates the build configuration to use Spotless for code formating of both Kotlin and Java.
2022-10-06style: Eliminate use of wildcard importsFabian Mastenbroek
This change updates the repository to remove the use of wildcard imports everywhere. Wildcard imports are not allowed by default by Ktlint as well as Google's Java style guide.
2022-10-05refactor(sim/core): Rename runBlockingSimulation to runSimulationFabian Mastenbroek
This change renames the method `runBlockingSimulation` to `runSimulation` to put more emphasis on the simulation part of the method. The blocking part is not that important, but this behavior is still described in the method documentation.
2022-10-05refactor(sim/core): Use SimulationScheduler in coroutine dispatcherFabian Mastenbroek
This change updates the implementation of `SimulationDispatcher` to use a (possibly user-provided) `SimulationScheduler` for managing the execution of the simulation and future tasks.
2022-10-03refactor(exp/compute): Remove Topology interfaceFabian Mastenbroek
This change removes the Topology interface from the `opendc-experiments-compute` module, which was meant for provisioning the experimental topology. Howerver, with the stateless `HostSpec` class, it is not needed to resolve the topology everytime.
2022-10-03refactor(exp/compute): Integrate compute workload classesFabian Mastenbroek
This change integrates the classes from the old `opendc-compute-workload` module into the `opendc-experiments-compute` module. This new module contains helper classes for setting up experiments with the OpenDC compute service.
2022-10-03refactor(exp/capelin): Use experiment base for Capelin experimentsFabian Mastenbroek
This change updates the Capelin experiments to use the new `opendc-experiments-base` module for setting up the experimental environment and simulate the workloads.
2022-10-03feat(exp/faas): Add provisioners for FaaS serviceFabian Mastenbroek
This change adds a new module `opendc-experiments-faas` that provides provisioner implementations for experiments to use for setting up the FaaS service of OpenDC.
2022-10-03feat(exp/workflow): Add provisioning step for workflow serviceFabian Mastenbroek
This change adds a new module `opendc-experiments-workflow` that provides provisioner implementations for experiments to use for setting up and using the workflow engine in OpenDC.
2022-10-03feat(exp/compute): Add provisioners for compute serviceFabian Mastenbroek
This change adds a new module `opendc-experiments-compute` that provides provisioner implementations for experiments to use for setting up the compute service of OpenDC and provisioning (simulated) hosts.
2022-10-03feat(exp/base): Add provisioning tool for experimentsFabian Mastenbroek
This change adds to the experiment base in OpenDC a provisioning tool to help setup the experimental environment in a reproducible manner. The experimental environment can be defined in terms of *provisioning steps* which manage the allocation, configuration, and clean-up of all resources necessary for the experiments. The provisioning steps are executed sequentially, so in case of dependencies, the steps need to be ordered correctly.
2022-09-28feat(exp/base): Add service registry for cloud servicesFabian Mastenbroek
This change adds a new module called opendc-experiments-base which will provide a base for doing experiments with OpenDC. The initial feature we introduce is the service registry which acts as DNS for services to register during experimentation.
2022-09-23refactor(compute): Provide access to instances in compute serviceFabian Mastenbroek
This change updates the interface of `ComputeService` to provide access to the instances (servers) that have been registered with the compute service. This allows metric collectors to query the metrics of the servers that are currently running.
2022-09-22refactor(compute): Pass failure model during workload evaluationFabian Mastenbroek
This change updates the `ComputeServiceHelper` class to provide the failure model via a parameter to the `run` method instead of constructor parameter. This separates the construction of the topology from the simulation of the workload.
2022-09-22refactor(sim/compute): Make interference domain independent of profileFabian Mastenbroek
This change updates the virtual machine performance interference model so that the interference domain can be constructed independently of the interference profile. As a consequence, the construction of the topology now does not depend anymore on the interference profile.
2022-09-22refactor(sim/compute): Extract Random dependency from interference modelFabian Mastenbroek
This change moves the Random dependency outside the interference model, to allow the interference model to be completely immutable and passable between different simulations.
2022-09-21refactor(sim/compute): Move VM interference model into compute simulatorFabian Mastenbroek
This change moves the core of the VM interference model from the flow module into the compute simulator. This logic can be contained in the compute simulator and does not need to leak into the flow-level simulator.
2022-06-15fix(sim/compute): Always recompute power usageFabian Mastenbroek
This change fixes an issue in the `SimBareMetalMachine` implementation where the power usage was only updated after a non-zero duration. However, this would mean that OpenDC would possibly report incorrect power usage values when multiple convergence calls occured at the same timestamp.
2022-06-15fix(exp/tf20): Derive device statistics directly from SimMachineFabian Mastenbroek
This change updates the implementation of SimTFDevice to directly use the metrics provided by the `SimBareMetalMachine` class, instead of computing these metrics itself.
2022-05-06refactor(exp/capelin): Add independent Capelin distributionFabian Mastenbroek
This change updates the Capelin experiments so it can be distributed and executed independently of the main OpenDC distribution. We provide a new command line interface for users to directly run the experiments. Alternatively, the `CapelinRunner` class encapsulates the logic for running the experiments and can be used programmatically.
2022-05-06refactor(exp/tf20): Convert experiment into integration testFabian Mastenbroek
This change removes the `TensorFlowExperiment` in favour of an integration test that can be run during CI invocations. Given that the experiment was not very sophisticated (in terms of data collection), we believe it is better suited as an integration test.
2022-05-06fix(exp/tf20): Fix infinite loop due to invalid roundingFabian Mastenbroek
This change fixes an issue with the `SimTFDevice` implementation where very small amounts of FLOPs would cause the device to enter an infinite loop. We now round the value up to ensure that the device always consumes FLOPs.
2022-05-06feat(faas): Add helper tools for FaaS simulationsFabian Mastenbroek
This change adds a new module, opendc-faas-workload that contains helper code for constructing simulations of FaaS-based workloads using OpenDC. In addition, we add an integration test that demonstrates the capabilities of the helper tool and the FaaS platform of OpenDC.
2022-05-06refactor(exp/tf20): Remove OpenTelemetry from TF20 experimentFabian Mastenbroek
This change removes the OpenTelemetry integration from the OpenDC Tensorflow 2020 experiments. Previously, we chose to integrate OpenTelemetry to provide a unified way to report metrics to the users. See the previous commit removing it from the "Compute" modules for the reasoning behind this change.
2022-05-06refactor(workflow/service): Remove OpenTelemetry from "FaaS" modulesFabian Mastenbroek
This change removes the OpenTelemetry integration from the OpenDC FaaS modules. Previously, we chose to integrate OpenTelemetry to provide a unified way to report metrics to the users. See the previous commit removing it from the "Compute" modules for the reasoning behind this change.
2022-05-06refactor(compute/service): Remove OpenTelemetry from "compute" modulesFabian Mastenbroek
This change removes the OpenTelemetry integration from the OpenDC Compute modules. Previously, we chose to integrate OpenTelemetry to provide a unified way to report metrics to the users. Although this worked as expected, the overhead of the OpenTelemetry when collecting metrics during simulation was considerable and lacked more optimization opportunities (other than providing a separate API implementation). Furthermore, since we were tied to OpenTelemetry's SDK implementation, we experienced issues with throttling and registering multiple instruments. We will instead use another approach, where we expose the core metrics in OpenDC via specialized interfaces (see the commits before) such that access is fast and can be done without having to interface with OpenTelemetry. In addition, we will provide an adapter to that is able to forward these metrics to OpenTelemetry implementations, so we can still integrate with the wider ecosystem.
2022-05-06refactor(exp/tf20): Directly expose device stats stats to userFabian Mastenbroek
This change updates the `TFDevice` interface to directly expose statistics about the accelerator device to the user. Previously, the user had to access these values through OpenTelemetry, which required substantial extra work.
2022-05-06refactor(telemetry/compute): Support direct metric accessFabian Mastenbroek
This change introduces a `ComputeMetricReader` class that can be used as a replacement for the `CoroutineMetricReader` class when reading metrics from the Compute service. This implementation operates directly on a `ComputeService` instance, providing better performance.
2022-04-24build: Move modules into subgroupsFabian Mastenbroek
This change updates the Gradle build configuration of the project to publish the different type of modules (e.g., opendc-compute, opendc-simulator) into their own groups.
2022-04-23build: Enable testing for all library modulesFabian Mastenbroek
This change updates the Gradle build configuration to ensure that all library modules (that will be published) use testing and are included in coverage reports. This should ensure the public modules remain well tested.
2022-04-22refactor(compute): Load interference model via trace libraryFabian Mastenbroek
This change updates the compute support library to load the VM interference model via the OpenDC trace library, which provides a generic interface for reading interference models associated with workload traces.
2022-02-18refactor(simulator): Remove delta parameter from flow callbacksFabian Mastenbroek
This change removes the delta parameter from the callbacks of the flow framework. This parameter was used to indicate the duration in time between the last call and the current call. However, its usefulness was limited since the actual delta values needed by implementors of this method had to be bridged across different flow callbacks.
2022-02-18fix(simulator): Flush results before accessing countersFabian Mastenbroek
This change updates the simulator implementation to flush the active progress when accessing the hypervisor counters. Previously, if the counters were accessed, while the mux or consumer was in progress, its counter values were not accurate.
2022-02-18build: Remove opendc-platform moduleFabian Mastenbroek
This change removes the opendc-platform module from the project. This module represented a Java platform which was previously used for sharing a set of dependency versions between subprojects. However, with the version catalogue that was added by Gradle, we currently do not use the platform anymore.
2022-02-18perf(common): Optimize TimerSchedulerFabian Mastenbroek
This change updates the TimerScheduler implementation to directly use the Delay object instead of running the timers inside a coroutine. Constructing the coroutine is more expensive, so we prefer running in a Runnable.
2022-02-18refactor(utils): Rename utils module to common moduleFabian Mastenbroek
This change adds a new module, opendc-common, that contains functionality that is shared across OpenDC's modules. We move the existing utils module into this new module.
2022-02-15refactor: Update OpenTelemetry to version 1.11Fabian Mastenbroek
This change updates the OpenDC codebase to use OpenTelemetry v1.11, which stabilizes the metrics API. This stabilization brings quite a few breaking changes, so significant changes are necessary inside the OpenDC codebase.
2021-11-16feat(workflow): Add helper tools for workflow simulationsFabian Mastenbroek
This change adds a new module, opendc-workflow-workload that contains helper code for constructing workflow simulations using OpenDC.
2021-11-02refactor(trace): Support gaps in trace dataFabian Mastenbroek
This change updates the implementation of the trace converter and SimTrace implementation to support cases where there is a gap between samples in the trace data. This change allows users to specify what to do in case samples are missing in the trace. The available options are specified in `SimTrace.FillMode`. Currently, we support either carrying the previous value forward or set the usage to zero.