aboutsummaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahoo-inc.com>2017-04-27 14:12:29 +0200
committerGeir Storli <geirst@yahoo-inc.com>2017-05-03 09:40:31 +0200
commit2f5bcd3f470e9caa69caf27796adba73bbed1666 (patch)
treee624abfbf8b746d060a13a1f2edaba602a47a10f /config-model
parent17236e7b43d6c1fd4cf3aa443e9c57c78e1ba271 (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.java28
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java17
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) {