Thanks for the reviews Serguei and Vladimir.

Unless I hear objections in the next 24 hours, I'll push this webrev.

-Doug

> On 3 Oct 2018, at 03:14, serguei.spit...@oracle.com wrote:
> 
> Hi Doug,
> 
> The JVMTI related part looks good to me.
> Thank you for fixing it!
> 
> Thanks,
> Serguei
> 
> On 10/2/18 1:11 AM, Doug Simon wrote:
>> It would be great to get some input from the non-compilers teams on this RFR.
>> 
>> -Doug
>> 
>>> On 28 Sep 2018, at 19:51, Vladimir Kozlov <vladimir.koz...@oracle.com> 
>>> wrote:
>>> 
>>> To let you know, me and Tom R. did review these changes and agreed that it 
>>> is the least intrusive changes for Hotspot shared code.
>>> 
>>> Thanks,
>>> Vladimir
>>> 
>>> On 9/25/18 8:11 AM, Daniel D. Daugherty wrote:
>>>> Adding serviceability-dev@... since this is JVM/TI...
>>>> Dan
>>>> On 9/25/18 10:48 AM, Doug Simon wrote:
>>>>> A major design point of Graal is to treat allocations as non-side 
>>>>> effecting to give more freedom to the optimizer by reducing the number of 
>>>>> distinct FrameStates that need to be managed. When failing an allocation, 
>>>>> Graal will deoptimize to the last side effecting instruction before the 
>>>>> allocation. This mean the VM code for heap allocation will potentially be 
>>>>> executed twice, once from Graal compiled code and then again in the 
>>>>> interpreter. While this is perfectly fine according to the JVM 
>>>>> specification, it can cause confusing behavior for JVMTI based tools. 
>>>>> They will receive 2 ResourceExhausted events for a single allocation. 
>>>>> Furthermore, the first ResourceExhausted event (on the Graal allocation 
>>>>> slow path) might denote a bytecode instruction that performs no 
>>>>> allocation, making it hard to debug the memory failure.
>>>>> 
>>>>> The proposed solution is to add an extra set of JVMCI VM runtime calls 
>>>>> for allocation. These entry points will attempt the allocation and upon 
>>>>> failure,
>>>>> skip side-effects such as posting JVMTI events or handling 
>>>>> -XX:OnOutOfMemoryError. The compiled code using these entry points is 
>>>>> expected deoptmize on null.
>>>>> 
>>>>> The path from these new entry points to where allocation can fail goes 
>>>>> through quite a bit of VM code. One could modify all these paths by:
>>>>> * Returning null instead of throwing an exception on failure.
>>>>> * Adding a `bool null_on_fail` argument to all relevant methods.
>>>>> * Adding extra null checking where necessary after each call to these 
>>>>> methods when `null_on_fail == true`.
>>>>> This represents a significant number of changes.
>>>>> 
>>>>> Instead, the proposed solution introduces a new _in_retryable_allocation 
>>>>> thread-local. This way, only the entry points and allocation routines 
>>>>> that raise an exception need to be modified. Failure is communicated back 
>>>>> to the new entry points by throwing a special pre-allocated OOME object 
>>>>> (i.e., Universe::out_of_memory_error_retry()) which must not propagate 
>>>>> back to Java code. Use of this object is not strictly necessary; it is 
>>>>> introduced to highlight/document the special allocation mode.
>>>>> 
>>>>> The proposed solution is at http://cr.openjdk.java.net/~dnsimon/8208686.
>>>>> THE JBS bug is: https://bugs.openjdk.java.net/browse/JDK-8208686
>>>>> 
>>>>> -Doug
> 

Reply via email to