Mercurial > hg > truffle
comparison test/gc/g1/TestSummarizeRSetStatsThreads.java @ 12344:7ec10139bf37
8025441: G1: assert "assert(thread < _num_vtimes) failed: just checking" fails when G1ConcRefinementThreads > ParallelGCThreads
Summary: The initialization for the remembered set summary data structures used the wrong thread count, i.e. number of worker threads instead of number of refinement threads.
Reviewed-by: brutisso
author | tschatzl |
---|---|
date | Mon, 30 Sep 2013 12:43:59 +0200 |
parents | |
children | 05b726bce3e6 |
comparison
equal
deleted
inserted
replaced
12343:d55c004e1d4d | 12344:7ec10139bf37 |
---|---|
1 /* | |
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. | |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
20 * or visit www.oracle.com if you need additional information or have any | |
21 * questions. | |
22 */ | |
23 | |
24 /* | |
25 * @test TestSummarizeRSetStatsThreads | |
26 * @bug 8025441 | |
27 * @summary Ensure that various values of worker threads/concurrent | |
28 * refinement threads do not crash the VM. | |
29 * @key gc | |
30 * @library /testlibrary | |
31 */ | |
32 | |
33 import java.util.regex.Matcher; | |
34 import java.util.regex.Pattern; | |
35 | |
36 import com.oracle.java.testlibrary.ProcessTools; | |
37 import com.oracle.java.testlibrary.OutputAnalyzer; | |
38 | |
39 public class TestSummarizeRSetStatsThreads { | |
40 | |
41 private static void runTest(int refinementThreads, int workerThreads) throws Exception { | |
42 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", | |
43 "-XX:+UnlockDiagnosticVMOptions", | |
44 "-XX:+G1SummarizeRSetStats", | |
45 "-XX:G1ConcRefinementThreads=" + refinementThreads, | |
46 "-XX:ParallelGCThreads=" + workerThreads, | |
47 "-version"); | |
48 | |
49 OutputAnalyzer output = new OutputAnalyzer(pb.start()); | |
50 | |
51 // check output to contain the string "Concurrent RS threads times (s)" followed by | |
52 // the correct number of values in the next line. | |
53 | |
54 // a zero in refinement thread numbers indicates that the value in ParallelGCThreads should be used. | |
55 // Additionally use at least one thread. | |
56 int expectedNumRefinementThreads = refinementThreads == 0 ? workerThreads : refinementThreads; | |
57 expectedNumRefinementThreads = Math.max(1, expectedNumRefinementThreads); | |
58 // create the pattern made up of n copies of a floating point number pattern | |
59 String numberPattern = String.format("%0" + expectedNumRefinementThreads + "d", 0) | |
60 .replace("0", "\\s+\\d+\\.\\d+"); | |
61 String pattern = "Concurrent RS threads times \\(s\\)$" + numberPattern + "$"; | |
62 Matcher m = Pattern.compile(pattern, Pattern.MULTILINE).matcher(output.getStdout()); | |
63 | |
64 if (!m.find()) { | |
65 throw new Exception("Could not find correct output for concurrent RS threads times in stdout," + | |
66 " should match the pattern \"" + pattern + "\", but stdout is \n" + output.getStdout()); | |
67 } | |
68 output.shouldHaveExitValue(0); | |
69 } | |
70 | |
71 public static void main(String[] args) throws Exception { | |
72 if (!TestSummarizeRSetStatsTools.testingG1GC()) { | |
73 return; | |
74 } | |
75 // different valid combinations of number of refinement and gc worker threads | |
76 runTest(0, 0); | |
77 runTest(0, 5); | |
78 runTest(5, 0); | |
79 runTest(10, 10); | |
80 runTest(1, 2); | |
81 runTest(4, 3); | |
82 } | |
83 } |