summaryrefslogtreecommitdiff
path: root/opendc-experiments/opendc-experiments-capelin/src
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-05-04 21:43:46 +0200
committerFabian Mastenbroek <mail.fabianm@gmail.com>2021-05-05 12:12:30 +0200
commitad65a05e3f41850807f95f7d643496a4d39a6197 (patch)
tree238b0fc83a5836d3fc08e3e888cec298eb8e8cd1 /opendc-experiments/opendc-experiments-capelin/src
parent6466d5e1b8da4582434f02dff2ab56e8f736ef85 (diff)
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.
Diffstat (limited to 'opendc-experiments/opendc-experiments-capelin/src')
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/Portfolio.kt21
-rw-r--r--opendc-experiments/opendc-experiments-capelin/src/main/resources/application.conf6
2 files changed, 12 insertions, 15 deletions
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
+}