[9] RFR(S): 8059604: Add CompileThresholdScalingPercentage flag to control when methods are first compiled (with +/-TieredCompilation)

Zoltán Majó zoltan.majo at oracle.com
Tue Oct 7 13:45:30 UTC 2014


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