summaryrefslogtreecommitdiff
path: root/opendc-web/opendc-web-runner
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-web/opendc-web-runner
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-web/opendc-web-runner')
-rw-r--r--opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/OpenDCRunner.kt11
1 files changed, 4 insertions, 7 deletions
diff --git a/opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/OpenDCRunner.kt b/opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/OpenDCRunner.kt
index c958bdb2..9a1319b6 100644
--- a/opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/OpenDCRunner.kt
+++ b/opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/OpenDCRunner.kt
@@ -23,7 +23,6 @@
package org.opendc.web.runner
import mu.KotlinLogging
-import org.opendc.compute.api.Server
import org.opendc.compute.workload.*
import org.opendc.compute.workload.telemetry.ComputeMetricReader
import org.opendc.compute.workload.topology.HostSpec
@@ -208,7 +207,7 @@ public class OpenDCRunner(
val phenomena = scenario.phenomena
val computeScheduler = createComputeScheduler(scenario.schedulerName, seeder)
val workload = trace(workloadName).sampleByLoad(workloadFraction)
- val (vms, interferenceModel) = workload.resolve(workloadLoader, seeder)
+ val vms = workload.resolve(workloadLoader, seeder)
val failureModel =
if (phenomena.failures)
@@ -220,17 +219,15 @@ public class OpenDCRunner(
coroutineContext,
clock,
computeScheduler,
- failureModel,
- interferenceModel.takeIf { phenomena.interference }
+ seed = 0L,
)
- val servers = mutableListOf<Server>()
- val reader = ComputeMetricReader(this, clock, simulator.service, servers, monitor)
+ val reader = ComputeMetricReader(this, clock, simulator.service, monitor)
try {
// Instantiate the topology onto the simulator
simulator.apply(topology)
// Run workload trace
- simulator.run(vms, seeder.nextLong(), servers)
+ simulator.run(vms, failureModel = failureModel, interference = phenomena.interference)
val serviceMetrics = simulator.service.getSchedulerStats()
logger.debug {