aboutsummaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahoo-inc.com>2017-04-27 14:31:13 +0200
committerGeir Storli <geirst@yahoo-inc.com>2017-05-03 09:40:32 +0200
commit3170e8e7bf512240ea524716498c38e51d668743 (patch)
tree380a22d3b9417e5d4d2ba153b07f662d822be52a /config-model
parent2f5bcd3f470e9caa69caf27796adba73bbed1666 (diff)
Tune flush strategy tls size based on available disk.
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java25
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java26
2 files changed, 39 insertions, 12 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java b/config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java
index 55266754ca1..356b560f3ba 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java
@@ -3,6 +3,8 @@ package com.yahoo.vespa.model.search;
import com.yahoo.config.provision.Flavor;
import com.yahoo.vespa.config.search.core.ProtonConfig;
+import static java.lang.Long.min;
+
/**
* Tuning of proton config for a search node based on the node flavor of that node.
*
@@ -22,7 +24,10 @@ public class NodeFlavorTuning implements ProtonConfig.Producer {
public void getConfig(ProtonConfig.Builder builder) {
tuneDiskWriteSpeed(builder);
tuneDocumentStoreMaxFileSize(builder);
- tuneFlushStrategyMemoryLimits(builder);
+ ProtonConfig.Flush.Memory.Builder flushMemoryBuilder = new ProtonConfig.Flush.Memory.Builder();
+ tuneFlushStrategyMemoryLimits(flushMemoryBuilder);
+ tuneFlushStrategyTlsSize(flushMemoryBuilder);
+ builder.flush(new ProtonConfig.Flush.Builder().memory(flushMemoryBuilder));
}
private void tuneDiskWriteSpeed(ProtonConfig.Builder builder) {
@@ -48,13 +53,17 @@ public class NodeFlavorTuning implements ProtonConfig.Producer {
.maxfilesize(fileSizeBytes)));
}
- private void tuneFlushStrategyMemoryLimits(ProtonConfig.Builder builder) {
- long memoryLimit = (long) ((nodeFlavor.getMinMainMemoryAvailableGb() / 8) * GB);
- builder.flush(new ProtonConfig.Flush.Builder()
- .memory(new ProtonConfig.Flush.Memory.Builder()
- .maxmemory(memoryLimit)
- .each(new ProtonConfig.Flush.Memory.Each.Builder()
- .maxmemory(memoryLimit))));
+ private void tuneFlushStrategyMemoryLimits(ProtonConfig.Flush.Memory.Builder builder) {
+ long memoryLimitBytes = (long) ((nodeFlavor.getMinMainMemoryAvailableGb() / 8) * GB);
+ builder.maxmemory(memoryLimitBytes)
+ .each(new ProtonConfig.Flush.Memory.Each.Builder()
+ .maxmemory(memoryLimitBytes));
+ }
+
+ private void tuneFlushStrategyTlsSize(ProtonConfig.Flush.Memory.Builder builder) {
+ long tlsSizeBytes = (long) ((nodeFlavor.getMinDiskAvailableGb() * 0.07) * GB);
+ tlsSizeBytes = min(tlsSizeBytes, 100 * GB);
+ builder.maxtlssize(tlsSizeBytes);
}
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java b/config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java
index d9209b5a142..b59f7c67abe 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java
@@ -44,10 +44,6 @@ public class NodeFlavorTuningTest {
assertDocumentStoreMaxFileSize(4 * GB, 512);
}
- private static void assertDocumentStoreMaxFileSize(long expSizeBytes, int memoryGb) {
- assertEquals(expSizeBytes, configFromMemorySetting(memoryGb).summary().log().maxfilesize());
- }
-
@Test
public void require_that_flush_strategy_memory_limits_are_set_based_on_available_memory() {
assertFlushStrategyMemory(512 * MB, 4);
@@ -56,16 +52,38 @@ public class NodeFlavorTuningTest {
assertFlushStrategyMemory(8 * GB, 64);
}
+ @Test
+ public void require_that_flush_strategy_tls_size_is_set_based_on_available_disk() {
+ assertFlushStrategyTlsSize(7 * GB, 100);
+ assertFlushStrategyTlsSize(35 * GB, 500);
+ assertFlushStrategyTlsSize(84 * GB, 1200);
+ assertFlushStrategyTlsSize(100 * GB, 1720);
+ assertFlushStrategyTlsSize(100 * GB, 24000);
+ }
+
+ private static void assertDocumentStoreMaxFileSize(long expFileSizeBytes, int memoryGb) {
+ assertEquals(expFileSizeBytes, configFromMemorySetting(memoryGb).summary().log().maxfilesize());
+ }
+
private static void assertFlushStrategyMemory(long expMemoryBytes, int memoryGb) {
assertEquals(expMemoryBytes, configFromMemorySetting(memoryGb).flush().memory().maxmemory());
assertEquals(expMemoryBytes, configFromMemorySetting(memoryGb).flush().memory().each().maxmemory());
}
+ private static void assertFlushStrategyTlsSize(long expTlsSizeBytes, int diskGb) {
+ assertEquals(expTlsSizeBytes, configFromDiskSetting(diskGb).flush().memory().maxtlssize());
+ }
+
private static ProtonConfig configFromDiskSetting(boolean fastDisk) {
return getConfig(new FlavorsConfig.Flavor.Builder().
fastDisk(fastDisk));
}
+ private static ProtonConfig configFromDiskSetting(int diskGb) {
+ return getConfig(new FlavorsConfig.Flavor.Builder().
+ minDiskAvailableGb(diskGb));
+ }
+
private static ProtonConfig configFromMemorySetting(int memoryGb) {
return getConfig(new FlavorsConfig.Flavor.Builder().
minMainMemoryAvailableGb(memoryGb));