From 48ddc082ea301f54717a8ab7c54023f73220e4eb Mon Sep 17 00:00:00 2001 From: Dante Niewenhuis Date: Thu, 2 Oct 2025 15:32:32 +0200 Subject: Improved FilterScheduler using a constantly sorting array (#374) Updated FilterScheduler.kt for performance using a constantly sorted Array --- .../base/experiment/specs/allocation/AllocationPolicySpec.kt | 5 +++-- .../main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'opendc-experiments/opendc-experiments-base/src') diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/AllocationPolicySpec.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/AllocationPolicySpec.kt index 8ea0a31e..afe15032 100644 --- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/AllocationPolicySpec.kt +++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/experiment/specs/allocation/AllocationPolicySpec.kt @@ -76,13 +76,14 @@ public fun createComputeScheduler( spec: AllocationPolicySpec, seeder: RandomGenerator, clock: InstantSource, + numHosts: Int = 1000, ): ComputeScheduler { return when (spec) { - is PrefabAllocationPolicySpec -> createPrefabComputeScheduler(spec.policyName, seeder, clock) + is PrefabAllocationPolicySpec -> createPrefabComputeScheduler(spec.policyName, seeder, clock, numHosts) is FilterAllocationPolicySpec -> { val filters = spec.filters.map { createHostFilter(it) } val weighers = spec.weighers.map { createHostWeigher(it) } - FilterScheduler(filters, weighers, spec.subsetSize, seeder) + FilterScheduler(filters, weighers, spec.subsetSize, seeder, numHosts) } is TimeShiftAllocationPolicySpec -> { val filters = spec.filters.map { createHostFilter(it) } diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt index 4f845e01..ffa31f57 100644 --- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt +++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt @@ -107,6 +107,8 @@ public fun runScenario( val startTime = Duration.ofMillis(startTimeLong) val topology = clusterTopology(scenario.topologySpec.pathToFile) + + val numHosts = topology.sumOf { it.hostSpecs.size } provisioner.runSteps( setupComputeService( serviceDomain, @@ -116,6 +118,7 @@ public fun runScenario( scenario.allocationPolicySpec, Random(it.seeder.nextLong()), timeSource, + numHosts, ) provisioner.registry.register(serviceDomain, ComputeScheduler::class.java, computeScheduler) -- cgit v1.2.3