summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-04-12Migrate to Gradle 7.0 (#115)Fabian Mastenbroek
This pull request updates the Kotlin project to build with Gradle 7.0. This is necessary to support building the project with Java 16.
2021-04-12simulator: Add the asymptotic power model from GreenCloud (#114)Hongyu
This change adds the asymptotic power model that is used in GreenCloud to the available power models in OpenDC.
2021-04-08compute: Implement filter schedulerFabian Mastenbroek
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.
2021-04-08exp: Add serverless experiments (v1)Fabian Mastenbroek
This pull request is the first in a series of pull request to add the serverless experiments from Soufiane Jounaid's BSc thesis to the main OpenDC repository. In this pull request, we add the serverless experiment and trace reader. * Add `opendc-experiments-serverless20` which will contain the serverless experiments. * Add `ServerlessTraceReader` which reads the traces from Soufiane's work. * Add support for cold start delays * Expose metrics per function.
2021-04-08serverless: Model cold start delaysFabian Mastenbroek
2021-04-08serverless: Track metrics per functionFabian Mastenbroek
This change adds metrics that are tracked per function instance, which includes the runtime of the invocations, the number of invocations (total, warm, cold, failed).
2021-04-08exp: Add experiment testing the serverless moduleFabian Mastenbroek
This change adds an experiments testing the OpenDC Serverless module.
2021-04-08exp: Add trace reader for Serverless experimentsFabian Mastenbroek
This change adds the trace reader for the serverless experiments as described in #48.
2021-04-08serverless: Add possibility to specify function memory requirementsFabian Mastenbroek
2021-04-08serverless: Expose metrics from Serverless serviceFabian Mastenbroek
This change exposes several metrics from the Serverless service, which are needed for the experiments.
2021-04-08compute: Migrate to new FilterSchedulerFabian Mastenbroek
This change migrates the OpenDC codebase to use the new FilterScheduler for scheduling virtual machines. This removes the old allocation policies as well.
2021-04-08compute: Implement filter schedulerFabian Mastenbroek
This change adds an implementation of the filter scheduler to the OpenDC Compute module. This is modeled after the filter scheduler implementation in OpenStack and should allow for more flexible scheduling policies. See: https://docs.openstack.org/nova/latest/user/filter-scheduler.html
2021-04-08exp: Add experiment for OpenDC Energy projectFabian Mastenbroek
This pull requests adds an experiment to the repository for the OpenDC Energy project. This experiment currently runs the Solvinity traces and tests how different energy models perform. * Add new experiment `opendc-experiments-energy21` * Link experiment to `ConsoleRunner` so that the experiment can be run from the command line. * `BatchRecorder` is now used to emit all metrics at once after the hypervisor finishes a slice.
2021-04-08exp: Add experiment for OpenDC Energy projectFabian Mastenbroek
This change adds an experiment for the OpenDC Energy project, which tests various energy models that have been implemented in OpenDC.
2021-04-08exp: Fix metric recording of summary dataFabian Mastenbroek
This change fixes an issue in the metric exporter for summary metrics, where instead of some average value, the sum value was reported.
2021-04-08compute: Use BatchRecorder to emit metricsFabian Mastenbroek
This change updates the SimHost implementation to use BatchRecorder to batch record multiple metrics at once.
2021-04-08simulator: Divide CPU usage over all coresFabian Mastenbroek
This change fixes an issue in SimTraceWorkload where the CPU usage was not divided across the cores, but was instead requested for all cores.
2021-04-08compute: Fix random allocation policyFabian Mastenbroek
This change fixes an issue in the RandomAllocationPolicy where it would incorrectly obtain the required memory for the server.
2021-04-08exp: Simplify metric reporting via monitorFabian Mastenbroek
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.
2021-04-08simulator: Perform usage propagation only on changeFabian Mastenbroek
This change updates the logic in SimAbstractMachine to only propagate usages when the value has changed.
2021-04-07simulator: Optimize bottlenecks in resource layerFabian Mastenbroek
This pull request addresses several bottlenecks that were present in the `opendc-simulator-resources` layer and `TimerScheduler`. These changes result into a 4x performance improvement for the energy experiments we are currently doing. * The use of `StateFlow` has been removed where possible. Profiling shows that emitting changes to `StateFlow` becomes a bottleneck in a single-thread context. * `SimSpeedConsumerAdapter` is an alternative for obtaining the changes in speed of a resource. **Breaking API Changes** * `SimResourceSource` does not expose `speed` as `StateFlow` anymore. To monitor speed changes, use `SimSpeedConsumerAdapter`. * Power draw in `SimBareMetalMachine` is not exposed as `StateFlow` anymore.
2021-04-07utils: Prevent use of Intrinsics.areEqual in scheduler hot pathFabian Mastenbroek
This change changes the TimerScheduler implementation to prevent calling Intrinsics.areEqual in the hot path. Profiling shows that especially this call has a high overhead.
2021-04-07simulator: Move away from StateFlow for low-level monitoringFabian Mastenbroek
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.
2021-04-07utils: Cache variables in TimerScheduler's hot pathsFabian Mastenbroek
This change updates the TimerScheduler implementation to cache several variables in the hot paths of the implementation.
2021-04-07simulator: Add CPUFreq subsystemFabian Mastenbroek
This pull request adds a CPUFreq subsystem to the simulator module. This subsystem allows a simulated machine to perform frequency scaling, which in turn should reduce energy consumption.
2021-04-07simulator: Add tests for CPUFreq subsystemFabian Mastenbroek
2021-04-07simulator: Polish power modelsHongyu
This change updates the power models by fixing some of the documentation and adding toString() methods.
2021-04-07simulator: Add initial design of CPUFreq modelFabian Mastenbroek
This change adds a model implementing Dynamic Voltage Frequency Scaling (DVFS) to OpenDC.
2021-04-07build(deps): bump urllib3 from 1.26.3 to 1.26.4 in /api (#108)dependabot[bot]
Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.3 to 1.26.4. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/1.26.3...1.26.4) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-03-27Integrate OpenTelemetry into OpenDCFabian Mastenbroek
This pull request resolves issue #91 by adopting the industry-standard OpenTelemetry standard for collecting traces and metrics in OpenDC simulations: * Metrics will now be exposed through OpenTelemetry's metrics API * `opendc-telemetry` provides complementary code to support gathering telemetry in OpenDC. **Breaking API Changes** * `opendc-tracer` has been removed. * `EventFlow` and all usages of it have been removed. * `opendc-experiments-sc18` has been removed for now, but a suitable replacement will follow soon.
2021-03-27compute: Migrate compute service simulator to OpenTelemetryFabian Mastenbroek
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.
2021-03-26simulator: Cache remaining workFabian Mastenbroek
This change updates the resource model implementation to cache the remaining work field, which was being computed multiple times during the same cycle.
2021-03-26simulator: Extract hardware power values to a separate file (#105)Hongyu
This change enables the use of the interpolation model testing on the results of the SPEC benchmark.
2021-03-26tracer: Remove event tracer from repositoryFabian Mastenbroek
This change removes the event tracer from the repository as we migrate to the industry standard OpenTelemetry.
2021-03-26workflow: Remove event tracer from workflow serviceFabian Mastenbroek
This change removes the event tracer from the OpenDC Workflow service as we start migrating to the industry standard OpenTelemetry.
2021-03-26compute: Integrate OpenTelemetry Metrics in OpenDC WorkflowFabian Mastenbroek
This change integrates the OpenTelemetry Metrics API in the OpenDC Workflow Service implementation. This replaces the old infrastructure for gathering metrics.
2021-03-26compute: Integrate OpenTelemetry Metrics in OpenDC ComputeFabian Mastenbroek
This change integrates the OpenTelemetry Metrics API in the OpenDC Compute Service implementation. This replaces the old infrastructure for gathering metrics.
2021-03-26compute: Remove dependency on event tracerFabian Mastenbroek
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.
2021-03-26compute: Hide internals of compute service implementationFabian Mastenbroek
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.
2021-03-26compute: Add test suite for ComputeServiceFabian Mastenbroek
This change adds a test suite for the OpenDC compute service.
2021-03-25Add advanced energy model to OpenDC (v1)Fabian Mastenbroek
This pull request is a preparation for the adding an advanced energy model to OpenDC (#90): * Add benchmarks for the `opendc-simulator-compute` module, which enables us to quantify the effect on future changes w.r.t. to the energy model on the performance. * Add `SimResourceTransformer` which can transform resource consumptions. This is useful when transforming from CPU frequency to energy usage for instance. * Move power models to `opendc-simulator-compute` to be able to be used more generically. **Breaking API Changes** * Power models have moved to `opendc-simulator-compute` and now implement the `MachinePowerModel` interface.
2021-03-24simulator: Move power models to simulator moduleFabian Mastenbroek
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.
2021-03-23simulator: Add support for transforming resource consumersFabian Mastenbroek
This change adds support for transforming the resource commands emitted by the resource consumers. The SimResourceForwarder is modified to also support transforming the resource commands.
2021-03-23simulator: Add benchmarks for opendc-simulator-computeFabian Mastenbroek
This change adds benchmarks to the opendc-simulator-compute module in order to quantify effect of changes on the performance of this module.
2021-03-23simulator: Add uniform resource consumption model (v2)Fabian Mastenbroek
This is the second pull request in the series of pull requests to add a uniform resource consumption model to OpenDC. This pull request focusses on adding dynamic capacity negotiation and propagation between resource consumer and resource provider: * The generic resource constraint is removed from the interfaces of `opendc-simulator-resources`. Users of the API are expected to use the untyped variants where only the capacity needs to be specified. Users are expected to build higher-level abstractions on top of these interface to represent actual resources (e.g., CPU, disk or network). * Added benchmarks for the most important implementations of `opendc-simulator-resources`. This allows us to quantify the effects of changes on the runtime. * The `SimResourceSwitchMaxMin` has been split into a `SimResourceAggregatorMaxMin` and `SimResourceDistributorMaxMin` which respectively aggregate input resources and distribute output resources using max-min fair sharing. * The `SimResourceConsumer` interface has a new method for receiving capacity change events: `onCapacityChanged(ctx, isThrottled)` **Breaking API Changes** * All interfaces in `opendc-simulator-resources`.
2021-03-23simulator: Add support for emitting VM usage metricsFabian Mastenbroek
This change re-enables support for VM usage metrics by adding an adapter for SimResourceConsumer instances that can export the consumer speed.
2021-03-23simulator: Add support for signaling dynamic capacity changesFabian Mastenbroek
This change adds support for dynamically changing the capacity of resources and propagating this change to consumers.
2021-03-22simulator: Remove generic resource constraint from resource modelFabian Mastenbroek
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.
2021-03-22simulator: Expose capacity and remaining work outside consumer callbackFabian Mastenbroek
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.
2021-03-22simulator: Add benchmarks for resource consumption frameworkFabian Mastenbroek
This change adds an initial set of benchmarks for the resource consumption framework in order to measure the effect of changes on the performance of the simulator.