summaryrefslogtreecommitdiff
path: root/opendc/opendc-experiments-sc20/src
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2020-03-24 22:04:06 +0100
committerFabian Mastenbroek <mail.fabianm@gmail.com>2020-03-25 10:51:28 +0100
commit225a9dd042870b1320681104aa022120611cc92b (patch)
tree08a18803589bd034ff18e0a02588af9febe24005 /opendc/opendc-experiments-sc20/src
parentedce7993772182bac0d0c74d22189137b35872aa (diff)
feat: Record hypervisor events during experiment
Diffstat (limited to 'opendc/opendc-experiments-sc20/src')
-rw-r--r--opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Sc20Monitor.kt5
-rw-r--r--opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt21
2 files changed, 22 insertions, 4 deletions
diff --git a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Sc20Monitor.kt b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Sc20Monitor.kt
index e18bbe30..36da7703 100644
--- a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Sc20Monitor.kt
+++ b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Sc20Monitor.kt
@@ -1,5 +1,6 @@
package com.atlarge.opendc.experiments.sc20
+import com.atlarge.odcsim.simulationContext
import com.atlarge.opendc.compute.core.Server
import com.atlarge.opendc.compute.core.ServerState
import com.atlarge.opendc.compute.metal.driver.BareMetalDriver
@@ -18,8 +19,8 @@ class Sc20Monitor(
outputFile.write("time,requestedBurst,grantedBurst,numberOfDeployedImages,server,hostUsage,powerDraw,failedVms\n")
}
- fun stateChanged(server: Server) {
- println("${server.uid} ${server.state}")
+ suspend fun stateChanged(server: Server) {
+ println("[${simulationContext.clock.millis()}] ${server.uid} ${server.state}")
if (server.state == ServerState.ERROR) {
failed++
}
diff --git a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt
index 6d832ee4..0fafc118 100644
--- a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt
+++ b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt
@@ -29,10 +29,10 @@ import com.atlarge.odcsim.simulationContext
import com.atlarge.opendc.compute.core.Flavor
import com.atlarge.opendc.compute.core.ServerEvent
import com.atlarge.opendc.compute.metal.service.ProvisioningService
+import com.atlarge.opendc.compute.virt.HypervisorEvent
import com.atlarge.opendc.compute.virt.service.SimpleVirtProvisioningService
import com.atlarge.opendc.compute.virt.service.allocation.AvailableMemoryAllocationPolicy
import com.atlarge.opendc.core.failure.CorrelatedFaultInjector
-import com.atlarge.opendc.core.failure.FailureDomain
import com.atlarge.opendc.format.environment.sc20.Sc20ClusterEnvironmentReader
import com.atlarge.opendc.format.trace.sc20.Sc20PerformanceInterferenceReader
import com.atlarge.opendc.format.trace.sc20.Sc20TraceReader
@@ -43,6 +43,7 @@ import com.xenomachina.argparser.default
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
@@ -116,6 +117,21 @@ fun main(args: Array<String>) {
bareMetalProvisioner
)
+ // Wait for the hypervisors to be spawned
+ delay(10)
+
+ // Monitor hypervisor events
+ for (hypervisor in scheduler.drivers()) {
+ hypervisor.events
+ .onEach { event ->
+ when (event) {
+ is HypervisorEvent.SliceFinished -> monitor.onSliceFinish(simulationContext.clock.millis(), event.requestedBurst, event.grantedBurst, event.numberOfDeployedImages, event.hostServer)
+ else -> println(event)
+ }
+ }
+ .launchIn(this)
+ }
+
val faultInjectorDomain = root.newDomain(name = "failures")
faultInjectorDomain.launch {
chan.receive()
@@ -125,7 +141,7 @@ fun main(args: Array<String>) {
sizeScale = 1.88, sizeShape = 1.25
)
for (node in bareMetalProvisioner.nodes()) {
- faultInjector.enqueue(node.metadata["driver"] as FailureDomain)
+ // faultInjector.enqueue(node.metadata["driver"] as FailureDomain)
}
}
@@ -139,6 +155,7 @@ fun main(args: Array<String>) {
workload.image.name, workload.image,
Flavor(workload.image.cores, workload.image.requiredMemory)
)
+ // Monitor server events
server.events.onEach { if (it is ServerEvent.StateChanged) monitor.stateChanged(it.server) }.collect()
}
}