From 8a8c9adc325d29ae9b2bd03d5f01d0601a8974ba Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 13 Feb 2025 15:49:14 +0000 Subject: [PATCH] Making force merge threadpool 1/8th of total cores (#17255) Signed-off-by: Gaurav Bafna (cherry picked from commit 38e4b335f5182c0efefc0d88fee733805304f95b) Signed-off-by: github-actions[bot] --- CHANGELOG.md | 3 ++- .../main/java/org/opensearch/threadpool/ThreadPool.java | 9 ++++++++- .../java/org/opensearch/threadpool/ThreadPoolTests.java | 8 ++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c73365ffb9003..d0058d3f1739e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Bump `reactor_netty` from 1.1.26 to 1.1.27 ([#17322](https://github.com/opensearch-project/OpenSearch/pull/17322)) ### Changed -- Convert transport-reactor-netty4 to use gradle version catalog [#17233](https://github.com/opensearch-project/OpenSearch/pull/17233)) +- Convert transport-reactor-netty4 to use gradle version catalog [#17233](https://github.com/opensearch-project/OpenSearch/pull/17233) +- Increase force merge threads to 1/8th of cores [#17255](https://github.com/opensearch-project/OpenSearch/pull/17255) ### Deprecated diff --git a/server/src/main/java/org/opensearch/threadpool/ThreadPool.java b/server/src/main/java/org/opensearch/threadpool/ThreadPool.java index 97c1089330b97..7d2e9a470abf3 100644 --- a/server/src/main/java/org/opensearch/threadpool/ThreadPool.java +++ b/server/src/main/java/org/opensearch/threadpool/ThreadPool.java @@ -289,7 +289,10 @@ public ThreadPool( Names.FETCH_SHARD_STARTED, new ScalingExecutorBuilder(Names.FETCH_SHARD_STARTED, 1, 2 * allocatedProcessors, TimeValue.timeValueMinutes(5)) ); - builders.put(Names.FORCE_MERGE, new FixedExecutorBuilder(settings, Names.FORCE_MERGE, 1, -1)); + builders.put( + Names.FORCE_MERGE, + new FixedExecutorBuilder(settings, Names.FORCE_MERGE, oneEighthAllocatedProcessors(allocatedProcessors), -1) + ); builders.put( Names.FETCH_SHARD_STORE, new ScalingExecutorBuilder(Names.FETCH_SHARD_STORE, 1, 2 * allocatedProcessors, TimeValue.timeValueMinutes(5)) @@ -692,6 +695,10 @@ static int boundedBy(int value, int min, int max) { return Math.min(max, Math.max(min, value)); } + static int oneEighthAllocatedProcessors(final int allocatedProcessors) { + return boundedBy(allocatedProcessors / 8, 1, Integer.MAX_VALUE); + } + static int halfAllocatedProcessors(int allocatedProcessors) { return (allocatedProcessors + 1) / 2; } diff --git a/server/src/test/java/org/opensearch/threadpool/ThreadPoolTests.java b/server/src/test/java/org/opensearch/threadpool/ThreadPoolTests.java index 205bf7621c576..fd79115ad5872 100644 --- a/server/src/test/java/org/opensearch/threadpool/ThreadPoolTests.java +++ b/server/src/test/java/org/opensearch/threadpool/ThreadPoolTests.java @@ -196,4 +196,12 @@ public void testThreadPoolResizeFail() { terminate(threadPool); } } + + public void testOneEighthAllocatedProcessors() { + assertThat(ThreadPool.oneEighthAllocatedProcessors(1), equalTo(1)); + assertThat(ThreadPool.oneEighthAllocatedProcessors(4), equalTo(1)); + assertThat(ThreadPool.oneEighthAllocatedProcessors(8), equalTo(1)); + assertThat(ThreadPool.oneEighthAllocatedProcessors(32), equalTo(4)); + assertThat(ThreadPool.oneEighthAllocatedProcessors(128), equalTo(16)); + } }