[foreign-memaccess] RFR 8234073: Add support for deterministic shared segments
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Mon Nov 18 11:13:16 UTC 2019
On 18/11/2019 11:10, Jorn Vernee wrote:
> 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.
Will do thanks!
Maurizio
>
> 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