diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-03-06 16:04:10 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-03-06 16:04:10 +0000 |
commit | 41bdd708697929dc19f433417797ddad4533bd3e (patch) | |
tree | 690dac61c2a6e4a63be1f835e9fb0cc7a710321d | |
parent | 32f2ffc16a9fce1f35a47879aa3473661aa32228 (diff) |
Let the implementation decide what kind of warmup is needed.
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java | 22 | ||||
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/compress/Compressor.java | 26 |
2 files changed, 34 insertions, 14 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java b/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java index 6a25c9a5f4f..c2ea706acda 100644 --- a/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java +++ b/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java @@ -128,7 +128,7 @@ public class Dispatcher extends AbstractComponent { Thread warmup = new Thread(new Runnable() { @Override public void run() { - warmupLZ4(dispatchConfig.warmuptime()); + warmup(dispatchConfig.warmuptime()); } }); warmup.start(); @@ -148,19 +148,13 @@ public class Dispatcher extends AbstractComponent { searchCluster.pingIterationCompleted(); } - private static long warmupLZ4(double seconds) { - byte [] input = new byte[0x4000]; - Compressor lz4 = new Compressor(); - new Random().nextBytes(input); - long timeDone = System.nanoTime() + (long)(seconds*1000000000); - long compressedBytes = 0; - byte [] decompressed = new byte [input.length]; - while (System.nanoTime() < timeDone) { - byte [] compressed = lz4.compressUnconditionally(input); - lz4.decompressUnconditionally(compressed, decompressed); - compressedBytes += compressed.length; - } - return compressedBytes; + /* + Will run important code in order to trigger JIT compilation and avoid cold start issues. + Currently warms up lz4 compression code. + */ + + private static long warmup(double seconds) { + return new Compressor().warmup(seconds); } /** Returns the search cluster this dispatches to */ diff --git a/vespajlib/src/main/java/com/yahoo/compress/Compressor.java b/vespajlib/src/main/java/com/yahoo/compress/Compressor.java index ee003734d1a..77297ebcb50 100644 --- a/vespajlib/src/main/java/com/yahoo/compress/Compressor.java +++ b/vespajlib/src/main/java/com/yahoo/compress/Compressor.java @@ -3,8 +3,12 @@ package com.yahoo.compress; import net.jpountz.lz4.LZ4Compressor; import net.jpountz.lz4.LZ4Factory; +import net.jpountz.lz4.LZ4FastDecompressor; +import net.jpountz.lz4.LZ4SafeDecompressor; + import java.util.Arrays; import java.util.Optional; +import java.util.Random; /** * Compressor which can compress and decompress in various formats. @@ -148,6 +152,28 @@ public class Compressor { } } + public long warmup(double seconds) { + byte [] input = new byte[0x4000]; + new Random().nextBytes(input); + long timeDone = System.nanoTime() + (long)(seconds*1000000000); + long compressedBytes = 0; + byte [] decompressed = new byte [input.length]; + LZ4FastDecompressor fastDecompressor = factory.fastDecompressor(); + LZ4SafeDecompressor safeDecompressor = factory.safeDecompressor(); + LZ4Compressor fastCompressor = factory.fastCompressor(); + LZ4Compressor highCompressor = factory.highCompressor(); + while (System.nanoTime() < timeDone) { + byte [] compressedFast = fastCompressor.compress(input); + byte [] compressedHigh = highCompressor.compress(input); + fastDecompressor.decompress(compressedFast, decompressed); + fastDecompressor.decompress(compressedHigh, decompressed); + safeDecompressor.decompress(compressedFast, decompressed); + safeDecompressor.decompress(compressedHigh, decompressed); + compressedBytes += compressedFast.length + compressedHigh.length; + } + return compressedBytes; + } + public static class Compression { private final CompressionType compressionType; |