summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2018-10-25 11:44:05 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2018-10-25 11:44:05 +0200
commit176ba4c24e6c3479686b60276de0301f7d7a1b2a (patch)
treef5a8eb519eb3cac066895d202cbdf5f07a177b58
parent88978b97b607c80686eead038ba40bfbc3d6bb27 (diff)
Control gcopts from model.
Default is now g1gc for hosted && (!prod || region=us-east-3)
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java12
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java7
-rwxr-xr-xconfig-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java24
4 files changed, 44 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java
index 9fafe89ea54..1f6f7ad6c69 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java
@@ -44,6 +44,7 @@ import java.util.logging.Logger;
public class VespaDomBuilder extends VespaModelBuilder {
public static final String JVMARGS_ATTRIB_NAME = "jvmargs";
+ public static final String GCOPTS_ATTRIB_NAME = "gcopts";
public static final String PRELOAD_ATTRIB_NAME = "preload"; // Intended for vespa engineers
public static final String MMAP_NOCORE_LIMIT = "mmap-core-limit"; // Intended for vespa engineers
public static final String CORE_ON_OOM = "core-on-oom"; // Intended for vespa engineers
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java b/config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java
index 2cfd4b067cd..c35da58575a 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java
@@ -1,6 +1,8 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.container.search;
+import com.yahoo.config.provision.Environment;
+import com.yahoo.config.provision.RegionName;
import com.yahoo.container.bundle.BundleInstantiationSpecification;
import com.yahoo.osgi.provider.model.ComponentModel;
import com.yahoo.prelude.fastsearch.FS4ResourcePool;
@@ -54,6 +56,7 @@ public class ContainerSearch extends ContainerSubsystem<SearchChains>
this.options = options;
this.owningCluster = cluster;
cluster.addComponent(getFS4ResourcePool());
+
}
private Component<?, ComponentModel> getFS4ResourcePool() {
@@ -122,6 +125,15 @@ public class ContainerSearch extends ContainerSubsystem<SearchChains>
internalBuilder.heapSizeAsPercentageOfPhysicalMemory(owningCluster.getHostClusterId().isPresent() ? 17 : 60);
}
qsB.jvm(internalBuilder.directMemorySizeCache(totalCacheSizeMb()));
+ if (owningCluster.isHostedVespa()) {
+ if ((owningCluster.getZone().environment() != Environment.prod) || RegionName.from("us-east-3").equals(owningCluster.getZone().region())) {
+ qsB.jvm.gcopts("-XX:-UseConcMarkSweepGC -XX:+UseG1GC -XX:MaxTenuringThreshold=15");
+ } else {
+ qsB.jvm.gcopts("-XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=15 -XX:NewRatio=1");
+ }
+ } else {
+ qsB.jvm.gcopts("-XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=15 -XX:NewRatio=1");
+ }
}
private int totalCacheSizeMb() {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
index 89f2995d179..f3649361a74 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
@@ -461,6 +461,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
else {
List<Container> nodes = createNodes(cluster, nodesElement, context);
applyNodesTagJvmArgs(nodes, nodesElement.getAttribute(VespaDomBuilder.JVMARGS_ATTRIB_NAME));
+ applyNodesTagGCOpts(nodes, nodesElement.getAttribute(VespaDomBuilder.GCOPTS_ATTRIB_NAME));
applyRoutingAliasProperties(nodes, cluster);
applyDefaultPreload(nodes, nodesElement);
applyMemoryPercentage(cluster, nodesElement.getAttribute(VespaDomBuilder.Allocated_MEMORY_ATTRIB_NAME));
@@ -665,6 +666,12 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
container.prependJvmArgs(nodesTagJvnArgs);
}
}
+ private void applyNodesTagGCOpts(List<Container> containers, String nodesTagJvnArgs) {
+ for (Container container: containers) {
+ if (container.getAssignedJvmArgs().isEmpty())
+ container.prependJvmArgs(nodesTagJvnArgs);
+ }
+ }
private void applyDefaultPreload(List<Container> containers, Element nodesElement) {
if (! nodesElement.hasAttribute(VespaDomBuilder.PRELOAD_ATTRIB_NAME)) return;
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java
index 8e096b14d85..6e962146c79 100755
--- a/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java
@@ -107,6 +107,10 @@ public class ContainerClusterTest {
DeployState state = new DeployState.Builder().properties(new DeployProperties.Builder().hostedVespa(isHosted).build()).build();
return new MockRoot("foo", state);
}
+ private MockRoot createRoot(boolean isHosted, Zone zone) {
+ DeployState state = new DeployState.Builder().zone(zone).properties(new DeployProperties.Builder().hostedVespa(isHosted).build()).build();
+ return new MockRoot("foo", state);
+ }
private ContainerCluster createContainerCluster(MockRoot root, boolean isCombinedCluster,
Integer memoryPercentage, Optional<ContainerClusterVerifier> extraComponents) {
@@ -154,6 +158,7 @@ public class ContainerClusterTest {
assertEquals(expectedArgs, jvmArgs);
}
}
+
private void verifyJvmArgs(boolean isHosted, boolean hasDocProc) {
MockRoot root = createRoot(isHosted);
ContainerCluster cluster = createContainerCluster(root, false);
@@ -174,6 +179,25 @@ public class ContainerClusterTest {
verifyJvmArgs(isHosted, hasDocProc, "", container.getJvmArgs());
}
+ private void verifyGCOpts(boolean isHosted, Zone zone, String expected) {
+ MockRoot root = createRoot(isHosted, zone);
+ ContainerCluster cluster = createContainerCluster(root, false);
+ addContainer(root.deployLogger(), cluster, "c1", "host-c1");
+ assertEquals(1, cluster.getContainers().size());
+ QrStartConfig.Builder qsB = new QrStartConfig.Builder();
+ cluster.getSearch().getConfig(qsB);
+ QrStartConfig qsC= new QrStartConfig(qsB);
+ assertEquals(expected, qsC.jvm().gcopts());
+ }
+
+ @Test
+ public void requireThatGCOptsIsHonoured() {
+ verifyGCOpts(false, Zone.defaultZone(), "-XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=15 -XX:NewRatio=1");
+ verifyGCOpts(false, new Zone(Environment.prod, RegionName.from("us-east-3")), "-XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=15 -XX:NewRatio=1");
+ verifyGCOpts(true, Zone.defaultZone(), "-XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=15 -XX:NewRatio=1");
+ verifyGCOpts(true, new Zone(Environment.prod, RegionName.from("us-east-3")), "-XX:-UseConcMarkSweepGC -XX:+UseG1GC -XX:MaxTenuringThreshold=15");
+ }
+
@Test
public void testContainerClusterMaxThreads() {
MockRoot root = createRoot(false);