summaryrefslogtreecommitdiff
path: root/opendc-experiments
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-06-21 14:34:10 +0200
committerGitHub <noreply@github.com>2021-06-21 14:34:10 +0200
commitba32561e4b0e00c00d528df615a58e396e0fddc0 (patch)
tree06bbb8161910a81b3dc1160b180650660bc50be4 /opendc-experiments
parentb8b0f39028af90fa54b42a00214b2ea9a5e48e2e (diff)
parent966715d7df139a431293f5c2fc67916fbcc1ecfb (diff)
simulator: Optimize resource interpreter implementation
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
Diffstat (limited to 'opendc-experiments')
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt4
-rw-r--r--opendc-experiments/opendc-experiments-energy21/src/main/kotlin/org/opendc/experiments/energy21/EnergyExperiment.kt4
2 files changed, 6 insertions, 2 deletions
diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt b/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt
index 0fbb7280..0485415c 100644
--- a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt
+++ b/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt
@@ -50,6 +50,7 @@ import org.opendc.simulator.compute.workload.SimTraceWorkload
import org.opendc.simulator.compute.workload.SimWorkload
import org.opendc.simulator.failures.CorrelatedFaultInjector
import org.opendc.simulator.failures.FaultInjector
+import org.opendc.simulator.resources.SimResourceInterpreter
import org.opendc.telemetry.sdk.metrics.export.CoroutineMetricReader
import org.opendc.telemetry.sdk.toOtelClock
import java.io.File
@@ -144,6 +145,7 @@ public suspend fun withComputeService(
scheduler: ComputeScheduler,
block: suspend CoroutineScope.(ComputeService) -> Unit
): Unit = coroutineScope {
+ val interpreter = SimResourceInterpreter(coroutineContext, clock)
val hosts = environmentReader
.use { it.read() }
.map { def ->
@@ -153,7 +155,7 @@ public suspend fun withComputeService(
def.model,
def.meta,
coroutineContext,
- clock,
+ interpreter,
meterProvider.get("opendc-compute-simulator"),
SimFairShareHypervisorProvider(),
def.powerModel
diff --git a/opendc-experiments/opendc-experiments-energy21/src/main/kotlin/org/opendc/experiments/energy21/EnergyExperiment.kt b/opendc-experiments/opendc-experiments-energy21/src/main/kotlin/org/opendc/experiments/energy21/EnergyExperiment.kt
index 65915cc6..2f14776a 100644
--- a/opendc-experiments/opendc-experiments-energy21/src/main/kotlin/org/opendc/experiments/energy21/EnergyExperiment.kt
+++ b/opendc-experiments/opendc-experiments-energy21/src/main/kotlin/org/opendc/experiments/energy21/EnergyExperiment.kt
@@ -49,6 +49,7 @@ import org.opendc.simulator.compute.model.ProcessingNode
import org.opendc.simulator.compute.model.ProcessingUnit
import org.opendc.simulator.compute.power.*
import org.opendc.simulator.core.runBlockingSimulation
+import org.opendc.simulator.resources.SimResourceInterpreter
import java.io.File
import java.time.Clock
import java.util.*
@@ -120,6 +121,7 @@ public class EnergyExperiment : Experiment("Energy Modeling 2021") {
block: suspend CoroutineScope.(ComputeService) -> Unit
): Unit = coroutineScope {
val model = createMachineModel()
+ val interpreter = SimResourceInterpreter(coroutineContext, clock)
val hosts = List(64) { id ->
SimHost(
UUID(0, id.toLong()),
@@ -127,7 +129,7 @@ public class EnergyExperiment : Experiment("Energy Modeling 2021") {
model,
emptyMap(),
coroutineContext,
- clock,
+ interpreter,
meterProvider.get("opendc-compute-simulator"),
SimFairShareHypervisorProvider(),
PerformanceScalingGovernor(),