summaryrefslogtreecommitdiff
path: root/opendc-compute/opendc-compute-simulator/src
diff options
context:
space:
mode:
authorDante Niewenhuis <d.niewenhuis@hotmail.com>2025-11-13 19:44:43 +0100
committerGitHub <noreply@github.com>2025-11-13 19:44:43 +0100
commit90d4369183a420689fb1d48687a77ec677572433 (patch)
tree6b5bf9dbc1c55700620073a099ed22690e799526 /opendc-compute/opendc-compute-simulator/src
parent71f63618fb83c8e19ae48d5dc4a6e3927031cc10 (diff)
Updated the checkpointModel and OnUpdate of SimTraceWorkload (#380)
Diffstat (limited to 'opendc-compute/opendc-compute-simulator/src')
-rw-r--r--opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ComputeService.java4
-rw-r--r--opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ServiceTask.java14
-rw-r--r--opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/scheduler/FilterScheduler.kt5
-rw-r--r--opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/parquet/DfltTaskExportColumns.kt15
-rw-r--r--opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/table/task/TaskTableReader.kt6
-rw-r--r--opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/table/task/TaskTableReaderImpl.kt20
6 files changed, 62 insertions, 2 deletions
diff --git a/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ComputeService.java b/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ComputeService.java
index f357b164..f4adaac1 100644
--- a/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ComputeService.java
+++ b/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ComputeService.java
@@ -573,6 +573,10 @@ public final class ComputeService implements AutoCloseable, CarbonReceiver {
activeTasks.put(task, host);
updateHost(host);
+
+ long new_scheduling_delay = clock.millis() - req.getSubmitTime() + task.getSchedulingDelay();
+ task.setSchedulingDelay(new_scheduling_delay);
+
} catch (Exception cause) {
LOGGER.error("Failed to deploy VM", cause);
scheduler.removeTask(task, hv);
diff --git a/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ServiceTask.java b/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ServiceTask.java
index 8c066e4f..689a0e95 100644
--- a/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ServiceTask.java
+++ b/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ServiceTask.java
@@ -75,6 +75,8 @@ public class ServiceTask {
private int numFailures = 0;
private int numPauses = 0;
+ private long schedulingDelay = 0;
+
/// //////////////////////////////////////////////////////////////////////////////////////////////////
/// Getters and Setters
/// //////////////////////////////////////////////////////////////////////////////////////////////////
@@ -343,12 +345,12 @@ public class ServiceTask {
case PAUSED:
LOGGER.info("User requested to start task after pause {}", id);
setState(TaskState.PROVISIONING);
- request = service.schedule(this, true);
+ request = service.schedule(this, false);
break;
case FAILED:
LOGGER.info("User requested to start task after failure {}", id);
setState(TaskState.PROVISIONING);
- request = service.schedule(this, true);
+ request = service.schedule(this, false);
break;
}
}
@@ -433,4 +435,12 @@ public class ServiceTask {
return !parents.isEmpty();
}
+
+ public long getSchedulingDelay() {
+ return schedulingDelay;
+ }
+
+ public void setSchedulingDelay(long schedulingDelay) {
+ this.schedulingDelay = schedulingDelay;
+ }
}
diff --git a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/scheduler/FilterScheduler.kt b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/scheduler/FilterScheduler.kt
index 3dab71b0..913060e5 100644
--- a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/scheduler/FilterScheduler.kt
+++ b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/scheduler/FilterScheduler.kt
@@ -22,6 +22,7 @@
package org.opendc.compute.simulator.scheduler
+import org.opendc.compute.simulator.host.HostState
import org.opendc.compute.simulator.scheduler.filters.HostFilter
import org.opendc.compute.simulator.scheduler.weights.HostWeigher
import org.opendc.compute.simulator.service.HostView
@@ -101,6 +102,10 @@ public class FilterScheduler(
}
override fun updateHost(hostView: HostView) {
+ if (hostView.host.getState() == HostState.ERROR) {
+ return
+ }
+
if (hostView.host.isEmpty()) {
setHostEmpty(hostView)
} else {
diff --git a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/parquet/DfltTaskExportColumns.kt b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/parquet/DfltTaskExportColumns.kt
index b88c75e6..96cb5f65 100644
--- a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/parquet/DfltTaskExportColumns.kt
+++ b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/parquet/DfltTaskExportColumns.kt
@@ -224,6 +224,21 @@ public object DfltTaskExportColumns {
return@ExportColumn Binary.fromString(it.taskState!!.name)
}
+ public val schedulingDelay: ExportColumn<TaskTableReader> =
+ ExportColumn(
+ field = Types.optional(INT64).named("scheduling_delay"),
+ ) { it.schedulingDelay }
+
+ public val failureDelay: ExportColumn<TaskTableReader> =
+ ExportColumn(
+ field = Types.optional(INT64).named("failure_delay"),
+ ) { it.failureDelay }
+
+ public val checkpointDelay: ExportColumn<TaskTableReader> =
+ ExportColumn(
+ field = Types.optional(INT64).named("checkpoint_delay"),
+ ) { it.checkpointDelay }
+
/**
* The columns that are always included in the output file.
*/
diff --git a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/table/task/TaskTableReader.kt b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/table/task/TaskTableReader.kt
index 1f18ee50..cef3d8be 100644
--- a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/table/task/TaskTableReader.kt
+++ b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/table/task/TaskTableReader.kt
@@ -169,6 +169,12 @@ public interface TaskTableReader : Exportable {
* The state of the task
*/
public val taskState: TaskState?
+
+ public val schedulingDelay: Long
+
+ public val failureDelay: Long
+
+ public val checkpointDelay: Long
}
// Loads the default export fields for deserialization whenever this file is loaded.
diff --git a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/table/task/TaskTableReaderImpl.kt b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/table/task/TaskTableReaderImpl.kt
index d4d5c7a6..be858e4f 100644
--- a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/table/task/TaskTableReaderImpl.kt
+++ b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/telemetry/table/task/TaskTableReaderImpl.kt
@@ -82,6 +82,10 @@ public class TaskTableReaderImpl(
_finishTime = table.finishTime
_taskState = table.taskState
+
+ _schedulingDelay = table.schedulingDelay
+ _failureDelay = table.failureDelay
+ _checkpointDelay = table.checkpointDelay
}
/**
@@ -214,6 +218,18 @@ public class TaskTableReaderImpl(
get() = _taskState
private var _taskState: TaskState? = null
+ override val schedulingDelay: Long
+ get() = _schedulingDelay
+ private var _schedulingDelay: Long = 0L
+
+ override val failureDelay: Long
+ get() = _failureDelay
+ private var _failureDelay: Long = 0L
+
+ override val checkpointDelay: Long
+ get() = _checkpointDelay
+ private var _checkpointDelay: Long = 0L
+
/**
* Record the next cycle.
*/
@@ -257,6 +273,10 @@ public class TaskTableReaderImpl(
_scheduleTime = task.scheduledAt
_finishTime = task.finishedAt
+ _schedulingDelay = task.schedulingDelay
+ _failureDelay = task.workload.failureDelay()
+ _checkpointDelay = task.workload.checkpointDelay()
+
if (gpuStats != null) {
_gpuLimit = gpuStats.capacity
_gpuDemand = gpuStats.demand