How to change compilation policy to trigger C2 compilation ASAP?

Tangwei (Euler) tangwei6 at huawei.com
Wed May 20 09:29:52 UTC 2015


Hi Chris, 
  Actually, what I want is to run my application on simulator to locate performance bottleneck in JITTed code.
I actually don't care about if cold-starting my VM or not, just want to compile hot function earlier to shorten simulator execution time. 

Regards!
wei

> -----Original Message-----
> From: Chris Newland [mailto:cnewland at chrisnewland.com]
> Sent: Wednesday, May 20, 2015 4:59 PM
> To: Tangwei (Euler)
> Cc: hotspot compiler
> Subject: RE: How to change compilation policy to trigger C2 compilation ASAP?
> 
> Hi Wei,
> 
> Thanks! OpenJDK has no support for persisting compilation profile data
> between VM runs. For some industries it can be economical to use a
> commercial VM to get the lowest latencies.
> 
> One "free" alternative is to add a training mode to your application and feed it
> the most realistic input data so that you get a good set of JIT optimisations
> before the inputs you care about arrive.
> 
> Is there a reason why you are cold-starting your VM? (For example your GC
> strategy is to use a huge Eden space and reboot daily to avoid any garbage
> collections).
> 
> Regards,
> 
> Chris
> @chriswhocodes
> 
> On Wed, May 20, 2015 09:17, Tangwei (Euler) wrote:
> > Hi Chris,
> > Your tool looks cool. I think OpenJDK has no technology to mitigate
> > cold-start costs, please correct if I am wrong. I can control some
> > compilation passes with option -XX:CompileCommand, but the profiling
> > data, such as invocation count and backedge count, has to reach some
> > threshold before trigger execution level transition. This causes
> > simulator doesn't trigger C2 compilation within reasonable time span.
> >
> > Regards!
> > wei
> >
> >> -----Original Message-----
> >> From: Chris Newland [mailto:cnewland at chrisnewland.com]
> >> Sent: Wednesday, May 20, 2015 3:46 PM
> >> To: Vitaly Davidovich
> >> Cc: Tangwei (Euler); Vladimir Kozlov; hotspot compiler
> >> Subject: RE: How to change compilation policy to trigger C2
> >> compilation ASAP?
> >>
> >>
> >> Hi Wei,
> >>
> >>
> >> Is there any reason why you need to cold-start your application each
> >> time and begin with no profiling information?
> >>
> >> Depending on your input data, would it be possible to "warm up" the
> >> VM by running typical inputs through your code to build a rich
> >> profile and have the JIT compilations performed before your real data
> arrives?
> >>
> >> One reason *against* doing this would be wide variations in your
> >> input data that could result in the wrong optimisations being made
> >> and possibly suffering a decompilation event.
> >>
> >> There are commercial VMs that have technology to mitigate cold-start
> >> costs (for example Azul Zing's ReadyNow).
> >>
> >>
> >> Have you examined the HotSpot LogCompilation output to make sure
> >> there is nothing you could change at source code level which would
> >> result in a better JIT decisions? I'm thinking of things like
> >> inlining failures due to call-site megamorphism.
> >>
> >> There's a free tool called JITWatch that aims to make it easier to
> >> understand the LogCompilation output
> >> (https://github.com/AdoptOpenJDK/jitwatch) (Sorry for the sales pitch
> >> - I'm the author).
> >>
> >> Regards,
> >>
> >>
> >> Chris
> >> @chriswhocodes
> >>
> >>
> >> On Wed, May 20, 2015 03:11, Vitaly Davidovich wrote:
> >>
> >>> I'll let Vladimir comment on the compile command, but turning off
> >>> tiered doesn't prevent inlining.  What prevents inlining (an
> >>> otherwise  inlineable  method), in a nutshell, is lack of profiling
> >>> information  that would indicate the method or callsite is hot
> >>> enough for inlining. So you can have tiered off and run C2 with
> >>> standard compilation thresholds, and you'll likely get good inlining
> >>> because you'll have a long profile.  If you turn C2 compile
> >>> threshold down too far (and too far is going to be app-specific), C2
> >>> compilation may not have sufficient info in the shortened profile to
> >>> decide to inline.  Or even worse, the profile collected is actually
> >>> not reflective of the real profile you want to capture (e.g. app has
> >>> a phase change after initialization).
> >>>
> >>> The theoretical advantage of tiered is you can get decent perf
> >>> quickly, but also since you're getting better than interpreter speed
> >>> quickly, you can run in C1 tier longer and thus collect an even
> >>> larger profile, possibly leading to better code than C2 alone.  But
> >>> unfortunately this may require serious tuning.  That's my
> >>> understanding at
> >> least.
> >>>
> >>> sent from my phone On May 19, 2015 10:00 PM, "Tangwei (Euler)"
> >>> <tangwei6 at huawei.com> wrote:
> >>>
> >>>
> >>>
> >>>> Vladimir,
> >>>> What the 'double' means in following command line? The option
> >>>> CompileThresholdScaling you mentioned is same as
> >>>> ProfileMaturityPercentage?
> >>>> I cannot find the option in code. How much effect to function
> >>>> inlining by turning off tiered compilation?
> >>>>
> >>>>>
> >>>>
> >>
> -XX:CompileCommand=option,SomeClass.someMethod,double,CompileThresh
> >> ol
> >>>> dS caling,0.5
> >>>>
> >>>> Regards!
> >>>> wei
> >>>>
> >>>>> -----Original Message-----
> >>>>> From: Vladimir Kozlov [mailto:vladimir.kozlov at oracle.com]
> >>>>> Sent: Wednesday, May 20, 2015 9:12 AM
> >>>>> To: Tangwei (Euler); Vitaly Davidovich
> >>>>> Cc: hotspot compiler
> >>>>> Subject: Re: How to change compilation policy to trigger C2
> >>>>> compilation
> >>>> ASAP?
> >>>>
> >>>>
> >>>>>
> >>>>> If you want only C2 compilation you can disable tiered compilation
> >>>>>
> >>>> (since you
> >>>>
> >>>>
> >>>>> don't want to spend to much on profiling anyway) and set low
> >>>>> CompileThreshold (you need only this one for non-tiered compile):
> >>>>>
> >>>>>
> >>>>>
> >>>>> -XX:-TieredCompilation -XX:CompileThreshold=100
> >>>>>
> >>>>>
> >>>>>
> >>>>> If your method is simple and don't need profiling or inlining the
> >>>>>
> >>>>>
> >>>> generated code
> >>>>> could be same quality as with long profiling.
> >>>>>
> >>>>> An other approach is to set threshold per method (scale all
> >>>>> threasholds
> >>>> (C1, C2,
> >>>>
> >>>>
> >>>>> interpreter) by this value). For example to reduce thresholds by
> >>>>> half:
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>
> -XX:CompileCommand=option,SomeClass.someMethod,double,CompileThresh
> >>
> >>>>> oldScaling,0.5
> >>>>>
> >>>>> Vladimir
> >>>>>
> >>>>>
> >>>>>
> >>>>> On 5/19/15 5:43 PM, Tangwei (Euler) wrote:
> >>>>>
> >>>>>
> >>>>>> My goal is just to reach peak performance quickly. Following is
> >>>>>> one tier threshold combination I tried:
> >>>>>>
> >>>>>> -XX:Tier0ProfilingStartPercentage=0
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> -XX:Tier3InvocationThreshold=3
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> -XX:Tier3MinInvocationThreshold=2
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> -XX:Tier3CompileThreshold=2
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> -XX:Tier4InvocationThreshold=4
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> -XX:Tier4MinInvocationThreshold=3
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> -XX:Tier4CompileThreshold=2
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> Regards!
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> wei
> >>>>>>
> >>>>>> *From:*Vitaly Davidovich [mailto:vitalyd at gmail.com]
> >>>>>> *Sent:* Tuesday, May 19, 2015 9:33 PM
> >>>>>> *To:* Tangwei (Euler)
> >>>>>> *Cc:* hotspot compiler
> >>>>>> *Subject:* Re: How to change compilation policy to trigger C2
> >>>>>> compilation ASAP?
> >>>>>>
> >>>>>> Is your goal specifically to have C2 compile or just to reach
> >>>>>> peak performance quickly? It sounds like the latter.  What values
> >>>>>> did you  specify for the tier thresholds? Also, it may help you
> >>>>>> to -XX:+PrintCompilation to tune the flags as this will show you
> >>>>>> which methods are being compiled, when, and at what tier.
> >>>>>>
> >>>>>> sent from my phone
> >>>>>>
> >>>>>> On May 19, 2015 9:01 AM, "Tangwei (Euler)" <tangwei6 at huawei.com
> >>>>>> <mailto:tangwei6 at huawei.com>> wrote:
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> Hi All,
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> I want to run a JAVA application on a performance simulator, and
> >>>>>> do a profiling on a hot function JITTed with C2 compiler.
> >>>>>>
> >>>>>> In order to make C2 compiler compile hot function as early as
> >>>>>> possible, I hope to reduce the threshold of function invocation
> >>>>>>
> >>>>>> count in interpreter and C1 to drive the JIT compiler
> >>>>>> transitioned to Level 4 (C2) ASAP. Following is the option list I
> >>>>>> try, but
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> failed to find a right combination to meet my requirement.
> >>>>>> Anyone
> >>>>>> can help to figure out what options I can use?
> >>>>>>
> >>>>>> Thanks in advance.
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> -XX:Tier0ProfilingStartPercentage=0
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> -XX:Tier3InvocationThreshold
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> -XX:Tier3MinInvocationThreshold
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> -XX:Tier3CompileThreshold
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> -XX:Tier4InvocationThreshold
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> -XX:CompileThreshold
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> -XX:Tier4MinInvocationThreshold
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> -XX:Tier4CompileThreshold
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> Regards!
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> wei
> >>>>>>
> >>>>
> >>>
> >>
> >
> >
> 



More information about the hotspot-compiler-dev mailing list