# HG changeset patch # User Doug Simon # Date 1401119059 -7200 # Node ID d1e9a44b14cca5bd57254e2bcf0329e2680cd152 # Parent 5f692474fba3ec49964b4cab59237934aa684607 added more runtime initialization timers diff -r 5f692474fba3 -r d1e9a44b14cc graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java Mon May 26 12:03:04 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java Mon May 26 17:44:19 2014 +0200 @@ -22,6 +22,8 @@ */ package com.oracle.graal.hotspot.amd64; +import static com.oracle.graal.hotspot.HotSpotGraalRuntime.InitTimer.*; + import java.util.*; import com.oracle.graal.amd64.*; @@ -30,6 +32,7 @@ import com.oracle.graal.api.replacements.*; import com.oracle.graal.api.runtime.*; import com.oracle.graal.hotspot.*; +import com.oracle.graal.hotspot.HotSpotGraalRuntime.*; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.phases.util.*; @@ -98,26 +101,65 @@ assert host == null; TargetDescription target = createTarget(runtime.getConfig()); - HotSpotRegistersProvider registers = createRegisters(); - HotSpotMetaAccessProvider metaAccess = createMetaAccess(runtime); - HotSpotCodeCacheProvider codeCache = createCodeCache(runtime, target); - HotSpotConstantReflectionProvider constantReflection = createConstantReflection(runtime); - Value[] nativeABICallerSaveRegisters = createNativeABICallerSaveRegisters(runtime.getConfig(), codeCache.getRegisterConfig()); - HotSpotHostForeignCallsProvider foreignCalls = createForeignCalls(runtime, metaAccess, codeCache, nativeABICallerSaveRegisters); - HotSpotLoweringProvider lowerer = createLowerer(runtime, metaAccess, foreignCalls, registers, target); - // Replacements cannot have speculative optimizations since they have - // to be valid for the entire run of the VM. - Assumptions assumptions = new Assumptions(false); - Providers p = new Providers(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, null); - HotSpotSnippetReflectionProvider snippetReflection = createSnippetReflection(); - Replacements replacements = createReplacements(runtime, assumptions, p, snippetReflection); - HotSpotDisassemblerProvider disassembler = createDisassembler(runtime); - HotSpotSuitesProvider suites = createSuites(runtime); - HotSpotMethodHandleAccessProvider methodHandleAccess = new HotSpotMethodHandleAccessProvider(); - HotSpotProviders providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, disassembler, suites, registers, snippetReflection, - methodHandleAccess); - - return createBackend(runtime, providers); + HotSpotProviders providers; + HotSpotRegistersProvider registers; + HotSpotCodeCacheProvider codeCache; + HotSpotConstantReflectionProvider constantReflection; + HotSpotHostForeignCallsProvider foreignCalls; + Value[] nativeABICallerSaveRegisters; + HotSpotMetaAccessProvider metaAccess; + HotSpotLoweringProvider lowerer; + HotSpotSnippetReflectionProvider snippetReflection; + Replacements replacements; + HotSpotDisassemblerProvider disassembler; + HotSpotSuitesProvider suites; + HotSpotMethodHandleAccessProvider methodHandleAccess; + try (InitTimer t = timer("create providers")) { + try (InitTimer rt = timer("create HotSpotRegisters provider")) { + registers = createRegisters(); + } + try (InitTimer rt = timer("create MetaAccess provider")) { + metaAccess = createMetaAccess(runtime); + } + try (InitTimer rt = timer("create CodeCache provider")) { + codeCache = createCodeCache(runtime, target); + } + try (InitTimer rt = timer("create ConstantReflection provider")) { + constantReflection = createConstantReflection(runtime); + } + try (InitTimer rt = timer("create NativeABICallerSaveRegisters")) { + nativeABICallerSaveRegisters = createNativeABICallerSaveRegisters(runtime.getConfig(), codeCache.getRegisterConfig()); + } + try (InitTimer rt = timer("create ForeignCalls provider")) { + foreignCalls = createForeignCalls(runtime, metaAccess, codeCache, nativeABICallerSaveRegisters); + } + try (InitTimer rt = timer("create Lowerer provider")) { + lowerer = createLowerer(runtime, metaAccess, foreignCalls, registers, target); + } + // Replacements cannot have speculative optimizations since they have + // to be valid for the entire run of the VM. + Assumptions assumptions = new Assumptions(false); + Providers p = new Providers(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, null); + try (InitTimer rt = timer("create SnippetReflection provider")) { + snippetReflection = createSnippetReflection(); + } + try (InitTimer rt = timer("create Replacements provider")) { + replacements = createReplacements(runtime, assumptions, p, snippetReflection); + } + try (InitTimer rt = timer("create Disassembler provider")) { + disassembler = createDisassembler(runtime); + } + try (InitTimer rt = timer("create Suites provider")) { + suites = createSuites(runtime); + } + try (InitTimer rt = timer("create MethodHandleAccess provider")) { + methodHandleAccess = new HotSpotMethodHandleAccessProvider(); + } + providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, disassembler, suites, registers, snippetReflection, methodHandleAccess); + } + try (InitTimer rt = timer("instantiate backend")) { + return createBackend(runtime, providers); + } } protected AMD64HotSpotBackend createBackend(HotSpotGraalRuntime runtime, HotSpotProviders providers) { diff -r 5f692474fba3 -r d1e9a44b14cc graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXHotSpotBackendFactory.java --- a/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXHotSpotBackendFactory.java Mon May 26 12:03:04 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXHotSpotBackendFactory.java Mon May 26 17:44:19 2014 +0200 @@ -22,10 +22,13 @@ */ package com.oracle.graal.hotspot.ptx; +import static com.oracle.graal.hotspot.HotSpotGraalRuntime.InitTimer.*; + import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.api.runtime.*; import com.oracle.graal.hotspot.*; +import com.oracle.graal.hotspot.HotSpotGraalRuntime.*; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.java.*; import com.oracle.graal.nodes.spi.*; @@ -37,19 +40,50 @@ public HotSpotBackend createBackend(HotSpotGraalRuntime runtime, HotSpotBackend hostBackend) { HotSpotProviders host = hostBackend.getProviders(); - - HotSpotMetaAccessProvider metaAccess = host.getMetaAccess(); - PTXHotSpotCodeCacheProvider codeCache = new PTXHotSpotCodeCacheProvider(runtime, createTarget()); - ConstantReflectionProvider constantReflection = host.getConstantReflection(); - HotSpotForeignCallsProvider foreignCalls = new PTXHotSpotForeignCallsProvider(); - LoweringProvider lowerer = new PTXHotSpotLoweringProvider(host.getLowerer()); - Replacements replacements = host.getReplacements(); - HotSpotDisassemblerProvider disassembler = host.getDisassembler(); - SuitesProvider suites = new DefaultSuitesProvider(); - HotSpotRegistersProvider registers = new HotSpotRegisters(PTX.tid, Register.None, Register.None); - HotSpotProviders providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, disassembler, suites, registers, host.getSnippetReflection(), - host.getMethodHandleAccess()); - return new PTXHotSpotBackend(runtime, providers); + HotSpotMetaAccessProvider metaAccess; + PTXHotSpotCodeCacheProvider codeCache; + ConstantReflectionProvider constantReflection; + HotSpotForeignCallsProvider foreignCalls; + LoweringProvider lowerer; + Replacements replacements; + HotSpotDisassemblerProvider disassembler; + SuitesProvider suites; + HotSpotRegistersProvider registers; + HotSpotProviders providers; + try (InitTimer t = timer("create providers")) { + try (InitTimer rt = timer("create MetaAccess provider")) { + metaAccess = host.getMetaAccess(); + } + try (InitTimer rt = timer("create CodeCache provider")) { + codeCache = new PTXHotSpotCodeCacheProvider(runtime, createTarget()); + } + try (InitTimer rt = timer("create ConstantReflection provider")) { + constantReflection = host.getConstantReflection(); + } + try (InitTimer rt = timer("create ForeignCalls provider")) { + foreignCalls = new PTXHotSpotForeignCallsProvider(); + } + try (InitTimer rt = timer("create Lowerer provider")) { + lowerer = new PTXHotSpotLoweringProvider(host.getLowerer()); + } + try (InitTimer rt = timer("create Replacements provider")) { + replacements = host.getReplacements(); + } + try (InitTimer rt = timer("create Disassembler provider")) { + disassembler = host.getDisassembler(); + } + try (InitTimer rt = timer("create Suites provider")) { + suites = new DefaultSuitesProvider(); + } + try (InitTimer rt = timer("create HotSpotRegisters provider")) { + registers = new HotSpotRegisters(PTX.tid, Register.None, Register.None); + } + providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, disassembler, suites, registers, host.getSnippetReflection(), + host.getMethodHandleAccess()); + } + try (InitTimer rt = timer("instantiate backend")) { + return new PTXHotSpotBackend(runtime, providers); + } } protected Architecture createArchitecture() { diff -r 5f692474fba3 -r d1e9a44b14cc graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Mon May 26 12:03:04 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Mon May 26 17:44:19 2014 +0200 @@ -24,8 +24,8 @@ import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.compiler.common.UnsafeAccess.*; +import static com.oracle.graal.hotspot.HotSpotGraalRuntime.InitTimer.*; import static com.oracle.graal.hotspot.HotSpotGraalRuntime.Options.*; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.InitTimer.*; import static sun.reflect.Reflection.*; import java.lang.reflect.*; @@ -70,23 +70,33 @@ private InitTimer(String name) { this.name = name; this.start = System.currentTimeMillis(); - System.out.println("START INIT: " + name); + System.out.println("START: " + SPACES.substring(0, timerDepth * 2) + name); + assert Thread.currentThread() == initializingThread; + timerDepth++; } public void close() { final long end = System.currentTimeMillis(); - System.out.println(" DONE INIT: " + name + " [" + (end - start) + " ms]"); + timerDepth--; + System.out.println(" DONE: " + SPACES.substring(0, timerDepth * 2) + name + " [" + (end - start) + " ms]"); } public static InitTimer timer(String name) { return ENABLED ? new InitTimer(name) : null; } + public static InitTimer timer(String name, Object suffix) { + return ENABLED ? new InitTimer(name + suffix) : null; + } + /** * Specified initialization timing is enabled. This must only be set via a system property * as the timing facility is used to time initialization of {@link HotSpotOptions}. */ private static final boolean ENABLED = Boolean.getBoolean("graal.runtime.TimeInit"); + public static int timerDepth = 0; + public static final String SPACES = " "; + public static final Thread initializingThread = Thread.currentThread(); } private static final HotSpotGraalRuntime instance; @@ -285,7 +295,9 @@ compilerToVm = toVM; vmToCompiler = toCompiler; - config = new HotSpotVMConfig(compilerToVm); + try (InitTimer t = timer("HotSpotVMConfig")) { + config = new HotSpotVMConfig(compilerToVm); + } CompileTheWorld.Options.overrideWithNativeOptions(config); @@ -306,18 +318,31 @@ } String hostArchitecture = config.getHostArchitectureName(); - hostBackend = registerBackend(findFactory(hostArchitecture).createBackend(this, null)); + + HotSpotBackendFactory factory; + try (InitTimer t = timer("find factory:", hostArchitecture)) { + factory = findFactory(hostArchitecture); + } + try (InitTimer t = timer("create backend:", hostArchitecture)) { + hostBackend = registerBackend(factory.createBackend(this, null)); + } String[] gpuArchitectures = getGPUArchitectureNames(compilerToVm); for (String arch : gpuArchitectures) { - HotSpotBackendFactory factory = findFactory(arch); + try (InitTimer t = timer("find factory:", arch)) { + factory = findFactory(arch); + } if (factory == null) { throw new GraalInternalError("No backend available for specified GPU architecture \"%s\"", arch); } - registerBackend(factory.createBackend(this, hostBackend)); + try (InitTimer t = timer("create backend:", arch)) { + registerBackend(factory.createBackend(this, hostBackend)); + } } - eventProvider = createEventProvider(); + try (InitTimer t = timer("createEventProvider")) { + eventProvider = createEventProvider(); + } } private HotSpotBackend registerBackend(HotSpotBackend backend) { diff -r 5f692474fba3 -r d1e9a44b14cc graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java Mon May 26 12:03:04 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java Mon May 26 17:44:19 2014 +0200 @@ -193,12 +193,12 @@ assert VerifyOptionsPhase.checkOptions(hostProviders.getMetaAccess()); // Complete initialization of backends - try (InitTimer st = timer(hostBackend.getClass().getSimpleName() + ".completeInitialization")) { + try (InitTimer st = timer(hostBackend.getTarget().arch.getName(), ".completeInitialization")) { hostBackend.completeInitialization(); } for (HotSpotBackend backend : runtime.getBackends().values()) { if (backend != hostBackend) { - try (InitTimer st = timer(backend.getClass().getSimpleName() + ".completeInitialization")) { + try (InitTimer st = timer(backend.getTarget().arch.getName(), ".completeInitialization")) { backend.completeInitialization(); } }