[foreign-memaccess+abi] RFR: Prevent maxAlign virtual calls for polluted accesses [v2]
Maurizio Cimadamore
mcimadamore at openjdk.org
Mon Aug 8 17:24:36 UTC 2022
On Mon, 8 Aug 2022 16:10:53 GMT, Radoslaw Smogura <duke at openjdk.org> wrote:
>> src/java.base/share/classes/jdk/internal/foreign/AbstractMemorySegmentImpl.java line 326:
>>
>>> 324: // Helper methods
>>> 325:
>>> 326: @ForceInline
>>
>> When adding `maxAlign` I have played with something similar as what you have done. My recollection is that doing this doesn't 100% solve the issue, as it's possible to have polluted profile for `maxAlignMask` (e.g. the JVM will bias the method implementation towards the 1-2 layouts that seem to be more common, and put everything else in an uncommon branch). Maybe what you see is that, since the virtual call is gone, there is still a net gain.
>>
>> Does the problem only manifest with bulk copy? Or also with plain memory access? If the former, perhaps some other inlining issue with bulk copy (which is a big method) could be at play.
>
> I just checked it with vector operations only, there's check in `ScopedMemoryAccess` `loadFromMemorySegment` which checks max align in case of polluted access this will create polymorphic call.
>
> - However when I look right now I think there's second option. Instead of changing `maxAlign`, the check in `loadFromMemorySegment`, could be replaced by checking if segment instance is native or `Bytes`.?
is this the affected code?
// @@@ Smarter alignment checking if accessing heap segment backing non-byte[] array
if (msp.maxAlignMask() > 1) {
throw new IllegalArgumentException();
}
```
-------------
PR: https://git.openjdk.org/panama-foreign/pull/700
More information about the panama-dev
mailing list