summaryrefslogtreecommitdiff
path: root/opendc-experiments
diff options
context:
space:
mode:
authorDante Niewenhuis <d.niewenhuis@hotmail.com>2025-05-16 10:32:08 +0200
committerGitHub <noreply@github.com>2025-05-16 10:32:08 +0200
commitd70312f122d9ef7c31b05757239ffc66af832dee (patch)
treec8eb5d86ce751b783c3f15744bcda35861eed65d /opendc-experiments
parent1bc17abd7691bc81f11ee125e2eeb4cb08da5245 (diff)
Updated website documentation (#334)
* Updated website documentation * Updated some documentation and fixed links * small updates * small updates
Diffstat (limited to 'opendc-experiments')
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ExperimentSpec.kt17
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ExportModelSpec.kt11
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ScenarioSpec.kt1
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/AllocationPolicySpec.kt10
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/HostFilterSpec.kt14
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/HostWeigherSpec.kt22
-rw-r--r--opendc-experiments/opendc-experiments-base/src/test/kotlin/org/opendc/experiments/base/ExperimentTest.kt14
7 files changed, 48 insertions, 41 deletions
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ExperimentSpec.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ExperimentSpec.kt
index df0a862d..71ab4002 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ExperimentSpec.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ExperimentSpec.kt
@@ -23,10 +23,7 @@
package org.opendc.experiments.base.experiment.specs
import kotlinx.serialization.Serializable
-import org.opendc.common.logger.infoNewLine
-import org.opendc.common.logger.logger
import org.opendc.compute.simulator.scheduler.ComputeSchedulerEnum
-import org.opendc.compute.simulator.telemetry.parquet.ComputeExportConfig
import org.opendc.experiments.base.experiment.specs.allocation.AllocationPolicySpec
import org.opendc.experiments.base.experiment.specs.allocation.PrefabAllocationPolicySpec
import java.util.UUID
@@ -42,25 +39,22 @@ import java.util.UUID
* @property outputFolder
* @property initialSeed
* @property runs
- * @property computeExportConfig configures which parquet columns are to
* be included in the output files.
*/
@Serializable
public data class ExperimentSpec(
- var id: Int = -1,
var name: String = "",
val outputFolder: String = "output",
val initialSeed: Int = 0,
val runs: Int = 1,
- val exportModels: Set<ExportModelSpec> = setOf(ExportModelSpec()),
- val computeExportConfig: ComputeExportConfig = ComputeExportConfig.ALL_COLUMNS,
- val maxNumFailures: Set<Int> = setOf(10),
val topologies: Set<ScenarioTopologySpec>,
val workloads: Set<WorkloadSpec>,
val allocationPolicies: Set<AllocationPolicySpec> = setOf(PrefabAllocationPolicySpec(ComputeSchedulerEnum.Mem)),
val failureModels: Set<FailureModelSpec?> = setOf(null),
+ val maxNumFailures: Set<Int> = setOf(10),
val checkpointModels: Set<CheckpointModelSpec?> = setOf(null),
+ val exportModels: Set<ExportModelSpec> = setOf(ExportModelSpec()),
) {
init {
require(runs > 0) { "The number of runs should always be positive" }
@@ -71,8 +65,6 @@ public data class ExperimentSpec(
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> {
@@ -96,7 +88,6 @@ public data class ExperimentSpec(
for (i in 0 until numScenarios) {
yield(
ScenarioSpec(
- id,
name,
outputFolder,
topologyList[(i / topologyDiv) % topologyList.size],
@@ -111,8 +102,4 @@ public data class ExperimentSpec(
}
}
}
-
- internal companion object {
- private val LOG by logger()
- }
}
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ExportModelSpec.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ExportModelSpec.kt
index 6d1ee0f0..4230f9aa 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ExportModelSpec.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ExportModelSpec.kt
@@ -23,8 +23,11 @@
package org.opendc.experiments.base.experiment.specs
import kotlinx.serialization.Serializable
+import org.opendc.common.logger.infoNewLine
+import org.opendc.common.logger.logger
import org.opendc.compute.simulator.telemetry.OutputFiles
import org.opendc.compute.simulator.telemetry.parquet.ComputeExportConfig
+import kotlin.getValue
/**
* specification describing how the results should be exported
@@ -34,10 +37,10 @@ import org.opendc.compute.simulator.telemetry.parquet.ComputeExportConfig
@Serializable
public data class ExportModelSpec(
val exportInterval: Long = 5 * 60,
+ var printFrequency: Int? = 24,
val computeExportConfig: ComputeExportConfig = ComputeExportConfig.ALL_COLUMNS,
val filesToExport: List<OutputFiles> = OutputFiles.entries.toList(),
var filesToExportDict: MutableMap<OutputFiles, Boolean> = OutputFiles.entries.associateWith { false }.toMutableMap(),
- var printFrequency: Int? = 24,
) {
init {
require(exportInterval > 0) { "The Export interval has to be higher than 0" }
@@ -47,5 +50,11 @@ public data class ExportModelSpec(
for (file in filesToExport) {
filesToExportDict[file] = true
}
+
+ LOG.infoNewLine(computeExportConfig.fmt())
+ }
+
+ internal companion object {
+ private val LOG by logger()
}
}
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ScenarioSpec.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ScenarioSpec.kt
index d9df6511..6025eaa8 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ScenarioSpec.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/ScenarioSpec.kt
@@ -30,7 +30,6 @@ import org.opendc.experiments.base.experiment.specs.allocation.TaskStopperSpec
@Serializable
public data class ScenarioSpec(
- var id: Int = -1,
var name: String = "",
val outputFolder: String = "output",
val topology: ScenarioTopologySpec,
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/AllocationPolicySpec.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/AllocationPolicySpec.kt
index bc96562c..8ea0a31e 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/AllocationPolicySpec.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/AllocationPolicySpec.kt
@@ -52,16 +52,16 @@ public data class PrefabAllocationPolicySpec(
@Serializable
@SerialName("filter")
public data class FilterAllocationPolicySpec(
- val filters: List<HostFilterSpec>,
- val weighers: List<HostWeigherSpec>,
+ val filters: List<HostFilterSpec> = listOf(ComputeFilterSpec()),
+ val weighers: List<HostWeigherSpec> = emptyList(),
val subsetSize: Int = 1,
) : AllocationPolicySpec
@Serializable
@SerialName("timeshift")
public data class TimeShiftAllocationPolicySpec(
- val filters: List<HostFilterSpec>,
- val weighers: List<HostWeigherSpec>,
+ val filters: List<HostFilterSpec> = listOf(ComputeFilterSpec()),
+ val weighers: List<HostWeigherSpec> = emptyList(),
val windowSize: Int = 168,
val subsetSize: Int = 1,
val forecast: Boolean = true,
@@ -110,10 +110,10 @@ public fun createComputeScheduler(
@Serializable
@SerialName("taskstopper")
public data class TaskStopperSpec(
+ val windowSize: Int = 168,
val forecast: Boolean = true,
val forecastThreshold: Double = 0.6,
val forecastSize: Int = 24,
- val windowSize: Int = 168,
)
public fun createTaskStopper(
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/HostFilterSpec.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/HostFilterSpec.kt
index 6a0ed2b8..1ae88d3c 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/HostFilterSpec.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/HostFilterSpec.kt
@@ -60,6 +60,12 @@ public data class ComputeFilterSpec(
) : HostFilterSpec()
@Serializable
+@SerialName("SameHost")
+public data class SameHostHostFilterSpec(
+ val filterName: HostFilterEnum = HostFilterEnum.SameHost,
+) : HostFilterSpec()
+
+@Serializable
@SerialName("DifferentHost")
public data class DifferentHostFilterSpec(
val filterName: HostFilterEnum = HostFilterEnum.DifferentHost,
@@ -80,12 +86,6 @@ public data class RamHostFilterSpec(
) : HostFilterSpec()
@Serializable
-@SerialName("SameHost")
-public data class SameHostHostFilterSpec(
- val filterName: HostFilterEnum = HostFilterEnum.SameHost,
-) : HostFilterSpec()
-
-@Serializable
@SerialName("VCpuCapacity")
public data class VCpuCapacityHostFilterSpec(
val filterName: HostFilterEnum = HostFilterEnum.VCpuCapacity,
@@ -101,10 +101,10 @@ public data class VCpuHostFilterSpec(
public fun createHostFilter(filterSpec: HostFilterSpec): HostFilter {
return when (filterSpec) {
is ComputeFilterSpec -> ComputeFilter()
+ is SameHostHostFilterSpec -> SameHostFilter()
is DifferentHostFilterSpec -> DifferentHostFilter()
is InstanceCountHostFilterSpec -> InstanceCountFilter(filterSpec.limit)
is RamHostFilterSpec -> RamFilter(filterSpec.allocationRatio)
- is SameHostHostFilterSpec -> SameHostFilter()
is VCpuCapacityHostFilterSpec -> VCpuCapacityFilter()
is VCpuHostFilterSpec -> VCpuFilter(filterSpec.allocationRatio)
}
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/HostWeigherSpec.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/HostWeigherSpec.kt
index 60f5ff8b..819f3ae2 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/HostWeigherSpec.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/HostWeigherSpec.kt
@@ -42,40 +42,40 @@ import org.opendc.compute.simulator.scheduler.weights.VCpuWeigher
public sealed class HostWeigherSpec
@Serializable
+@SerialName("Ram")
+public data class RamWeigherSpec(
+ val multiplier: Double = 1.0,
+) : HostWeigherSpec()
+
+@Serializable
@SerialName("CoreRam")
public data class CoreRamWeigherSpec(
- val multiplier: Double,
+ val multiplier: Double = 1.0,
) : HostWeigherSpec()
@Serializable
@SerialName("InstanceCount")
public data class InstanceCountWeigherSpec(
- val multiplier: Double,
-) : HostWeigherSpec()
-
-@Serializable
-@SerialName("Ram")
-public data class RamWeigherSpec(
- val multiplier: Double,
+ val multiplier: Double = 1.0,
) : HostWeigherSpec()
@Serializable
@SerialName("VCpuCapacity")
public data class VCpuCapacityWeigherSpec(
- val multiplier: Double,
+ val multiplier: Double = 1.0,
) : HostWeigherSpec()
@Serializable
@SerialName("VCpu")
public data class VCpuWeigherSpec(
- val multiplier: Double,
+ val multiplier: Double = 1.0,
) : HostWeigherSpec()
public fun createHostWeigher(weigherSpec: HostWeigherSpec): HostWeigher {
return when (weigherSpec) {
+ is RamWeigherSpec -> RamWeigher(weigherSpec.multiplier)
is CoreRamWeigherSpec -> CoreRamWeigher(weigherSpec.multiplier)
is InstanceCountWeigherSpec -> InstanceCountWeigher(weigherSpec.multiplier)
- is RamWeigherSpec -> RamWeigher(weigherSpec.multiplier)
is VCpuCapacityWeigherSpec -> VCpuCapacityWeigher(weigherSpec.multiplier)
is VCpuWeigherSpec -> VCpuWeigher(weigherSpec.multiplier)
}
diff --git a/opendc-experiments/opendc-experiments-base/src/test/kotlin/org/opendc/experiments/base/ExperimentTest.kt b/opendc-experiments/opendc-experiments-base/src/test/kotlin/org/opendc/experiments/base/ExperimentTest.kt
index 2fb5ece8..d4729350 100644
--- a/opendc-experiments/opendc-experiments-base/src/test/kotlin/org/opendc/experiments/base/ExperimentTest.kt
+++ b/opendc-experiments/opendc-experiments-base/src/test/kotlin/org/opendc/experiments/base/ExperimentTest.kt
@@ -25,6 +25,10 @@ package org.opendc.experiments.base
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertAll
+import org.opendc.compute.simulator.scheduler.MemorizingScheduler
+import org.opendc.compute.simulator.scheduler.filters.ComputeFilter
+import org.opendc.compute.simulator.scheduler.filters.RamFilter
+import org.opendc.compute.simulator.scheduler.filters.VCpuFilter
import org.opendc.compute.workload.Task
import org.opendc.simulator.compute.workload.trace.TraceFragment
import java.util.ArrayList
@@ -101,7 +105,15 @@ class ExperimentTest {
val topology = createTopology("single_1_2000.json")
- val monitor = runTest(topology, workload)
+ val monitor =
+ runTest(
+ topology,
+ workload,
+ computeScheduler =
+ MemorizingScheduler(
+ filters = listOf(ComputeFilter(), VCpuFilter(1.0), RamFilter(1.0)),
+ ),
+ )
assertAll(
{ assertEquals(15 * 60 * 1000, monitor.maxTimestamp) { "Total runtime incorrect" } },