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
26 * @bug 8031320
27 * @summary Verify that RTMAbortThreshold option affects
28 * amount of aborts after which abort ratio is calculated.
29 * @library /test/lib /
30 * @modules java.base/jdk.internal.misc
31 * java.management
32 * @build sun.hotspot.WhiteBox
33 * @run driver ClassFileInstaller sun.hotspot.WhiteBox
34 * sun.hotspot.WhiteBox$WhiteBoxPermission
35 * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
36 * -XX:+WhiteBoxAPI
37 * compiler.rtm.locking.TestRTMAbortThreshold
38 */
39
40 package compiler.rtm.locking;
41
42 import compiler.testlibrary.rtm.AbortProvoker;
43 import compiler.testlibrary.rtm.AbortType;
44 import compiler.testlibrary.rtm.RTMLockingStatistics;
45 import compiler.testlibrary.rtm.RTMTestBase;
46 import compiler.testlibrary.rtm.predicate.SupportedCPU;
47 import compiler.testlibrary.rtm.predicate.SupportedOS;
48 import compiler.testlibrary.rtm.predicate.SupportedVM;
49 import jdk.test.lib.Asserts;
50 import jdk.test.lib.process.OutputAnalyzer;
51 import jdk.test.lib.cli.CommandLineOptionTest;
52 import jdk.test.lib.cli.predicate.AndPredicate;
53
54 import java.util.List;
55
56 /**
57 * Test verifies that on RTMAbortThreshold option actually affects how soon
58 * method will be deoptimized on high abort ratio.
59 */
60 public class TestRTMAbortThreshold extends CommandLineOptionTest {
61 private TestRTMAbortThreshold() {
62 super(new AndPredicate(new SupportedCPU(), new SupportedOS(), new SupportedVM()));
63 }
64
65 @Override
66 protected void runTestCases() throws Throwable {
67 verifyAbortThreshold(false, 1);
68 verifyAbortThreshold(false, 10);
69 verifyAbortThreshold(false, 1000);
70
71 verifyAbortThreshold(true, 1);
72 verifyAbortThreshold(true, 10);
73 verifyAbortThreshold(true, 1000);
74 }
75
76 private void verifyAbortThreshold(boolean useStackLock,
77 long abortThreshold) throws Throwable {
78 AbortProvoker provoker = AbortType.XABORT.provoker();
79
80 OutputAnalyzer outputAnalyzer = RTMTestBase.executeRTMTest(
81 provoker,
82 "-XX:+UseRTMDeopt",
83 "-XX:RTMAbortRatio=0",
84 CommandLineOptionTest.prepareNumericFlag("RTMAbortThreshold",
85 abortThreshold),
90 AbortProvoker.class.getName(),
91 AbortType.XABORT.toString(),
92 Boolean.toString(!useStackLock));
93
94 outputAnalyzer.shouldHaveExitValue(0);
95
96 List<RTMLockingStatistics> statistics = RTMLockingStatistics.fromString(
97 provoker.getMethodWithLockName(), outputAnalyzer.getOutput());
98
99 Asserts.assertEQ(statistics.size(), 1, "VM output should contain "
100 + "exactly one RTM locking statistics entry for method "
101 + provoker.getMethodWithLockName());
102
103 Asserts.assertEQ(statistics.get(0).getTotalLocks(), abortThreshold,
104 String.format("Expected that method with rtm lock elision was"
105 + " deoptimized after %d lock attempts",
106 abortThreshold));
107 }
108
109 public static void main(String args[]) throws Throwable {
110 new TestRTMAbortThreshold().test();
111 }
112 }
113
|
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
26 * @bug 8031320
27 * @summary Verify that RTMAbortThreshold option affects
28 * amount of aborts after which abort ratio is calculated.
29 * @library /test/lib /
30 * @modules java.base/jdk.internal.misc
31 * java.management
32 * @requires vm.flavor == "server" & !vm.emulatedClient & vm.rtm.cpu & vm.rtm.os
33 * @build sun.hotspot.WhiteBox
34 * @run driver ClassFileInstaller sun.hotspot.WhiteBox
35 * sun.hotspot.WhiteBox$WhiteBoxPermission
36 * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions
37 * -XX:+WhiteBoxAPI
38 * compiler.rtm.locking.TestRTMAbortThreshold
39 */
40
41 package compiler.rtm.locking;
42
43 import compiler.testlibrary.rtm.AbortProvoker;
44 import compiler.testlibrary.rtm.AbortType;
45 import compiler.testlibrary.rtm.RTMLockingStatistics;
46 import compiler.testlibrary.rtm.RTMTestBase;
47 import jdk.test.lib.Asserts;
48 import jdk.test.lib.process.OutputAnalyzer;
49 import jdk.test.lib.cli.CommandLineOptionTest;
50
51 import java.util.List;
52
53 /**
54 * Test verifies that on RTMAbortThreshold option actually affects how soon
55 * method will be deoptimized on high abort ratio.
56 */
57 public class TestRTMAbortThreshold {
58
59 protected void runTestCases() throws Throwable {
60 verifyAbortThreshold(false, 1);
61 verifyAbortThreshold(false, 10);
62 verifyAbortThreshold(false, 1000);
63
64 verifyAbortThreshold(true, 1);
65 verifyAbortThreshold(true, 10);
66 verifyAbortThreshold(true, 1000);
67 }
68
69 private void verifyAbortThreshold(boolean useStackLock,
70 long abortThreshold) throws Throwable {
71 AbortProvoker provoker = AbortType.XABORT.provoker();
72
73 OutputAnalyzer outputAnalyzer = RTMTestBase.executeRTMTest(
74 provoker,
75 "-XX:+UseRTMDeopt",
76 "-XX:RTMAbortRatio=0",
77 CommandLineOptionTest.prepareNumericFlag("RTMAbortThreshold",
78 abortThreshold),
83 AbortProvoker.class.getName(),
84 AbortType.XABORT.toString(),
85 Boolean.toString(!useStackLock));
86
87 outputAnalyzer.shouldHaveExitValue(0);
88
89 List<RTMLockingStatistics> statistics = RTMLockingStatistics.fromString(
90 provoker.getMethodWithLockName(), outputAnalyzer.getOutput());
91
92 Asserts.assertEQ(statistics.size(), 1, "VM output should contain "
93 + "exactly one RTM locking statistics entry for method "
94 + provoker.getMethodWithLockName());
95
96 Asserts.assertEQ(statistics.get(0).getTotalLocks(), abortThreshold,
97 String.format("Expected that method with rtm lock elision was"
98 + " deoptimized after %d lock attempts",
99 abortThreshold));
100 }
101
102 public static void main(String args[]) throws Throwable {
103 new TestRTMAbortThreshold().runTestCases();
104 }
105 }
106
|