summaryrefslogtreecommitdiff
path: root/opendc-compute/opendc-compute-workload/src/main/kotlin
diff options
context:
space:
mode:
Diffstat (limited to 'opendc-compute/opendc-compute-workload/src/main/kotlin')
-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.kt6
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)