summaryrefslogtreecommitdiff
path: root/opendc-simulator
AgeCommit message (Collapse)Author
2021-09-19refactor(simulator): Remove dependency on SnakeYamlFabian Mastenbroek
This change removes the dependency on SnakeYaml for the simulator. It was only required for a very small component of the simulator and therefore does not justify bringing in such a dependency.
2021-09-17fix(simulator): Support workload/machine CPU count mismatchFabian Mastenbroek
This change allows workloads that require more CPUs than available on the machine to still function properly.
2021-09-17refactor(telemetry): Standardize SimHost metricsFabian Mastenbroek
This change standardizes the metrics emitted by SimHost instances and their guests based on the OpenTelemetry semantic conventions. We now also report CPU time as opposed to CPU work as this metric is more commonly used.
2021-09-10refactor(compute): Integrate fault injection into compute simulatorFabian Mastenbroek
This change moves the fault injection logic directly into the opendc-compute-simulator module, so that it can operate at a higher abstraction. In the future, we might again split the module if we can re-use some of its logic.
2021-09-10feat(simulator): Support generic distribution in fault injectorFabian Mastenbroek
This change adds support for specifying the distribution of the failures, group size and duration for the fault injector.
2021-08-25refactor(compute): Measure power draw without PSU overheadFabian Mastenbroek
This change updates the SimHost implementation to measure the power draw of the machine without PSU overhead to make the results more realistic.
2021-08-25refactor(simulator): Remove usage and speed fields from SimMachineFabian Mastenbroek
This change removes the usage and speed fields from SimMachine. We currently use other ways to capture the usage and speed and these fields cause an additional maintenance burden and performance impact. Hence the removal of these fields.
2021-08-25fix(simulator): Eliminate unnecessary double to long conversionsFabian Mastenbroek
This change eliminates unnecessary double to long conversions in the simulator. Previously, we used longs to denote the amount of work. However, in the mean time we have switched to doubles in the lower stack.
2021-08-25build: Upgrade to OpenTelemetry 1.5Fabian Mastenbroek
This change upgrades the OpenTelemetry dependency to version 1.5, which contains various breaking changes in the metrics API.
2021-08-24feat(simulator): Add support for reporting interfered workFabian Mastenbroek
This change adds support to the simulator for reporting the work lost due to performance interference.
2021-08-24fix(simulator): Support unaligned trace fragmentsFabian Mastenbroek
2021-08-24fix(simulator): Support trace fragments with zero cores availableFabian Mastenbroek
This change fixes an issue with the simulator where trace fragments with zero cores to execute would give a NaN amount of work.
2021-08-24fix(simulator): Record overcommit only after deadlineFabian Mastenbroek
This change fixes an issue with the simulator where it would record overcomitted work if the output was updated before the deadline was reached.
2021-08-24refactor(simulator): Execute traces based on timestampsFabian Mastenbroek
This change refactors the trace workload in the OpenDC simulator to track execute a fragment based on the fragment's timestamp. This makes sure that the trace is replayed identically to the original execution.
2021-08-22refactor(compute): Update FilterScheduler to follow OpenStack's NovaFabian Mastenbroek
This change updates the FilterScheduler implementation to follow more closely the scheduler implementation in OpenStack's Nova. We now normalize the weights, support many of the filters and weights in OpenStack and support overcommitting resources.
2021-08-22perf(simulator): Prevent counter update without workFabian Mastenbroek
This change implements a performance improvement by preventing updates on the resource counters in case no work was performed in the last cycle.
2021-08-13build: Update Kotlin dependenciesFabian Mastenbroek
This change updates the Kotlin dependencies used by OpenDC to their latest version.
2021-06-24simulator: Re-implement performance interference modelFabian Mastenbroek
This change updates reimplements the performance interference model to work on top of the universal resource model in `opendc-simulator-resources`. This enables us to model interference and performance variability of other resources such as disk or network in the future.
2021-06-24simulator: Add interface for resource interferenceFabian Mastenbroek
This change introduces an interface for modelling performance variability due to resource interference in systems where resources are shared across multiple consumers.
2021-06-22simulator: Add support for storage devices (v1)Fabian Mastenbroek
This change adds initial support for storage devices in the OpenDC simulator. Currently, we focus on local disks attached to the machine. In the future, we plan to support networked storage devices using the networking support in OpenDC.
2021-06-22simulator: Add virtual network switchFabian Mastenbroek
This change adds a virtual network switch to the OpenDC networking module. Currently, the switch bridges the traffic equally across all ports. In the future, we'll also add routing support to the switch.
2021-06-22simulator: Add support for attaching network adapter to machineFabian Mastenbroek
This change bridges the compute and network simulation module by adding support for network adapters in the compute module. With these network adapters, compute workloads can communicate over the network that the adapters are connected to.
2021-06-21simulator: Re-organize compute simulator moduleFabian Mastenbroek
This change re-organizes the classes of the compute simulator module to make a clearer distinction between the hardware, firmware and software interfaces in this module.
2021-06-21simulator: Add core module for network simulationFabian Mastenbroek
This change adds a basic framework as basis for network simulation support in OpenDC. It is modelled similarly to the power system that has been added recently.
2021-06-21simulator: Reduce allocations in interpreter hot pathFabian Mastenbroek
This change updates the resources module to reduce the number of object allocations in the interpreter's hot path. This in turn should reduce the GC pressure.
2021-06-21simulator: Optimize flag management of resource contextFabian Mastenbroek
This change optimizes the internal flag management used in the SimResourceContextImpl to use bitwise flags instead of enums. This approach simplifies the implementation immensely and reduces the number of branches.
2021-06-21simulator: Remove concept of resource lifecycleFabian Mastenbroek
This change removes the AutoCloseable interface from the SimResourceProvider and removes the concept of a resource lifecycle. Instead, resource providers are now either active (running a resource consumer) or in-active (being idle), which simplifies implementation.
2021-06-21simulator: Pool update allocations in interpreterFabian Mastenbroek
This change updates the SimResourceInterpreter implementation to pool the allocations of the Update objects. This reduces the amount of allocations necessary in the hot path of the simulator.
2021-06-21simulator: Optimize access to remainingWork propertyFabian Mastenbroek
This change updates the SimResourceContextImpl to optimize the access to the remainingWork property, which is required by many calls in the hot path.
2021-06-21simulator: Add Linux CPU frequency scaling governors Hongyu
This change adds the CPU frequency scaling governors including the conservative and on-demand governors that are found in the Linux kernel. # Implementation Notes * A `ScalingPolicy` has been added to aid the frequency scaling process.
2021-06-20simulator: Add Linux CPU frequency scaling governorsHongyu
This change adds the CPU frequency scaling governors that are found in the Linux kernel, which include the conservative and on-demand governor.
2021-06-14simulator: Add energy modelling subsystem to OpenDCFabian Mastenbroek
This pull request adds a subsystem to OpenDC for modelling power components in datacenters, such as UPSes, PDUs and PSUs. These components also take into account electrical losses that occur in real-world scenarios. - Add module for datacenter power components (UPS, PDU) - Integrate power subsystem with compute subsystem (PSU) - Model power loss in power components **Breaking API Changes** 1. `SimBareMetalMachine.powerDraw` is replaced by `SimBareMetalMachine.psu.powerDraw`
2021-06-14simulator: Add model for PSU power lossHongyu He
This change introduces power loss to the PSU component.
2021-06-11simulator: Add model for UPSHongyu He
This change adds a new model for the UPS to the OpenDC simulator power subsystem.
2021-06-11simulator: Integrate power subsystem with compute subsystemFabian Mastenbroek
This change integrates the power subsystem of the simulator with the compute subsystem by exposing a new field on a SimBareMetalMachine, psu, which provides access to the machine's PSU, which in turn can be connected to a SimPowerOutlet.
2021-06-11simulator: Add power loss to SimPduHongyu He
This change adds a model for power loss to the Power Distribution Unit (PDU) model in OpenDC.
2021-06-10simulator: Add module for datacenter power componentsFabian Mastenbroek
This change adds a new module for simulating power components in datacenters such as PDUs and UPSes. This module will serve as the basis for the power monitoring framework in OpenDC and will future integrate with the other simulation components (such as compute).
2021-06-09simulator: Add memory resourceFabian Mastenbroek
This change introduces a memory resource which can be used to model memory usage. The SimMachineContext now exposes a memory field of type SimMemory which provides access to this resource and allows workloads to start a consumer on this resource.
2021-06-03simulator: Migrate frequency scaling governors to OS layerFabian Mastenbroek
This change moves the CPU frequency scaling governors from the bare-metal/firmware layer (SimBareMetalMachine) to the OS/Hypervisor layer (SimHypervisor) where it can make more informed decisions about the CPU frequency based on the load of the operating system or hypervisor.
2021-06-03simulator: Split CPUFreq subsystem in compute simulatorFabian Mastenbroek
This change splits the functionality present in the CPUFreq subsystem of the compute simulation. Currently, the DVFS functionality is embedded in SimBareMetalMachine. However, this functionality should not exist within the firmware layer of a machine. Instead, the operating system should perform this logic (in OpenDC this should be the hypervisor). Furthermore, this change moves the scaling driver into the power package. The power driver is a machine/firmware specific implementation that computes the power consumption of a machine.
2021-06-02simulator: Start consumers directly from workloadFabian Mastenbroek
This change updates the SimWorkload interfaces to allow implementations to start consumers for the machine resource providers directly.
2021-06-02simulator: Add uniform interface for resource metricsFabian Mastenbroek
This change adds a new interface to the resources library for accessing metrics of resources such as work, demand and overcommitted work. With this change, we do not need an implementation specific listener interface in SimResourceSwitchMaxMin anymore. Another benefit of this approach is that updates will be scheduled more efficiently and progress will only be reported once the system has reached a steady-state for that timestamp.
2021-06-01simulator: Centralize resource logic in SimResourceInterpreterFabian Mastenbroek
This change introduces the SimResourceInterpreter which centralizes the logic for scheduling and interpreting the communication between resource consumer and provider. This approach offers better performance due to avoiding invalidating the state of the resource context when not necessary. Benchmarks show in the best case a 5x performance improvement and at worst a 2x improvement.
2021-05-18chore: Address deprecations due to Kotlin 1.5Fabian Mastenbroek
This change addresses the deprecations that were caused by the migration to Kotlin 1.5.
2021-05-07build: Use Gradle version catalogFabian Mastenbroek
This change adds support for the Gradle version catalog feature in our build configuration. This allows us to have a single file, gradle/libs.versions.toml, which contains all the dependency versions used in this project.
2021-05-06build: Use type-safe project accessorsFabian Mastenbroek
This change updates the build scripts to use type-safe project accessors when specifying build dependencies between modules.
2021-05-04simulator: Update power draw on machine drawFabian Mastenbroek
This change fixes an issue where the power draw of a machine is initially zero and does not update until the CPU usage is higher than zero, while the idle power is the machine is not actually zero.
2021-05-03simulator: Introduce SimResourceSchedulerFabian Mastenbroek
This change introduces the SimResourceScheduler interface, which is a generic interface for scheduling the coordination and synchronization between resource providers and resource consumers. This interface replaces the need for users to manually specify the clock and coroutine context per resource provider.
2021-05-03simulator: Fix compute benchmarksFabian Mastenbroek
This change fixes an issue with the compute benchmarks where the workload was being re-used across iterations.
2021-05-03simulator: Add generic approach for reporting resource eventsFabian Mastenbroek
This change introduces a generic approach for reporting resource events to resource consumers. This way we reduce the boilerplate of the SimResourceConsumer interface.