annotate graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/MemoryUsageBenchmark.java @ 18120:86ec7f6f71b3

refactored GraalCompilerTest API to be in terms of ResolvedJavaMethod instead of Method
author Doug Simon <doug.simon@oracle.com>
date Sat, 18 Oct 2014 00:08:19 +0200
parents 58f45b63b802
children cdb9c605051a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16690
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
1 /*
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
2 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
4 *
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
8 *
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
13 * accompanied this code).
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
14 *
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
18 *
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
21 * questions.
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
22 */
16696
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
23 package com.oracle.graal.hotspot.test;
16690
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
24
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
25 import static com.oracle.graal.debug.internal.MemUseTrackerImpl.*;
16723
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
26 import static com.oracle.graal.hotspot.CompileTheWorld.*;
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
27 import static com.oracle.graal.hotspot.CompileTheWorld.Options.*;
16696
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
28 import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*;
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
29 import static com.oracle.graal.nodes.StructuredGraph.*;
16690
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
30
16716
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
31 import com.oracle.graal.api.runtime.*;
16696
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
32 import com.oracle.graal.compiler.test.*;
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
33 import com.oracle.graal.debug.*;
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
34 import com.oracle.graal.debug.internal.*;
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
35 import com.oracle.graal.hotspot.*;
16723
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
36 import com.oracle.graal.hotspot.CompileTheWorld.Config;
16696
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
37 import com.oracle.graal.hotspot.meta.*;
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
38 import com.oracle.graal.printer.*;
16690
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
39
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
40 /**
16723
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
41 * Used to benchmark memory usage during Graal compilation.
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
42 *
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
43 * To benchmark:
16696
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
44 *
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
45 * <pre>
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
46 * mx vm -XX:-UseGraalClassLoader -cp @com.oracle.graal.hotspot.test com.oracle.graal.hotspot.test.MemoryUsageBenchmark
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
47 * </pre>
16723
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
48 *
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
49 * Memory analysis for a {@link CompileTheWorld} execution can also be performed. For example:
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
50 *
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
51 * <pre>
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
52 * mx --vm server vm -XX:-UseGraalClassLoader -G:CompileTheWorldClasspath=$HOME/SPECjvm2008/SPECjvm2008.jar -cp @com.oracle.graal.hotspot.test com.oracle.graal.hotspot.test.MemoryUsageBenchmark
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
53 * </pre>
16690
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
54 */
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
55 public class MemoryUsageBenchmark extends GraalCompilerTest {
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
56
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
57 public static int simple(int a, int b) {
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
58 return a + b;
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
59 }
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
60
16716
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
61 public static synchronized int complex(CharSequence cs) {
16690
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
62 if (cs instanceof String) {
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
63 return cs.hashCode();
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
64 }
16696
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
65
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
66 if (cs instanceof StringBuffer) {
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
67 int[] hash = {0};
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
68 cs.chars().forEach(c -> hash[0] += c);
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
69 return hash[0];
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
70 }
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
71
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
72 int res = 0;
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
73
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
74 // Exercise lock elimination
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
75 synchronized (cs) {
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
76 res = cs.length();
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
77 }
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
78 synchronized (cs) {
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
79 res = cs.hashCode() ^ 31;
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
80 }
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
81
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
82 for (int i = 0; i < cs.length(); i++) {
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
83 res *= cs.charAt(i);
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
84 }
16716
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
85
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
86 // A fixed length loop with some canonicalizable arithmetics will
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
87 // activate loop unrolling and more canonicalization
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
88 int sum = 0;
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
89 for (int i = 0; i < 5; i++) {
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
90 sum += i * 2;
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
91 }
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
92 res += sum;
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
93
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
94 // Activates escape-analysis
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
95 res += new String("asdf").length();
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
96
16696
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
97 return res;
16690
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
98 }
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
99
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
100 static class MemoryUsageCloseable implements AutoCloseable {
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
101
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
102 private final long start;
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
103 private final String name;
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
104
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
105 public MemoryUsageCloseable(String name) {
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
106 this.name = name;
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
107 this.start = getCurrentThreadAllocatedBytes();
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
108 }
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
109
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
110 @Override
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
111 public void close() {
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
112 long end = getCurrentThreadAllocatedBytes();
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
113 long allocated = end - start;
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
114 System.out.println(name + ": " + allocated);
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
115 }
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
116 }
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
117
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
118 public static void main(String[] args) {
16716
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
119 // Ensure a Graal runtime is initialized prior to Debug being initialized as the former
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
120 // may include processing command line options used by the latter.
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
121 Graal.getRuntime();
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
122
16696
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
123 // Ensure a debug configuration for this thread is initialized
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
124 if (Debug.isEnabled() && DebugScope.getConfig() == null) {
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
125 DebugEnvironment.initialize(System.out);
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
126 }
16690
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
127 new MemoryUsageBenchmark().run();
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
128 }
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
129
16773
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
130 private void doCompilation(String methodName, String label) {
18120
86ec7f6f71b3 refactored GraalCompilerTest API to be in terms of ResolvedJavaMethod instead of Method
Doug Simon <doug.simon@oracle.com>
parents: 17377
diff changeset
131 HotSpotResolvedJavaMethod method = (HotSpotResolvedJavaMethod) getResolvedJavaMethod(methodName);
16696
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
132 HotSpotBackend backend = runtime().getHostBackend();
16716
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
133
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
134 // invalidate any existing compiled code
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
135 method.reprofile();
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
136
16696
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
137 int id = method.allocateCompileId(INVOCATION_ENTRY_BCI);
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
138 long ctask = 0L;
16773
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
139
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
140 try (MemoryUsageCloseable c = label == null ? null : new MemoryUsageCloseable(label)) {
17377
58f45b63b802 CompileTheWorld compilations are no longer installed as default nmethods
Doug Simon <doug.simon@oracle.com>
parents: 16773
diff changeset
141 CompilationTask task = new CompilationTask(backend, method, INVOCATION_ENTRY_BCI, ctask, id, false);
16773
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
142 task.runCompilation();
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
143 }
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
144 }
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
145
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
146 private void allocSpyCompilation(String methodName) {
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
147 if (AllocSpy.isEnabled()) {
18120
86ec7f6f71b3 refactored GraalCompilerTest API to be in terms of ResolvedJavaMethod instead of Method
Doug Simon <doug.simon@oracle.com>
parents: 17377
diff changeset
148 HotSpotResolvedJavaMethod method = (HotSpotResolvedJavaMethod) getResolvedJavaMethod(methodName);
16773
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
149 HotSpotBackend backend = runtime().getHostBackend();
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
150
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
151 // invalidate any existing compiled code
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
152 method.reprofile();
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
153
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
154 int id = method.allocateCompileId(INVOCATION_ENTRY_BCI);
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
155 long ctask = 0L;
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
156 try (AllocSpy as = AllocSpy.open(methodName)) {
17377
58f45b63b802 CompileTheWorld compilations are no longer installed as default nmethods
Doug Simon <doug.simon@oracle.com>
parents: 16773
diff changeset
157 CompilationTask task = new CompilationTask(backend, method, INVOCATION_ENTRY_BCI, ctask, id, false);
16773
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
158 task.runCompilation();
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
159 }
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
160 }
16690
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
161 }
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
162
16696
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
163 private static final boolean verbose = Boolean.getBoolean("verbose");
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
164
16690
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
165 private void compileAndTime(String methodName) {
16716
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
166
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
167 // Parse in eager mode to resolve methods/fields/classes
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
168 parseEager(methodName);
bb030c4a6822 improvements to MemoryUsageBenchmark
Doug Simon <doug.simon@oracle.com>
parents: 16696
diff changeset
169
16696
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
170 // Warm up and initialize compiler phases used by this compilation
16690
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
171 for (int i = 0; i < 10; i++) {
16773
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
172 doCompilation(methodName, verbose ? methodName + "[warmup-" + i + "]" : null);
16690
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
173 }
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
174
16773
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
175 doCompilation(methodName, methodName);
16690
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
176 }
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
177
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
178 public void run() {
16723
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
179 compileAndTime("simple");
16696
bd6b44b04143 moved MemoryUsageBenchmark to graal.hotspot.test and use CompilationTask to drive compilation
Doug Simon <doug.simon@oracle.com>
parents: 16690
diff changeset
180 compileAndTime("complex");
16723
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
181 if (CompileTheWorldClasspath.getValue() != SUN_BOOT_CLASS_PATH) {
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
182 CompileTheWorld ctw = new CompileTheWorld(CompileTheWorldClasspath.getValue(), new Config(CompileTheWorldConfig.getValue()), CompileTheWorldStartAt.getValue(),
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
183 CompileTheWorldStopAt.getValue(), CompileTheWorldVerbose.getValue());
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
184 try {
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
185 ctw.compile();
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
186 } catch (Throwable e) {
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
187 e.printStackTrace();
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
188 }
c880fb576c97 add support for CompileTheWorld based memory usage analysis
Doug Simon <doug.simon@oracle.com>
parents: 16716
diff changeset
189 }
16773
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
190 allocSpyCompilation("simple");
b359f0468128 added AllocSpy-based memory usage benchmarking
Doug Simon <doug.simon@oracle.com>
parents: 16728
diff changeset
191 allocSpyCompilation("complex");
16690
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
192 }
7e8ecfe7d2e5 preliminary compiler memory usage benchmark
Doug Simon <doug.simon@oracle.com>
parents:
diff changeset
193 }