summaryrefslogtreecommitdiff
path: root/opendc/opendc-experiments-sc20/src
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2020-03-11 10:27:18 +0100
committerFabian Mastenbroek <mail.fabianm@gmail.com>2020-03-11 10:27:18 +0100
commit592557d0efc139f9d3b14bad61f8e5b2d93b3a8d (patch)
treee1646ee1001abfcb1e3acfefc891c24883bda95c /opendc/opendc-experiments-sc20/src
parente357ad22dde4c3c046beded29c0eb9325e199ebb (diff)
feat: Measure host CPU usage and power consumption
Diffstat (limited to 'opendc/opendc-experiments-sc20/src')
-rw-r--r--opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Sc20HypervisorMonitor.kt13
-rw-r--r--opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt4
2 files changed, 10 insertions, 7 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..36db25bc 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,17 +12,22 @@ 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\n")
}
override fun 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..1d12df29 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,7 +51,6 @@ fun main(args: Array<String>) {
println("error: Please provide path to directory containing VM trace files")
return
}
- val token = Channel<Boolean>()
val monitor = object : ServerMonitor {
override suspend fun onUpdate(server: Server, previousState: ServerState) {
@@ -89,8 +87,6 @@ fun main(args: Array<String>) {
scheduler.deploy(workload.image, monitor, Flavor(workload.image.cores, workload.image.requiredMemory))
}
- token.receive()
-
println(simulationContext.clock.instant())
}