diff options
| author | Dante Niewenhuis <d.niewenhuis@hotmail.com> | 2025-10-02 15:32:32 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-02 15:32:32 +0200 |
| commit | 48ddc082ea301f54717a8ab7c54023f73220e4eb (patch) | |
| tree | e76ee573abde2fe1d8ca874d33b34cba72e478c8 /opendc-compute/opendc-compute-simulator/src/test | |
| parent | 2ba57fd06560f096def01a31f8e47827f0f01da0 (diff) | |
Improved FilterScheduler using a constantly sorting array (#374)
Updated FilterScheduler.kt for performance using a constantly sorted Array
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.kt | 112 |
1 files changed, 43 insertions, 69 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 5d71d5de..a5312c53 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 @@ -41,7 +41,6 @@ import org.opendc.compute.simulator.scheduler.filters.VCpuFilter import org.opendc.compute.simulator.scheduler.filters.VGpuCapacityFilter import org.opendc.compute.simulator.scheduler.filters.VGpuFilter import org.opendc.compute.simulator.scheduler.weights.CoreRamWeigher -import org.opendc.compute.simulator.scheduler.weights.InstanceCountWeigher import org.opendc.compute.simulator.scheduler.weights.RamWeigher import org.opendc.compute.simulator.scheduler.weights.VCpuWeigher import org.opendc.compute.simulator.service.HostView @@ -88,7 +87,7 @@ internal class FilterSchedulerTest { } @Test - fun testNoFiltersAndSchedulers() { + fun testNoFiltersAndWeighters() { val scheduler = FilterScheduler( filters = emptyList(), @@ -120,40 +119,40 @@ internal class FilterSchedulerTest { ) } - @Test - fun testNoFiltersAndSchedulersRandom() { - val scheduler = - FilterScheduler( - filters = emptyList(), - weighers = emptyList(), - subsetSize = Int.MAX_VALUE, - random = Random(1), - ) - - val hostA = mockk<HostView>() - every { hostA.host.getState() } returns HostState.DOWN - every { hostA.host.getType() } returns "A" - every { hostA.host.isEmpty() } returns true - - val hostB = mockk<HostView>() - every { hostB.host.getState() } returns HostState.UP - every { hostB.host.getType() } returns "B" - every { hostB.host.isEmpty() } returns true - - scheduler.addHost(hostA) - scheduler.addHost(hostB) - - val req = mockk<SchedulingRequest>() - every { req.task.flavor.cpuCoreCount } returns 2 - every { req.task.flavor.memorySize } returns 1024 - every { req.isCancelled } returns false - - // Make sure we get the first host both times - assertAll( - { assertEquals(hostA, scheduler.select(mutableListOf(req).iterator()).host) }, - { assertEquals(hostA, scheduler.select(mutableListOf(req).iterator()).host) }, - ) - } +// @Test +// fun testNoFiltersAndSchedulersRandom() { +// val scheduler = +// FilterScheduler( +// filters = emptyList(), +// weighers = emptyList(), +// subsetSize = Int.MAX_VALUE, +// random = Random(1), +// ) +// +// val hostA = mockk<HostView>() +// every { hostA.host.getState() } returns HostState.DOWN +// every { hostA.host.getType() } returns "A" +// every { hostA.host.isEmpty() } returns true +// +// val hostB = mockk<HostView>() +// every { hostB.host.getState() } returns HostState.UP +// every { hostB.host.getType() } returns "B" +// every { hostB.host.isEmpty() } returns true +// +// scheduler.addHost(hostA) +// scheduler.addHost(hostB) +// +// val req = mockk<SchedulingRequest>() +// every { req.task.flavor.cpuCoreCount } returns 2 +// every { req.task.flavor.memorySize } returns 1024 +// every { req.isCancelled } returns false +// +// // Make sure we get the first host both times +// assertAll( +// { assertEquals(hostA, scheduler.select(mutableListOf(req).iterator()).host) }, +// { assertEquals(hostA, scheduler.select(mutableListOf(req).iterator()).host) }, +// ) +// } @Test fun testHostIsDown() { @@ -271,6 +270,7 @@ internal class FilterSchedulerTest { every { hostA.host.getState() } returns HostState.UP every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048) every { hostA.provisionedCpuCores } returns 3 + every { hostA.availableCpuCores } returns 1 every { hostA.host.getType() } returns "A" every { hostA.host.isEmpty() } returns true @@ -278,6 +278,7 @@ internal class FilterSchedulerTest { every { hostB.host.getState() } returns HostState.UP every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048) every { hostB.provisionedCpuCores } returns 0 + every { hostB.availableCpuCores } returns 4 every { hostB.host.getType() } returns "B" every { hostB.host.isEmpty() } returns true @@ -591,6 +592,7 @@ internal class FilterSchedulerTest { every { hostA.host.getState() } returns HostState.UP every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048) every { hostA.availableMemory } returns 1024 + every { hostA.availableCpuCores } returns 4 every { hostA.host.getType() } returns "A" every { hostA.host.isEmpty() } returns true @@ -598,6 +600,7 @@ internal class FilterSchedulerTest { every { hostB.host.getState() } returns HostState.UP every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048) every { hostB.availableMemory } returns 512 + every { hostB.availableCpuCores } returns 4 every { hostB.host.getType() } returns "B" every { hostB.host.isEmpty() } returns true @@ -624,6 +627,7 @@ internal class FilterSchedulerTest { every { hostA.host.getState() } returns HostState.UP every { hostA.host.getModel() } returns HostModel(12 * 2600.0, 12, 2048) every { hostA.availableMemory } returns 1024 + every { hostA.availableCpuCores } returns 12 every { hostA.host.getType() } returns "A" every { hostA.host.isEmpty() } returns true @@ -631,6 +635,7 @@ internal class FilterSchedulerTest { every { hostB.host.getState() } returns HostState.UP every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048) every { hostB.availableMemory } returns 512 + every { hostB.availableCpuCores } returns 4 every { hostB.host.getType() } returns "B" every { hostB.host.isEmpty() } returns true @@ -657,6 +662,7 @@ internal class FilterSchedulerTest { every { hostA.host.getState() } returns HostState.UP every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048) every { hostA.provisionedCpuCores } returns 2 + every { hostA.availableCpuCores } returns 4 every { hostA.host.getType() } returns "A" every { hostA.host.isEmpty() } returns true @@ -664,39 +670,7 @@ internal class FilterSchedulerTest { every { hostB.host.getState() } returns HostState.UP every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048) every { hostB.provisionedCpuCores } returns 0 - every { hostB.host.getType() } returns "B" - every { hostB.host.isEmpty() } returns true - - scheduler.addHost(hostA) - scheduler.addHost(hostB) - - val req = mockk<SchedulingRequest>() - every { req.task.flavor.cpuCoreCount } returns 2 - every { req.task.flavor.memorySize } returns 1024 - every { req.isCancelled } returns false - - assertEquals(hostB, scheduler.select(mutableListOf(req).iterator()).host) - } - - @Test - fun testInstanceCountWeigher() { - val scheduler = - FilterScheduler( - filters = emptyList(), - weighers = listOf(InstanceCountWeigher(multiplier = -1.0)), - ) - - val hostA = mockk<HostView>() - every { hostA.host.getState() } returns HostState.UP - every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048) - every { hostA.instanceCount } returns 2 - every { hostA.host.getType() } returns "A" - every { hostA.host.isEmpty() } returns true - - val hostB = mockk<HostView>() - every { hostB.host.getState() } returns HostState.UP - every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048) - every { hostB.instanceCount } returns 0 + every { hostB.availableCpuCores } returns 4 every { hostB.host.getType() } returns "B" every { hostB.host.isEmpty() } returns true |
