diff options
author | Geir Storli <geirst@yahoo-inc.com> | 2017-04-27 14:31:13 +0200 |
---|---|---|
committer | Geir Storli <geirst@yahoo-inc.com> | 2017-05-03 09:40:32 +0200 |
commit | 3170e8e7bf512240ea524716498c38e51d668743 (patch) | |
tree | 380a22d3b9417e5d4d2ba153b07f662d822be52a /config-model | |
parent | 2f5bcd3f470e9caa69caf27796adba73bbed1666 (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.java | 25 | ||||
-rw-r--r-- | config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java | 26 |
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)); |