diff options
author | Geir Storli <geirst@yahoo-inc.com> | 2017-04-27 14:12:29 +0200 |
---|---|---|
committer | Geir Storli <geirst@yahoo-inc.com> | 2017-05-03 09:40:31 +0200 |
commit | 2f5bcd3f470e9caa69caf27796adba73bbed1666 (patch) | |
tree | e624abfbf8b746d060a13a1f2edaba602a47a10f /config-model | |
parent | 17236e7b43d6c1fd4cf3aa443e9c57c78e1ba271 (diff) |
Tune flush strategy memory limits based on available memory.
Diffstat (limited to 'config-model')
-rw-r--r-- | config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java | 28 | ||||
-rw-r--r-- | config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java | 17 |
2 files changed, 34 insertions, 11 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 40c0cb82f81..55266754ca1 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 @@ -10,6 +10,8 @@ import com.yahoo.vespa.config.search.core.ProtonConfig; */ public class NodeFlavorTuning implements ProtonConfig.Producer { + static long MB = 1024 * 1024; + static long GB = MB * 1024; private final Flavor nodeFlavor; public NodeFlavorTuning(Flavor nodeFlavor) { @@ -20,6 +22,7 @@ public class NodeFlavorTuning implements ProtonConfig.Producer { public void getConfig(ProtonConfig.Builder builder) { tuneDiskWriteSpeed(builder); tuneDocumentStoreMaxFileSize(builder); + tuneFlushStrategyMemoryLimits(builder); } private void tuneDiskWriteSpeed(ProtonConfig.Builder builder) { @@ -31,20 +34,27 @@ public class NodeFlavorTuning implements ProtonConfig.Producer { } private void tuneDocumentStoreMaxFileSize(ProtonConfig.Builder builder) { - ProtonConfig.Summary.Log.Builder logBuilder = new ProtonConfig.Summary.Log.Builder(); double memoryGb = nodeFlavor.getMinMainMemoryAvailableGb(); + long fileSizeBytes = 4 * GB; if (memoryGb <= 12.0) { - logBuilder.maxfilesize(256 * MB); + fileSizeBytes = 256 * MB; } else if (memoryGb < 24.0) { - logBuilder.maxfilesize(512 * MB); + fileSizeBytes = 512 * MB; } else if (memoryGb <= 64.0) { - logBuilder.maxfilesize(1 * GB); - } else { - logBuilder.maxfilesize(4 * GB); + fileSizeBytes = 1 * GB; } - builder.summary(new ProtonConfig.Summary.Builder().log(logBuilder)); + builder.summary(new ProtonConfig.Summary.Builder() + .log(new ProtonConfig.Summary.Log.Builder() + .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)))); } - static long MB = 1024 * 1024; - static long GB = MB * 1024; } 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 39a5b399e5e..d9209b5a142 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,8 +44,21 @@ public class NodeFlavorTuningTest { assertDocumentStoreMaxFileSize(4 * GB, 512); } - private static void assertDocumentStoreMaxFileSize(long expSize, int memoryGb) { - assertEquals(expSize, configFromMemorySetting(memoryGb).summary().log().maxfilesize()); + 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); + assertFlushStrategyMemory(1 * GB, 8); + assertFlushStrategyMemory(3 * GB, 24); + assertFlushStrategyMemory(8 * GB, 64); + } + + 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 ProtonConfig configFromDiskSetting(boolean fastDisk) { |