From 6fa203b9187b474816e7719baed8c97eadd689cb Mon Sep 17 00:00:00 2001 From: Dante Niewenhuis Date: Fri, 1 Nov 2024 15:33:29 +0100 Subject: Updated computeService to force the simulation to stop when all tasks are finished (#259) --- .../compute/simulator/service/ComputeService.java | 34 +++++++++++++++++----- 1 file changed, 27 insertions(+), 7 deletions(-) (limited to 'opendc-compute/opendc-compute-simulator/src/main/java/org') 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 f6447573..8df0d7d8 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 @@ -49,6 +49,7 @@ import org.opendc.compute.simulator.host.HostModel; import org.opendc.compute.simulator.host.HostState; import org.opendc.compute.simulator.host.SimHost; import org.opendc.compute.simulator.scheduler.ComputeScheduler; +import org.opendc.compute.simulator.telemetry.ComputeMetricReader; import org.opendc.compute.simulator.telemetry.SchedulerStats; import org.opendc.simulator.compute.power.SimPowerSource; import org.opendc.simulator.compute.workload.Workload; @@ -141,6 +142,8 @@ public final class ComputeService implements AutoCloseable { private final List tasksToRemove = new ArrayList<>(); + private ComputeMetricReader metricReader; + /** * A [HostListener] used to track the active tasks. */ @@ -201,7 +204,7 @@ public final class ComputeService implements AutoCloseable { } if (task.getState() == TaskState.COMPLETED || task.getState() == TaskState.TERMINATED) { - tasksToRemove.add(task); + setTaskToBeRemoved(task); } // Try to reschedule if needed @@ -214,11 +217,12 @@ public final class ComputeService implements AutoCloseable { private long maxMemory = 0L; private long attemptsSuccess = 0L; private long attemptsFailure = 0L; - private int tasksTotal = 0; - private int tasksPending = 0; - private int tasksActive = 0; - private int tasksTerminated = 0; - private int tasksCompleted = 0; + private int tasksExpected = 0; // Number of tasks expected from the input trace + private int tasksTotal = 0; // Number of tasks seen by the service + private int tasksPending = 0; // Number of tasks waiting to be scheduled + private int tasksActive = 0; // Number of tasks that are currently running + private int tasksTerminated = 0; // Number of tasks that were terminated due to too much failures + private int tasksCompleted = 0; // Number of tasks completed successfully /** * Construct a {@link ComputeService} instance. @@ -332,6 +336,21 @@ public final class ComputeService implements AutoCloseable { return Collections.unmodifiableSet(this.powerSources); } + public void setMetricReader(ComputeMetricReader metricReader) { + this.metricReader = metricReader; + } + + public void setTasksExpected(int numberOfTasks) { + this.tasksExpected = numberOfTasks; + } + + public void setTaskToBeRemoved(ServiceTask task) { + this.tasksToRemove.add(task); + if ((tasksTerminated + tasksCompleted) == tasksExpected) { + metricReader.loggState(); // Logg the state for the final time. This will also delete all remaining tasks. + } + } + /** * Collect the statistics about the scheduler component of this service. */ @@ -426,7 +445,8 @@ public final class ComputeService implements AutoCloseable { tasksPending--; tasksTerminated++; task.setState(TaskState.TERMINATED); - tasksToRemove.add(task); + + this.setTaskToBeRemoved(task); continue; } -- cgit v1.2.3