[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