Request for sponsor: 8076995: gc/ergonomics/TestDynamicNumberOfGCThreads.java failed with java.lang.RuntimeException: 'new_active_workers' missing from stdout/stderr

Derek White derek.white at oracle.com
Tue Apr 28 18:34:53 UTC 2015


Hi All,

Looking for a sponsor for the attached change set.

- Derek

Thanks Jon!

On 4/28/15 1:05 PM, Jon Masamitsu wrote:
> Derek,
>
> Fix and test look good.
>
> Reviewed.
>
> Jon
>
> On 04/28/2015 06:35 AM, Derek White wrote:
>> Thanks Bengt!
>>
>> On 4/28/15 4:43 AM, Bengt Rutisson wrote:
>>> On 28/04/15 00:14, Derek White wrote:
>>>> 3rd webrev:
>>>>
>>>> Please review this fix for:
>>>> https://bugs.openjdk.java.net/browse/JDK-8076995
>>>> Webrev:
>>>> http://cr.openjdk.java.net/~drwhite/8076995/webrev.02/
>>>
>>> The link above actually goes to webrev.01, but going to webrev.02 
>>> works and that change looks good to me. Reviewed.
>>>>
>>>> Changes:
>>>>
>>>> - Updated TEST.groups to only run this test if G1, CMS, and 
>>>> Parallel GCs are enabled. Removed code from webrev.01 that also 
>>>> updated other GC tests. This is now tracked as a separate bug 
>>>> https://bugs.openjdk.java.net/browse/JDK-8078673
>>>
>>> Thanks for creating this bug to track the other tests that need to 
>>> be updated! Can you add a comment to JDK-8078673 that lists the 
>>> tests that you have identified as problematic?
>>>
>>> Thanks,
>>> Bengt
>>>
>>>>
>>>> FYI also created separate bug to track the processor count issues: 
>>>> https://bugs.openjdk.java.net/browse/JDK-8078703
>>>>
>>>> Thanks!
>>>>
>>>>  - Derek
>>>>
>>>> On 4/27/15 4:04 AM, Bengt Rutisson wrote:
>>>>>
>>>>> Hi Derek,
>>>>>
>>>>> On 2015-04-23 23:55, Derek White wrote:
>>>>>> 2nd webrev:
>>>>>>
>>>>>> Please review this fix for:
>>>>>> https://bugs.openjdk.java.net/browse/JDK-8076995
>>>>>> Webrev:
>>>>>> http://cr.openjdk.java.net/~drwhite/8076995/webrev.01/
>>>>>>
>>>>>> Changes:
>>>>>>
>>>>>> - Updated TEST.groups to only run this test if G1, CMS, and 
>>>>>> Parallel GCs are enabled.
>>>>>
>>>>> OK.
>>>>>
>>>>>> - Also searched for similar GC tests that specify a GC to use and 
>>>>>> added to TESTS.groups:
>>>>>>
>>>>>>   * gc/TestSmallHeap.java
>>>>>>   * gc/logging/TestGCId.java
>>>>>>   * gc/TestCardTablePageCommits.java
>>>>>>   * gc/arguments/TestParallelHeapSizeFlags.java
>>>>>>
>>>>>
>>>>> I think I would prefer this as a separate change. I'm not very 
>>>>> good with TEST.groups, but it looks like your suggested changes 
>>>>> are correct. However, I would prefer the get more attention to 
>>>>> that change and thus it would be better to send it out as a 
>>>>> separate review.
>>>>>
>>>>> Thanks,
>>>>> Bengt
>>>>>
>>>>>> - Responded to comments below.
>>>>>>
>>>>>> Did jprt run. Saw timeout, not sure if real or if it's one of 
>>>>>> those "embedded tests don't quite fit" errors.
>>>>>>    Fail/kill comment:  Targets failed.  Target 
>>>>>> linux_armvfpsflt_2.6-productEmb-c2-hotspot_servertest timedout.
>>>>>>
>>>>>>  - Derek
>>>>>>
>>>>>> On 4/21/15 1:23 PM, Jon Masamitsu wrote:
>>>>>>> Derek,
>>>>>>>
>>>>>>> Thanks for fixing this.
>>>>>>>
>>>>>>> Fix looks good.
>>>>>>>
>>>>>>> What do you think about always making testDynamicNumberOfGCThread()
>>>>>>> check for the uniprocessor case (as opposed to passing in a flag 
>>>>>>> to explicitly
>>>>>>> check it)?
>>>>>>>
>>>>>>> ForceDynamicNumberOfGCThreads is a diagnostic flag
>>>>>>>
>>>>>>>   diagnostic(bool, ForceDynamicNumberOfGCThreads, 
>>>>>>> false,                    \
>>>>>>>           "Force dynamic selection of the number of 
>>>>>>> "                       \
>>>>>>>           "parallel threads parallel gc will use to aid 
>>>>>>> debugging")         \
>>>>>>>
>>>>>>> so I think you need +UnlockDiagnosticVMOptions.
>>>>>>>
>>>>>>> Jon
>>>>>>>
>>>>>>> On 04/21/2015 06:53 AM, Derek White wrote:
>>>>>>>> Hi All,
>>>>>>>>
>>>>>>>> Please review this fix for:
>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8076995
>>>>>>>> Webrev:
>>>>>>>> http://cr.openjdk.java.net/~drwhite/8076995/webrev.00/
>>>>>>>>
>>>>>>>> Summary:
>>>>>>>>
>>>>>>>> Part 1 is a test bug that tries to run G1 on embedded SE builds. Not changed by this webrev.
>>>>>>>>
>>>>>>>> Part two is assertion failure that is being fixed by this webrev.
>>>>>>>>
>>>>>>>> This is a fix for bug that triggered an assert when running CMS on very
>>>>>>>> small machines - 1 core x86, or 1-4 core ARM. This may seem unlikely but
>>>>>>>>   can easily happen when running virtual instances.
>>>>>>>>
>>>>>>>> Failure stack traces also show bug crashing printing a stack trace, but this is being tracked in another bug.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>
>>>>>>>> - Derek

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20150428/6aca4d50/attachment.htm>
-------------- next part --------------
[/export/users/drwhite/8076995-ws/hotspot]:
comparing with http://hg.openjdk.java.net/jdk9/hs-gc/hotspot
searching for changes
changeset:   8227:8199e955aca5
tag:         tip
user:        drwhite
date:        Tue Apr 28 14:11:37 2015 -0400
summary:     8076995: gc/ergonomics/TestDynamicNumberOfGCThreads.java failed with java.lang.RuntimeException: 'new_active_workers' missing from stdout/stderr

diff -r e7d316fd688d -r 8199e955aca5 src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp
--- a/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp	Tue Apr 28 12:17:56 2015 +0000
+++ b/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp	Tue Apr 28 14:11:37 2015 -0400
@@ -193,8 +193,9 @@
      (!FLAG_IS_DEFAULT(ParallelGCThreads) && !ForceDynamicNumberOfGCThreads)) {
     new_active_workers = total_workers;
   } else {
+    uintx min_workers = (total_workers == 1) ? 1 : 2;
     new_active_workers = calc_default_active_workers(total_workers,
-                                                     2, /* Minimum number of workers */
+                                                     min_workers,
                                                      active_workers,
                                                      application_workers);
   }
diff -r e7d316fd688d -r 8199e955aca5 test/TEST.groups
--- a/test/TEST.groups	Tue Apr 28 12:17:56 2015 +0000
+++ b/test/TEST.groups	Tue Apr 28 14:11:37 2015 -0400
@@ -233,6 +233,7 @@
   gc/arguments/TestParallelGCThreads.java \
   gc/arguments/TestUseCompressedOopsErgo.java \
   gc/class_unloading/TestG1ClassUnloadingHWM.java \
+  gc/ergonomics/TestDynamicNumberOfGCThreads.java
   gc/g1/ \
   gc/metaspace/G1AddMetaspaceDependency.java \
   gc/metaspace/TestMetaspacePerfCounters.java \
@@ -262,6 +263,7 @@
   gc/arguments/TestMinInitialErgonomics.java \
   gc/arguments/TestParallelGCThreads.java \
   gc/arguments/TestUseCompressedOopsErgo.java \
+  gc/ergonomics/TestDynamicNumberOfGCThreads.java
   gc/metaspace/TestMetaspacePerfCounters.java \
   gc/parallelScavenge/ \
   gc/startup_warnings/TestParallelGC.java \
@@ -279,6 +281,7 @@
   gc/arguments/TestUseCompressedOopsErgo.java \
   gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java \
   gc/concurrentMarkSweep/ \
+  gc/ergonomics/TestDynamicNumberOfGCThreads.java
   gc/startup_warnings/TestCMS.java \
   gc/startup_warnings/TestDefNewCMS.java \
   gc/startup_warnings/TestParNewCMS.java
diff -r e7d316fd688d -r 8199e955aca5 test/gc/ergonomics/TestDynamicNumberOfGCThreads.java
--- a/test/gc/ergonomics/TestDynamicNumberOfGCThreads.java	Tue Apr 28 12:17:56 2015 +0000
+++ b/test/gc/ergonomics/TestDynamicNumberOfGCThreads.java	Tue Apr 28 14:11:37 2015 -0400
@@ -44,14 +44,24 @@
   }
 
   private static void verifyDynamicNumberOfGCThreads(OutputAnalyzer output) {
+    output.shouldHaveExitValue(0); // test should run succesfully
     output.shouldContain("new_active_workers");
-    output.shouldHaveExitValue(0);
   }
 
   private static void testDynamicNumberOfGCThreads(String gcFlag) throws Exception {
     // UseDynamicNumberOfGCThreads and TraceDynamicGCThreads enabled
-    ProcessBuilder pb_enabled =
-      ProcessTools.createJavaProcessBuilder("-XX:+" + gcFlag, "-Xmx10M", "-XX:+PrintGCDetails",  "-XX:+UseDynamicNumberOfGCThreads", "-XX:+TraceDynamicGCThreads", GCTest.class.getName());
+    String[] baseArgs = {"-XX:+" + gcFlag, "-Xmx10M", "-XX:+PrintGCDetails",  "-XX:+UseDynamicNumberOfGCThreads", "-XX:+TraceDynamicGCThreads", GCTest.class.getName()};
+
+    // Base test with gc and +UseDynamicNumberOfGCThreads:
+    ProcessBuilder pb_enabled = ProcessTools.createJavaProcessBuilder(baseArgs);
+    verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start()));
+
+    // Ensure it also works on uniprocessors or if user specifies -XX:ParallelGCThreads=1:
+    String[] extraArgs = {"-XX:+UnlockDiagnosticVMOptions", "-XX:+ForceDynamicNumberOfGCThreads", "-XX:ParallelGCThreads=1"};
+    String[] finalArgs = new String[baseArgs.length + extraArgs.length];
+    System.arraycopy(extraArgs, 0, finalArgs, 0,                extraArgs.length);
+    System.arraycopy(baseArgs,  0, finalArgs, extraArgs.length, baseArgs.length);
+    pb_enabled = ProcessTools.createJavaProcessBuilder(finalArgs);
     verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start()));
   }
 



More information about the hotspot-gc-dev mailing list