From bb945c2fdd7b20898e3dfccbac7da2a427418216 Mon Sep 17 00:00:00 2001 From: Dante Niewenhuis Date: Thu, 23 Jan 2025 12:46:33 +0100 Subject: Added sampleFraction and submissionTime to the workloadSpec (#295) * Added sampleFraction and submissionTime to the workloadSpec * Removed commented code --- .../opendc/experiments/base/experiment/specs/WorkloadSpec.kt | 7 +++++++ .../org/opendc/experiments/base/runner/ScenarioReplayer.kt | 3 --- .../org/opendc/experiments/base/runner/ScenarioRunner.kt | 12 ++---------- 3 files changed, 9 insertions(+), 13 deletions(-) (limited to 'opendc-experiments/opendc-experiments-base') diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/WorkloadSpec.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/WorkloadSpec.kt index a3414054..87c7abe9 100644 --- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/WorkloadSpec.kt +++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/WorkloadSpec.kt @@ -32,15 +32,20 @@ import java.io.File * * @property pathToFile * @property type + * @property sampleFraction + * @property submissionTime */ @Serializable public data class WorkloadSpec( val pathToFile: String, val type: WorkloadTypes, + val sampleFraction: Double = 1.0, + val submissionTime: String? = null, ) { public val name: String = File(pathToFile).nameWithoutExtension init { + require(sampleFraction > 0) { "The fraction of the tasks can not be 0.0 or lower" } require(File(pathToFile).exists()) { "The provided path to the workload: $pathToFile does not exist " } } } @@ -65,6 +70,7 @@ public enum class WorkloadTypes { public fun getWorkloadLoader( type: WorkloadTypes, pathToFile: File, + submissionTime: String?, checkpointInterval: Long, checkpointDuration: Long, checkpointIntervalScaling: Double, @@ -73,6 +79,7 @@ public fun getWorkloadLoader( WorkloadTypes.ComputeWorkload -> ComputeWorkloadLoader( pathToFile, + submissionTime, checkpointInterval, checkpointDuration, checkpointIntervalScaling, diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt index a0263e38..45fedd0d 100644 --- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt +++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt @@ -139,9 +139,6 @@ public suspend fun ComputeService.replay( // Wait until the task is terminated taskWatcher.wait() - - // Stop the task after reaching the end-time of the virtual machine -// task.delete() } } } 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 cda43eb7..c9c2729d 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 @@ -80,24 +80,16 @@ public fun runScenario( val checkpointDuration = scenario.checkpointModelSpec?.checkpointDuration ?: 0L val checkpointIntervalScaling = scenario.checkpointModelSpec?.checkpointIntervalScaling ?: 1.0 -// val workloadLoader = -// ComputeWorkloadLoader( -// File(scenario.workloadSpec.pathToFile), -// checkpointInterval, -// checkpointDuration, -// checkpointIntervalScaling, -// ) -// val tasks = getWorkloadType(scenario.workloadSpec.type).resolve(workloadLoader, Random(seed)) - val workloadLoader = getWorkloadLoader( scenario.workloadSpec.type, File(scenario.workloadSpec.pathToFile), + scenario.workloadSpec.submissionTime, checkpointInterval, checkpointDuration, checkpointIntervalScaling, ) - val workload = workloadLoader.load() + val workload = workloadLoader.sampleByLoad(scenario.workloadSpec.sampleFraction) val startTimeLong = workload.minOf { it.submissionTime }.toEpochMilli() val startTime = Duration.ofMillis(startTimeLong) -- cgit v1.2.3