summaryrefslogtreecommitdiff
path: root/opendc/opendc-experiments-sc20/src
diff options
context:
space:
mode:
authorGeorgios Andreadis <g.andreadis@student.tudelft.nl>2020-03-11 12:16:10 +0100
committerGeorgios Andreadis <g.andreadis@student.tudelft.nl>2020-03-11 12:16:10 +0100
commit1ccfcb28bb91c9dc456a1f324a0be6300086eb28 (patch)
treeb03bbf6dc69cc2d2c7fcfda1ad0b081c91443312 /opendc/opendc-experiments-sc20/src
parent2dd2bfe87bcbe368f46ce8e975ccccbfac2c0560 (diff)
parent1200816b7bf5c76b6bbb91b7e4555e9f04ea1af9 (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')
-rw-r--r--opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/Sc20HypervisorMonitor.kt15
-rw-r--r--opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt10
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()
}