summaryrefslogtreecommitdiff
path: root/opendc-experiments
diff options
context:
space:
mode:
Diffstat (limited to 'opendc-experiments')
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt1
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/Scenario.kt3
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/ScenarioFactories.kt1
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/ScenarioReader.kt19
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/specs/ScenariosSpec.kt14
5 files changed, 26 insertions, 12 deletions
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt
index b48b8fe6..0f76d580 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt
@@ -159,6 +159,7 @@ public fun addExportModel(
File("${scenario.outputFolder}/raw-output/$index"),
"seed=$seed",
bufferSize = 4096,
+ computeExportConfig = scenario.computeExportConfig,
),
Duration.ofSeconds(scenario.exportModelSpec.exportInterval),
startTime,
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/Scenario.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/Scenario.kt
index 9ce462f4..c31f0300 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/Scenario.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/Scenario.kt
@@ -22,6 +22,7 @@
package org.opendc.experiments.base.scenario
+import org.opendc.compute.telemetry.export.parquet.ComputeExportConfig
import org.opendc.experiments.base.scenario.specs.AllocationPolicySpec
import org.opendc.experiments.base.scenario.specs.CheckpointModelSpec
import org.opendc.experiments.base.scenario.specs.ExportModelSpec
@@ -41,6 +42,7 @@ import org.opendc.experiments.base.scenario.specs.WorkloadSpec
* @property name The String representing the name of the scenario. It defaults to an empty string.
* @property runs The Int representing the number of runs of the scenario. It defaults to 1.
* @property initialSeed The Int representing the initial seed of the scenario. It defaults to 0.
+ * @property computeExportConfig configures which parquet columns are to be included in the output files.
*/
public data class Scenario(
var id: Int = -1,
@@ -52,6 +54,7 @@ public data class Scenario(
val carbonTracePath: String? = null,
val exportModelSpec: ExportModelSpec = ExportModelSpec(),
val outputFolder: String = "output",
+ val computeExportConfig: ComputeExportConfig,
val name: String = "",
val runs: Int = 1,
val initialSeed: Int = 0,
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/ScenarioFactories.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/ScenarioFactories.kt
index e47d9c58..fb43f102 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/ScenarioFactories.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/ScenarioFactories.kt
@@ -82,6 +82,7 @@ public fun getScenarios(scenariosSpec: ScenariosSpec): List<Scenario> {
name = scenarioID.toString(),
runs = scenariosSpec.runs,
initialSeed = scenariosSpec.initialSeed,
+ computeExportConfig = scenarioSpec.computeExportConfig,
)
trackScenario(scenarioSpec, outputFolder)
scenarios.add(scenario)
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/ScenarioReader.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/ScenarioReader.kt
index a7cda768..1fba71d1 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/ScenarioReader.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/ScenarioReader.kt
@@ -25,6 +25,7 @@ package org.opendc.experiments.base.scenario
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.decodeFromStream
+import org.opendc.compute.telemetry.export.parquet.ComputeExportConfig
import org.opendc.experiments.base.scenario.specs.ScenariosSpec
import java.io.File
import java.io.InputStream
@@ -35,25 +36,19 @@ public class ScenarioReader {
// private val jsonReader = Json { serializersModule = failureModule }
private val jsonReader = Json
- @OptIn(ExperimentalSerializationApi::class)
- public fun read(file: File): ScenariosSpec {
- val input = file.inputStream()
+ public fun read(file: File): ScenariosSpec = read(file.inputStream())
- return jsonReader.decodeFromStream<ScenariosSpec>(input)
- }
-
- @OptIn(ExperimentalSerializationApi::class)
- public fun read(path: Path): ScenariosSpec {
- val input = path.inputStream()
-
- return jsonReader.decodeFromStream<ScenariosSpec>(input)
- }
+ public fun read(path: Path): ScenariosSpec = read(path.inputStream())
/**
* Read the specified [input].
*/
@OptIn(ExperimentalSerializationApi::class)
public fun read(input: InputStream): ScenariosSpec {
+ // Loads the default parquet output fields,
+ // so that they can be deserialized
+ ComputeExportConfig.loadDfltColumns()
+
return jsonReader.decodeFromStream<ScenariosSpec>(input)
}
}
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/specs/ScenariosSpec.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/specs/ScenariosSpec.kt
index da3ceecf..cb4491b6 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/specs/ScenariosSpec.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/specs/ScenariosSpec.kt
@@ -23,6 +23,9 @@
package org.opendc.experiments.base.scenario.specs
import kotlinx.serialization.Serializable
+import org.opendc.common.logger.infoNewLine
+import org.opendc.common.logger.logger
+import org.opendc.compute.telemetry.export.parquet.ComputeExportConfig
import java.util.UUID
@Serializable
@@ -30,6 +33,7 @@ public data class ScenarioSpec(
var id: Int = -1,
var name: String = "",
val outputFolder: String = "output",
+ val computeExportConfig: ComputeExportConfig,
val topology: ScenarioTopologySpec,
val workload: WorkloadSpec,
val allocationPolicy: AllocationPolicySpec = AllocationPolicySpec(),
@@ -50,6 +54,8 @@ public data class ScenarioSpec(
* @property outputFolder
* @property initialSeed
* @property runs
+ * @property computeExportConfig configures which parquet columns are to
+ * be included in the output files.
*/
@Serializable
public data class ScenariosSpec(
@@ -65,6 +71,7 @@ public data class ScenariosSpec(
val failureModels: Set<FailureModelSpec?> = setOf(null),
val checkpointModels: Set<CheckpointModelSpec?> = setOf(null),
val carbonTracePaths: Set<String?> = setOf(null),
+ val computeExportConfig: ComputeExportConfig = ComputeExportConfig.ALL_COLUMNS,
) {
init {
require(runs > 0) { "The number of runs should always be positive" }
@@ -75,6 +82,8 @@ public data class ScenariosSpec(
name = "unnamed-simulation-${UUID.randomUUID().toString().substring(0, 4)}"
// "workload=${workloads[0].name}_topology=${topologies[0].name}_allocationPolicy=${allocationPolicies[0].name}"
}
+
+ LOG.infoNewLine(computeExportConfig.fmt())
}
public fun getCartesian(): Sequence<ScenarioSpec> {
@@ -101,6 +110,7 @@ public data class ScenariosSpec(
id,
name,
outputFolder,
+ computeExportConfig = computeExportConfig,
topologyList[(i / topologyDiv) % topologyList.size],
workloadList[(i / workloadDiv) % workloadList.size],
allocationPolicyList[(i / allocationDiv) % allocationPolicyList.size],
@@ -113,4 +123,8 @@ public data class ScenariosSpec(
}
}
}
+
+ internal companion object {
+ private val LOG by logger()
+ }
}