[foreign-memaccess] RFR 8234073: Add support for deterministic shared segments

Jorn Vernee jorn.vernee at oracle.com
Mon Nov 18 11:10:35 UTC 2019


Hi,

This looks really good!

The only comment I have is that TestSharedAccess is still timing out 
sometimes for me, so maybe you want to lower the number of threads.

Jorn

On 13/11/2019 09:58, Maurizio Cimadamore wrote:
> Hi,
> in the latest iteration, we added support for shared memory segments - 
> that is, memory segments that can be shared (and accessed) across 
> multiple threads. This came at the cost of sacrificing one of our 
> goals: deterministic deallocation; the story there was something like: 
> if the segment is confined, deallocation is deterministic, but if the 
> segment is shared, you cannot call close() - which sends you back to 
> the ByteBuffer non-deterministic deallocation model (for shared 
> segments).
>
> We believe we now have found a way to have both deterministic 
> deallocation and shared segments - all bundled in a relatively 
> inoffensive API. What this patch does, is, it removes all the state 
> transition between confined and shared - all segments now have the 
> potential to be shared - no state transition is needed.
>
> Each segment is born with a thread owner - like before; if you want to 
> access the segment from a thread other than the owner, the second 
> thread must 'acquire' the segment (this is, in fact, the only new API 
> method we need to support shared segments in full). Doing acquire 
> gives the second thread a 'view' of the segment that can be used to 
> work within that particular thread. When the second segment has 
> finished working with the segment, he must close() the view. 
> Internally, a view counter is maintained in the original shared 
> segment, so that the shared segment cannot be close if there are still 
> confined views being used by other threads.
>
> With this simple move we reclaim back deterministic deallocation, and 
> we also significantly simplify the API.
>
> Webrev:
>
> http://cr.openjdk.java.net/~mcimadamore/panama/8234073/
>
> Javadoc:
>
> http://cr.openjdk.java.net/~mcimadamore/panama/8234073_javadoc/jdk/incubator/foreign/package-summary.html 
>
>
> Note: as part of this changeset I've also removed the reachability 
> fences on the memory VarHandle implementation. Since now we no longer 
> rely on cleaners, there's no risk that a segment could 'disappear' in 
> the middle of an access operation. I've also did a bit of an overhaul 
> of the javadoc when it comes to explain the concept associated with 
> segments and concurrent access.
>
> Cheers
> Maurizio
>


More information about the panama-dev mailing list