[foreign-memaccess] RFR 8224993: Add Unsafe support for MemoryAddress (again)
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Thu May 30 17:11:04 UTC 2019
New revision:
http://cr.openjdk.java.net/~mcimadamore/panama/8224993_followup_v2/
I finally got to the bottom of the issue - in part the problem is caused
by the fact that MemoryAddessImpl::copy is too big and doesn't get
inlined into the caller. But, another problem was that we were doing
redundant liveness checks - since the check was called explicitly in
MemoryAddressImpl::copy, but also, indirectly, in
MemoryAddressImpl::checkAccess.
I now eliminated these calls, and moved all liveness check to
MemorySegmentImpl::checkRange.
I've also added a missing call to checkAlive in MemorySegmentImpl::resize.
With these changes the compiled method is still too big, but even w/o
the ForceInline annotation, performances are good (and same as with the
annotation).
Maurizio
On 30/05/2019 17:09, Jorn Vernee wrote:
> Looks good to me.
>
> I wanted to ask about the addition of the APIs to sun.misc.Unsafe last
> time, but got side-tracked by the test build error and then forgot :/.
> I had assumed sun.misc.Unsafe would not be updated going forward?
> What's the policy on this?
>
> Thanks,
> Jorn
>
> Maurizio Cimadamore schreef op 2019-05-30 16:59:
>> Hi,
>> small followup to yesterday's push.
>>
>> As I was benchmarking bulk copy performances, I realized that there's
>> a bug in the methods which I added yesterday on sun.misc.Unsafe -
>> which delegate to the wrong Unsafe (itself), resulting in SO.
>>
>> I also cleaned up uses of Unsafe internally - and added a @ForceInline
>> on MemoryAddressImpl::copy which basically makes it as fast as a raw
>> unsafe call to Unsafe::copyMemory. We're still investigating as to why
>> exactly the annotation is needed to get good inlining.
>>
>> I've also added a shortcircuit in AbstractMemoryScopeImpl::checkAlive,
>> which avoids a call to 'isAlive' if the scope is pinned. This was
>> causing some profile pollution (although performances were still good
>> - probably because of the bi-morphic inline cache).
>>
>> Webrev:
>> http://cr.openjdk.java.net/~mcimadamore/panama/8224993_followup/
>>
>> Maurizio
More information about the panama-dev
mailing list