| Age | Commit message (Collapse) | Author |
|
This change updates the project structure to become flattened.
Previously, the simulator, frontend and API each lived into their own
directory.
With this change, all modules of the project live in the top-level
directory of the repository. This should improve discoverability of
modules of the project.
|
|
This change adds a power model for optimizing the mean squared error
to the available power models in OpenDC.
|
|
This change introduces the SimulationCoroutineDispatcher implementation which replaces the TestCoroutineDispatcher for running single-threaded simulations.
|
|
This change migrates the remainder of the codebase to the
SimulationCoroutineDispatcher implementation.
|
|
This change introduces the SimulationCoroutineDispatcher implementation
which replaces the TestCoroutineDispatcher for running single-threaded
simulations.
Previously, we used the TestCoroutineDispatcher from the
kotlinx-coroutines-test modules for running simulations. However, this
module is aimed at coroutine tests and not at simulations.
In particular, having to construct a Clock object each time for the
TestCoroutineDispatcher caused a lot of unnecessary lines. With the new
approach, the SimulationCoroutineDispatcher automatically exposes a
usable Clock object.
In addition to ergonomic benefits, the SimulationCoroutineDispatcher is
much faster than the TestCoroutineDispatcher due to the assumption that
simulations run in only a single thread. As a result, the dispatcher
does not need to perform synchronization and can use the fast
PriorityQueue implementation.
|
|
This change fixes and issue where a SimWorkload was being re-used across
simulation runs. Given that SimWorkload is stateless, this may cause
strange issues.
|
|
This change adds the asymptotic power model that is used in GreenCloud
to the available power models in OpenDC.
|
|
This pull request implements the filter scheduler modeled after the scheduler
from [OpenStack](https://docs.openstack.org/nova/latest/user/filter-scheduler.html).
The scheduler is functionally equivalent to the old allocation policies, but is more
flexible and allows policies to be combined.
* A new interface, `ComputeScheduler` is introduced, which is used by the
`ComputeServiceImpl` to pick hosts to schedule on.
* `FilterScheduler` is implemented, which works by filtering and weighing the available hosts.
**Breaking API Changes**
* Removal of the `AllocationPolicy` interface and its implementations.
Users should migrate to the filter scheduler which offers the same functionality and more.
|
|
|
|
This change adds an experiments testing the OpenDC Serverless module.
|
|
This change adds the trace reader for the serverless experiments as
described in #48.
|
|
This change migrates the OpenDC codebase to use the new FilterScheduler
for scheduling virtual machines. This removes the old allocation
policies as well.
|
|
This change adds an experiment for the OpenDC Energy project, which
tests various energy models that have been implemented in OpenDC.
|
|
This change fixes an issue in the metric exporter for summary metrics,
where instead of some average value, the sum value was reported.
|
|
This change fixes an issue in SimTraceWorkload where the CPU usage was
not divided across the cores, but was instead requested for all cores.
|
|
This change simplifies the way metrics are reported to the monitor.
Previously, power draw was collected separately from the other metrics.
However, with the migration to OpenTelemetry, we collect all metrics
every 5 minutes, which drastically simplifies the metric gathering
logic.
|
|
This change removes the StateFlow speed property on the
SimResourceSource, as the overhead of emitting changes to the StateFlow
is too high in a single-thread context. Our new approach is to use
direct callbacks and counters.
|
|
This change adds a model implementing Dynamic Voltage Frequency Scaling
(DVFS) to OpenDC.
|
|
This change updates the compute service simulator to use OpenTelemetry
for reporting metrics of the (simulated) hosts as opposed to using
custom event flows.
This approach is more generic, flexible and possibly offers better
performance as we can collect metrics of all services in a single sweep,
as opposed to listening to several services and each invoking the
handlers.
|
|
This change integrates the OpenTelemetry Metrics API in the OpenDC
Workflow Service implementation. This replaces the old infrastructure for
gathering metrics.
|
|
This change integrates the OpenTelemetry Metrics API in the OpenDC
Compute Service implementation. This replaces the old infrastructure for
gathering metrics.
|
|
This change removes the dependency on the event tracer in
`opendc-trace`, since we are in the process of migrating OpenDC to
use OpenTelemetry for distributed tracing and metrics.
|
|
This change changes the compute service and users of the compute service
to not rely on the internals of `ComputeServiceImpl` and instead use its
public API.
|
|
This change adds a test suite for the OpenDC compute service.
|
|
This change moves the power models from the `opendc-compute-simulator`
to the `opendc-simulator-compute` module, since it better fits the scope
of the models and allows them to be re-used for other purposes.
|
|
This change removes the generic resource constraint (e.g., SimResource)
and replaces it by a simple capacity property. In the future, users
should handle the resource properties on a higher level.
This change simplifies compositions of consumers and providers by not
requiring a translation from resource to capacity.
|
|
This change changes the consumer and context interfaces to expose the
provider capacity and remaining work via the context instance as opposed
to only via the callback. This simplifies aggregation of resources.
|
|
This change re-designs the SimResourceConsumer interface to support in
the future capacity negotiation. This basically means that the consumer
will be informed directly when not enough capacity is available, instead
of after the deadline specified by the consumer.
|
|
This change moves the hypervisor implementations to the
opendc-simulator-resources module and makes them generic to the resource
type that is being used (e.g., CPU, disk or networking).
|
|
|
|
|
|
|
|
This change removes the opendc-core module. This module was an artifact
of the old codebase and remained mostly unused. This change removes all
usages of the module and if necessary introduces replacement classes.
|
|
This change removes the usage of bare-metal provisioning from the OpenDC
Compute module. This significantly simplifies the experiment setup.
|
|
This change moves the bare-metal provisioning packages outside the
compute module since these modules represent different layers in the
ecosystem and should not be mixed.
|
|
This change introduces the ComputeService interface (previously
VirtProvisioningService) and provides a central implementation in
opendc-compute-service.
Previously, the implementation of this interface was bound to the
simulator package, which meant that independent business logic could not
be re-used without importing the simulator code.
|
|
This change extracts the API for the OpenDC Compute service into a separate
module to establish a clearer boundary between the interface meant for
consumers and interfaces meant for the the serve implementation.
|
|
This change converts the Server data class which can be used as a
stateful object to control an instance running in the cloud.
|
|
This change refactors the OpenDC Compute module so that the
VirtProvisioningService is now responsible for managing the lifecycle of
Server objects as opposed to the VirtDriver and BareMetalDriver
previously.
|
|
This change separates the cloud compute layer in OpenDC (e.g., Server)
from the bare-metal layer (e.g., Node), such that Node and
BareMetalDriver are unaware of the existence of Server and co.
|
|
This change removes the SimWorkloadImage implementation and changes
Image to a data class without workload. Simulation workloads should now
be pased via image metadata as the image storage should be unaware of
any simulation details.
|
|
This change uses the Java Platform functionality from Gradle to enable
shared dependency constraints across modules.
|
|
|
|
|
|
This change updates the Gradle configuration to utilize version
constraints to force the same dependency version across modules.
|
|
This change moves the version of the dependencies from buildSrc to
gradle.properties to prevent recompilation when changing dependency
versions.
|
|
This change extracts the configuration for test from the Kotlin library
conventions.
|
|
This change removes unnecessary dependencies on JUnit Platform launcher
from the repository. Previously, the launcher was used to bootstrap
tests for Gradle when it did not natively support JUnit Platform.
Gradle now has native support for JUnit Platform, so the dependency is
not needed anymore.
|
|
|
|
This change allows users to select the hypervisor scheduler to use when
deploying hypervisors onto bare-metal machines.
|