summaryrefslogtreecommitdiff
path: root/opendc/opendc-compute/src
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2020-03-11 09:48:43 +0100
committerFabian Mastenbroek <mail.fabianm@gmail.com>2020-03-11 09:48:43 +0100
commit2b71e8639a03d07b1c79a46628f72b1f49d021bb (patch)
tree887ae8000d16f34d25e035b38ff54001ab13b137 /opendc/opendc-compute/src
parent4e127b7cef0bbc186766af9631f538992ff7dfaf (diff)
feat: Provide access to BareMetalDriver in Server
Diffstat (limited to 'opendc/opendc-compute/src')
-rw-r--r--opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/BareMetalDriver.kt13
-rw-r--r--opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/SimpleBareMetalDriver.kt3
-rw-r--r--opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/power/PowerModels.kt2
3 files changed, 14 insertions, 4 deletions
diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/BareMetalDriver.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/BareMetalDriver.kt
index 330eecfd..1214dd36 100644
--- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/BareMetalDriver.kt
+++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/BareMetalDriver.kt
@@ -24,21 +24,25 @@
package com.atlarge.opendc.compute.metal.driver
+import com.atlarge.opendc.compute.core.Server
import com.atlarge.opendc.compute.core.image.Image
import com.atlarge.opendc.compute.core.monitor.ServerMonitor
import com.atlarge.opendc.compute.metal.Node
import com.atlarge.opendc.compute.metal.PowerState
import com.atlarge.opendc.core.power.Powerable
+import com.atlarge.opendc.core.services.AbstractServiceKey
import kotlinx.coroutines.flow.Flow
+import java.util.UUID
/**
* A driver interface for the management interface of a bare-metal compute node.
*/
public interface BareMetalDriver : Powerable {
/**
- * The load of the machine.
+ * The amount of work done by the machine in percentage with respect to the total amount of processing power
+ * available.
*/
- public val load: Flow<Double>
+ public val usage: Flow<Double>
/**
* Initialize the driver.
@@ -62,4 +66,9 @@ public interface BareMetalDriver : Powerable {
* Obtain the state of the compute node.
*/
public suspend fun refresh(): Node
+
+ /**
+ * A key that allows access to the [BareMetalDriver] instance from a [Server] that runs on the bare-metal machine.
+ */
+ companion object Key : AbstractServiceKey<BareMetalDriver>(UUID.randomUUID(), "bare-metal:driver")
}
diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/SimpleBareMetalDriver.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/SimpleBareMetalDriver.kt
index a3738a1d..dfd3c3f2 100644
--- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/SimpleBareMetalDriver.kt
+++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/driver/SimpleBareMetalDriver.kt
@@ -100,7 +100,7 @@ public class SimpleBareMetalDriver(
private val loadChannel = BroadcastChannel<Double>(Channel.CONFLATED)
@UseExperimental(FlowPreview::class)
- override val load: Flow<Double> = loadChannel.asFlow()
+ override val usage: Flow<Double> = loadChannel.asFlow()
override val powerDraw: Flow<Double>
@@ -130,6 +130,7 @@ public class SimpleBareMetalDriver(
PowerState.POWER_ON to PowerState.POWER_ON -> node.server
else -> throw IllegalStateException()
}
+ server?.serviceRegistry?.set(BareMetalDriver.Key, this@SimpleBareMetalDriver)
node = node.copy(powerState = powerState, server = server)
if (powerState != previousPowerState && server != null) {
diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/power/PowerModels.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/power/PowerModels.kt
index a4f400ca..10390cd8 100644
--- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/power/PowerModels.kt
+++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/metal/power/PowerModels.kt
@@ -38,5 +38,5 @@ public fun ConstantPowerModel(value: Double): PowerModel<BareMetalDriver> = { _
* A power model that assumes a naive linear relation between power usage and host CPU utilization.
*/
public fun LinearLoadPowerModel(base: Double, multiplier: Double): PowerModel<BareMetalDriver> = { driver ->
- driver.load.map { load -> base + multiplier * load }
+ driver.usage.map { load -> base + multiplier * load }
}