--- old/src/java.base/share/classes/jdk/internal/platform/Metrics.java 2020-01-09 20:41:50.746325911 +0100 +++ new/src/java.base/share/classes/jdk/internal/platform/Metrics.java 2020-01-09 20:41:50.615325704 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -50,15 +50,30 @@ public interface Metrics { /** + * Returned for metrics of type long if the underlying implementation + * has determined that no limit is being imposed. + */ + public static final long LONG_RETVAL_UNLIMITED = -1; + /** + * Returned for metrics of type long if the underlying implementation + * doesn't support that metric. + */ + public static final long LONG_RETVAL_NOT_SUPPORTED = -2; + public static final double DOUBLE_RETVAL_NOT_SUPPORTED = LONG_RETVAL_NOT_SUPPORTED; + /** + * Returned for metrics of type Boolean if the underlying implementation + * doesn't support that metric. + */ + public static final Boolean BOOL_RETVAL_NOT_SUPPORTED = null; + + /** * Returns an instance of the Metrics class. * * @return Metrics object or null if not supported on this platform. */ public static Metrics systemMetrics() { try { - // We currently only support cgroupv1 - Class c = Class.forName("jdk.internal.platform.cgroupv1.Metrics"); - @SuppressWarnings("unchecked") + Class c = Class.forName("jdk.internal.platform.CgroupMetrics"); Method m = c.getMethod("getInstance"); return (Metrics) m.invoke(null); } catch (ClassNotFoundException e) { @@ -74,7 +89,7 @@ * * @implNote * Metrics are currently only supported Linux. - * The provider for Linux is cgroupsv1. + * The provider for Linux is cgroups (version 1 or 2). * * @return The name of the provider. * @@ -90,7 +105,7 @@ * Returns the aggregate time, in nanoseconds, consumed by all * tasks in the Isolation Group. * - * @return Time in nanoseconds or 0L if metric is not available. + * @return Time in nanoseconds or -2 if metric is not available. * */ public long getCpuUsage(); @@ -106,7 +121,7 @@ * * @return long array of time values. The size of the array is equal * to the total number of physical processors in the system. If - * this metric is not available, a zero length array will be + * this metric is not available, null will be * returned. * */ @@ -116,7 +131,7 @@ * Returns the aggregate user time, in nanoseconds, consumed by all * tasks in the Isolation Group. * - * @return User time in nanoseconds or 0L if metric is not available. + * @return User time in nanoseconds or -2 if metric is not available. * */ public long getCpuUserUsage(); @@ -125,7 +140,7 @@ * Returns the aggregate system time, in nanoseconds, consumed by * all tasks in the Isolation Group. * - * @return System time in nanoseconds or 0L if metric is not available. + * @return System time in nanoseconds or -2 if metric is not available. * */ public long getCpuSystemUsage(); @@ -138,7 +153,7 @@ * Returns the length of the scheduling period, in * microseconds, for processes within the Isolation Group. * - * @return time in microseconds or 0L if metric is not available. + * @return time in microseconds or -2 if metric is not available. * */ public long getCpuPeriod(); @@ -148,7 +163,7 @@ * during each scheduling period for all tasks in the Isolation * Group. * - * @return time in microseconds or -1 if the quota is unlimited. + * @return time in microseconds or -2 if not supported. * */ public long getCpuQuota(); @@ -167,7 +182,7 @@ * each process. To request 2 CPUS worth of execution time, CPU shares * would be set to 2048. * - * @return shares value or -1 if no share set. + * @return shares value or -2 if no share set. * */ public long getCpuShares(); @@ -177,7 +192,7 @@ * a CPU quota has been setup for the Isolation Group; otherwise * returns 0. * - * @return count of elapsed periods or 0 if the quota is unlimited. + * @return count of elapsed periods or -2 if not supported. * */ public long getCpuNumPeriods(); @@ -187,7 +202,7 @@ * been throttled or limited due to the group exceeding its quota * if a CPU quota has been setup for the Isolation Group. * - * @return count of throttled periods or 0 if the quota is unlimited. + * @return count of throttled periods or -2 if not supported. * */ public long getCpuNumThrottled(); @@ -197,7 +212,7 @@ * group has been throttled or limited due to the group exceeding * its quota if a CPU quota has been setup for the Isolation Group. * - * @return Throttled time in nanoseconds or 0 if the quota is unlimited. + * @return Throttled time in nanoseconds or -2 if not supported. * */ public long getCpuThrottledTime(); @@ -229,7 +244,7 @@ * may be offline. To get the current online CPUs, use * {@link getEffectiveCpuSetCpus()}. * - * @return An array of available CPUs or a zero length array + * @return An array of available CPUs or null * if the metric is not available. * */ @@ -241,8 +256,8 @@ * array is equal to the total number of CPUs and the elements in * the array are the physical CPU numbers. * - * @return An array of available and online CPUs or a zero length - * array if the metric is not available. + * @return An array of available and online CPUs or null + * if the metric is not available. * */ public int[] getEffectiveCpuSetCpus(); @@ -255,7 +270,7 @@ * may be offline. To get the current online memory nodes, use * {@link getEffectiveCpuSetMems()}. * - * @return An array of available memory nodes or a zero length array + * @return An array of available memory nodes or null * if the metric is not available. * */ @@ -267,8 +282,8 @@ * array is equal to the total number of nodes and the elements in * the array are the physical node numbers. * - * @return An array of available and online nodes or a zero length - * array if the metric is not available. + * @return An array of available and online nodes or null + * if the metric is not available. * */ public int[] getEffectiveCpuSetMems(); @@ -280,7 +295,7 @@ * readily available. Use {@link #isCpuSetMemoryPressureEnabled()} to * determine if this support is enabled. * - * @return Memory pressure or 0 if not enabled or metric is not + * @return Memory pressure or 0 if not enabled or -2 if metric is not * available. * */ @@ -289,10 +304,11 @@ /** * Returns the state of the memory pressure detection support. * - * @return true if the support is available and enabled, otherwise false. + * @return true if support is available and enabled. null if metric is + * not available. false otherwise. * */ - public boolean isCpuSetMemoryPressureEnabled(); + public Boolean isCpuSetMemoryPressureEnabled(); /***************************************************************** * Memory Subsystem @@ -302,7 +318,7 @@ * Returns the number of times that user memory requests in the * Isolation Group have exceeded the memory limit. * - * @return The number of exceeded requests or 0 if none or metric + * @return The number of exceeded requests or -2 if metric * is not available. * */ @@ -312,8 +328,8 @@ * Returns the maximum amount of physical memory, in bytes, that * can be allocated in the Isolation Group. * - * @return The maximum amount of memory in bytes or -1 if either - * there is no limit set or this metric is not available. + * @return The maximum amount of memory in bytes or -1 if + * there is no limit or -2 if this metric is not available. * */ public long getMemoryLimit(); @@ -322,7 +338,7 @@ * Returns the largest amount of physical memory, in bytes, that * have been allocated in the Isolation Group. * - * @return The largest amount of memory in bytes or 0 if this + * @return The largest amount of memory in bytes or -2 if this * metric is not available. * */ @@ -332,7 +348,7 @@ * Returns the amount of physical memory, in bytes, that is currently * allocated in the current Isolation Group. * - * @return The amount of memory in bytes allocated or 0 if this + * @return The amount of memory in bytes allocated or -2 if this * metric is not available. * */ @@ -342,7 +358,7 @@ * Returns the number of times that kernel memory requests in the * Isolation Group have exceeded the kernel memory limit. * - * @return The number of exceeded requests or 0 if none or metric + * @return The number of exceeded requests or -2 if metric * is not available. * */ @@ -352,8 +368,8 @@ * Returns the maximum amount of kernel physical memory, in bytes, that * can be allocated in the Isolation Group. * - * @return The maximum amount of memory in bytes or -1 if either - * there is no limit set or this metric is not available. + * @return The maximum amount of memory in bytes or -1 if + * there is no limit set or -2 if this metric is not available. * */ public long getKernelMemoryLimit(); @@ -362,7 +378,7 @@ * Returns the largest amount of kernel physical memory, in bytes, that * have been allocated in the Isolation Group. * - * @return The largest amount of memory in bytes or 0 if this + * @return The largest amount of memory in bytes or -2 if this * metric is not available. * */ @@ -372,7 +388,7 @@ * Returns the amount of kernel physical memory, in bytes, that * is currently allocated in the current Isolation Group. * - * @return The amount of memory in bytes allocated or 0 if this + * @return The amount of memory in bytes allocated or -2 if this * metric is not available. * */ @@ -382,7 +398,7 @@ * Returns the number of times that networking memory requests in the * Isolation Group have exceeded the kernel memory limit. * - * @return The number of exceeded requests or 0 if none or metric + * @return The number of exceeded requests or -2 if the metric * is not available. * */ @@ -392,8 +408,8 @@ * Returns the maximum amount of networking physical memory, in bytes, * that can be allocated in the Isolation Group. * - * @return The maximum amount of memory in bytes or -1 if either - * there is no limit set or this metric is not available. + * @return The maximum amount of memory in bytes or -1 if + * there is no limit or -2 if this metric is not available. * */ public long getTcpMemoryLimit(); @@ -402,7 +418,7 @@ * Returns the largest amount of networking physical memory, in bytes, * that have been allocated in the Isolation Group. * - * @return The largest amount of memory in bytes or 0 if this + * @return The largest amount of memory in bytes or -2 if this * metric is not available. * */ @@ -412,7 +428,7 @@ * Returns the amount of networking physical memory, in bytes, that * is currently allocated in the current Isolation Group. * - * @return The amount of memory in bytes allocated or 0 if this + * @return The amount of memory in bytes allocated or -2 if this * metric is not available. * */ @@ -422,7 +438,7 @@ * Returns the number of times that user memory requests in the * Isolation Group have exceeded the memory + swap limit. * - * @return The number of exceeded requests or 0 if none or metric + * @return The number of exceeded requests or -2 if the metric * is not available. * */ @@ -432,8 +448,8 @@ * Returns the maximum amount of physical memory and swap space, * in bytes, that can be allocated in the Isolation Group. * - * @return The maximum amount of memory in bytes or -1 if either - * there is no limit set or this metric is not available. + * @return The maximum amount of memory in bytes or -1 if + * there is no limit set or -2 if this metric is not available. * */ public long getMemoryAndSwapLimit(); @@ -442,7 +458,7 @@ * Returns the largest amount of physical memory and swap space, * in bytes, that have been allocated in the Isolation Group. * - * @return The largest amount of memory in bytes or 0 if this + * @return The largest amount of memory in bytes or -2 if this * metric is not available. * */ @@ -452,7 +468,7 @@ * Returns the amount of physical memory and swap space, in bytes, * that is currently allocated in the current Isolation Group. * - * @return The amount of memory in bytes allocated or 0 if this + * @return The amount of memory in bytes allocated or -2 if this * metric is not available. * */ @@ -464,11 +480,11 @@ * * @return Returns true if operating system will terminate processes * in the Isolation Group that exceed the amount of available - * memory, otherwise false. Flase will be returned if this + * memory, otherwise false. null will be returned if this * capability is not available on the current operating system. * */ - public boolean isMemoryOOMKillEnabled(); + public Boolean isMemoryOOMKillEnabled(); /** * Returns the hint to the operating system that allows groups @@ -478,7 +494,7 @@ * * @return The minimum amount of physical memory, in bytes, that the * operating system will try to maintain under low memory - * conditions. If this metric is not available, 0 will be + * conditions. If this metric is not available, -2 will be * returned. * */ @@ -492,7 +508,7 @@ * Returns the number of block I/O requests to the disk that have been * issued by the Isolation Group. * - * @return The count of requests or 0 if this metric is not available. + * @return The count of requests or -2 if this metric is not available. * */ public long getBlkIOServiceCount(); @@ -501,7 +517,7 @@ * Returns the number of block I/O bytes that have been transferred * to/from the disk by the Isolation Group. * - * @return The number of bytes transferred or 0 if this metric is not available. + * @return The number of bytes transferred or -2 if this metric is not available. * */ public long getBlkIOServiced();