diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2019-11-05 23:47:18 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2019-11-05 23:47:18 +0100 |
commit | 99defb946229477e4929682ba5f8701c77a2aa77 (patch) | |
tree | 06ce30103f027d72858b3cfdf0faf5256d68271a | |
parent | 127daf91cb05c906e2d8024a8606506fb913f0fa (diff) |
Make it possible specify a cpu speedup factor for a flavor
This allows us to model the speed difference between different
cpu generations.
5 files changed, 26 insertions, 16 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/NodeFlavorTuning.java b/config-model/src/main/java/com/yahoo/vespa/model/container/NodeFlavorTuning.java index 077b97d82c0..b300dcfe85e 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/NodeFlavorTuning.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/NodeFlavorTuning.java @@ -10,12 +10,16 @@ import com.yahoo.search.config.QrStartConfig; * @author balder */ public class NodeFlavorTuning implements QrStartConfig.Producer { + private final Flavor flavor; + NodeFlavorTuning(Flavor flavor) { this.flavor = flavor; } + @Override public void getConfig(QrStartConfig.Builder builder) { - builder.jvm.availableProcessors(Math.max(2, (int)Math.ceil(flavor.getMinCpuCores()))); + builder.jvm.availableProcessors(Math.max(2, (int)Math.ceil(flavor.resources().vcpu()))); } + } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/StorageNode.java b/config-model/src/main/java/com/yahoo/vespa/model/content/StorageNode.java index c8220071373..8c3dce4d968 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/StorageNode.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/StorageNode.java @@ -88,7 +88,7 @@ public class StorageNode extends ContentNode implements StorServerConfig.Produce public void getConfig(StorFilestorConfig.Builder builder) { if (getHostResource() != null && getHostResource().getFlavor().isPresent()) { Flavor nodeFlavor = getHostResource().getFlavor().get(); - builder.num_threads(Math.max(4, (int)nodeFlavor.getMinCpuCores())); + builder.num_threads(Math.max(4, (int)nodeFlavor.resources().vcpu())); } cluster.getConfig(builder); } 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 3260cf3a680..64bb4e964f0 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 @@ -56,10 +56,10 @@ public class NodeFlavorTuning implements ProtonConfig.Producer { } private void setHwInfo(ProtonConfig.Builder builder) { - builder.hwinfo.disk.size((long)nodeFlavor.getMinDiskAvailableGb() * GB); builder.hwinfo.disk.shared(nodeFlavor.getType().equals(Flavor.Type.DOCKER_CONTAINER)); - builder.hwinfo.memory.size((long)nodeFlavor.getMinMainMemoryAvailableGb() * GB); - builder.hwinfo.cpu.cores((int)nodeFlavor.getMinCpuCores()); + builder.hwinfo.cpu.cores((int)nodeFlavor.resources().vcpu()); + builder.hwinfo.memory.size((long)nodeFlavor.resources().memoryGb() * GB); + builder.hwinfo.disk.size((long)nodeFlavor.resources().diskGb() * GB); } private void tuneDiskWriteSpeed(ProtonConfig.Builder builder) { diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java b/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java index bc1f7fbf83b..9e6e2c3bb67 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java @@ -26,19 +26,21 @@ public class Flavor { private final Optional<FlavorOverrides> flavorOverrides; + private static final double coreSpeedupRolloutFactor = 1.0/3.0; // TODO: Increase to 2/3 (then 1) on later releases + /** Creates a *host* flavor from configuration */ public Flavor(FlavorsConfig.Flavor flavorConfig) { - this( - flavorConfig.name(), - new NodeResources(flavorConfig.minCpuCores(), - flavorConfig.minMainMemoryAvailableGb(), - flavorConfig.minDiskAvailableGb(), - flavorConfig.bandwidth() / 1000, - flavorConfig.fastDisk() ? NodeResources.DiskSpeed.fast : NodeResources.DiskSpeed.slow), - Optional.empty(), - Type.valueOf(flavorConfig.environment()), - true, - flavorConfig.cost()); + this(flavorConfig.name(), + new NodeResources(flavorConfig.minCpuCores() * + (1 + (flavorConfig.cpuCoreSpeedup() - 1) * coreSpeedupRolloutFactor), + flavorConfig.minMainMemoryAvailableGb(), + flavorConfig.minDiskAvailableGb(), + flavorConfig.bandwidth() / 1000, + flavorConfig.fastDisk() ? NodeResources.DiskSpeed.fast : NodeResources.DiskSpeed.slow), + Optional.empty(), + Type.valueOf(flavorConfig.environment()), + true, + flavorConfig.cost()); } /** Creates a *node* flavor from a node resources spec */ diff --git a/config-provisioning/src/main/resources/configdefinitions/flavors.def b/config-provisioning/src/main/resources/configdefinitions/flavors.def index 59b6c852b0e..a33f141c91b 100644 --- a/config-provisioning/src/main/resources/configdefinitions/flavors.def +++ b/config-provisioning/src/main/resources/configdefinitions/flavors.def @@ -17,6 +17,10 @@ flavor[].environment string default="undefined" # The minimum number of CPU cores available. flavor[].minCpuCores double default=0.0 +# The speedup factor per cpu core compared to an historical baseline for a particular cpu generation +# The vcpu resources available on the node will be minCpuCores * cpuCoreSpeedup +flavor[].cpuCoreSpeedup double default=1.0 + # The minimum amount of main memory available. flavor[].minMainMemoryAvailableGb double default=0.0 |