diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2021-05-05 12:23:25 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-05 12:23:25 +0200 |
| commit | e1d892bcbaa7e8361c150f684ca6a0dc5e036a87 (patch) | |
| tree | 99742afbc3cd762ec527f5a6c7e31ee245ee0385 /opendc-experiments/opendc-experiments-capelin | |
| parent | e021d46ab1601d0c3a00724358164483608f6297 (diff) | |
| parent | 7fdfe48439f33abec8aa63fc4ab36fd687d59a43 (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-capelin')
3 files changed, 14 insertions, 16 deletions
diff --git a/opendc-experiments/opendc-experiments-capelin/build.gradle.kts b/opendc-experiments/opendc-experiments-capelin/build.gradle.kts index b2d7cc30..06a35c4b 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")) @@ -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<Unit>(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 +} |
