File tree Expand file tree Collapse file tree 9 files changed +51
-4
lines changed
jcl/src/jdk.management/share/classes/com/ibm/lang/management/internal Expand file tree Collapse file tree 9 files changed +51
-4
lines changed Original file line number Diff line number Diff line change @@ -245,6 +245,12 @@ public final String getHardwareModel() throws UnsupportedOperationException {
245
245
/* Returns the number of CPU's online at this very moment. */
246
246
private native int getOnlineProcessorsImpl ();
247
247
248
+ /**
249
+ * Check if the CpuLoadCompatibility flag is set.
250
+ * @return if the CpuLoadCompatibility flag is set
251
+ */
252
+ private static native boolean hasCpuLoadCompatibilityFlag ();
253
+
248
254
/**
249
255
* {@inheritDoc}
250
256
*/
@@ -263,16 +269,21 @@ public final synchronized double getProcessCpuLoad() {
263
269
}
264
270
latestCpuTime = cpuTime ;
265
271
266
- /* First call to this method should -1, since we don't have any previous
267
- * CPU times (or timestamp) to compute CPU load against.
272
+ /* First call to this method returns 0 to match the behaviour of the RI.
273
+ * If the CpuLoadCompatibility flag is set, the bahaviour is reverted to
274
+ * return -1 for compatibility.
268
275
*/
269
276
if (-1 == oldTime ) {
270
277
/* Save current counters; next invocation onwards, we use these to
271
278
* compute CPU loads.
272
279
*/
273
280
oldTime = interimTime = latestTime ;
274
281
oldCpuTime = interimCpuTime = latestCpuTime ;
275
- return CpuLoadCalculationConstants .ERROR_VALUE ;
282
+ if (hasCpuLoadCompatibilityFlag ()) {
283
+ return 0 ;
284
+ } else {
285
+ return CpuLoadCalculationConstants .ERROR_VALUE ;
286
+ }
276
287
}
277
288
278
289
/* If a sufficiently long interval has elapsed since last sampling, calculate using
Original file line number Diff line number Diff line change @@ -518,6 +518,20 @@ Java_com_ibm_lang_management_internal_ExtendedOperatingSystemMXBeanImpl_getHardw
518
518
return (NULL == str ) ? NULL : (* env )-> NewStringUTF (env , str );
519
519
}
520
520
521
+ /**
522
+ * Check if the CpuLoadCompatibility flag is set.
523
+ *
524
+ * @param env instance of JNIEnv
525
+ * @param unusedClass
526
+ *
527
+ * @return if the CpuLoadCompatibility flag is set
528
+ */
529
+ jboolean JNICALL
530
+ Java_com_ibm_lang_management_internal_ExtendedOperatingSystemMXBeanImpl_hasCpuLoadCompatibilityFlag (JNIEnv * env , jclass unusedClass ) {
531
+ J9JavaVM * vm = ((J9VMThread * )env )-> javaVM ;
532
+ return J9_ARE_ALL_BITS_SET (vm -> extendedRuntimeFlags2 , J9_EXTENDED_RUNTIME2_CPU_LOAD_COMPATIBILITY );
533
+ }
534
+
521
535
/**
522
536
* Returns the maximum number of file descriptors that can be opened in a process.
523
537
*
Original file line number Diff line number Diff line change @@ -83,6 +83,8 @@ jdouble JNICALL
83
83
Java_com_ibm_lang_management_internal_ExtendedOperatingSystemMXBeanImpl_getSystemCpuLoadImpl (JNIEnv * env , jobject instance ) {
84
84
PORT_ACCESS_FROM_ENV (env );
85
85
OMRPORT_ACCESS_FROM_J9PORT (PORTLIB );
86
+
87
+ J9JavaVM * vm = ((J9VMThread * )env )-> javaVM ;
86
88
double cpuLoad = 0.0 ;
87
89
88
90
intptr_t portLibraryStatus = omrsysinfo_get_CPU_load (& cpuLoad );
@@ -95,6 +97,12 @@ Java_com_ibm_lang_management_internal_ExtendedOperatingSystemMXBeanImpl_getSyste
95
97
case OMRPORT_ERROR_SYSINFO_NOT_SUPPORTED :
96
98
portLibraryStatus = -3 ;
97
99
break ;
100
+ case OMRPORT_ERROR_INSUFFICIENT_DATA :
101
+ portLibraryStatus =
102
+ J9_ARE_ALL_BITS_SET (vm -> extendedRuntimeFlags2 , J9_EXTENDED_RUNTIME2_CPU_LOAD_COMPATIBILITY )
103
+ ? 0
104
+ : -1 ;
105
+ break ;
98
106
default :
99
107
portLibraryStatus = OMRPORT_ERROR_OPFAILED ;
100
108
break ;
Original file line number Diff line number Diff line change @@ -228,6 +228,7 @@ omr_add_exports(jclse
228
228
Java_com_ibm_lang_management_internal_ExtendedOperatingSystemMXBeanImpl_getSystemCpuLoadImpl
229
229
Java_com_ibm_lang_management_internal_ExtendedOperatingSystemMXBeanImpl_getTotalPhysicalMemoryImpl
230
230
Java_com_ibm_lang_management_internal_ExtendedOperatingSystemMXBeanImpl_getTotalProcessorUsageImpl
231
+ Java_com_ibm_lang_management_internal_ExtendedOperatingSystemMXBeanImpl_hasCpuLoadCompatibilityFlag
231
232
Java_com_ibm_lang_management_internal_ExtendedOperatingSystemMXBeanImpl_isDLPAREnabled
232
233
Java_com_ibm_lang_management_internal_ExtendedRuntimeMXBeanImpl_getVMIdleStateImpl
233
234
Java_com_ibm_lang_management_internal_JvmCpuMonitor_getThreadCategoryImpl
Original file line number Diff line number Diff line change 67
67
<export name =" Java_com_ibm_lang_management_internal_ExtendedOperatingSystemMXBeanImpl_getMemoryUsageImpl" />
68
68
<export name =" Java_com_ibm_lang_management_internal_ExtendedOperatingSystemMXBeanImpl_getOnlineProcessorsImpl" />
69
69
<export name =" Java_com_ibm_lang_management_internal_ExtendedOperatingSystemMXBeanImpl_getHardwareModelImpl" />
70
+ <export name =" Java_com_ibm_lang_management_internal_ExtendedOperatingSystemMXBeanImpl_hasCpuLoadCompatibilityFlag" />
70
71
<export name =" Java_com_ibm_lang_management_internal_JvmCpuMonitor_getThreadsCpuUsageImpl" />
71
72
<export name =" Java_com_ibm_lang_management_internal_JvmCpuMonitor_setThreadCategoryImpl" />
72
73
<export name =" Java_com_ibm_lang_management_internal_JvmCpuMonitor_getThreadCategoryImpl" />
Original file line number Diff line number Diff line change @@ -361,7 +361,7 @@ extern "C" {
361
361
#define J9_EXTENDED_RUNTIME2_USE_CONTAINER_SUPPORT 0x200000
362
362
#define J9_EXTENDED_RUNTIME2_SHOW_CARRIER_FRAMES 0x400000
363
363
#define J9_EXTENDED_RUNTIME2_CRIU_SINGLE_THROW_BLOCKING_EXCEPTIONS 0x800000
364
- #define J9_EXTENDED_RUNTIME2_UNUSED_0x1000000 0x1000000
364
+ #define J9_EXTENDED_RUNTIME2_CPU_LOAD_COMPATIBILITY 0x1000000
365
365
366
366
#define J9_OBJECT_HEADER_AGE_DEFAULT 0xA /* OBJECT_HEADER_AGE_DEFAULT */
367
367
#define J9_OBJECT_HEADER_SHAPE_MASK 0xE /* OBJECT_HEADER_SHAPE_MASK */
Original file line number Diff line number Diff line change @@ -1166,6 +1166,8 @@ Java_com_ibm_lang_management_internal_ExtendedOperatingSystemMXBeanImpl_getOnlin
1166
1166
jstring JNICALL
1167
1167
Java_com_ibm_lang_management_internal_ExtendedOperatingSystemMXBeanImpl_getHardwareModelImpl (JNIEnv * env , jobject obj );
1168
1168
1169
+ jboolean JNICALL
1170
+ Java_com_ibm_lang_management_internal_ExtendedOperatingSystemMXBeanImpl_hasCpuLoadCompatibilityFlag (JNIEnv * env , jclass unusedClass );
1169
1171
/**
1170
1172
* Returns the maximum number of file descriptors that can be opened in a process.
1171
1173
*
Original file line number Diff line number Diff line change @@ -417,6 +417,8 @@ enum INIT_STAGE {
417
417
#define VMOPT_XXDISABLEENSUREHASHED "-XX:-EnsureHashed:"
418
418
#define VMOPT_XXOPENJ9COMMANDLINEENV "-XX:+OpenJ9CommandLineEnv"
419
419
#define VMOPT_XXNOOPENJ9COMMANDLINEENV "-XX:-OpenJ9CommandLineEnv"
420
+ #define VMOPT_XXCPULOADCOMPATIBILITY "-XX:+CpuLoadCompatibility"
421
+ #define VMOPT_XXNOCPULOADCOMPATIBILITY "-XX:-CpuLoadCompatibility"
420
422
421
423
#if defined(J9VM_ZOS_3164_INTEROPERABILITY )
422
424
#define VMOPT_XXENABLE3164INTEROPERABILITY "-XX:+Enable3164Interoperability"
Original file line number Diff line number Diff line change @@ -4123,6 +4123,14 @@ processVMArgsFromFirstToLast(J9JavaVM * vm)
4123
4123
}
4124
4124
}
4125
4125
4126
+ {
4127
+ IDATA cpuLoadCompatibility = FIND_AND_CONSUME_VMARG (EXACT_MATCH , VMOPT_XXCPULOADCOMPATIBILITY , NULL );
4128
+ IDATA noCpuLoadCompatibility = FIND_AND_CONSUME_VMARG (EXACT_MATCH , VMOPT_XXNOCPULOADCOMPATIBILITY , NULL );
4129
+ if (cpuLoadCompatibility > noCpuLoadCompatibility ) {
4130
+ vm -> extendedRuntimeFlags2 |= J9_EXTENDED_RUNTIME2_CPU_LOAD_COMPATIBILITY ;
4131
+ }
4132
+ }
4133
+
4126
4134
return JNI_OK ;
4127
4135
}
4128
4136
You can’t perform that action at this time.
0 commit comments