summaryrefslogtreecommitdiffstats
path: root/node-admin/src/main/java/com
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@yahooinc.com>2021-11-02 15:33:41 +0100
committerValerij Fredriksen <valerijf@yahooinc.com>2021-11-02 15:33:41 +0100
commit50383e769ed3d5ec2a588e5501bc1160e2194167 (patch)
tree0320d3010b73ad09e3f2b5a8a2d74ed061506aa9 /node-admin/src/main/java/com
parent076bac9ac7a6595b0b0b905e00576eff508d7fa9 (diff)
Do not return empty CPU quota if unlimited
Diffstat (limited to 'node-admin/src/main/java/com')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/CGroup.java11
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/CGroupV1.java2
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/CGroupV2.java3
3 files changed, 13 insertions, 3 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/CGroup.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/CGroup.java
index d194198b2d7..df7043ceb78 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/CGroup.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/CGroup.java
@@ -19,10 +19,21 @@ import static com.yahoo.vespa.hosted.node.admin.container.ContainerStatsCollecto
*/
public interface CGroup {
+ /**
+ * Returns quota and period values used for CPU scheduling. This serves as hard cap on CPU usage by allowing
+ * the CGroup to use up to {@code quota} each {@code period}. If uncapped, quota will be negative.
+ *
+ * @param containerId full container ID.
+ * @return CPU quota and period for the given container. Empty if CGroup for this container is not found.
+ */
Optional<Pair<Integer, Integer>> cpuQuotaPeriod(ContainerId containerId);
+
+ /** @return number of shares allocated to this CGroup for purposes of CPU time scheduling, empty if CGroup not found */
OptionalInt cpuShares(ContainerId containerId);
+ /** Update CPU quota and period for the given container ID, set quota to -1 value for unlimited */
boolean updateCpuQuotaPeriod(NodeAgentContext context, ContainerId containerId, int cpuQuotaUs, int periodUs);
+
boolean updateCpuShares(NodeAgentContext context, ContainerId containerId, int shares);
Map<CpuStatField, Long> cpuStats(ContainerId containerId) throws IOException;
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/CGroupV1.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/CGroupV1.java
index 62e70ca26aa..7607858ec85 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/CGroupV1.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/CGroupV1.java
@@ -37,7 +37,7 @@ public class CGroupV1 implements CGroup {
@Override
public Optional<Pair<Integer, Integer>> cpuQuotaPeriod(ContainerId containerId) {
OptionalInt quota = readCgroupsCpuInt(cfsQuotaPath(containerId));
- if (quota.isEmpty() || quota.getAsInt() < 0) return Optional.empty();
+ if (quota.isEmpty()) return Optional.empty();
OptionalInt period = readCgroupsCpuInt(cfsPeriodPath(containerId));
if (period.isEmpty()) return Optional.empty();
return Optional.of(new Pair<>(quota.getAsInt(), period.getAsInt()));
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/CGroupV2.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/CGroupV2.java
index d9499455d19..0c86829b96d 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/CGroupV2.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/CGroupV2.java
@@ -36,10 +36,9 @@ public class CGroupV2 implements CGroup {
@Override
public Optional<Pair<Integer, Integer>> cpuQuotaPeriod(ContainerId containerId) {
return cpuMaxPath(containerId).readUtf8FileIfExists()
- .filter(s -> !s.startsWith(MAX))
.map(s -> {
String[] parts = s.strip().split(" ");
- return new Pair<>(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]));
+ return new Pair<>(MAX.equals(parts[0]) ? -1 : Integer.parseInt(parts[0]), Integer.parseInt(parts[1]));
});
}