summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2019-08-05 13:10:47 +0200
committerGitHub <noreply@github.com>2019-08-05 13:10:47 +0200
commit35283b454dfdaa9acbcea24274e01e65d128b7b6 (patch)
tree44419bfa32d097da8651c5d66ebe873ca994dc90
parent17f7d93b65dd1705be9c34026ba5505ca5d278fb (diff)
parent6e3b9c16fd2925ac0385606450378dbb19db2e25 (diff)
Merge pull request #10025 from vespa-engine/geirst/improve-content-node-tuning
Reserve 1GB of memory for other processes running on the content nodeā€¦
-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.java22
2 files changed, 27 insertions, 4 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 ea28809b289..3260cf3a680 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
@@ -36,6 +36,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);
}
@@ -104,4 +105,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 b0897c963c0..a4b414ba0da 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
@@ -19,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);
@@ -69,15 +71,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
@@ -137,6 +139,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());
}
@@ -162,6 +172,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));