summaryrefslogtreecommitdiff
path: root/opendc-compute/opendc-compute-workload
diff options
context:
space:
mode:
authorSacheendra Talluri <sacheendra.t@gmail.com>2025-03-20 10:16:46 +0100
committerGitHub <noreply@github.com>2025-03-20 10:16:46 +0100
commit1e35c61cd31b8bfb33a6ccbb46b08c0466518e6c (patch)
tree261c84148cd045246bdc2ad7aa3c41524356b699 /opendc-compute/opendc-compute-workload
parent6211b887b68b3ebc9245fada1c0f36725955b052 (diff)
Adds load shifting over time (#319)
* Start time shifting * Existing experiments work with new columns * Remove unused traces dir * Update java to 21 LTS and jacoco to be compatible * Minimal working timeshifting * Timeshift scheduler linked as carbon receiver * Add basic tests for timeshift scheduler * Run spotless apply * Modify tarce format tests to support new fields * Change all mentions of java 19 to 21 * Add a deferAll option to workload to make all tasks deferrable * Run spotless apply * Copy traces from resources in web dockerfile
Diffstat (limited to 'opendc-compute/opendc-compute-workload')
-rw-r--r--opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadLoader.kt13
-rw-r--r--opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/Task.kt4
-rw-r--r--opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/WorkloadLoader.kt1
3 files changed, 17 insertions, 1 deletions
diff --git a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadLoader.kt b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadLoader.kt
index cbff5fb9..8e774acb 100644
--- a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadLoader.kt
+++ b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadLoader.kt
@@ -31,9 +31,11 @@ import org.opendc.trace.conv.TABLE_RESOURCES
import org.opendc.trace.conv.TABLE_RESOURCE_STATES
import org.opendc.trace.conv.resourceCpuCapacity
import org.opendc.trace.conv.resourceCpuCount
+import org.opendc.trace.conv.resourceDeadline
import org.opendc.trace.conv.resourceDuration
import org.opendc.trace.conv.resourceID
import org.opendc.trace.conv.resourceMemCapacity
+import org.opendc.trace.conv.resourceNature
import org.opendc.trace.conv.resourceStateCpuUsage
import org.opendc.trace.conv.resourceStateDuration
import org.opendc.trace.conv.resourceSubmissionTime
@@ -56,6 +58,7 @@ public class ComputeWorkloadLoader(
private val checkpointDuration: Long = 0L,
private val checkpointIntervalScaling: Double = 1.0,
private val scalingPolicy: ScalingPolicy = NoDelayScaling(),
+ private val deferAll: Boolean = false,
) : WorkloadLoader(subMissionTime) {
/**
* The logger for this instance.
@@ -115,6 +118,8 @@ public class ComputeWorkloadLoader(
val cpuCountCol = reader.resolve(resourceCpuCount)
val cpuCapacityCol = reader.resolve(resourceCpuCapacity)
val memCol = reader.resolve(resourceMemCapacity)
+ val natureCol = reader.resolve(resourceNature)
+ val deadlineCol = reader.resolve(resourceDeadline)
var counter = 0
val entries = mutableListOf<Task>()
@@ -132,6 +137,12 @@ public class ComputeWorkloadLoader(
val cpuCapacity = reader.getDouble(cpuCapacityCol)
val memCapacity = reader.getDouble(memCol) / 1000.0 // Convert from KB to MB
val uid = UUID.nameUUIDFromBytes("$id-${counter++}".toByteArray())
+ var nature = reader.getString(natureCol)
+ var deadline = reader.getLong(deadlineCol)
+ if (deferAll) {
+ nature = "deferrable"
+ deadline = submissionTime + (3 * duration)
+ }
val builder = fragments.getValue(id) // Get all fragments related to this VM
val totalLoad = builder.totalLoad
@@ -146,6 +157,8 @@ public class ComputeWorkloadLoader(
totalLoad,
submissionTime,
duration,
+ nature,
+ deadline,
builder.build(),
),
)
diff --git a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/Task.kt b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/Task.kt
index d32c84f6..787f271e 100644
--- a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/Task.kt
+++ b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/Task.kt
@@ -46,5 +46,7 @@ public data class Task(
val totalLoad: Double,
var submissionTime: Long,
val duration: Long,
- var trace: TraceWorkload,
+ val nature: String?,
+ var deadline: Long,
+ val trace: TraceWorkload,
)
diff --git a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/WorkloadLoader.kt b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/WorkloadLoader.kt
index 6b9c3753..c00bc768 100644
--- a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/WorkloadLoader.kt
+++ b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/WorkloadLoader.kt
@@ -40,6 +40,7 @@ public abstract class WorkloadLoader(private val submissionTime: String? = null)
for (task in workload) {
task.submissionTime += timeShift
+ task.deadline = if (task.deadline == -1L) -1L else task.deadline + timeShift
}
}