From b712cbf93deb016eef33f9b52de6318bb1187661 Mon Sep 17 00:00:00 2001 From: Brian Neumann-Fopiano Date: Thu, 22 Oct 2026 04:08:14 -0400 Subject: [PATCH] Hydrology pool host cap - Hydrology planner pool minimum never exceeds the host core count (floor 2) --- .../iris/generation/concurrent/MultiBurst.java | 6 +++--- .../generation/concurrent/HydrologyBurstTest.java | 14 +++++++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/art/arcane/iris/generation/concurrent/MultiBurst.java b/core/src/main/java/art/arcane/iris/generation/concurrent/MultiBurst.java index 66fe2961c..56509c67b 100644 --- a/core/src/main/java/art/arcane/iris/generation/concurrent/MultiBurst.java +++ b/core/src/main/java/art/arcane/iris/generation/concurrent/MultiBurst.java @@ -144,11 +144,11 @@ public class MultiBurst extends MultiBurstSupport { } static int plannerParallelism() { - return plannerParallelism(MultiBurstSupport.performanceProcessors()); + return plannerParallelism(MultiBurstSupport.performanceProcessors(), Runtime.getRuntime().availableProcessors()); } - static int plannerParallelism(int performanceProcessors) { - return Math.max(4, performanceProcessors); + static int plannerParallelism(int performanceProcessors, int availableProcessors) { + return Math.max(2, Math.min(Math.max(4, performanceProcessors), availableProcessors)); } @Override diff --git a/core/src/test/java/art/arcane/iris/generation/concurrent/HydrologyBurstTest.java b/core/src/test/java/art/arcane/iris/generation/concurrent/HydrologyBurstTest.java index bd0aca932..e26aecbd9 100644 --- a/core/src/test/java/art/arcane/iris/generation/concurrent/HydrologyBurstTest.java +++ b/core/src/test/java/art/arcane/iris/generation/concurrent/HydrologyBurstTest.java @@ -63,9 +63,17 @@ public class HydrologyBurstTest { @Test public void plannerPoolFollowsThePerformanceCores() { - assertEquals(12, MultiBurst.HydrologyBurst.plannerParallelism(12)); - assertEquals(4, MultiBurst.HydrologyBurst.plannerParallelism(1)); - assertEquals(32, MultiBurst.HydrologyBurst.plannerParallelism(32)); + assertEquals(12, MultiBurst.HydrologyBurst.plannerParallelism(12, 16)); + assertEquals(4, MultiBurst.HydrologyBurst.plannerParallelism(1, 8)); + assertEquals(32, MultiBurst.HydrologyBurst.plannerParallelism(32, 32)); + } + + @Test + public void plannerPoolNeverOutgrowsASmallHost() { + assertEquals(2, MultiBurst.HydrologyBurst.plannerParallelism(1, 1)); + assertEquals(2, MultiBurst.HydrologyBurst.plannerParallelism(2, 2)); + assertEquals(3, MultiBurst.HydrologyBurst.plannerParallelism(3, 3)); + assertEquals(4, MultiBurst.HydrologyBurst.plannerParallelism(2, 4)); } @Test