summaryrefslogtreecommitdiff
path: root/simulator/opendc-simulator/opendc-simulator-compute/src/test
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-03-30 22:20:13 +0200
committerFabian Mastenbroek <mail.fabianm@gmail.com>2021-04-07 12:13:14 +0200
commite38e6b9341907e28d029054995cf43cbd5e8bb4d (patch)
treebf625c4e3d02dfb147924d3dff54e2794c8ba75b /simulator/opendc-simulator/opendc-simulator-compute/src/test
parentbef2b2fc9ab97941613ec4537ebca1eb3fccdee6 (diff)
simulator: Add initial design of CPUFreq model
This change adds a model implementing Dynamic Voltage Frequency Scaling (DVFS) to OpenDC.
Diffstat (limited to 'simulator/opendc-simulator/opendc-simulator-compute/src/test')
-rw-r--r--simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/SimHypervisorTest.kt10
-rw-r--r--simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/SimMachineTest.kt7
-rw-r--r--simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/SimSpaceSharedHypervisorTest.kt34
-rw-r--r--simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/power/MachinePowerModelTest.kt28
4 files changed, 54 insertions, 25 deletions
diff --git a/simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/SimHypervisorTest.kt b/simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/SimHypervisorTest.kt
index 5773b325..67295dfd 100644
--- a/simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/SimHypervisorTest.kt
+++ b/simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/SimHypervisorTest.kt
@@ -32,9 +32,12 @@ 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.simulator.compute.cpufreq.PerformanceScalingGovernor
+import org.opendc.simulator.compute.cpufreq.SimpleScalingDriver
import org.opendc.simulator.compute.model.MemoryUnit
import org.opendc.simulator.compute.model.ProcessingNode
import org.opendc.simulator.compute.model.ProcessingUnit
+import org.opendc.simulator.compute.power.ConstantPowerModel
import org.opendc.simulator.compute.workload.SimTraceWorkload
import org.opendc.simulator.utils.DelayControllerClockAdapter
@@ -91,7 +94,7 @@ internal class SimHypervisorTest {
),
)
- val machine = SimBareMetalMachine(coroutineContext, clock, model)
+ val machine = SimBareMetalMachine(coroutineContext, clock, model, PerformanceScalingGovernor(), SimpleScalingDriver(ConstantPowerModel(0.0)))
val hypervisor = SimFairShareHypervisor(listener)
launch {
@@ -163,7 +166,10 @@ internal class SimHypervisorTest {
)
)
- val machine = SimBareMetalMachine(coroutineContext, clock, model)
+ val machine = SimBareMetalMachine(
+ coroutineContext, clock, model, PerformanceScalingGovernor(),
+ SimpleScalingDriver(ConstantPowerModel(0.0))
+ )
val hypervisor = SimFairShareHypervisor(listener)
launch {
diff --git a/simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/SimMachineTest.kt b/simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/SimMachineTest.kt
index 071bdf77..13f7f9ea 100644
--- a/simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/SimMachineTest.kt
+++ b/simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/SimMachineTest.kt
@@ -28,9 +28,12 @@ import kotlinx.coroutines.test.runBlockingTest
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
+import org.opendc.simulator.compute.cpufreq.PerformanceScalingGovernor
+import org.opendc.simulator.compute.cpufreq.SimpleScalingDriver
import org.opendc.simulator.compute.model.MemoryUnit
import org.opendc.simulator.compute.model.ProcessingNode
import org.opendc.simulator.compute.model.ProcessingUnit
+import org.opendc.simulator.compute.power.ConstantPowerModel
import org.opendc.simulator.compute.workload.SimFlopsWorkload
import org.opendc.simulator.utils.DelayControllerClockAdapter
@@ -54,7 +57,7 @@ class SimMachineTest {
@Test
fun testFlopsWorkload() = runBlockingTest {
val clock = DelayControllerClockAdapter(this)
- val machine = SimBareMetalMachine(coroutineContext, clock, machineModel)
+ val machine = SimBareMetalMachine(coroutineContext, clock, machineModel, PerformanceScalingGovernor(), SimpleScalingDriver(ConstantPowerModel(0.0)))
try {
machine.run(SimFlopsWorkload(2_000, utilization = 1.0))
@@ -69,7 +72,7 @@ class SimMachineTest {
@Test
fun testUsage() = runBlockingTest {
val clock = DelayControllerClockAdapter(this)
- val machine = SimBareMetalMachine(coroutineContext, clock, machineModel)
+ val machine = SimBareMetalMachine(coroutineContext, clock, machineModel, PerformanceScalingGovernor(), SimpleScalingDriver(ConstantPowerModel(0.0)))
val res = mutableListOf<Double>()
val job = launch { machine.usage.toList(res) }
diff --git a/simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/SimSpaceSharedHypervisorTest.kt b/simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/SimSpaceSharedHypervisorTest.kt
index fb0523af..51e4305a 100644
--- a/simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/SimSpaceSharedHypervisorTest.kt
+++ b/simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/SimSpaceSharedHypervisorTest.kt
@@ -31,9 +31,12 @@ import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
+import org.opendc.simulator.compute.cpufreq.PerformanceScalingGovernor
+import org.opendc.simulator.compute.cpufreq.SimpleScalingDriver
import org.opendc.simulator.compute.model.MemoryUnit
import org.opendc.simulator.compute.model.ProcessingNode
import org.opendc.simulator.compute.model.ProcessingUnit
+import org.opendc.simulator.compute.power.ConstantPowerModel
import org.opendc.simulator.compute.workload.SimFlopsWorkload
import org.opendc.simulator.compute.workload.SimRuntimeWorkload
import org.opendc.simulator.compute.workload.SimTraceWorkload
@@ -75,7 +78,10 @@ internal class SimSpaceSharedHypervisorTest {
),
)
- val machine = SimBareMetalMachine(coroutineContext, clock, machineModel)
+ val machine = SimBareMetalMachine(
+ coroutineContext, clock, machineModel, PerformanceScalingGovernor(),
+ SimpleScalingDriver(ConstantPowerModel(0.0))
+ )
val hypervisor = SimSpaceSharedHypervisor()
val colA = launch { machine.usage.toList(usagePm) }
@@ -109,7 +115,10 @@ internal class SimSpaceSharedHypervisorTest {
val clock = DelayControllerClockAdapter(this)
val duration = 5 * 60L * 1000
val workload = SimRuntimeWorkload(duration)
- val machine = SimBareMetalMachine(coroutineContext, clock, machineModel)
+ val machine = SimBareMetalMachine(
+ coroutineContext, clock, machineModel, PerformanceScalingGovernor(),
+ SimpleScalingDriver(ConstantPowerModel(0.0))
+ )
val hypervisor = SimSpaceSharedHypervisor()
launch { machine.run(hypervisor) }
@@ -131,7 +140,10 @@ internal class SimSpaceSharedHypervisorTest {
val duration = 5 * 60L * 1000
val workload = SimFlopsWorkload((duration * 3.2).toLong(), 1.0)
- val machine = SimBareMetalMachine(coroutineContext, clock, machineModel)
+ val machine = SimBareMetalMachine(
+ coroutineContext, clock, machineModel, PerformanceScalingGovernor(),
+ SimpleScalingDriver(ConstantPowerModel(0.0))
+ )
val hypervisor = SimSpaceSharedHypervisor()
launch { machine.run(hypervisor) }
@@ -150,7 +162,10 @@ internal class SimSpaceSharedHypervisorTest {
fun testTwoWorkloads() = runBlockingTest {
val clock = DelayControllerClockAdapter(this)
val duration = 5 * 60L * 1000
- val machine = SimBareMetalMachine(coroutineContext, clock, machineModel)
+ val machine = SimBareMetalMachine(
+ coroutineContext, clock, machineModel, PerformanceScalingGovernor(),
+ SimpleScalingDriver(ConstantPowerModel(0.0))
+ )
val hypervisor = SimSpaceSharedHypervisor()
launch { machine.run(hypervisor) }
@@ -174,8 +189,10 @@ internal class SimSpaceSharedHypervisorTest {
@Test
fun testConcurrentWorkloadFails() = runBlockingTest {
val clock = DelayControllerClockAdapter(this)
-
- val machine = SimBareMetalMachine(coroutineContext, clock, machineModel)
+ val machine = SimBareMetalMachine(
+ coroutineContext, clock, machineModel, PerformanceScalingGovernor(),
+ SimpleScalingDriver(ConstantPowerModel(0.0))
+ )
val hypervisor = SimSpaceSharedHypervisor()
launch { machine.run(hypervisor) }
@@ -197,7 +214,10 @@ internal class SimSpaceSharedHypervisorTest {
@Test
fun testConcurrentWorkloadSucceeds() = runBlockingTest {
val clock = DelayControllerClockAdapter(this)
- val machine = SimBareMetalMachine(coroutineContext, clock, machineModel)
+ val machine = SimBareMetalMachine(
+ coroutineContext, clock, machineModel, PerformanceScalingGovernor(),
+ SimpleScalingDriver(ConstantPowerModel(0.0))
+ )
val hypervisor = SimSpaceSharedHypervisor()
launch { machine.run(hypervisor) }
diff --git a/simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/power/MachinePowerModelTest.kt b/simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/power/MachinePowerModelTest.kt
index 13bb3668..f42e2e73 100644
--- a/simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/power/MachinePowerModelTest.kt
+++ b/simulator/opendc-simulator/opendc-simulator-compute/src/test/kotlin/org/opendc/simulator/compute/power/MachinePowerModelTest.kt
@@ -19,21 +19,21 @@ internal class MachinePowerModelTest {
@ParameterizedTest
@MethodSource("MachinePowerModelArgs")
fun `compute power consumption given CPU loads`(
- powerModel: MachinePowerModel,
+ powerModel: PowerModel,
expectedPowerConsumption: Double
) {
- val computedPowerConsumption = powerModel.computeCpuPower(cpuUtil)
+ val computedPowerConsumption = powerModel.computePower(cpuUtil)
assertEquals(expectedPowerConsumption, computedPowerConsumption, epsilon)
}
@ParameterizedTest
@MethodSource("MachinePowerModelArgs")
fun `ignore idle power when computing power consumptions`(
- powerModel: MachinePowerModel,
+ powerModel: PowerModel,
expectedPowerConsumption: Double
) {
val zeroPowerModel = ZeroIdlePowerDecorator(powerModel)
- val computedPowerConsumption = zeroPowerModel.computeCpuPower(0.0)
+ val computedPowerConsumption = zeroPowerModel.computePower(0.0)
assertEquals(0.0, computedPowerConsumption)
}
@@ -42,19 +42,19 @@ internal class MachinePowerModelTest {
val powerModel = InterpolationPowerModel("IBMx3550M3_XeonX5675")
assertAll(
- { assertThrows<IllegalArgumentException> { powerModel.computeCpuPower(-1.3) } },
- { assertThrows<IllegalArgumentException> { powerModel.computeCpuPower(1.3) } },
+ { assertThrows<IllegalArgumentException> { powerModel.computePower(-1.3) } },
+ { assertThrows<IllegalArgumentException> { powerModel.computePower(1.3) } },
)
assertAll(
- { assertEquals(58.4, powerModel.computeCpuPower(0.0)) },
- { assertEquals(58.4 + (98 - 58.4) / 5, powerModel.computeCpuPower(0.02)) },
- { assertEquals(98.0, powerModel.computeCpuPower(0.1)) },
- { assertEquals(140.0, powerModel.computeCpuPower(0.5)) },
- { assertEquals(189.0, powerModel.computeCpuPower(0.8)) },
- { assertEquals(189.0 + 0.7 * 10 * (205 - 189) / 10, powerModel.computeCpuPower(0.87)) },
- { assertEquals(205.0, powerModel.computeCpuPower(0.9)) },
- { assertEquals(222.0, powerModel.computeCpuPower(1.0)) },
+ { assertEquals(58.4, powerModel.computePower(0.0)) },
+ { assertEquals(58.4 + (98 - 58.4) / 5, powerModel.computePower(0.02)) },
+ { assertEquals(98.0, powerModel.computePower(0.1)) },
+ { assertEquals(140.0, powerModel.computePower(0.5)) },
+ { assertEquals(189.0, powerModel.computePower(0.8)) },
+ { assertEquals(189.0 + 0.7 * 10 * (205 - 189) / 10, powerModel.computePower(0.87)) },
+ { assertEquals(205.0, powerModel.computePower(0.9)) },
+ { assertEquals(222.0, powerModel.computePower(1.0)) },
)
}