From 86c65e875b7dde8872dc81a37aa9dca72eee7782 Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Tue, 19 Oct 2021 17:27:01 +0200 Subject: refactor(simulator): Support running workloads without coroutines This change updates the SimMachine interface to drop the coroutine requirement for running a workload on a machines. Users can now asynchronously start a workload and receive notifications via the workload callbacks. Users still have the possibility to suspend execution during workload execution by using the new `runWorkload` method, which is implemented on top of the new `startWorkload` primitive. --- .../main/kotlin/org/opendc/experiments/tf20/core/SimTFDevice.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'opendc-experiments') diff --git a/opendc-experiments/opendc-experiments-tf20/src/main/kotlin/org/opendc/experiments/tf20/core/SimTFDevice.kt b/opendc-experiments/opendc-experiments-tf20/src/main/kotlin/org/opendc/experiments/tf20/core/SimTFDevice.kt index fb36d2c7..1752802f 100644 --- a/opendc-experiments/opendc-experiments-tf20/src/main/kotlin/org/opendc/experiments/tf20/core/SimTFDevice.kt +++ b/opendc-experiments/opendc-experiments-tf20/src/main/kotlin/org/opendc/experiments/tf20/core/SimTFDevice.kt @@ -34,6 +34,7 @@ import org.opendc.simulator.compute.model.MemoryUnit import org.opendc.simulator.compute.model.ProcessingUnit import org.opendc.simulator.compute.power.PowerModel import org.opendc.simulator.compute.power.SimplePowerDriver +import org.opendc.simulator.compute.runWorkload import org.opendc.simulator.compute.workload.SimWorkload import org.opendc.simulator.flow.* import java.time.Clock @@ -128,6 +129,8 @@ public class SimTFDevice( } } + override fun onStop(ctx: SimMachineContext) {} + override fun onStart(conn: FlowConnection, now: Long) { ctx = conn capacity = conn.capacity @@ -172,7 +175,7 @@ public class SimTFDevice( init { scope.launch { - machine.run(workload) + machine.runWorkload(workload) } } @@ -189,7 +192,7 @@ public class SimTFDevice( } override fun close() { - machine.close() + machine.cancel() scope.cancel() } -- cgit v1.2.3