From 1968e56cf3a9aca848e34bd5ca7418b7597052b9 Mon Sep 17 00:00:00 2001 From: Armin Braun Date: Sat, 9 May 2020 15:24:26 +0200 Subject: [PATCH] Make No. of Transport Threads == Available CPUs We never do any file IO or other blocking work on the transport threads so no tangible benefit can be derived from using more threads than CPUs for IO. There are however significant downsides to using more threads than necessary with Netty in particular. Since we use the default setting for `io.netty.allocator.useCacheForAllThreads` which is `true` we end up using `16MB` of thread local buffer cache for each transport thread. Meaning we potentially waste 2 * CPUs * 16MB of heap across both tcp and http transports. --- .../elasticsearch/http/netty4/Netty4HttpServerTransport.java | 2 +- .../org/elasticsearch/transport/netty4/Netty4Transport.java | 2 +- .../org/elasticsearch/transport/nio/NioTransportPlugin.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/transport-netty4/src/main/java/org/elasticsearch/http/netty4/Netty4HttpServerTransport.java b/modules/transport-netty4/src/main/java/org/elasticsearch/http/netty4/Netty4HttpServerTransport.java index ac6741d37fcab..fba487de1f357 100644 --- a/modules/transport-netty4/src/main/java/org/elasticsearch/http/netty4/Netty4HttpServerTransport.java +++ b/modules/transport-netty4/src/main/java/org/elasticsearch/http/netty4/Netty4HttpServerTransport.java @@ -127,7 +127,7 @@ public class Netty4HttpServerTransport extends AbstractHttpServerTransport { }, s -> Setting.parseInt(s, 2, Integer.MAX_VALUE, SETTING_KEY_HTTP_NETTY_MAX_COMPOSITE_BUFFER_COMPONENTS), Property.NodeScope); public static final Setting SETTING_HTTP_WORKER_COUNT = new Setting<>("http.netty.worker_count", - (s) -> Integer.toString(EsExecutors.allocatedProcessors(s) * 2), + (s) -> Integer.toString(EsExecutors.allocatedProcessors(s)), (s) -> Setting.parseInt(s, 1, "http.netty.worker_count"), Property.NodeScope); public static final Setting SETTING_HTTP_NETTY_RECEIVE_PREDICTOR_SIZE = diff --git a/modules/transport-netty4/src/main/java/org/elasticsearch/transport/netty4/Netty4Transport.java b/modules/transport-netty4/src/main/java/org/elasticsearch/transport/netty4/Netty4Transport.java index 3cdb5a92134b7..66394fe5ab278 100644 --- a/modules/transport-netty4/src/main/java/org/elasticsearch/transport/netty4/Netty4Transport.java +++ b/modules/transport-netty4/src/main/java/org/elasticsearch/transport/netty4/Netty4Transport.java @@ -83,7 +83,7 @@ public class Netty4Transport extends TcpTransport { public static final Setting WORKER_COUNT = new Setting<>("transport.netty.worker_count", - (s) -> Integer.toString(EsExecutors.allocatedProcessors(s) * 2), + (s) -> Integer.toString(EsExecutors.allocatedProcessors(s)), (s) -> Setting.parseInt(s, 1, "transport.netty.worker_count"), Property.NodeScope); public static final Setting NETTY_RECEIVE_PREDICTOR_SIZE = Setting.byteSizeSetting( diff --git a/plugins/transport-nio/src/main/java/org/elasticsearch/transport/nio/NioTransportPlugin.java b/plugins/transport-nio/src/main/java/org/elasticsearch/transport/nio/NioTransportPlugin.java index 84097e3a079d5..1da90e35ba7f4 100644 --- a/plugins/transport-nio/src/main/java/org/elasticsearch/transport/nio/NioTransportPlugin.java +++ b/plugins/transport-nio/src/main/java/org/elasticsearch/transport/nio/NioTransportPlugin.java @@ -57,7 +57,7 @@ public class NioTransportPlugin extends Plugin implements NetworkPlugin { public static final Setting NIO_WORKER_COUNT = new Setting<>("transport.nio.worker_count", - (s) -> Integer.toString(EsExecutors.allocatedProcessors(s) * 2), + (s) -> Integer.toString(EsExecutors.allocatedProcessors(s)), (s) -> Setting.parseInt(s, 1, "transport.nio.worker_count"), Setting.Property.NodeScope); public static final Setting NIO_HTTP_WORKER_COUNT = intSetting("http.nio.worker_count", 0, 0, Setting.Property.NodeScope);