summaryrefslogtreecommitdiff
path: root/opendc-experiments/opendc-experiments-energy21/src/main
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-09-07 16:04:46 +0200
committerGitHub <noreply@github.com>2021-09-07 16:04:46 +0200
commit3eda751b725448139217dc1929dca1fc354e2a4e (patch)
tree11d933753c515140a6ae846fe96448ad64b165aa /opendc-experiments/opendc-experiments-energy21/src/main
parenteb4de7f832c6d26725e0d7c29644c704ea82604e (diff)
parent18ff316a6b6ab984ebf8283ea48ed98ec69d8295 (diff)
merge: Prepare for risk analysis experiments
This pull request adds the necessary code in preparation for the risk analysis experiments: - Track provisioning time - Track host up/down time - Track guest up/down time - Support overcommitted memory - Do not fail inactive guests - Mark unschedulable server as terminated - Make ExperimentMonitor optional for trace processing - Report up/downtime metrics in experiment monitor - Move metric collection outside Capelin code - Resolve kotlin-reflect incompatibility - Restructure input reading classes **Breaking API Changes** - `ExperimentMonitor` replaced in favour of `ComputeMonitor`
Diffstat (limited to 'opendc-experiments/opendc-experiments-energy21/src/main')
-rw-r--r--opendc-experiments/opendc-experiments-energy21/src/main/kotlin/org/opendc/experiments/energy21/EnergyExperiment.kt18
1 files changed, 10 insertions, 8 deletions
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 e64e20a2..02aaab3c 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
@@ -37,7 +37,7 @@ import org.opendc.compute.service.scheduler.filters.RamFilter
import org.opendc.compute.service.scheduler.filters.VCpuFilter
import org.opendc.compute.simulator.SimHost
import org.opendc.experiments.capelin.*
-import org.opendc.experiments.capelin.monitor.ParquetExperimentMonitor
+import org.opendc.experiments.capelin.export.parquet.ParquetExportMonitor
import org.opendc.experiments.capelin.trace.StreamingParquetTraceReader
import org.opendc.harness.dsl.Experiment
import org.opendc.harness.dsl.anyOf
@@ -50,6 +50,8 @@ 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 org.opendc.telemetry.compute.collectServiceMetrics
+import org.opendc.telemetry.compute.withMonitor
import java.io.File
import java.time.Clock
import java.util.*
@@ -87,11 +89,11 @@ public class EnergyExperiment : Experiment("Energy Modeling 2021") {
)
val meterProvider: MeterProvider = createMeterProvider(clock)
- val monitor = ParquetExperimentMonitor(File(config.getString("output-path")), "power_model=$powerModel/run_id=$repeat", 4096)
+ val monitor = ParquetExportMonitor(File(config.getString("output-path")), "power_model=$powerModel/run_id=$repeat", 4096)
val trace = StreamingParquetTraceReader(File(config.getString("trace-path"), trace))
withComputeService(clock, meterProvider, allocationPolicy) { scheduler ->
- withMonitor(monitor, clock, meterProvider as MetricProducer, scheduler) {
+ withMonitor(scheduler, clock, meterProvider as MetricProducer, monitor) {
processTrace(
clock,
trace,
@@ -102,12 +104,12 @@ public class EnergyExperiment : Experiment("Energy Modeling 2021") {
}
}
- val monitorResults = collectMetrics(meterProvider as MetricProducer)
+ val monitorResults = collectServiceMetrics(clock.millis(), meterProvider as MetricProducer)
logger.debug {
- "Finish SUBMIT=${monitorResults.submittedVms} " +
- "FAIL=${monitorResults.unscheduledVms} " +
- "QUEUE=${monitorResults.queuedVms} " +
- "RUNNING=${monitorResults.runningVms}"
+ "Finish SUBMIT=${monitorResults.instanceCount} " +
+ "FAIL=${monitorResults.failedInstanceCount} " +
+ "QUEUE=${monitorResults.queuedInstanceCount} " +
+ "RUNNING=${monitorResults.runningInstanceCount}"
}
}