From 9d42acaa1bb26e68cb6b0c436a4f69af00a27be5 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Tue, 4 Aug 2020 19:11:40 +0000 Subject: Add flags for controlling threads for feeding. --- .../src/main/java/com/yahoo/config/model/api/ModelContext.java | 3 +++ .../java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java | 4 ++++ .../com/yahoo/container/handler/threadpool/ContainerThreadPool.java | 4 +++- flags/src/main/java/com/yahoo/vespa/flags/Flags.java | 6 ++++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java index 7aba83861ce..64a2906b1be 100644 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java @@ -118,6 +118,9 @@ public interface ModelContext { // TODO(bjorncs): Temporary feature flag, revisit August 2020 default Duration jdiscHealthCheckProxyClientTimeout() { return Duration.ofMillis(100); } + + // TODO(bjorncs): Temporary feature flag + default double feedCoreThreadPoolSizeFactor() { return 1.0; } } } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java index eccd6d4431b..d26f6c6da04 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java @@ -161,6 +161,7 @@ public class ModelContextImpl implements ModelContext { private final boolean skipMbusReplyThread; private final Optional athenzDomain; private final Optional applicationRoles; + private final double feedCoreThreadPoolSizeFactor; public Properties(ApplicationId applicationId, boolean multitenantFromConfig, @@ -215,6 +216,8 @@ public class ModelContextImpl implements ModelContext { .with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm()).value();; this.athenzDomain = athenzDomain; this.applicationRoles = applicationRoles; + feedCoreThreadPoolSizeFactor = Flags.FEED_CORE_THREAD_POOL_SIZE_FACTOR.bindTo(flagSource) + .with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm()).value(); } @Override @@ -297,6 +300,7 @@ public class ModelContextImpl implements ModelContext { @Override public boolean skipCommunicationManagerThread() { return skipCommunicationManagerThread; } @Override public boolean skipMbusRequestThread() { return skipMbusRequestThread; } @Override public boolean skipMbusReplyThread() { return skipMbusReplyThread; } + @Override public double feedCoreThreadPoolSizeFactor() { return feedCoreThreadPoolSizeFactor; } } } diff --git a/container-core/src/main/java/com/yahoo/container/handler/threadpool/ContainerThreadPool.java b/container-core/src/main/java/com/yahoo/container/handler/threadpool/ContainerThreadPool.java index 6fc9da298a8..edbe12b64c6 100644 --- a/container-core/src/main/java/com/yahoo/container/handler/threadpool/ContainerThreadPool.java +++ b/container-core/src/main/java/com/yahoo/container/handler/threadpool/ContainerThreadPool.java @@ -83,7 +83,9 @@ public class ContainerThreadPool implements AutoCloseable { } private static int computeCoreThreadPoolSize(int corePoolSize, int maxNumThreads) { - return Math.min(corePoolSize, maxNumThreads); + return Math.min( + corePoolSize <= 0 ? Runtime.getRuntime().availableProcessors() * 2 : corePoolSize, + maxNumThreads); } } diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java index f7ef8866313..2ac5969c726 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java @@ -345,6 +345,12 @@ public class Flags { "Takes effect on next tick" ); + public static final UnboundDoubleFlag FEED_CORE_THREAD_POOL_SIZE_FACTOR = defineDoubleFlag( + "feed-core-thread-pool-size-factor", 1.0, + "Number of core threads in threadpool for feeding APIs as factor of max pool size", + "Takes effect on next internal redeployment", + APPLICATION_ID); + public static final UnboundBooleanFlag USE_CONFIG_SERVER_LOCK = defineFeatureFlag( "use-config-server-lock", false, -- cgit v1.2.3