summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-10-27build(web/ui): Do not optimize images for exportFabian Mastenbroek
This change disables optimizing images for exporting, since we do not want to depend on an external service.
2022-10-27fix(web/ui): Make root redirect non-permanentFabian Mastenbroek
This change makes the root redirect to the projects page temporary, to prevent browsers from caching this route indefinitely, while we might add a home page in the future.
2022-10-27fix(web/ui): Drop dependency on Roboto fontFabian Mastenbroek
This change removes the dependency on the Roboto font which was downloaded for every page of OpenDC. Since we do not actually use this font in any of our page, we can safely drop the dependency.
2022-10-27build(web/ui): Update to Next 13 and React 18Fabian Mastenbroek
This change updates the web interface to use Next 13 and React 18. This release has a couple breaking changes (related to links) which we have fixed accordingly.
2022-10-27refactor(web/ui): Drop dependency on FontAwesomeFabian Mastenbroek
This change removes the explicit dependency on FontAwesome. PatternFly also ships with the FontAwesome icons, so use these icons instead to reduce the footprint of the application.
2022-10-21merge: Implement multi-flow stages in simulator (#110)Fabian Mastenbroek
This pull request introduces the new `flow2` multi-flow simulator into the OpenDC codebase and adjust all existing modules to make use of this new simulator. The new simulator models flow as a network of components, which can each receive flow from (potentially) multiple other components. In the previous simulator, the framework itself supported only single flows between components and required re-implementation of many components to support multiplexing flows. Initial benchmarks show performance improvements in the range 2x–4x for large scale experiments such as the Capelin benchmarks. ## Implementation Notes :hammer_and_pick: * Add support for multi-flow stages * Support flow transformations * Add forwarding flow multiplexer * Expose metrics on FlowMultiplexer * Re-implement network sim using flow2 * Re-implement power sim using flow2 * Re-implement compute sim using flow2 * Optimize workload implementation of SimTrace * Remove old flow simulator * Add log4j-core dependency ## External Dependencies :four_leaf_clover: * N/A ## Breaking API Changes :warning: * Removal of the `org.opendc.simulator.flow` package. You should now use the new flow simulator located in `org.opendc.simulator.flow2`. * `PowerModel` interface is replaced by the `CpuPowerModel` interface. * `PowerDriver` interface is replaced by the `SimPsu` and `SimPsuFactory` interfaces. * Removal of `SimTraceWorkload`. Instead, create a workload from a `SimTrace` using `createWorkload(offset)`. * `ScalingGovernor` has been split in a `ScalingGovernor` and `ScalingGovernorFactory`. * All modules in `opendc-simulator` are now written in Java. This means that default parameters are not supported anymore for these modules.
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/flow): Remove old flow simulatorFabian Mastenbroek
This change removes the old version of the flow simulator from the OpenDC repository. The old version has been replaced by the new flow2 framework which is able to simulate flows more efficiently.
2022-10-21perf(sim/compute): Optimize workload implementation of SimTraceFabian Mastenbroek
This change updates the workload implementation of SimTrace by introducing multiple implementations of the FlowStageLogic interface, which is selected dynamically when the workload starts. This change helps eliminate the unecessary division (and memory fetch) when running a workload with just a single CPU.
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-21refactor(sim/power): Re-implement power sim using flow2Fabian Mastenbroek
This change updates the `opendc-simulator-power` module to use the new flow simulation framework in OpenDC (named flow2 for now).
2022-10-21refactor(sim/net): Re-implement network sim using flow2Fabian Mastenbroek
2022-10-21feat(sim/flow): Expose metrics on FlowMultiplexerFabian Mastenbroek
2022-10-21feat(sim/flow): Add forwarding flow multiplexerFabian Mastenbroek
This change implements a new `FlowMultiplexer` that forwards the inputs directly to one of the pre-allocated outputs.
2022-10-21feat(sim/flow): Support flow transformationsFabian Mastenbroek
This change adds a new component, FlowTransform, which is able to transform the flow from one component to another, based on some inversible transformation. Such as component is useful when converting between different units of flow between different components.
2022-10-21perf(sim/flow): Add support for multi-flow stagesFabian Mastenbroek
This change adds support for creating nodes in a flow graph that support multiple inputs and outputs directly, instead of our current approach where we need to re-implement the `FlowConsumerContext` interface in order to support multiple inputs or outputs.
2022-10-21ci: Bump mikepenz/action-junit-report from 3.5.1 to 3.5.2 (#109)dependabot[bot]
Bumps [mikepenz/action-junit-report](https://github.com/mikepenz/action-junit-report) from 3.5.1 to 3.5.2. - [Release notes](https://github.com/mikepenz/action-junit-report/releases) - [Commits](https://github.com/mikepenz/action-junit-report/compare/v3.5.1...v3.5.2) --- updated-dependencies: - dependency-name: mikepenz/action-junit-report dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-10merge: Add support for accounting of user simulation time (#108)Fabian Mastenbroek
This pull request adds support for tracking and limiting the simulation time consumed per user. These changes allow users to consume 60 minutes of shared compute resources for simulations in OpenDC per month. Closes #103 ## Implementation Notes :hammer_and_pick: * Limit exception mapper to WebApplicationException * Add support for accounting simulation time * Add API for querying user accounting data * Show monthly simulation budget in UI ## External Dependencies :four_leaf_clover: * N/A ## Breaking API Changes :warning: * The web runner now also sends the runtime of the simulation job to the server, in order to update the consumed simulation time in the database.
2022-10-10fix(web/ui): Fix UnitInfo popoverFabian Mastenbroek
This change addresses an issue with the topology sidebar where hovering a CPU or GPU would not present the correct information due to bug.
2022-10-10fix(web/runner): Increase default job timeoutFabian Mastenbroek
This change fixes an issue with the OpenDC web runner where the default job timeout was set to 10 ms instead of 10 minutes. For longer simulations, this would cause the job to be terminated.
2022-10-10fix(web/runner): Fix service metric reportingFabian Mastenbroek
This change resolves an issue in the web runner where the finished VMs would always be reported as zero.
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-10feat(web/ui): Show monthly simulation budget in UIFabian Mastenbroek
This change updates the OpenDC web UI to show the monthly simulation budget of the user in the user dropdown. This provides the user with a progress bar of the used simulation minutes.
2022-10-10feat(web/server): Add API for querying user accounting dataFabian Mastenbroek
This change updates the Quarkus-based web server with a new endpoint for querying data about the active user including accounting data.
2022-10-10feat(web/server): Add support for accounting simulation timeFabian Mastenbroek
This change updates the Quarkus-based web server to add support for tracking and limiting the simulation minutes used by the user in order to prevent misuse of shared resources.
2022-10-07fix(web/server): Limit exception mapper to WebApplicationExceptionFabian Mastenbroek
This change updates the Quarkus-based web server to limit the default exception mapper to just WebApplicationException. Other exceptions should be considered internal server errors and must not be shared with users.
2022-10-06merge: Update build and runtime dependencies (#107)Fabian Mastenbroek
This pull request updates the build and runtime dependencies used by OpenDC to their latest version compatible with the project. ## Implementation Notes :hammer_and_pick: * Update simulator dependency versions * Remove unused distribution conventions * Update next version to 3.0 * Eliminate use of wildcard imports * Switch to Spotless for formatting
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-06build: Update next version to 3.0Fabian Mastenbroek
This change updates the build script in preparation for the OpenDC v3.0 release changing the version numbers to the appropriate values.
2022-10-06build: Remove unused distribution conventionsFabian Mastenbroek
This change removes the distribution conventions used by the root project of OpenDC. Previously, we used this to build a single distribution for OpenDC containing the experiment uberjars and scripts to start OpenDC. However, with the introduction of the Quarkus-based web server, we have decided to split releases into (potentially) multiple distributions (e.g., one for the web server, one for just the web runner, etc.). Furthermore, the implementation of this convention caused issues with several other Gradle plugins.
2022-10-06build: Update simulator dependenciesFabian Mastenbroek
This change updates the simulator dependencies to the latest available version where possible.
2022-10-05merge: Extract scheduler from simulation coroutine dispatcher (#106)Fabian Mastenbroek
This pull request extracts the scheduler from the `SimulationCoroutineDispatcher` into a separate `SimulationScheduler` class which allows users to re-use the scheduler between different coroutine dispatchers. We implement the `SimulationScheduler` in Java, removing the explicit dependency on Kotlin or `kotlinx-coroutines`. The scheduler uses a separate specialized priority queue implementation that eliminates allocation in the hot path of the simulator. ## Implementation Notes :hammer_and_pick: * Add Java-based simulator core * Use SimulationScheduler in coroutine dispatcher * Rename runBlockingSimulation to runSimulation ## External Dependencies :four_leaf_clover: * N/A ## Breaking API Changes :warning: * The Kotlin API for simulation has been moved to `org.opendc.simulator.kotlin`. * `runBlockingSImulation` renamed to `runSimulation`
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-05feat(sim/core): Add Java-based simulator coreFabian Mastenbroek
This change introduces a new class, `SimulationScheduler`, which provides the basis for simulations in OpenDC by allowing components to schedule future tasks using delay-skipping queue and a virtual clock. This new class is written in Java to remove any dependency on the Kotlin and kotlinx-coroutines runtime when not necessary.
2022-10-04ci: Bump mikepenz/action-junit-report from 3.5.0 to 3.5.1 (#105)dependabot[bot]
Bumps [mikepenz/action-junit-report](https://github.com/mikepenz/action-junit-report) from 3.5.0 to 3.5.1. - [Release notes](https://github.com/mikepenz/action-junit-report/releases) - [Commits](https://github.com/mikepenz/action-junit-report/compare/v3.5.0...v3.5.1) --- updated-dependencies: - dependency-name: mikepenz/action-junit-report dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-04merge: Add provisioning tool for experiments (#104)Fabian Mastenbroek
This pull request implements a new tool to help provision and manage the experimental environment. ## Implementation Notes :hammer_and_pick: * Add service registry for cloud services * Add provisioning tool for experiments * Add provisioning step for workflow service * Add provisioners for FaaS service * Use experiment base for Capelin experiments * Use experiment base for web runner * Integrate compute workload classes * Remove Topology interface ## Breaking API Changes :warning: * Removal of the `opendc-compute-workload`, `opendc-faas-workload`, and `opendc-workflow-workload` modules. These are now located inside `opendc-experiments` * Removal of `ComputeServiceHelper`. Use `Provisioner` to provision a `ComputeService`.
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(web/runner): Use experiment base for web runnerFabian Mastenbroek
This change updates the OpenDC web runner to use the new `opendc-experiments-base` module for setting up the experimental environment and simulate the workload.
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-23merge: Do not require interference model during topology construction (#102)Fabian Mastenbroek
This pull request refactors the existing workload interference model in order to remove a dependency on it during the topology construction. With this change, interference domains (e.g., a single host) can be constructed independently of the interference profiles of virtual machines. ## Implementation Notes :hammer_and_pick: * Move VM interference model into compute simulator * Remove convergence listener parameter * Remove FlowEngine from SimMachineContext * Remove timestamp parameter from SimTrace * Pass interference key via parameter * Move interference logic into VmInterferenceMember * Prevent boxing in interference algorithm * Extract Random dependency from interference model * Add separate error host state * Simplify constructor of SimHost * Make interference domain independent of profile ## External Dependencies :four_leaf_clover: * N/A ## Breaking API Changes :warning: * The interface of `VmInterferenceModel` is changed. Users do not need to provide a seed for the model anymore. * A `VmInterferenceModel` should be passed via the metadata parameter of `startWorkload` to enable workload interference.
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.