summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--buildSrc/src/main/kotlin/Versions.kt2
-rw-r--r--gradle.properties1
-rw-r--r--opendc-experiments/opendc-experiments-capelin/build.gradle.kts1
-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
-rw-r--r--opendc-experiments/opendc-experiments-energy21/build.gradle.kts1
-rw-r--r--opendc-experiments/opendc-experiments-energy21/src/main/kotlin/org/opendc/experiments/energy21/EnergyExperiment.kt14
-rw-r--r--opendc-experiments/opendc-experiments-energy21/src/main/resources/application.conf8
-rw-r--r--opendc-experiments/opendc-experiments-serverless20/build.gradle.kts1
-rw-r--r--opendc-experiments/opendc-experiments-serverless20/src/main/kotlin/org/opendc/experiments/serverless/ServerlessExperiment.kt14
-rw-r--r--opendc-experiments/opendc-experiments-serverless20/src/main/resources/application.conf8
-rw-r--r--opendc-platform/build.gradle.kts1
12 files changed, 43 insertions, 35 deletions
diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt
index 6aa9260b..bb187a40 100644
--- a/buildSrc/src/main/kotlin/Versions.kt
+++ b/buildSrc/src/main/kotlin/Versions.kt
@@ -26,7 +26,6 @@ import org.gradle.api.JavaVersion
import org.gradle.api.Project
import org.gradle.kotlin.dsl.extra
import kotlin.properties.ReadOnlyProperty
-import kotlin.reflect.KProperty
/**
* This class contains the versions of the dependencies shared by the different
@@ -46,6 +45,7 @@ public class Versions(private val project: Project) {
val slf4j by version()
val kotlinLogging by version(name = "kotlin-logging")
val log4j by version()
+ val config by version()
val kotlinxCoroutines by version(name = "kotlinx-coroutines")
diff --git a/gradle.properties b/gradle.properties
index cbe19a08..20f4b711 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -47,6 +47,7 @@ hadoop-client.version = 3.2.1
sentry-log4j2.version = 4.2.0
mongodb-driver-sync.version = 4.2.1
classgraph.version = 4.8.102
+config.version = 1.4.1
# Dependencies (Testing)
junit-jupiter.version = 5.7.1
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<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
+}
diff --git a/opendc-experiments/opendc-experiments-energy21/build.gradle.kts b/opendc-experiments/opendc-experiments-energy21/build.gradle.kts
index 7d5fc98d..fc37fc1c 100644
--- a/opendc-experiments/opendc-experiments-energy21/build.gradle.kts
+++ b/opendc-experiments/opendc-experiments-energy21/build.gradle.kts
@@ -39,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 772c9bcc..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,6 +22,7 @@
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
@@ -65,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.
@@ -96,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
+}
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
+}
diff --git a/opendc-platform/build.gradle.kts b/opendc-platform/build.gradle.kts
index ea0591ad..3fbc144e 100644
--- a/opendc-platform/build.gradle.kts
+++ b/opendc-platform/build.gradle.kts
@@ -31,6 +31,7 @@ dependencies {
api("org.jetbrains.kotlinx:kotlinx-coroutines-core:${versions.kotlinxCoroutines}")
api("org.jetbrains.kotlinx:kotlinx-coroutines-test:${versions.kotlinxCoroutines}")
+ api("com.typesafe:config:1.4.1")
api("io.github.microutils:kotlin-logging:${versions.kotlinLogging}")
runtime("org.slf4j:slf4j-simple:${versions.slf4j}")
runtime("org.apache.logging.log4j:log4j-slf4j-impl:${versions.log4j}")