summaryrefslogtreecommitdiff
path: root/opendc-experiments/opendc-experiments-energy21
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-05-05 12:23:25 +0200
committerGitHub <noreply@github.com>2021-05-05 12:23:25 +0200
commite1d892bcbaa7e8361c150f684ca6a0dc5e036a87 (patch)
tree99742afbc3cd762ec527f5a6c7e31ee245ee0385 /opendc-experiments/opendc-experiments-energy21
parente021d46ab1601d0c3a00724358164483608f6297 (diff)
parent7fdfe48439f33abec8aa63fc4ab36fd687d59a43 (diff)
harness: Improve OpenDC Experiment Harness (v1)
This pull request contains several improvements to the OpenDC Experiment Harness, which aims to improve user-experience of users when re-running experiments in the repository. * Split the harness into separate modules * Add support for adding additional classpath entries when running experiments via the console * Initial support for configuration of experiments using HOCON.
Diffstat (limited to 'opendc-experiments/opendc-experiments-energy21')
-rw-r--r--opendc-experiments/opendc-experiments-energy21/build.gradle.kts9
-rw-r--r--opendc-experiments/opendc-experiments-energy21/src/main/kotlin/org/opendc/experiments/energy21/EnergyExperiment.kt17
-rw-r--r--opendc-experiments/opendc-experiments-energy21/src/main/resources/application.conf8
3 files changed, 15 insertions, 19 deletions
diff --git a/opendc-experiments/opendc-experiments-energy21/build.gradle.kts b/opendc-experiments/opendc-experiments-energy21/build.gradle.kts
index 32b1086d..fc37fc1c 100644
--- a/opendc-experiments/opendc-experiments-energy21/build.gradle.kts
+++ b/opendc-experiments/opendc-experiments-energy21/build.gradle.kts
@@ -27,17 +27,11 @@ plugins {
`kotlin-library-conventions`
`experiment-conventions`
`testing-conventions`
- application
-}
-
-application {
- mainClass.set("org.opendc.harness.runner.console.ConsoleRunnerKt")
- applicationDefaultJvmArgs = listOf("-Xms2500M")
}
dependencies {
api(platform(project(":opendc-platform")))
- api(project(":opendc-harness"))
+ api(project(":opendc-harness:opendc-harness-engine"))
implementation(project(":opendc-format"))
implementation(project(":opendc-simulator:opendc-simulator-core"))
implementation(project(":opendc-simulator:opendc-simulator-compute"))
@@ -45,6 +39,7 @@ dependencies {
implementation(project(":opendc-experiments:opendc-experiments-capelin"))
implementation(project(":opendc-telemetry:opendc-telemetry-sdk"))
implementation("io.github.microutils:kotlin-logging")
+ implementation("com.typesafe:config")
implementation("org.apache.parquet:parquet-avro:${versions["parquet-avro"]}")
implementation("org.apache.hadoop:hadoop-client:${versions["hadoop-client"]}") {
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 bb6dcd3a..7460a1e7 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
@@ -22,11 +22,11 @@
package org.opendc.experiments.energy21
+import com.typesafe.config.ConfigFactory
import io.opentelemetry.api.metrics.MeterProvider
import io.opentelemetry.sdk.metrics.SdkMeterProvider
import io.opentelemetry.sdk.metrics.export.MetricProducer
import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.coroutineScope
import mu.KotlinLogging
@@ -66,14 +66,9 @@ public class EnergyExperiment : Experiment("Energy Modeling 2021") {
private val logger = KotlinLogging.logger {}
/**
- * The path to where the traces are located.
+ * The configuration to use.
*/
- private val tracePath by anyOf(File("input/traces/"))
-
- /**
- * The path to where the output results should be written.
- */
- private val outputPath by anyOf(File("output/"))
+ private val config = ConfigFactory.load().getConfig("opendc.experiments.energy21")
/**
* The traces to test.
@@ -85,9 +80,7 @@ public class EnergyExperiment : Experiment("Energy Modeling 2021") {
*/
private val powerModel by anyOf(PowerModelType.LINEAR, PowerModelType.CUBIC, PowerModelType.INTERPOLATION)
- @OptIn(ExperimentalCoroutinesApi::class)
override fun doRun(repeat: Int): Unit = runBlockingSimulation {
-
val chan = Channel<Unit>(Channel.CONFLATED)
val allocationPolicy = FilterScheduler(
filters = listOf(ComputeFilter(), ComputeCapabilitiesFilter()),
@@ -99,8 +92,8 @@ public class EnergyExperiment : Experiment("Energy Modeling 2021") {
.setClock(clock.toOtelClock())
.build()
- val monitor = ParquetExperimentMonitor(outputPath, "power_model=$powerModel/run_id=$repeat", 4096)
- val trace = Sc20StreamingParquetTraceReader(File(tracePath, trace), random = Random(1).asKotlinRandom())
+ val monitor = ParquetExperimentMonitor(File(config.getString("output-path")), "power_model=$powerModel/run_id=$repeat", 4096)
+ val trace = Sc20StreamingParquetTraceReader(File(config.getString("trace-path"), trace), random = Random(1).asKotlinRandom())
withComputeService(clock, meterProvider, allocationPolicy) { scheduler ->
withMonitor(monitor, clock, meterProvider as MetricProducer, scheduler) {
diff --git a/opendc-experiments/opendc-experiments-energy21/src/main/resources/application.conf b/opendc-experiments/opendc-experiments-energy21/src/main/resources/application.conf
new file mode 100644
index 00000000..3e011862
--- /dev/null
+++ b/opendc-experiments/opendc-experiments-energy21/src/main/resources/application.conf
@@ -0,0 +1,8 @@
+# Default configuration for the energy experiments
+opendc.experiments.energy21 {
+ # Path to the directory containing the input traces
+ trace-path = input/traces
+
+ # Path to the output directory to write the results to
+ output-path = output
+}