diff options
| author | Georgios Andreadis <g.andreadis@student.tudelft.nl> | 2020-03-11 12:16:10 +0100 |
|---|---|---|
| committer | Georgios Andreadis <g.andreadis@student.tudelft.nl> | 2020-03-11 12:16:10 +0100 |
| commit | 1ccfcb28bb91c9dc456a1f324a0be6300086eb28 (patch) | |
| tree | b03bbf6dc69cc2d2c7fcfda1ad0b081c91443312 /opendc/opendc-experiments-sc20/src | |
| parent | 2dd2bfe87bcbe368f46ce8e975ccccbfac2c0560 (diff) | |
| parent | 1200816b7bf5c76b6bbb91b7e4555e9f04ea1af9 (diff) | |
Merge branch 'feat/2.x-power-model' into '2.x'
Implement basic power usage model
See merge request opendc/opendc-simulator!36
Diffstat (limited to 'opendc/opendc-experiments-sc20/src')
2 files changed, 17 insertions, 8 deletions
diff --git a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Sc20HypervisorMonitor.kt b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Sc20HypervisorMonitor.kt index e095d300..55a0ce75 100644 --- a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Sc20HypervisorMonitor.kt +++ b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Sc20HypervisorMonitor.kt @@ -1,7 +1,9 @@ package com.atlarge.opendc.experiments.sc20 import com.atlarge.opendc.compute.core.Server +import com.atlarge.opendc.compute.metal.driver.BareMetalDriver import com.atlarge.opendc.compute.virt.monitor.HypervisorMonitor +import kotlinx.coroutines.flow.first import java.io.BufferedWriter import java.io.Closeable import java.io.FileWriter @@ -10,20 +12,27 @@ class Sc20HypervisorMonitor : HypervisorMonitor, Closeable { private val outputFile = BufferedWriter(FileWriter("sc20-experiment-results.csv")) init { - outputFile.write("time,requestedBurst,grantedBurst,numberOfDeployedImages,server\n") + outputFile.write("time,requestedBurst,grantedBurst,numberOfDeployedImages,server,hostUsage,powerDraw\n") } - override fun onSliceFinish( + override suspend fun onSliceFinish( time: Long, requestedBurst: Long, grantedBurst: Long, numberOfDeployedImages: Int, hostServer: Server ) { - outputFile.write("$time,$requestedBurst,$grantedBurst,$numberOfDeployedImages,$numberOfDeployedImages,${hostServer.uid}\n") + // Assume for now that the host is not virtualized and measure the current power draw + val driver = hostServer.serviceRegistry[BareMetalDriver.Key] + val usage = driver.usage.first() + val powerDraw = driver.powerDraw.first() + + outputFile.write("$time,$requestedBurst,$grantedBurst,$numberOfDeployedImages,$numberOfDeployedImages,${hostServer.uid},$usage,$powerDraw") + outputFile.newLine() } override fun close() { + outputFile.flush() outputFile.close() } } 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 f4be75fa..76f7b600 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 @@ -36,7 +36,6 @@ import com.atlarge.opendc.compute.virt.service.allocation.AvailableMemoryAllocat import com.atlarge.opendc.format.environment.sc20.Sc20EnvironmentReader import com.atlarge.opendc.format.trace.sc20.Sc20PerformanceInterferenceReader import com.atlarge.opendc.format.trace.vm.VmTraceReader -import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking @@ -52,8 +51,8 @@ fun main(args: Array<String>) { println("error: Please provide path to directory containing VM trace files") return } - val token = Channel<Boolean>() + val hypervisorMonitor = Sc20HypervisorMonitor() val monitor = object : ServerMonitor { override suspend fun onUpdate(server: Server, previousState: ServerState) { println(server) @@ -78,7 +77,7 @@ fun main(args: Array<String>) { AvailableMemoryAllocationPolicy(), simulationContext, environment.platforms[0].zones[0].services[ProvisioningService.Key], - Sc20HypervisorMonitor() + hypervisorMonitor ) val reader = VmTraceReader(File(args[0]), performanceInterferenceModel) @@ -89,8 +88,6 @@ fun main(args: Array<String>) { scheduler.deploy(workload.image, monitor, Flavor(workload.image.cores, workload.image.requiredMemory)) } - token.receive() - println(simulationContext.clock.instant()) } @@ -98,4 +95,7 @@ fun main(args: Array<String>) { system.run() system.terminate() } + + // Explicitly close the monitor to flush its buffer + hypervisorMonitor.close() } |
