summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-06-24simulator: Support perf interference in uniform resource modelFabian Mastenbroek
This pull request re-implements the performance interference model to integrate with the uniform resource model in OpenDC. This forms the basis for other forms of resource interference (e.g., network or disk). * Add interface for resource interference in uniform resource model (`opendc-simulator-resources`) * Remove dependency on performance interference model from trace readers * Re-implement the performance interference model on top of the interface in the uniform resource model. **Breaking API Changes** * The original performance interference model classes are removed * The SC20 trace and environment related readers have moved to the Capelin experiments module. * Changes to the interfaces in `opendc-format`. Implements #103
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-24format: Remove performance interference from trace readersFabian Mastenbroek
This change updates the trace reader implementation to remove their dependency on the performance interference model. In a future commit, we will instead pass the performance interference model via the host/hypervisor.
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 support for networking (v1)Fabian Mastenbroek
This change adds support for networking in the simulator. As outlined in #84, the network model doesn't model individual packets, but instead considers dynamic flows between network devices. This pull request adds the bare-minimum implementation necessary to model network traffic. In the future, we will add advanced functionality such as routing and other L3 concepts. * Add core model for network simulation * Add model for network adapter that attaches to machine * Add virtual network switch to bridge traffic between hosts.
2021-06-22ci: Optimize Gradle build performance in Github ActionsFabian Mastenbroek
This change updates the Github Actions Gradle workflows in order to improve the runtime performance of these workflows. We have now enabled build caching as well as parallel builds to speed up the build process. Moreover, we now cache the Gradle wrapper.
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: Optimize resource interpreter implementationFabian Mastenbroek
This pull request implements several optimizations in the resource interpreter implementation. * Interpreter is now shared across hosts in experiments * Interpreter allocations are pooled where possible * Resource lifecycle concept is eliminated * Optimized flag management in interpreter
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-21exp: Enable interpreter sharing across hostsFabian Mastenbroek
This change enables the experiments to share the SimResourceInterpreter across multiple hosts, which allows updates to be scheduled efficiently for all machines at the same time. This is especially beneficial if the machines operate on the same time slices.
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-17build: Update dependenciesFabian Mastenbroek
This change updates the project dependencies to follow the latest available version where possible.
2021-06-17faas: Rename opendc-serverless to opendc-faasFabian Mastenbroek
This change renames the opendc-serverless module to opendc-faas to better distinguish between the two terms (Serverless and FaaS) and be clearer about the intent of the module. The opendc-faas module holds the code for the FaaS platform on top of OpenDC. Although this is one approach of doing serverless, serverless can also entail other services that will not be covered by this module.
2021-06-16exp: Fix power tracking for energy experimentsFabian Mastenbroek
This change fixes an issue where the power in the energy experiments is always reported as zero due to the changes in commit 652b869.
2021-06-15build: Upgrade to Gradle 7.1Fabian Mastenbroek
This change upgrades the Gradle build system to version 7.1.
2021-06-15exp: Fix execution of energy experimentsFabian Mastenbroek
This change fixes the execution of the Energy21 experiments which failed due to various changes in the OpenDC codebase. First, the directory structure is now required to be pre-generated before the writer starts writing the experiment output. Second, we must include the configuration of the Capelin experiment in this experiment in order to workaround an issue with harness filtering.
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 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-09Remove dependency on HadoopFabian Mastenbroek
This pull request attempts to remove the dependency of the simulator on Apache Hadoop which is pulled in as a consequence of using parquet-mr. The reason for removal is that Apache Hadoop does not work natively on Windows without user intervention, which makes adoption on this platform more difficult. * Add Windows as CI target for the OpenDC simulator * Use `LocalInputFile` for Parquet reader usages * Use `LocalOutputFile` for Parquet writer usages * Remove Apache Hadoop as dependency of OpenDC.
2021-06-09build: Eliminate most Hadoop dependenciesFabian Mastenbroek
This change eliminates all Hadoop dependencies that are not necessary for Parquet to work correctly. As a result, the number of dependencies should now be greatly reduced, which in turn leads to less artifacts that need to be retrieved at build time.
2021-06-09exp: Use LocalOutputFile for Parquet writersFabian Mastenbroek
This change updates the Parquet writers used in the Capelin experiments to use our OutputFile implementation for local files, to reduce our dependency on Apache Hadoop.
2021-06-09format: Add implementation of local Parquet OutputFileFabian Mastenbroek
This change adds an implementation of Parquet OutputFile for local files in order to eliminate the dependency on the entire Hadoop system. This implementation allows users to read Parquet files locally without needing a Parquet filesystem implementation.
2021-06-09exp: Use LocalInputFile for Parquet readersFabian Mastenbroek
This change updates the Parquet readers used in the Capelin experiments to use our InputFile implementation for local files, to reduce our dependency on Apache Hadoop.
2021-06-09format: Use LocalInputFile for Parquet readerFabian Mastenbroek
This change updates the format implementations that use Parquet by switching to our InputFile implementation for local files, which eliminates the need for Hadoop's filesystem support.
2021-06-09format: Add implementation of local Parquet InputFileFabian Mastenbroek
This change adds an implementation of Parquet's local InputFile in order to eliminate the dependency on the entire Hadoop system. This implementation allows users to read Parquet files locally without needing a Parquet filesystem implementation.
2021-06-08test: Fix logging warning for testsFabian Mastenbroek
This change fixes the SLF4J logging warnings that occur during the tests.
2021-06-08ci: Test simulator on WindowsFabian Mastenbroek
This change adds Windows as CI target for the OpenDC simulator in order to test that the simulator works on all major platforms.
2021-06-03exp: Remove Jupyter Notebook from Energy experimentsFabian Mastenbroek
This change removes the Jupyter Notebook that was shipped with the initial version of the Energy21 experiments. At the moment, it is not up to date anymore and we will probably move the plotting facility to the web interface.
2021-06-03simulator: Improve simulator resource model (#142)Fabian Mastenbroek
This pull request improves the existing simulator resource model that is at the core of all simulation models in OpenDC. Most importantly, we have changed the way of how metrics are reported by this layer. * Add `SimResourceInterpreter` which is responsible for efficiently scheduling communication between resources in OpenDC. The performance gain is in the 2x-5x range. * Add uniform interface for exposing resource metrics (using `SimResourceCounters`). * Split the CPUFreq subsystem in the compute simulator as it mixed responsibilities of different layers. **Breaking API Changes** * Resource providers now accept a `SimResourceInterpreter` which is responsible for coordinating the communication between resources. * `ScalingGovernor` is not part of the machine layer anymore. Instead, it should move in the OS/Hypervisor layer. * Workloads should now start CPU consumers using `cpu.startConsumer`.
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-02api: Bump urllib3 in /opendc-web/opendc-web-api (#141)dependabot[bot]
Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.4 to 1.26.5. - [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.4...1.26.5) --- updated-dependencies: - dependency-name: urllib3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
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.