summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-03-06 16:04:10 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-03-06 16:04:10 +0000
commit41bdd708697929dc19f433417797ddad4533bd3e (patch)
tree690dac61c2a6e4a63be1f835e9fb0cc7a710321d
parent32f2ffc16a9fce1f35a47879aa3473661aa32228 (diff)
Let the implementation decide what kind of warmup is needed.
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java22
-rw-r--r--vespajlib/src/main/java/com/yahoo/compress/Compressor.java26
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;