diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2020-03-11 09:48:43 +0100 |
|---|---|---|
| committer | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2020-03-11 09:48:43 +0100 |
| commit | 2b71e8639a03d07b1c79a46628f72b1f49d021bb (patch) | |
| tree | 887ae8000d16f34d25e035b38ff54001ab13b137 /opendc/opendc-compute/src/main | |
| parent | 4e127b7cef0bbc186766af9631f538992ff7dfaf (diff) | |
feat: Provide access to BareMetalDriver in Server
Diffstat (limited to 'opendc/opendc-compute/src/main')
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 } } |
