From d0f5200cf378a0d7f9397526f0db0695bdc34dd2 Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Thu, 8 Apr 2021 19:56:47 +0200 Subject: compute: Implement filter scheduler This change adds an implementation of the filter scheduler to the OpenDC Compute module. This is modeled after the filter scheduler implementation in OpenStack and should allow for more flexible scheduling policies. See: https://docs.openstack.org/nova/latest/user/filter-scheduler.html --- .../org/opendc/compute/service/ComputeServiceTest.kt | 14 +++++++++++--- .../compute/service/scheduler/AllocationPolicyTest.kt | 10 +++++----- 2 files changed, 16 insertions(+), 8 deletions(-) (limited to 'simulator/opendc-compute/opendc-compute-service/src/test') diff --git a/simulator/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/ComputeServiceTest.kt b/simulator/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/ComputeServiceTest.kt index 45a306aa..c6e24346 100644 --- a/simulator/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/ComputeServiceTest.kt +++ b/simulator/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/ComputeServiceTest.kt @@ -39,7 +39,10 @@ import org.opendc.compute.service.driver.Host import org.opendc.compute.service.driver.HostListener import org.opendc.compute.service.driver.HostModel import org.opendc.compute.service.driver.HostState -import org.opendc.compute.service.scheduler.AvailableMemoryAllocationPolicy +import org.opendc.compute.service.scheduler.FilterScheduler +import org.opendc.compute.service.scheduler.filters.ComputeCapabilitiesFilter +import org.opendc.compute.service.scheduler.filters.ComputeFilter +import org.opendc.compute.service.scheduler.weights.MemoryWeigher import org.opendc.simulator.utils.DelayControllerClockAdapter import java.util.* @@ -55,9 +58,12 @@ internal class ComputeServiceTest { fun setUp() { scope = TestCoroutineScope() val clock = DelayControllerClockAdapter(scope) - val policy = AvailableMemoryAllocationPolicy() + val computeScheduler = FilterScheduler( + filters = listOf(ComputeFilter(), ComputeCapabilitiesFilter()), + weighers = listOf(MemoryWeigher() to -1.0) + ) val meter = MeterProvider.noop().get("opendc-compute") - service = ComputeService(scope.coroutineContext, clock, meter, policy) + service = ComputeService(scope.coroutineContext, clock, meter, computeScheduler) } @AfterEach @@ -257,6 +263,7 @@ internal class ComputeServiceTest { server.start() delay(5 * 60 * 1000) + every { host.state } returns HostState.UP listeners.forEach { it.onStateChanged(host, HostState.UP) } delay(5 * 60 * 1000) @@ -286,6 +293,7 @@ internal class ComputeServiceTest { delay(5 * 60 * 1000) + every { host.state } returns HostState.DOWN listeners.forEach { it.onStateChanged(host, HostState.DOWN) } server.start() diff --git a/simulator/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/scheduler/AllocationPolicyTest.kt b/simulator/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/scheduler/AllocationPolicyTest.kt index db377914..7227d225 100644 --- a/simulator/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/scheduler/AllocationPolicyTest.kt +++ b/simulator/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/scheduler/AllocationPolicyTest.kt @@ -100,9 +100,9 @@ internal class AllocationPolicyTest { every { view.host.model.cpuCount } returns random.nextInt(1, 16) every { view.host.model.memorySize } returns random.nextLong(1024, 1024 * 1024) every { view.availableMemory } returns random.nextLong(0, view.host.model.memorySize) - every { view.numberOfActiveServers } returns random.nextInt(0, 6) + every { view.instanceCount } returns random.nextInt(0, 6) every { view.provisionedCores } returns random.nextInt(0, view.host.model.cpuCount) - every { view.toString() } returns "HostView[$i,numberOfActiveServers=${view.numberOfActiveServers}]" + every { view.toString() } returns "HostView[$i,numberOfActiveServers=${view.instanceCount}]" view } @@ -132,7 +132,7 @@ internal class AllocationPolicyTest { every { view.host.model.cpuCount } returns random.nextInt(1, 16) every { view.host.model.memorySize } returns random.nextLong(1024, 1024 * 1024) every { view.availableMemory } returns random.nextLong(0, view.host.model.memorySize) - every { view.numberOfActiveServers } returns random.nextInt(0, 6) + every { view.instanceCount } returns random.nextInt(0, 6) every { view.provisionedCores } returns random.nextInt(0, view.host.model.cpuCount) every { view.toString() } returns "HostView[$i,availableMemory=${view.availableMemory}]" view @@ -164,7 +164,7 @@ internal class AllocationPolicyTest { every { view.host.model.cpuCount } returns random.nextInt(1, 16) every { view.host.model.memorySize } returns random.nextLong(1024, 1024 * 1024) every { view.availableMemory } returns random.nextLong(0, view.host.model.memorySize) - every { view.numberOfActiveServers } returns random.nextInt(0, 6) + every { view.instanceCount } returns random.nextInt(0, 6) every { view.provisionedCores } returns random.nextInt(0, view.host.model.cpuCount) every { view.toString() } returns "HostView[$i,availableMemory=${view.availableMemory}]" view @@ -196,7 +196,7 @@ internal class AllocationPolicyTest { every { view.host.model.cpuCount } returns random.nextInt(1, 16) every { view.host.model.memorySize } returns random.nextLong(1024, 1024 * 1024) every { view.availableMemory } returns random.nextLong(0, view.host.model.memorySize) - every { view.numberOfActiveServers } returns random.nextInt(0, 6) + every { view.instanceCount } returns random.nextInt(0, 6) every { view.provisionedCores } returns random.nextInt(0, view.host.model.cpuCount) every { view.toString() } returns "HostView[$i,provisionedCores=${view.provisionedCores}]" view -- cgit v1.2.3