From 4a8b32d288ba3ee986ecef7933fa77554d34e762 Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Tue, 4 May 2021 19:19:47 +0200 Subject: harness: Split harness into separate modules This change splits the OpenDC Experiment Harness into separate modules. This prevents users from pulling in unnecessary dependencies when depending on the harness API. --- opendc-experiments/opendc-experiments-capelin/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'opendc-experiments/opendc-experiments-capelin') diff --git a/opendc-experiments/opendc-experiments-capelin/build.gradle.kts b/opendc-experiments/opendc-experiments-capelin/build.gradle.kts index b2d7cc30..83d89574 100644 --- a/opendc-experiments/opendc-experiments-capelin/build.gradle.kts +++ b/opendc-experiments/opendc-experiments-capelin/build.gradle.kts @@ -31,7 +31,7 @@ plugins { 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")) -- cgit v1.2.3 From ad65a05e3f41850807f95f7d643496a4d39a6197 Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Tue, 4 May 2021 21:43:46 +0200 Subject: exp: Add support for experiment configuration This change adds support for configuring the experiments via configuration files using the TypeSafe config library. In the future, we will also integrate support for configuration into the harness. --- .../opendc-experiments-capelin/build.gradle.kts | 1 + .../org/opendc/experiments/capelin/Portfolio.kt | 21 ++++++--------------- .../src/main/resources/application.conf | 6 ++++++ 3 files changed, 13 insertions(+), 15 deletions(-) create mode 100644 opendc-experiments/opendc-experiments-capelin/src/main/resources/application.conf (limited to 'opendc-experiments/opendc-experiments-capelin') diff --git a/opendc-experiments/opendc-experiments-capelin/build.gradle.kts b/opendc-experiments/opendc-experiments-capelin/build.gradle.kts index 83d89574..06a35c4b 100644 --- a/opendc-experiments/opendc-experiments-capelin/build.gradle.kts +++ b/opendc-experiments/opendc-experiments-capelin/build.gradle.kts @@ -39,6 +39,7 @@ dependencies { implementation(project(":opendc-compute:opendc-compute-simulator")) implementation("io.github.microutils:kotlin-logging") + implementation("com.typesafe:config") implementation("me.tongfei:progressbar:${versions["progressbar"]}") implementation("com.github.ajalt.clikt:clikt:${versions["clikt"]}") diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/Portfolio.kt b/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/Portfolio.kt index fc6f79d3..b70eefb2 100644 --- a/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/Portfolio.kt +++ b/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/Portfolio.kt @@ -22,6 +22,7 @@ package org.opendc.experiments.capelin +import com.typesafe.config.ConfigFactory import io.opentelemetry.sdk.metrics.export.MetricProducer import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.cancel @@ -60,19 +61,9 @@ public abstract class Portfolio(name: String) : Experiment(name) { private val logger = KotlinLogging.logger {} /** - * The path to where the environments are located. + * The configuration to use. */ - private val environmentPath by anyOf(File("input/environments/")) - - /** - * The path to where the traces are located. - */ - 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.capelin") /** * The path to the original VM placements file. @@ -115,7 +106,7 @@ public abstract class Portfolio(name: String) : Experiment(name) { @OptIn(ExperimentalCoroutinesApi::class) override fun doRun(repeat: Int): Unit = runBlockingSimulation { val seeder = Random(repeat.toLong()) - val environment = Sc20ClusterEnvironmentReader(File(environmentPath, "${topology.name}.txt")) + val environment = Sc20ClusterEnvironmentReader(File(config.getString("env-path"), "${topology.name}.txt")) val chan = Channel(Channel.CONFLATED) val allocationPolicy = createComputeScheduler(seeder) @@ -131,7 +122,7 @@ public abstract class Portfolio(name: String) : Experiment(name) { val rawReaders = workloadNames.map { workloadName -> traceReaders.computeIfAbsent(workloadName) { logger.info { "Loading trace $workloadName" } - Sc20RawParquetTraceReader(File(tracePath, workloadName)) + Sc20RawParquetTraceReader(File(config.getString("trace-path"), workloadName)) } } @@ -141,7 +132,7 @@ public abstract class Portfolio(name: String) : Experiment(name) { val trace = Sc20ParquetTraceReader(rawReaders, performanceInterferenceModel, workload, seeder.nextInt()) val monitor = ParquetExperimentMonitor( - outputPath, + File(config.getString("output-path")), "portfolio_id=$name/scenario_id=$id/run_id=$repeat", 4096 ) diff --git a/opendc-experiments/opendc-experiments-capelin/src/main/resources/application.conf b/opendc-experiments/opendc-experiments-capelin/src/main/resources/application.conf new file mode 100644 index 00000000..f0e0f2d3 --- /dev/null +++ b/opendc-experiments/opendc-experiments-capelin/src/main/resources/application.conf @@ -0,0 +1,6 @@ +# Default configuration for the Capelin experiments +opendc.experiments.capelin { + env-path = input/environments/ + trace-path = input/traces/ + output-path = output +} -- cgit v1.2.3