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-serverless20/build.gradle.kts | 1 + .../opendc/experiments/serverless/ServerlessExperiment.kt | 14 ++++---------- .../src/main/resources/application.conf | 8 ++++++++ 3 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 opendc-experiments/opendc-experiments-serverless20/src/main/resources/application.conf (limited to 'opendc-experiments/opendc-experiments-serverless20') diff --git a/opendc-experiments/opendc-experiments-serverless20/build.gradle.kts b/opendc-experiments/opendc-experiments-serverless20/build.gradle.kts index 2dfa2d3f..f19d6067 100644 --- a/opendc-experiments/opendc-experiments-serverless20/build.gradle.kts +++ b/opendc-experiments/opendc-experiments-serverless20/build.gradle.kts @@ -37,6 +37,7 @@ dependencies { implementation(project(":opendc-telemetry:opendc-telemetry-sdk")) implementation(project(":opendc-harness:opendc-harness-cli")) 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-serverless20/src/main/kotlin/org/opendc/experiments/serverless/ServerlessExperiment.kt b/opendc-experiments/opendc-experiments-serverless20/src/main/kotlin/org/opendc/experiments/serverless/ServerlessExperiment.kt index 67b5ea54..3ff01e39 100644 --- a/opendc-experiments/opendc-experiments-serverless20/src/main/kotlin/org/opendc/experiments/serverless/ServerlessExperiment.kt +++ b/opendc-experiments/opendc-experiments-serverless20/src/main/kotlin/org/opendc/experiments/serverless/ServerlessExperiment.kt @@ -22,9 +22,9 @@ package org.opendc.experiments.serverless +import com.typesafe.config.ConfigFactory import io.opentelemetry.api.metrics.MeterProvider import io.opentelemetry.sdk.metrics.SdkMeterProvider -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -59,14 +59,9 @@ public class ServerlessExperiment : Experiment("Serverless") { 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/serverless")) - - /** - * 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.serverless20") /** * The routing policy to test. @@ -78,14 +73,13 @@ public class ServerlessExperiment : Experiment("Serverless") { */ private val coldStartModel by anyOf(ColdStartModel.LAMBDA, ColdStartModel.AZURE, ColdStartModel.GOOGLE) - @OptIn(ExperimentalCoroutinesApi::class) override fun doRun(repeat: Int): Unit = runBlockingSimulation { val meterProvider: MeterProvider = SdkMeterProvider .builder() .setClock(clock.toOtelClock()) .build() - val trace = ServerlessTraceReader().parse(tracePath) + val trace = ServerlessTraceReader().parse(File(config.getString("trace-path"))) val traceById = trace.associateBy { it.id } val delayInjector = StochasticDelayInjector(coldStartModel, Random()) val deployer = SimFunctionDeployer(clock, this, createMachineModel(), delayInjector) { FunctionTraceWorkload(traceById.getValue(it.name)) } diff --git a/opendc-experiments/opendc-experiments-serverless20/src/main/resources/application.conf b/opendc-experiments/opendc-experiments-serverless20/src/main/resources/application.conf new file mode 100644 index 00000000..a065c5d6 --- /dev/null +++ b/opendc-experiments/opendc-experiments-serverless20/src/main/resources/application.conf @@ -0,0 +1,8 @@ +# Default configuration for the serverless experiments +opendc.experiments.serverless20 { + # Path to the directory containing the serverless trace + trace-path = input/traces/serverless + + # Path to the output directory to write the results to + output-path = output +} -- cgit v1.2.3