summaryrefslogtreecommitdiff
path: root/opendc-compute/opendc-compute-simulator/src/test
diff options
context:
space:
mode:
authorNiels Thiele <noleu66@posteo.net>2025-06-22 12:31:21 +0200
committerGitHub <noreply@github.com>2025-06-22 12:31:21 +0200
commit0203254b709614fa732c114aa25916f61b8b3275 (patch)
tree63232140a8e60e16e1668a51eb58954d8609fbdc /opendc-compute/opendc-compute-simulator/src/test
parent8f846655347195bf6f22a4a102aa06f0ab127da1 (diff)
Implemented Single GPU Support & outline of host-level allocation policies (#342)
* renamed performance counter to distinguish different resource types * added GPU, modelled similar to CPU * added GPUs to machine model * list of GPUs instead of single instance * renamed memory speed to bandwidth * enabled parsing of GPU resources * split powermodel into cpu and GPU powermodel * added gpu parsing tests * added idea of host level scheduling * added tests for multi gpu parsing * renamed powermodel to cpupowermodel * clarified naming of cpu and gpu components * added resource type to flow suplier and edge * added resourcetype * added GPU components and resource type to fragments * added GPU to workload and updated resource usage retrieval * implemented first version of multi resource * added name to workload * renamed perfomance counters * removed commented out code * removed deprecated comments * included demand and supply into calculations * resolving rebase mismatches * moved resource type from flowedge class to common package * added available resources to machinees * cleaner separation if workload is started of simmachine or vm * Replaced exception with dedicated enum * Only looping over resources that are actually used * using hashmaps to handle resourcetype instead of arrays for readability * fixed condition * tracking finished workloads per resource type * removed resource type from flowedge * made supply and demand distribution resource specific * added power model for GPU * removed unused test setup * removed depracated comments * removed unused parameter * added ID for GPU * added GPUs and GPU performance counters (naively) * implemented capturing of GPU statistics * added reminders for future implementations * renamed properties for better identification * added capturing GPU statistics * implemented first tests for GPUs * unified access to performance counters * added interface for general compute resource handling * implemented multi resource support in simmachine * added individual edge to VM per resource * extended compute resource interface * implemented multi-resource support in PSU * implemented generic retrieval of computeresources * implemented mult-resource suppport in vm * made method use more resource specific * implemented simple GPU tests * rolled back frquency and demand use * made naming independent of used resource * using workloads resources instead of VMs to determine available resource * implemented determination of used resources in workload * removed logging statements * implemented reading from workload * fixed naming for host-level allocation * fixed next deadline calculation * fixed forwarding supply * reduced memory footprint * made GPU powermodel nullable * maded Gpu powermodel configurable in topology * implemented tests for basic gpu scheduler * added gpu properties * implemented weights, filter and simple cpu-gpu scheduler * spotless apply * spotless apply pt. 2 * fixed capitalization * spotless kotlin run * implemented coloumn export * todo update * removed code comments * Merged PerformanceCounter classes into one & removed interface * removed GPU specific powermodel * Rebase master: kept both versions of TopologyFactories * renamed CpuPowermodel to resource independent Powermodel Moved it from Cpu package to power package * implementated default of getResourceType & removed overrides if possible * split getResourceType into Consumer and Supplier * added power as resource type * reduced supply demand from arrayList to single value * combining GPUs into one large GPU, until full multi-gpu support * merged distribution policy enum with corresponding factory * added comment * post-rebase fixes * aligned naming * Added GPU metrics to task output * Updates power resource type to uppercase. Standardizes the `ResourceType.Power` enum to `ResourceType.POWER` for consistency with other resource types and improved readability. * Removes deprecated test assertions Removes commented-out assertions in GPU tests. These assertions are no longer needed and clutter the test code. * Renames MaxMinFairnessStrategy to Policy Renames MaxMinFairnessStrategy to MaxMinFairnessPolicy for clarity and consistency with naming conventions. This change affects the factory and distributor to use the updated name. * applies spotless * nulls GPUs as it is not used
Diffstat (limited to 'opendc-compute/opendc-compute-simulator/src/test')
-rw-r--r--opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/FilterSchedulerTest.kt56
-rw-r--r--opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/MemorizingSchedulerTest.kt8
-rw-r--r--opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/TimeshiftSchedulerTest.kt4
3 files changed, 34 insertions, 34 deletions
diff --git a/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/FilterSchedulerTest.kt b/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/FilterSchedulerTest.kt
index 04a20f49..5109f828 100644
--- a/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/FilterSchedulerTest.kt
+++ b/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/FilterSchedulerTest.kt
@@ -78,7 +78,7 @@ internal class FilterSchedulerTest {
)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
@@ -103,7 +103,7 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostB)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
@@ -134,7 +134,7 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostB)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
@@ -159,7 +159,7 @@ internal class FilterSchedulerTest {
scheduler.addHost(host)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
@@ -180,7 +180,7 @@ internal class FilterSchedulerTest {
scheduler.addHost(host)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
@@ -209,7 +209,7 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostB)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
@@ -232,7 +232,7 @@ internal class FilterSchedulerTest {
scheduler.addHost(host)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 2300
every { req.isCancelled } returns false
@@ -250,18 +250,18 @@ internal class FilterSchedulerTest {
val hostA = mockk<HostView>()
every { hostA.host.getState() } returns HostState.UP
every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
- every { hostA.provisionedCores } returns 3
+ every { hostA.provisionedCpuCores } returns 3
val hostB = mockk<HostView>()
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
- every { hostB.provisionedCores } returns 0
+ every { hostB.provisionedCpuCores } returns 0
scheduler.addHost(hostA)
scheduler.addHost(hostB)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
@@ -279,12 +279,12 @@ internal class FilterSchedulerTest {
val host = mockk<HostView>()
every { host.host.getState() } returns HostState.UP
every { host.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
- every { host.provisionedCores } returns 0
+ every { host.provisionedCpuCores } returns 0
scheduler.addHost(host)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 8
+ every { req.task.flavor.cpuCoreCount } returns 8
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
@@ -312,7 +312,7 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostB)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.task.flavor.meta } returns mapOf("cpu-capacity" to 2 * 3200.0)
every { req.isCancelled } returns false
@@ -342,7 +342,7 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostB)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
@@ -358,7 +358,7 @@ internal class FilterSchedulerTest {
)
val reqA = mockk<SchedulingRequest>()
- every { reqA.task.flavor.coreCount } returns 2
+ every { reqA.task.flavor.cpuCoreCount } returns 2
every { reqA.task.flavor.memorySize } returns 1024
every { reqA.isCancelled } returns false
val taskA = mockk<ServiceTask>()
@@ -369,19 +369,19 @@ internal class FilterSchedulerTest {
every { hostA.host.getState() } returns HostState.UP
every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostA.host.getInstances() } returns emptySet()
- every { hostA.provisionedCores } returns 3
+ every { hostA.provisionedCpuCores } returns 3
val hostB = mockk<HostView>()
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostB.host.getInstances() } returns setOf(reqA.task)
- every { hostB.provisionedCores } returns 0
+ every { hostB.provisionedCpuCores } returns 0
scheduler.addHost(hostA)
scheduler.addHost(hostB)
val reqB = mockk<SchedulingRequest>()
- every { reqB.task.flavor.coreCount } returns 2
+ every { reqB.task.flavor.cpuCoreCount } returns 2
every { reqB.task.flavor.memorySize } returns 1024
every { reqB.task.meta } returns emptyMap()
every { reqB.isCancelled } returns false
@@ -402,7 +402,7 @@ internal class FilterSchedulerTest {
)
val reqA = mockk<SchedulingRequest>()
- every { reqA.task.flavor.coreCount } returns 2
+ every { reqA.task.flavor.cpuCoreCount } returns 2
every { reqA.task.flavor.memorySize } returns 1024
every { reqA.isCancelled } returns false
val taskA = mockk<ServiceTask>()
@@ -413,19 +413,19 @@ internal class FilterSchedulerTest {
every { hostA.host.getState() } returns HostState.UP
every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostA.host.getInstances() } returns setOf(reqA.task)
- every { hostA.provisionedCores } returns 3
+ every { hostA.provisionedCpuCores } returns 3
val hostB = mockk<HostView>()
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostB.host.getInstances() } returns emptySet()
- every { hostB.provisionedCores } returns 0
+ every { hostB.provisionedCpuCores } returns 0
scheduler.addHost(hostA)
scheduler.addHost(hostB)
val reqB = mockk<SchedulingRequest>()
- every { reqB.task.flavor.coreCount } returns 2
+ every { reqB.task.flavor.cpuCoreCount } returns 2
every { reqB.task.flavor.memorySize } returns 1024
every { reqB.task.meta } returns emptyMap()
every { reqB.isCancelled } returns false
@@ -459,7 +459,7 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostB)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
@@ -488,7 +488,7 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostB)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
@@ -506,18 +506,18 @@ internal class FilterSchedulerTest {
val hostA = mockk<HostView>()
every { hostA.host.getState() } returns HostState.UP
every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
- every { hostA.provisionedCores } returns 2
+ every { hostA.provisionedCpuCores } returns 2
val hostB = mockk<HostView>()
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
- every { hostB.provisionedCores } returns 0
+ every { hostB.provisionedCpuCores } returns 0
scheduler.addHost(hostA)
scheduler.addHost(hostB)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
@@ -546,7 +546,7 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostB)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
diff --git a/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/MemorizingSchedulerTest.kt b/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/MemorizingSchedulerTest.kt
index 92d5008b..6b9b0048 100644
--- a/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/MemorizingSchedulerTest.kt
+++ b/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/MemorizingSchedulerTest.kt
@@ -43,7 +43,7 @@ internal class MemorizingSchedulerTest {
)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
@@ -67,7 +67,7 @@ internal class MemorizingSchedulerTest {
scheduler.addHost(hostB)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
@@ -101,7 +101,7 @@ internal class MemorizingSchedulerTest {
scheduler.addHost(hostB)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
val skipped = slot<Int>()
@@ -129,7 +129,7 @@ internal class MemorizingSchedulerTest {
scheduler.addHost(host)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 2300
every { req.isCancelled } returns false
val skipped = slot<Int>()
diff --git a/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/TimeshiftSchedulerTest.kt b/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/TimeshiftSchedulerTest.kt
index 46c6425e..02f83eaf 100644
--- a/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/TimeshiftSchedulerTest.kt
+++ b/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/TimeshiftSchedulerTest.kt
@@ -48,7 +48,7 @@ class TimeshiftSchedulerTest {
)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
every { req.task.nature } returns TaskNature(true)
@@ -76,7 +76,7 @@ class TimeshiftSchedulerTest {
)
val req = mockk<SchedulingRequest>()
- every { req.task.flavor.coreCount } returns 2
+ every { req.task.flavor.cpuCoreCount } returns 2
every { req.task.flavor.memorySize } returns 1024
every { req.isCancelled } returns false
every { req.task.nature } returns TaskNature(true)