summaryrefslogtreecommitdiff
path: root/opendc-compute/opendc-compute-topology
diff options
context:
space:
mode:
authorAlessio Leonardo Tomei <122273875+T0mexX@users.noreply.github.com>2024-08-22 14:40:57 +0200
committerGitHub <noreply@github.com>2024-08-22 14:40:57 +0200
commit4f98fb2bf8204f6af52cd6eeb3313d21c6ca95bc (patch)
treea9a67ce01615cfccfc787573626ae8c9f2ff740c /opendc-compute/opendc-compute-topology
parentb2877899b9479458dba5e7dcba2891f1248b5d6d (diff)
Added Unit of measurament system with new deserialization (#242)
Diffstat (limited to 'opendc-compute/opendc-compute-topology')
-rw-r--r--opendc-compute/opendc-compute-topology/src/main/kotlin/org/opendc/compute/topology/TopologyFactories.kt7
-rw-r--r--opendc-compute/opendc-compute-topology/src/main/kotlin/org/opendc/compute/topology/specs/TopologySpecs.kt33
2 files changed, 27 insertions, 13 deletions
diff --git a/opendc-compute/opendc-compute-topology/src/main/kotlin/org/opendc/compute/topology/TopologyFactories.kt b/opendc-compute/opendc-compute-topology/src/main/kotlin/org/opendc/compute/topology/TopologyFactories.kt
index 656085e8..d4d4bfe3 100644
--- a/opendc-compute/opendc-compute-topology/src/main/kotlin/org/opendc/compute/topology/TopologyFactories.kt
+++ b/opendc-compute/opendc-compute-topology/src/main/kotlin/org/opendc/compute/topology/TopologyFactories.kt
@@ -120,16 +120,17 @@ private fun HostJSONSpec.toHostSpecs(
random: RandomGenerator,
): HostSpec {
val unknownProcessingNode = ProcessingNode("unknown", "unknown", "unknown", cpu.coreCount)
- val units = List(cpu.count) { ProcessingUnit(unknownProcessingNode, globalCoreId++, cpu.coreSpeed) }
+ val units = List(cpu.count) { ProcessingUnit(unknownProcessingNode, globalCoreId++, cpu.coreSpeed.toMHz()) }
- val unknownMemoryUnit = MemoryUnit(memory.vendor, memory.modelName, memory.memorySpeed, memory.memorySize)
+ val unknownMemoryUnit = MemoryUnit(memory.vendor, memory.modelName, memory.memorySpeed.toMHz(), memory.memorySize.toMiB().toLong())
val machineModel =
MachineModel(
units,
listOf(unknownMemoryUnit),
)
- val powerModel = getPowerModel(powerModel.modelType, powerModel.power, powerModel.maxPower, powerModel.idlePower)
+ val powerModel =
+ getPowerModel(powerModel.modelType, powerModel.power.toWatts(), powerModel.maxPower.toWatts(), powerModel.idlePower.toWatts())
var hostName: String
if (name == null) {
diff --git a/opendc-compute/opendc-compute-topology/src/main/kotlin/org/opendc/compute/topology/specs/TopologySpecs.kt b/opendc-compute/opendc-compute-topology/src/main/kotlin/org/opendc/compute/topology/specs/TopologySpecs.kt
index 110d6fb1..974bb4a3 100644
--- a/opendc-compute/opendc-compute-topology/src/main/kotlin/org/opendc/compute/topology/specs/TopologySpecs.kt
+++ b/opendc-compute/opendc-compute-topology/src/main/kotlin/org/opendc/compute/topology/specs/TopologySpecs.kt
@@ -23,6 +23,9 @@
package org.opendc.compute.topology.specs
import kotlinx.serialization.Serializable
+import org.opendc.common.units.DataSize
+import org.opendc.common.units.Frequency
+import org.opendc.common.units.Power
/**
* Definition of a Topology modeled in the simulation.
@@ -64,7 +67,7 @@ public data class HostJSONSpec(
val name: String? = null,
val cpu: CPUSpec,
val memory: MemorySpec,
- val powerModel: PowerModelSpec = PowerModelSpec("linear", 350.0, 400.0, 200.0),
+ val powerModel: PowerModelSpec = PowerModelSpec.DFLT,
val count: Int = 1,
)
@@ -75,7 +78,7 @@ public data class HostJSONSpec(
* @param modelName The model name of the device.
* @param arch The micro-architecture of the processor node.
* @param coreCount The number of cores in the CPU
- * @param coreSpeed The speed of the cores in Mhz
+ * @param coreSpeed The speed of the cores
*/
@Serializable
public data class CPUSpec(
@@ -83,7 +86,7 @@ public data class CPUSpec(
val modelName: String = "unknown",
val arch: String = "unknown",
val coreCount: Int,
- val coreSpeed: Double,
+ val coreSpeed: Frequency,
val count: Int = 1,
)
@@ -93,26 +96,36 @@ public data class CPUSpec(
* @param vendor The vendor of the storage device.
* @param modelName The model name of the device.
* @param arch The micro-architecture of the processor node.
- * @param memorySpeed The speed of the cores in ?
- * @param memorySize The size of the memory Unit in MiB
+ * @param memorySpeed The speed of the cores
+ * @param memorySize The size of the memory Unit
*/
@Serializable
public data class MemorySpec(
val vendor: String = "unknown",
val modelName: String = "unknown",
val arch: String = "unknown",
- val memorySpeed: Double = -1.0,
- val memorySize: Long,
+ val memorySpeed: Frequency = Frequency.ofMHz(-1),
+ val memorySize: DataSize,
)
@Serializable
public data class PowerModelSpec(
val modelType: String,
- val power: Double = 400.0,
- val maxPower: Double,
- val idlePower: Double,
+ val power: Power = Power.ofWatts(400),
+ val maxPower: Power,
+ val idlePower: Power,
) {
init {
require(maxPower >= idlePower) { "The max power of a power model can not be less than the idle power" }
}
+
+ public companion object {
+ public val DFLT: PowerModelSpec =
+ PowerModelSpec(
+ modelType = "linear",
+ power = Power.ofWatts(350),
+ maxPower = Power.ofWatts(400.0),
+ idlePower = Power.ofWatts(200.0),
+ )
+ }
}