summaryrefslogtreecommitdiff
path: root/opendc-compute/opendc-compute-simulator/src/test
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2022-09-23 12:49:32 +0200
committerGitHub <noreply@github.com>2022-09-23 12:49:32 +0200
commit2d2a3854d355bd4b074ef651f291d34081e70d96 (patch)
treee99c4bf7e5647341c1e269797f7f46099753436f /opendc-compute/opendc-compute-simulator/src/test
parent8d1d091f093e6ac32dba1e6a4f74490b280fcc4b (diff)
parent3d5eb562227dcad5a8a60f31b96e6d68f7774fb2 (diff)
merge: Do not require interference model during topology construction (#102)
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.
Diffstat (limited to 'opendc-compute/opendc-compute-simulator/src/test')
-rw-r--r--opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/SimHostTest.kt22
1 files changed, 15 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 5ba4a667..a7993291 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
@@ -30,16 +30,20 @@ import org.junit.jupiter.api.assertAll
import org.opendc.compute.api.*
import org.opendc.compute.service.driver.Host
import org.opendc.compute.service.driver.HostListener
-import org.opendc.simulator.compute.kernel.SimFairShareHypervisorProvider
+import org.opendc.simulator.compute.SimBareMetalMachine
+import org.opendc.simulator.compute.kernel.SimHypervisor
import org.opendc.simulator.compute.model.MachineModel
import org.opendc.simulator.compute.model.MemoryUnit
import org.opendc.simulator.compute.model.ProcessingNode
import org.opendc.simulator.compute.model.ProcessingUnit
+import org.opendc.simulator.compute.power.ConstantPowerModel
+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 java.time.Instant
import java.util.*
import kotlin.coroutines.resume
@@ -67,14 +71,16 @@ internal class SimHostTest {
fun testOvercommitted() = runBlockingSimulation {
val duration = 5 * 60L
val engine = FlowEngine(coroutineContext, clock)
+ val machine = SimBareMetalMachine(engine, machineModel, SimplePowerDriver(ConstantPowerModel(0.0)))
+ val hypervisor = SimHypervisor(engine, FlowMultiplexerFactory.maxMinMultiplexer(), SplittableRandom(1), null)
val host = SimHost(
uid = UUID.randomUUID(),
name = "test",
- model = machineModel,
meta = emptyMap(),
coroutineContext,
- engine,
- SimFairShareHypervisorProvider()
+ clock,
+ machine,
+ hypervisor
)
val vmImageA = MockImage(
UUID.randomUUID(),
@@ -149,14 +155,16 @@ internal class SimHostTest {
fun testFailure() = runBlockingSimulation {
val duration = 5 * 60L
val engine = FlowEngine(coroutineContext, clock)
+ val machine = SimBareMetalMachine(engine, machineModel, SimplePowerDriver(ConstantPowerModel(0.0)))
+ val hypervisor = SimHypervisor(engine, FlowMultiplexerFactory.maxMinMultiplexer(), SplittableRandom(1), null)
val host = SimHost(
uid = UUID.randomUUID(),
name = "test",
- model = machineModel,
meta = emptyMap(),
coroutineContext,
- engine,
- SimFairShareHypervisorProvider()
+ clock,
+ machine,
+ hypervisor
)
val image = MockImage(
UUID.randomUUID(),