diff options
Diffstat (limited to 'opendc-compute/opendc-compute-simulator')
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 |
