summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2019-07-11 13:22:25 +0000
committerGeir Storli <geirst@verizonmedia.com>2019-07-12 11:49:26 +0000
commit6e3b9c16fd2925ac0385606450378dbb19db2e25 (patch)
tree226e4df541ad4c345c8d4d8d4c8f5b6cf367a0fa /config-model
parent1c79079945c56fa91de8427fbc8f2170eec9ed8c (diff)
Reserve 1GB of memory for other processes running on the content node when calculating write filter memory limit.
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java9
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java23
2 files changed, 27 insertions, 5 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 da193a17801..8ed18299b7b 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
@@ -31,6 +31,7 @@ public class NodeFlavorTuning implements ProtonConfig.Producer {
tuneSummaryReadIo(builder.summary.read);
tuneSummaryCache(builder.summary.cache);
tuneSearchReadIo(builder.search.mmap);
+ tuneWriteFilter(builder.writefilter);
for (ProtonConfig.Documentdb.Builder dbb : builder.documentdb) {
getConfig(dbb);
}
@@ -99,4 +100,12 @@ public class NodeFlavorTuning implements ProtonConfig.Producer {
}
}
+ private void tuneWriteFilter(ProtonConfig.Writefilter.Builder builder) {
+ // "Reserve" 1GB of memory for other processes running on the content node (config-proxy, cluster-controller, metrics-proxy)
+ double reservedMemoryGb = 1;
+ double defaultMemoryLimit = new ProtonConfig.Writefilter(new ProtonConfig.Writefilter.Builder()).memorylimit();
+ double scaledMemoryLimit = ((nodeFlavor.getMinMainMemoryAvailableGb() - reservedMemoryGb) * defaultMemoryLimit) / nodeFlavor.getMinMainMemoryAvailableGb();
+ builder.memorylimit(scaledMemoryLimit);
+ }
+
}
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 7aadca4a1af..a4fac3fc9c6 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
@@ -11,7 +11,6 @@ import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
import static com.yahoo.vespa.model.search.NodeFlavorTuning.MB;
import static com.yahoo.vespa.model.search.NodeFlavorTuning.GB;
@@ -20,6 +19,8 @@ import static com.yahoo.vespa.model.search.NodeFlavorTuning.GB;
*/
public class NodeFlavorTuningTest {
+ private static double delta = 0.00001;
+
@Test
public void require_that_hwinfo_disk_size_is_set() {
ProtonConfig cfg = configFromDiskSetting(100);
@@ -63,15 +64,15 @@ public class NodeFlavorTuningTest {
@Test
public void require_that_fast_disk_is_reflected_in_proton_config() {
ProtonConfig cfg = configFromDiskSetting(true);
- assertEquals(200, cfg.hwinfo().disk().writespeed(), 0.001);
- assertEquals(100, cfg.hwinfo().disk().slowwritespeedlimit(), 0.001);
+ assertEquals(200, cfg.hwinfo().disk().writespeed(), delta);
+ assertEquals(100, cfg.hwinfo().disk().slowwritespeedlimit(), delta);
}
@Test
public void require_that_slow_disk_is_reflected_in_proton_config() {
ProtonConfig cfg = configFromDiskSetting(false);
- assertEquals(40, cfg.hwinfo().disk().writespeed(), 0.001);
- assertEquals(100, cfg.hwinfo().disk().slowwritespeedlimit(), 0.001);
+ assertEquals(40, cfg.hwinfo().disk().writespeed(), delta);
+ assertEquals(100, cfg.hwinfo().disk().slowwritespeedlimit(), delta);
}
@Test
@@ -131,6 +132,14 @@ public class NodeFlavorTuningTest {
assertSharedDisk(false, false);
}
+ @Test
+ public void require_that_write_filter_memory_limit_is_scaled() {
+ assertWriteFilter(0.7, 8);
+ assertWriteFilter(0.75, 16);
+ assertWriteFilter(0.775, 32);
+ assertWriteFilter(0.7875, 64);
+ }
+
private static void assertDocumentStoreMaxFileSize(long expFileSizeBytes, int memoryGb) {
assertEquals(expFileSizeBytes, configFromMemorySetting(memoryGb).summary().log().maxfilesize());
}
@@ -156,6 +165,10 @@ public class NodeFlavorTuningTest {
assertEquals(sharedDisk, configFromEnvironmentType(docker).hwinfo().disk().shared());
}
+ private static void assertWriteFilter(double expMemoryLimit, int memoryGb) {
+ assertEquals(expMemoryLimit, configFromMemorySetting(memoryGb).writefilter().memorylimit(), delta);
+ }
+
private static ProtonConfig configFromDiskSetting(boolean fastDisk) {
return getConfig(new FlavorsConfig.Flavor.Builder().
fastDisk(fastDisk));