From 519fc4209460f28de8d4954c1a50402d4af6b02b Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Thu, 11 Feb 2021 23:44:23 +0000 Subject: Use small buffers where size matters more than speed. --- jrt/src/com/yahoo/jrt/Supervisor.java | 12 ++++++++++++ jrt/src/com/yahoo/jrt/slobrok/api/Mirror.java | 1 + jrt/src/com/yahoo/jrt/slobrok/server/Slobrok.java | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) (limited to 'jrt/src/com') diff --git a/jrt/src/com/yahoo/jrt/Supervisor.java b/jrt/src/com/yahoo/jrt/Supervisor.java index d4168e97743..ed94adcadd1 100644 --- a/jrt/src/com/yahoo/jrt/Supervisor.java +++ b/jrt/src/com/yahoo/jrt/Supervisor.java @@ -15,6 +15,8 @@ import java.util.concurrent.atomic.AtomicReference; **/ public class Supervisor { + private static final int SMALL_INPUT_BUFFER_SIZE = 20 * 1024; // Large enough too hold the typical application buffersize of 17k. + private static final int SMALL_OUTPUT_BUFFER_SIZE = 8 *1024; // Suitable small buffer usage with many connections and little traffic. private final Transport transport; private SessionHandler sessionHandler = null; private final Object methodMapLock = new Object(); @@ -33,6 +35,16 @@ public class Supervisor { new MandatoryMethods(this); } + /** + * Will optimize buffers size for small memory footprint + * Use this when you have many connections with very little traffic. + **/ + public Supervisor enableSmallBuffers() { + setMaxInputBufferSize(SMALL_INPUT_BUFFER_SIZE); + setMaxOutputBufferSize(SMALL_OUTPUT_BUFFER_SIZE); + return this; + } + /** * Set maximum input buffer size. This value will only affect * connections that use a common input buffer when decoding diff --git a/jrt/src/com/yahoo/jrt/slobrok/api/Mirror.java b/jrt/src/com/yahoo/jrt/slobrok/api/Mirror.java index 5a4a79995d8..6bceb7a1db0 100644 --- a/jrt/src/com/yahoo/jrt/slobrok/api/Mirror.java +++ b/jrt/src/com/yahoo/jrt/slobrok/api/Mirror.java @@ -57,6 +57,7 @@ public class Mirror implements IMirror { **/ public Mirror(Supervisor orb, SlobrokList slobroks, BackOffPolicy bop) { this.orb = orb; + orb.enableSmallBuffers(); this.slobroks = slobroks; this.backOff = bop; transportThread = orb.transport().selectThread(); diff --git a/jrt/src/com/yahoo/jrt/slobrok/server/Slobrok.java b/jrt/src/com/yahoo/jrt/slobrok/server/Slobrok.java index f19779732ba..1a0c94b9bd0 100644 --- a/jrt/src/com/yahoo/jrt/slobrok/server/Slobrok.java +++ b/jrt/src/com/yahoo/jrt/slobrok/server/Slobrok.java @@ -39,7 +39,7 @@ public class Slobrok { public Slobrok(int port) throws ListenFailedException { // NB: rpc must be single-threaded - orb = new Supervisor(new Transport("slobrok-" + port, 1)); + orb = new Supervisor(new Transport("slobrok-" + port, 1)).enableSmallBuffers(); registerMethods(); try { listener = orb.listen(new Spec(port)); -- cgit v1.2.3