summaryrefslogtreecommitdiff
path: root/simulator/opendc-experiments/opendc-experiments-capelin
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-03-02 21:15:38 +0100
committerFabian Mastenbroek <mail.fabianm@gmail.com>2021-03-07 16:13:13 +0100
commite85a11645a2262e2e6fd1e3570ad001eb805c85f (patch)
treec5a6958d89ab1cfc6b557f2a50446d603bb05b57 /simulator/opendc-experiments/opendc-experiments-capelin
parent58c73773a75a0e0a8f85217e2e97c64128ce8ab8 (diff)
compute: Separate cloud compute layer from bare-metal layer
This change separates the cloud compute layer in OpenDC (e.g., Server) from the bare-metal layer (e.g., Node), such that Node and BareMetalDriver are unaware of the existence of Server and co.
Diffstat (limited to 'simulator/opendc-experiments/opendc-experiments-capelin')
-rw-r--r--simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt14
-rw-r--r--simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ExperimentMonitor.kt7
-rw-r--r--simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ParquetExperimentMonitor.kt43
-rw-r--r--simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/HostEvent.kt4
-rw-r--r--simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetHostEventWriter.kt4
-rw-r--r--simulator/opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt10
6 files changed, 42 insertions, 40 deletions
diff --git a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt
index 8f3e686a..b941d135 100644
--- a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt
+++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt
@@ -35,7 +35,7 @@ import mu.KotlinLogging
import org.opendc.compute.core.Flavor
import org.opendc.compute.core.ServerEvent
import org.opendc.compute.core.metal.NODE_CLUSTER
-import org.opendc.compute.core.metal.driver.BareMetalDriver
+import org.opendc.compute.core.metal.NodeEvent
import org.opendc.compute.core.metal.service.ProvisioningService
import org.opendc.compute.core.virt.HypervisorEvent
import org.opendc.compute.core.virt.service.VirtProvisioningEvent
@@ -175,14 +175,14 @@ public suspend fun attachMonitor(
// Monitor hypervisor events
for (hypervisor in hypervisors) {
// TODO Do not expose VirtDriver directly but use Hypervisor class.
- val server = (hypervisor as SimVirtDriver).server
+ val server = (hypervisor as SimVirtDriver).node
monitor.reportHostStateChange(clock.millis(), hypervisor, server)
server.events
.onEach { event ->
val time = clock.millis()
when (event) {
- is ServerEvent.StateChanged -> {
- monitor.reportHostStateChange(time, hypervisor, event.server)
+ is NodeEvent.StateChanged -> {
+ monitor.reportHostStateChange(time, hypervisor, event.node)
}
}
}
@@ -199,15 +199,15 @@ public suspend fun attachMonitor(
event.cpuUsage,
event.cpuDemand,
event.numberOfDeployedImages,
- event.hostServer
+ event.host
)
}
}
.launchIn(coroutineScope)
- val driver = hypervisor.server.services[BareMetalDriver.Key] as SimBareMetalDriver
+ val driver = server.metadata["driver"] as SimBareMetalDriver
driver.powerDraw
- .onEach { monitor.reportPowerConsumption(hypervisor.server, it) }
+ .onEach { monitor.reportPowerConsumption(server, it) }
.launchIn(coroutineScope)
}
diff --git a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ExperimentMonitor.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ExperimentMonitor.kt
index 3c6637bf..04ffd148 100644
--- a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ExperimentMonitor.kt
+++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ExperimentMonitor.kt
@@ -23,6 +23,7 @@
package org.opendc.experiments.capelin.monitor
import org.opendc.compute.core.Server
+import org.opendc.compute.core.metal.Node
import org.opendc.compute.core.virt.driver.VirtDriver
import org.opendc.compute.core.virt.service.VirtProvisioningEvent
import java.io.Closeable
@@ -42,14 +43,14 @@ public interface ExperimentMonitor : Closeable {
public fun reportHostStateChange(
time: Long,
driver: VirtDriver,
- server: Server
+ host: Node
) {
}
/**
* Report the power consumption of a host.
*/
- public fun reportPowerConsumption(host: Server, draw: Double) {}
+ public fun reportPowerConsumption(host: Node, draw: Double) {}
/**
* This method is invoked for a host for each slice that is finishes.
@@ -63,7 +64,7 @@ public interface ExperimentMonitor : Closeable {
cpuUsage: Double,
cpuDemand: Double,
numberOfDeployedImages: Int,
- hostServer: Server,
+ host: Node,
duration: Long = 5 * 60 * 1000L
) {
}
diff --git a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ParquetExperimentMonitor.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ParquetExperimentMonitor.kt
index a0d57656..e8aa5915 100644
--- a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ParquetExperimentMonitor.kt
+++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ParquetExperimentMonitor.kt
@@ -24,6 +24,7 @@ package org.opendc.experiments.capelin.monitor
import mu.KotlinLogging
import org.opendc.compute.core.Server
+import org.opendc.compute.core.metal.Node
import org.opendc.compute.core.virt.driver.VirtDriver
import org.opendc.compute.core.virt.service.VirtProvisioningEvent
import org.opendc.experiments.capelin.telemetry.HostEvent
@@ -49,7 +50,7 @@ public class ParquetExperimentMonitor(base: File, partition: String, bufferSize:
File(base, "provisioner-metrics/$partition/data.parquet"),
bufferSize
)
- private val currentHostEvent = mutableMapOf<Server, HostEvent>()
+ private val currentHostEvent = mutableMapOf<Node, HostEvent>()
private var startTime = -1L
override fun reportVmStateChange(time: Long, server: Server) {
@@ -64,11 +65,11 @@ public class ParquetExperimentMonitor(base: File, partition: String, bufferSize:
override fun reportHostStateChange(
time: Long,
driver: VirtDriver,
- server: Server
+ host: Node
) {
- logger.debug { "Host ${server.uid} changed state ${server.state} [$time]" }
+ logger.debug { "Host ${host.uid} changed state ${host.state} [$time]" }
- val previousEvent = currentHostEvent[server]
+ val previousEvent = currentHostEvent[host]
val roundedTime = previousEvent?.let {
val duration = time - it.timestamp
@@ -91,13 +92,13 @@ public class ParquetExperimentMonitor(base: File, partition: String, bufferSize:
0.0,
0.0,
0,
- server
+ host
)
}
- private val lastPowerConsumption = mutableMapOf<Server, Double>()
+ private val lastPowerConsumption = mutableMapOf<Node, Double>()
- override fun reportPowerConsumption(host: Server, draw: Double) {
+ override fun reportPowerConsumption(host: Node, draw: Double) {
lastPowerConsumption[host] = draw
}
@@ -110,16 +111,16 @@ public class ParquetExperimentMonitor(base: File, partition: String, bufferSize:
cpuUsage: Double,
cpuDemand: Double,
numberOfDeployedImages: Int,
- hostServer: Server,
+ host: Node,
duration: Long
) {
- val previousEvent = currentHostEvent[hostServer]
+ val previousEvent = currentHostEvent[host]
when {
previousEvent == null -> {
val event = HostEvent(
time,
5 * 60 * 1000L,
- hostServer,
+ host,
numberOfDeployedImages,
requestedBurst,
grantedBurst,
@@ -127,17 +128,17 @@ public class ParquetExperimentMonitor(base: File, partition: String, bufferSize:
interferedBurst,
cpuUsage,
cpuDemand,
- lastPowerConsumption[hostServer] ?: 200.0,
- hostServer.flavor.cpuCount
+ lastPowerConsumption[host] ?: 200.0,
+ host.flavor.cpuCount
)
- currentHostEvent[hostServer] = event
+ currentHostEvent[host] = event
}
previousEvent.timestamp == time -> {
val event = HostEvent(
time,
previousEvent.duration,
- hostServer,
+ host,
numberOfDeployedImages,
requestedBurst,
grantedBurst,
@@ -145,11 +146,11 @@ public class ParquetExperimentMonitor(base: File, partition: String, bufferSize:
interferedBurst,
cpuUsage,
cpuDemand,
- lastPowerConsumption[hostServer] ?: 200.0,
- hostServer.flavor.cpuCount
+ lastPowerConsumption[host] ?: 200.0,
+ host.flavor.cpuCount
)
- currentHostEvent[hostServer] = event
+ currentHostEvent[host] = event
}
else -> {
hostWriter.write(previousEvent)
@@ -157,7 +158,7 @@ public class ParquetExperimentMonitor(base: File, partition: String, bufferSize:
val event = HostEvent(
time,
time - previousEvent.timestamp,
- hostServer,
+ host,
numberOfDeployedImages,
requestedBurst,
grantedBurst,
@@ -165,11 +166,11 @@ public class ParquetExperimentMonitor(base: File, partition: String, bufferSize:
interferedBurst,
cpuUsage,
cpuDemand,
- lastPowerConsumption[hostServer] ?: 200.0,
- hostServer.flavor.cpuCount
+ lastPowerConsumption[host] ?: 200.0,
+ host.flavor.cpuCount
)
- currentHostEvent[hostServer] = event
+ currentHostEvent[host] = event
}
}
}
diff --git a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/HostEvent.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/HostEvent.kt
index e5e9d520..0d5fce09 100644
--- a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/HostEvent.kt
+++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/HostEvent.kt
@@ -22,7 +22,7 @@
package org.opendc.experiments.capelin.telemetry
-import org.opendc.compute.core.Server
+import org.opendc.compute.core.metal.Node
/**
* A periodic report of the host machine metrics.
@@ -30,7 +30,7 @@ import org.opendc.compute.core.Server
public data class HostEvent(
override val timestamp: Long,
public val duration: Long,
- public val host: Server,
+ public val node: Node,
public val vmCount: Int,
public val requestedBurst: Long,
public val grantedBurst: Long,
diff --git a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetHostEventWriter.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetHostEventWriter.kt
index 4a3e7963..b4fdd66a 100644
--- a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetHostEventWriter.kt
+++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetHostEventWriter.kt
@@ -41,8 +41,8 @@ public class ParquetHostEventWriter(path: File, bufferSize: Int) :
// record.put("portfolio_id", event.run.parent.parent.id)
// record.put("scenario_id", event.run.parent.id)
// record.put("run_id", event.run.id)
- record.put("host_id", event.host.name)
- record.put("state", event.host.state.name)
+ record.put("host_id", event.node.name)
+ record.put("state", event.node.state.name)
record.put("timestamp", event.timestamp)
record.put("duration", event.duration)
record.put("vm_count", event.vmCount)
diff --git a/simulator/opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt
index 6a0796f6..0d6c057f 100644
--- a/simulator/opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt
+++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt
@@ -32,7 +32,7 @@ import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertAll
-import org.opendc.compute.core.Server
+import org.opendc.compute.core.metal.Node
import org.opendc.compute.core.workload.VmWorkload
import org.opendc.compute.simulator.SimVirtProvisioningService
import org.opendc.compute.simulator.allocation.AvailableCoreMemoryAllocationPolicy
@@ -148,9 +148,9 @@ class CapelinIntegrationTest {
assertAll(
{ assertEquals(50, scheduler.submittedVms, "The trace contains 50 VMs") },
{ assertEquals(50, scheduler.finishedVms, "All VMs should finish after a run") },
- { assertEquals(1684849230562, monitor.totalRequestedBurst) },
- { assertEquals(447612683996, monitor.totalGrantedBurst) },
- { assertEquals(1219535757406, monitor.totalOvercommissionedBurst) },
+ { assertEquals(1678587333640, monitor.totalRequestedBurst) },
+ { assertEquals(438118200924, monitor.totalGrantedBurst) },
+ { assertEquals(1220323969993, monitor.totalOvercommissionedBurst) },
{ assertEquals(0, monitor.totalInterferedBurst) }
)
}
@@ -242,7 +242,7 @@ class CapelinIntegrationTest {
cpuUsage: Double,
cpuDemand: Double,
numberOfDeployedImages: Int,
- hostServer: Server,
+ host: Node,
duration: Long
) {
totalRequestedBurst += requestedBurst