diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2021-11-17 13:40:51 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-17 13:40:51 +0100 |
| commit | a921c9f847aabe72bdef42574d96f905d9fb2468 (patch) | |
| tree | f0982efeacf4910a73eb3133a54b50352984018f /opendc-compute/opendc-compute-workload | |
| parent | 381c7589cbf01ca6ed321c58c8a3a9cbea6ebd84 (diff) | |
| parent | 1dcdca7e09e34cdde53f6d14db56780688e19eae (diff) | |
merge: Improve workflow service (#43)
This pull request is the first in a series of changes to the workflow service.
This pull request aims to help users setup workflow simulations.
The next pull requests will focus on improving the design of the workflow service.
* Remove WorkflowSchedulerMode
* Add helper tools for workflow simulations (e.g. `WorkflowServiceHelper`)
**Breaking API Changes**
* Removal of `WorkflowSchedulerMode`
* Rename from `ComputeWorkloadRunner` to `ComputeServiceHelper`
Diffstat (limited to 'opendc-compute/opendc-compute-workload')
| -rw-r--r-- | opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeServiceHelper.kt (renamed from opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadRunner.kt) | 20 | ||||
| -rw-r--r-- | opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/topology/TopologyHelpers.kt | 6 |
2 files changed, 16 insertions, 10 deletions
diff --git a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadRunner.kt b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeServiceHelper.kt index 90ee56cb..59203b66 100644 --- a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeWorkloadRunner.kt +++ b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/ComputeServiceHelper.kt @@ -40,25 +40,28 @@ import org.opendc.simulator.flow.FlowEngine import org.opendc.telemetry.compute.* import org.opendc.telemetry.sdk.toOtelClock import java.time.Clock +import java.time.Duration import java.util.* import kotlin.coroutines.CoroutineContext import kotlin.math.max /** - * Helper class to simulated VM-based workloads in OpenDC. + * Helper class to simulate VM-based workloads in OpenDC. * * @param context [CoroutineContext] to run the simulation in. * @param clock [Clock] instance tracking simulation time. * @param scheduler [ComputeScheduler] implementation to use for the service. * @param failureModel A failure model to use for injecting failures. * @param interferenceModel The model to use for performance interference. + * @param schedulingQuantum The scheduling quantum of the scheduler. */ -public class ComputeWorkloadRunner( +public class ComputeServiceHelper( private val context: CoroutineContext, private val clock: Clock, scheduler: ComputeScheduler, private val failureModel: FailureModel? = null, private val interferenceModel: VmInterferenceModel? = null, + schedulingQuantum: Duration = Duration.ofMinutes(5) ) : AutoCloseable { /** * The [ComputeService] that has been configured by the manager. @@ -83,7 +86,7 @@ public class ComputeWorkloadRunner( private val hosts = mutableSetOf<SimHost>() init { - val (service, serviceMeterProvider) = createService(scheduler) + val (service, serviceMeterProvider) = createService(scheduler, schedulingQuantum) this._metricProducers.add(serviceMeterProvider) this.service = service } @@ -91,7 +94,7 @@ public class ComputeWorkloadRunner( /** * Converge a simulation of the [ComputeService] by replaying the workload trace given by [trace]. */ - public suspend fun run(trace: List<VirtualMachine>, seed: Long) { + public suspend fun run(trace: List<VirtualMachine>, seed: Long, submitImmediately: Boolean = false) { val random = Random(seed) val injector = failureModel?.createInjector(context, clock, service, random) val client = service.newClient() @@ -116,7 +119,10 @@ public class ComputeWorkloadRunner( // Make sure the trace entries are ordered by submission time assert(start - offset >= 0) { "Invalid trace order" } - delay(max(0, (start - offset) - now)) + + if (!submitImmediately) { + delay(max(0, (start - offset) - now)) + } launch { val workloadOffset = -offset + 300001 @@ -206,7 +212,7 @@ public class ComputeWorkloadRunner( /** * Construct a [ComputeService] instance. */ - private fun createService(scheduler: ComputeScheduler): Pair<ComputeService, SdkMeterProvider> { + private fun createService(scheduler: ComputeScheduler, schedulingQuantum: Duration): Pair<ComputeService, SdkMeterProvider> { val resource = Resource.builder() .put(ResourceAttributes.SERVICE_NAME, "opendc-compute") .build() @@ -216,7 +222,7 @@ public class ComputeWorkloadRunner( .setResource(resource) .build() - val service = ComputeService(context, clock, meterProvider, scheduler) + val service = ComputeService(context, clock, meterProvider, scheduler, schedulingQuantum) return service to meterProvider } } diff --git a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/topology/TopologyHelpers.kt b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/topology/TopologyHelpers.kt index 74f9a1f8..de4300c7 100644 --- a/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/topology/TopologyHelpers.kt +++ b/opendc-compute/opendc-compute-workload/src/main/kotlin/org/opendc/compute/workload/topology/TopologyHelpers.kt @@ -23,12 +23,12 @@ @file:JvmName("TopologyHelpers") package org.opendc.compute.workload.topology -import org.opendc.compute.workload.ComputeWorkloadRunner +import org.opendc.compute.workload.ComputeServiceHelper /** - * Apply the specified [topology] to the given [ComputeWorkloadRunner]. + * Apply the specified [topology] to the given [ComputeServiceHelper]. */ -public fun ComputeWorkloadRunner.apply(topology: Topology, optimize: Boolean = false) { +public fun ComputeServiceHelper.apply(topology: Topology, optimize: Boolean = false) { val hosts = topology.resolve() for (spec in hosts) { registerHost(spec, optimize) |
