diff options
| author | Niels Thiele <noleu66@posteo.net> | 2025-06-22 12:31:21 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-22 12:31:21 +0200 |
| commit | 0203254b709614fa732c114aa25916f61b8b3275 (patch) | |
| tree | 63232140a8e60e16e1668a51eb58954d8609fbdc /opendc-compute/opendc-compute-simulator/src/test | |
| parent | 8f846655347195bf6f22a4a102aa06f0ab127da1 (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')
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) |
