[9] RFR(S): 8059604: Add CompileThresholdScalingPercentage flag to control when methods are first compiled (with +/-TieredCompilation)
Zoltán Majó
zoltan.majo at oracle.com
Fri Oct 10 07:53:05 UTC 2014
Thank you, Igor, for the review.
Could somebody please provide a second Reviewer's review? I think the
change is too large to be pushed with only one "Review".
Thank you!
Best regards,
Zoltan
On 10/09/2014 08:58 PM, Igor Veresov wrote:
> That looks good to me.
>
> igor
>
> On Oct 9, 2014, at 9:43 AM, Zoltán Majó <zoltan.majo at oracle.com> wrote:
>
>> Hi Igor,
>>
>>
>> thank you for your feedback!
>>
>> On 10/07/2014 11:17 PM, Igor Veresov wrote:
>>> 1. It would probably be nice not to do multiplications at every event but rather compute everything once during the startup. Perhaps it would be better to scale command line options right in arguments.cpp ? Or setup accessors in Arguments that would compute and cache the values. If you just scale the options the change would be smaller though. What do you think?
>> That is a good idea. I changed the code to scale thresholds in arguments.cpp (in Arguments::apply_ergo()).
>>
>>> 2. Why aren’t you scaling Tier{2,3}{Invoke,Backedge}NotifyFreqLog and Tier23InlineeNotifyFreqLog? Probably can be solved by (1) automatically.
>> The previous patch adjusts only the transition from Tier 0 to Tier 3 (when methods get first compiled). But now that you've suggested, I extended the patch to scale Tier4* compilation thresholds and Tier{2,3} notification thresholds as well.
>>
>> Here is the updated webrev:
>>
>> http://cr.openjdk.java.net/~zmajo/8059604/webrev.02/
>>
>> I tested the new patch with JPRT and manual testing.
>>
>> Thank you and best regards,
>>
>>
>> Zoltan
>>
>>> igor
>>>
>>> On Oct 7, 2014, at 6:45 AM, Zoltán Majó<zoltan.majo at oracle.com> wrote:
>>>
>>>> Hi Albert,
>>>>
>>>>
>>>> thank you for your feedback.
>>>>
>>>> On 10/07/2014 12:56 PM, Albert Noll wrote:
>>>>> How about using a scaling factor instead of using percentage?
>>>> I think that is a good idea because a scaling factor (expressed as a double) allows a finer-grained control of compilation thresholds than a scaling percentage (expressed as an integer).
>>>>
>>>> Here is the webrev with the scaling factor:
>>>>
>>>> http://cr.openjdk.java.net/~zmajo/8059604/webrev.01/
>>>>
>>>> The name of the flag is changed to CompileThresholdScaling (from CompileThresholdScalingPercentage).
>>>>
>>>>> What happens if a threshold becomes 0 after scaling?
>>>> Then all methods will be interpreted. That seems to be the convention (in src/share/vm/runtime/arguments.cpp).
>>>>
>>>> Best regards,
>>>>
>>>>
>>>> Zoltan
>>>>
>>>>> Best,
>>>>> Albert
>>>>>
>>>>>
>>>>> On 10/07/2014 12:32 PM, Zoltán Majó wrote:
>>>>>> Hi,
>>>>>>
>>>>>>
>>>>>> please review the following patch.
>>>>>>
>>>>>>
>>>>>> Bug:https://bugs.openjdk.java.net/browse/JDK-8059604
>>>>>>
>>>>>>
>>>>>> Problem: With tiered compilation enabled, the value of 6 different thresholds must be set to control when the JVM compiles methods for the first time. That is too detailed for the average customer.
>>>>>>
>>>>>>
>>>>>> Solution: This patch adds a new flag, CompileThresholdScalingPercentage, to control when methods are first compiled. The new flag scales thresholds the following way:
>>>>>>
>>>>>> - if CompileThresholdScalingPercentage==100, the default threshold values are used
>>>>>> - if CompileThresholdScalingPercentage>100, threshold values are scaled up (e.g., CompileThresholdScalingPercentage=120 scales up thresholds by a factor of 1.2X)
>>>>>> - if 0 < CompileThresholdScalingPercentage < 100, threshold values are scaled down accordingly.
>>>>>>
>>>>>> The new flag works both with and without tiered compilation. Thus, the new flag allows compilation to be controlled the same way both with and without tiered compilation:
>>>>>>
>>>>>> - with tiered compilation enabled, the value of the flags Tier0InvokeNotifyFreqLog, Tier0BackedgeNotifyFreqLog, Tier3InvocationThreshold, Tier3MinInvocationThreshold, Tier3CompileThreshold, and Tier3BackEdgeThreshold is scaled
>>>>>>
>>>>>> - with tiered compilation disabled, the value of CompileThreshold is scaled
>>>>>>
>>>>>> Currently, tiered and non-tiered compilation treats threshold values slightly differently: For a threshold value of N and without tiered compilation enabled, methods are compiled *before* their Nth execution. With tiered compilation enabled, methods are compiled *after* the their Nth execution.
>>>>>>
>>>>>> The patch addresses the difference between tiered/non-tiered compilation: Methods are compiled right before their Nth execution in both cases (the non-tiered way). If CompileThresholdScalingPercentage==0, all methods are interpreted (similarly to the case when CompileThreshold==0).
>>>>>>
>>>>>> This patch is the second (out of three) parts of JDK-8050853 (adding support for per-compilation thresholds):https://bugs.openjdk.java.net/browse/JDK-8050853 .
>>>>>>
>>>>>>
>>>>>> Webrev:http://cr.openjdk.java.net/~zmajo/8059604/webrev.00/
>>>>>>
>>>>>>
>>>>>> Testing: JPRT, manual testing
>>>>>>
>>>>>>
>>>>>> Thank you and best regards,
>>>>>>
>>>>>>
>>>>>> Zoltan
>>>>>>
More information about the hotspot-compiler-dev
mailing list