From 638dd7a33d5f7f0b8fcca9c99cdc92819cf0847c Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Tue, 30 Mar 2021 22:42:41 +0200 Subject: exp: Add experiment for OpenDC Energy project This change adds an experiment for the OpenDC Energy project, which tests various energy models that have been implemented in OpenDC. --- .../compute/power/InterpolationPowerModel.kt | 29 +++++++++++----------- 1 file changed, 14 insertions(+), 15 deletions(-) (limited to 'simulator/opendc-simulator') diff --git a/simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/power/InterpolationPowerModel.kt b/simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/power/InterpolationPowerModel.kt index 85613a57..cbfcd810 100644 --- a/simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/power/InterpolationPowerModel.kt +++ b/simulator/opendc-simulator/opendc-simulator-compute/src/main/kotlin/org/opendc/simulator/compute/power/InterpolationPowerModel.kt @@ -10,15 +10,12 @@ import kotlin.math.min * The linear interpolation power model partially adapted from CloudSim. * This model is developed to adopt the SPECpower benchmark. * - * @param hardwareName The name of the hardware vendor. + * @param powerValues A [List] of average active power measured by the power analyzer(s) and accumulated by the + * PTDaemon (Power and Temperature Daemon) for this measurement interval, displayed as watts (W). * @see Machines used in the SPEC benchmark */ -public class InterpolationPowerModel(hardwareName: String) : PowerModel { - /** - * A [List] of average active power measured by the power analyzer(s) and accumulated by the - * PTDaemon (Power and Temperature Daemon) for this measurement interval, displayed as watts (W). - */ - private val averagePowerValues: List = loadAveragePowerValue(hardwareName) +public class InterpolationPowerModel(private val powerValues: List) : PowerModel { + public constructor(hardwareName: String) : this(loadAveragePowerValue(hardwareName)) public override fun computePower(utilization: Double): Double { val clampedUtilization = min(1.0, max(0.0, utilization)) @@ -34,7 +31,7 @@ public class InterpolationPowerModel(hardwareName: String) : PowerModel { powerFlr + delta * (clampedUtilization - utilizationFlr.toDouble() / 10) * 100 } - override fun toString(): String = "InterpolationPowerModel[entries=${averagePowerValues.size}]" + override fun toString(): String = "InterpolationPowerModel[entries=${powerValues.size}]" /** * Gets the power consumption for a given utilization percentage. @@ -43,13 +40,15 @@ public class InterpolationPowerModel(hardwareName: String) : PowerModel { * where 10 means 100% of utilization. * @return the power consumption for the given utilization percentage */ - private fun getAveragePowerValue(index: Int): Double = averagePowerValues[index] + private fun getAveragePowerValue(index: Int): Double = powerValues[index] - private fun loadAveragePowerValue(hardwareName: String, path: String = "spec_machines.yml"): List { - val content = this::class - .java.classLoader - .getResourceAsStream(path) - val hardwareToAveragePowerValues: Map> = Yaml().load(content) - return hardwareToAveragePowerValues.getOrDefault(hardwareName, listOf()) + private companion object { + private fun loadAveragePowerValue(hardwareName: String, path: String = "spec_machines.yml"): List { + val content = this::class + .java.classLoader + .getResourceAsStream(path) + val hardwareToAveragePowerValues: Map> = Yaml().load(content) + return hardwareToAveragePowerValues.getOrDefault(hardwareName, listOf()) + } } } -- cgit v1.2.3