diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2022-10-05 14:44:43 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-05 14:44:43 +0200 |
| commit | c2047d09b27b0c05f5c203509dde524e17d3b729 (patch) | |
| tree | 3903d8aed5e87850c92e1b2dce8379ea99bdfa6d /opendc-compute/opendc-compute-simulator/src/test | |
| parent | ec3b5b462c1b8296ba18a3872f56d569fa70e45b (diff) | |
| parent | be176910eb870209576326ffaad8bf21241fccbd (diff) | |
merge: Extract scheduler from simulation coroutine dispatcher (#106)
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`
Diffstat (limited to 'opendc-compute/opendc-compute-simulator/src/test')
2 files changed, 7 insertions, 7 deletions
diff --git a/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/SimHostTest.kt b/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/SimHostTest.kt index a7993291..f63d4c6f 100644 --- a/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/SimHostTest.kt +++ b/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/SimHostTest.kt @@ -41,9 +41,9 @@ import org.opendc.simulator.compute.power.SimplePowerDriver import org.opendc.simulator.compute.workload.SimTrace import org.opendc.simulator.compute.workload.SimTraceFragment import org.opendc.simulator.compute.workload.SimTraceWorkload -import org.opendc.simulator.core.runBlockingSimulation import org.opendc.simulator.flow.FlowEngine import org.opendc.simulator.flow.mux.FlowMultiplexerFactory +import org.opendc.simulator.kotlin.runSimulation import java.time.Instant import java.util.* import kotlin.coroutines.resume @@ -68,7 +68,7 @@ internal class SimHostTest { * Test overcommitting of resources by the hypervisor. */ @Test - fun testOvercommitted() = runBlockingSimulation { + fun testOvercommitted() = runSimulation { val duration = 5 * 60L val engine = FlowEngine(coroutineContext, clock) val machine = SimBareMetalMachine(engine, machineModel, SimplePowerDriver(ConstantPowerModel(0.0))) @@ -152,7 +152,7 @@ internal class SimHostTest { * Test failure of the host. */ @Test - fun testFailure() = runBlockingSimulation { + fun testFailure() = runSimulation { val duration = 5 * 60L val engine = FlowEngine(coroutineContext, clock) val machine = SimBareMetalMachine(engine, machineModel, SimplePowerDriver(ConstantPowerModel(0.0))) diff --git a/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/failure/HostFaultInjectorTest.kt b/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/failure/HostFaultInjectorTest.kt index f240a25f..90f534e6 100644 --- a/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/failure/HostFaultInjectorTest.kt +++ b/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/failure/HostFaultInjectorTest.kt @@ -29,7 +29,7 @@ import org.apache.commons.math3.distribution.LogNormalDistribution import org.apache.commons.math3.random.Well19937c import org.junit.jupiter.api.Test import org.opendc.compute.simulator.SimHost -import org.opendc.simulator.core.runBlockingSimulation +import org.opendc.simulator.kotlin.runSimulation import java.time.Clock import java.time.Duration import kotlin.coroutines.CoroutineContext @@ -43,7 +43,7 @@ internal class HostFaultInjectorTest { * Simple test case to test that nothing happens when the injector is not started. */ @Test - fun testInjectorNotStarted() = runBlockingSimulation { + fun testInjectorNotStarted() = runSimulation { val host = mockk<SimHost>(relaxUnitFun = true) val injector = createSimpleInjector(coroutineContext, clock, setOf(host)) @@ -58,7 +58,7 @@ internal class HostFaultInjectorTest { * Simple test case to test a start stop fault where the machine is stopped and started after some time. */ @Test - fun testInjectorStopsMachine() = runBlockingSimulation { + fun testInjectorStopsMachine() = runSimulation { val host = mockk<SimHost>(relaxUnitFun = true) val injector = createSimpleInjector(coroutineContext, clock, setOf(host)) @@ -77,7 +77,7 @@ internal class HostFaultInjectorTest { * Simple test case to test a start stop fault where multiple machines are stopped. */ @Test - fun testInjectorStopsMultipleMachines() = runBlockingSimulation { + fun testInjectorStopsMultipleMachines() = runSimulation { val hosts = listOf<SimHost>( mockk(relaxUnitFun = true), mockk(relaxUnitFun = true) |
