How to change compilation policy to trigger C2 compilation ASAP?

Vitaly Davidovich vitalyd at gmail.com
Thu May 21 11:11:29 UTC 2015


Hi Kris,

MS CLR doesn't maintain the rich profile that Hotspot and Zing do, so yes,
for them it's pretty much a list of methods.  So I'm only mentioning them
in terms of doing eager compilation at startup based on profile info,
irrespective of what's actually in the profile.

Thanks

sent from my phone
On May 21, 2015 2:53 AM, "Krystal Mok" <rednaxelafx at gmail.com> wrote:

> Hi Vitaly,
>
> Multicore JIT in the CLR is totally different from what we do in Azul
> Zing's ReadyNow.
>
> The profile that ReadyNow saves and restores is the kind of detailed
> profile that C2 uses directly, similar to HotSpot's MDOs.
> The "profile" that Multicore JIT uses is just a list of methods (which can
> be group together under user-specified group names), without any detail
> profiles.
>
> The JIT compilers in CLR can only use detailed profiles when run in MPGO
> (managed profile-guided optimization) mode, which is a mode used with NGen
> (native image generator), an AOT compilation.
>
> I'll have to leave the HotSpot part of your question to Oracle people to
> answer.
>
> - Kris
>
> On Wed, May 20, 2015 at 5:53 PM, Vitaly Davidovich <vitalyd at gmail.com>
> wrote:
>
>> Thanks Kris.  Microsoft CLR also has something like that which they call
>> Multicore JIT (i.e. background compilations are started on separate cores
>> against saved profiles on startup).
>>
>> I wonder if anything of the sort is on the roadmap for hotspot?
>>
>> sent from my phone
>> On May 20, 2015 8:22 PM, "Krystal Mok" <rednaxelafx at gmail.com> wrote:
>>
>>> ReadyNow does save profiles to disk and read them back in subsequent
>>> runs.
>>> There are also other changes on the side in the runtime and compilers to
>>> make it work smoothly.
>>>
>>> Cc'ing Doug Hawkins who's the one working on ReadyNow if anybody's
>>> interested in more information.
>>>
>>> - Kris
>>>
>>> On Wed, May 20, 2015 at 6:40 AM, Vitaly Davidovich <vitalyd at gmail.com>
>>> wrote:
>>>
>>>> Training mode is also dangerous unless built in from beginning as
>>>> there's risk some unwanted application effect will take place.  This is
>>>> beside the possibility of feeding it "wrong" profile.
>>>>
>>>> What does Azul ReadyNow do? Saves profiles to disk and reads them upon
>>>> startup?
>>>>
>>>> sent from my phone
>>>> On May 20, 2015 4:58 AM, "Chris Newland" <cnewland at chrisnewland.com>
>>>> wrote:
>>>>
>>>>> 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
>>>>> >>>>>>
>>>>> >>>>
>>>>> >>>
>>>>> >>
>>>>> >
>>>>> >
>>>>>
>>>>>
>>>>>
>>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20150521/95b1edb0/attachment-0001.html>


More information about the hotspot-compiler-dev mailing list