InlineSmallCode is too low by default
iggy.veresov at gmail.com
Mon Apr 23 20:45:24 PDT 2012
On Apr 23, 2012, at 4:59 PM, Rémi Forax wrote:
> On 04/23/2012 11:54 PM, Igor Veresov wrote:
>> There are going to be some regressions if you do that. In particular some of the subbenchmarks in specjvm2008 will show worse results. In general the current inlining in C2 needs to be reworked in favor of a post-parse inlining-based strategy. InlineSmallCode is a very big knob...
> Sorry to be stupid but if some regressions will happen,
> why InlineSmallCode is equals to 2000 in tiered mode ?
It's hard to explain all the interactions you get in the inlining policy. Tiered profiles a bit longer, so inlining turns out differently because of the state of the counters. It just so happens that 2000 works better with tiered in the majority of cases.
> And can you point me the code that does the post-parse inlining strategy
> because I'm not sure what does it mean.
There is no such strategy so far. I was just saying that it would be a more general solution to the InlineSmallCode problems than just changing its value.
>> On Apr 23, 2012, at 9:50 AM, Rémi Forax wrote:
>>> InlineSmallCode is set to 1000 on x86 by default if tiered mode
>>> is not enabled and 2000 if tiered mode is enabled.
>>> I wonder if there is a reason for that inconsistency.
>>> InlineSmallCode is the threshold used by the inlining heuristic
>>> to know if a method is too big or not to be inlined multiple times,
>>> on my dynamic language runtime, setting it to 2000 is very important
>>> because otherwise most of the high order functions (function that
>>> takes a function as argument) are not compiled with their callsite
>>> so escape analysis can't work.
>>> I suppose it's also the case for users that use libraries like
>>> Google guava or Goldman Sachs's gs-collection that exhibit the same patterns.
>>> that why I propose to bump InlineSmallCode to 2000 for x86 and
>>> 2500 for sparc by default (the defaults in tiered mode).
More information about the hotspot-runtime-dev