[foreign-jextract] RFR: Simplify isAlive / checkValidState methods for implicit scope
Maurizio Cimadamore
mcimadamore at openjdk.java.net
Mon Apr 26 18:11:45 UTC 2021
On Mon, 26 Apr 2021 15:12:29 GMT, Radoslaw Smogura <github.com+7535718+rsmogura at openjdk.org> wrote:
> This is an idea to improve performance of implicit scope which is as well a global scope.
>
> Implicit scope is always alive, and can't be closed (by normal means),
> so aliveness checks can be no-op.
> In this particular case, we avoid costly volatile state check, inherited from shared scope and used in many places (especially during creation segment form address).
>
> checkValidState is a simillar case, however here performance impact is lower.
>
> Before
>
> StrLenTest.panama_strlen_arena 5 avgt 10 35.399 ? 1.970 ns/op
> StrLenTest.panama_strlen_arena 20 avgt 10 54.262 ? 4.368 ns/op
> StrLenTest.panama_strlen_arena 100 avgt 3 101.130 ? 153.369 ns/op
> StrLenTest.panama_strlen_memsegmentpool_allocator 5 avgt 10 68.533 ? 1.137 ns/op
> StrLenTest.panama_strlen_memsegmentpool_allocator 20 avgt 10 61.875 ? 0.241 ns/op
> StrLenTest.panama_strlen_memsegmentpool_allocator 100 avgt 10 93.222 ? 1.712 ns/op
> StrLenTest.panama_strlen_memsegmentpool_allocator_copy 5 avgt 10 62.524 ? 0.674 ns/op
> StrLenTest.panama_strlen_memsegmentpool_allocator_copy 20 avgt 10 65.042 ? 0.725 ns/op
> StrLenTest.panama_strlen_memsegmentpool_allocator_copy 100 avgt 10 96.331 ? 1.937 ns/op
> StrLenTest.panama_strlen_prefix 5 avgt 10 27.629 ? 0.394 ns/op
> StrLenTest.panama_strlen_prefix 20 avgt 10 33.866 ? 0.274 ns/op
> StrLenTest.panama_strlen_prefix 100 avgt 10 50.047 ? 1.007 ns/op
> StrLenTest.panama_strlen_unsafe 5 avgt 10 43.200 ? 0.683 ns/op
> StrLenTest.panama_strlen_unsafe 20 avgt 10 45.795 ? 0.604 ns/op
> StrLenTest.panama_strlen_unsafe 100 avgt 10 69.070 ? 0.198 ns/op
> StrLenTest.panama_strlen_unsafe_trivial 5 avgt 10 28.154 ? 0.263 ns/op
> StrLenTest.panama_strlen_unsafe_trivial 20 avgt 10 34.597 ? 1.554 ns/op
> StrLenTest.panama_strlen_unsafe_trivial 100 avgt 10 49.546 ? 0.501 ns/op
>
> After
> StrLenTest.panama_strlen_arena 5 avgt 10 35.487 ? 1.500 ns/op
> StrLenTest.panama_strlen_arena 20 avgt 10 53.043 ? 3.375 ns/op
> StrLenTest.panama_strlen_arena 100 avgt 3 98.676 ? 134.643 ns/op
> StrLenTest.panama_strlen_memsegmentpool_allocator 5 avgt 10 59.435 ? 0.787 ns/op
> StrLenTest.panama_strlen_memsegmentpool_allocator 20 avgt 10 64.347 ? 1.146 ns/op
> StrLenTest.panama_strlen_memsegmentpool_allocator 100 avgt 10 81.476 ? 1.002 ns/op
> StrLenTest.panama_strlen_memsegmentpool_allocator_copy 5 avgt 10 58.936 ? 0.625 ns/op
> StrLenTest.panama_strlen_memsegmentpool_allocator_copy 20 avgt 10 76.399 ? 0.251 ns/op
> StrLenTest.panama_strlen_memsegmentpool_allocator_copy 100 avgt 10 94.255 ? 1.411 ns/op
> StrLenTest.panama_strlen_prefix 5 avgt 10 28.036 ? 0.342 ns/op
> StrLenTest.panama_strlen_prefix 20 avgt 10 33.364 ? 0.395 ns/op
> StrLenTest.panama_strlen_prefix 100 avgt 10 49.473 ? 0.515 ns/op
> StrLenTest.panama_strlen_unsafe 5 avgt 10 41.468 ? 0.919 ns/op
> StrLenTest.panama_strlen_unsafe 20 avgt 10 51.986 ? 10.217 ns/op
> StrLenTest.panama_strlen_unsafe 100 avgt 10 74.997 ? 7.457 ns/op
> StrLenTest.panama_strlen_unsafe_trivial 5 avgt 10 26.756 ? 0.619 ns/op
> StrLenTest.panama_strlen_unsafe_trivial 20 avgt 10 32.399 ? 0.317 ns/op
> StrLenTest.panama_strlen_unsafe_trivial 100 avgt 10 59.440 ? 0.864 ns/op
Can I please ask to pause micro-optimizations for the time being? I'm glad that we're looking for opportunities to improve the code, but I think for now we should focus on stability ahead of integration into mainline JDK. Thanks!
Also: ImplicitScopeImpl derives from SharedScopeImpl, whose checkValidState is as follows:
@Override
public void checkValidState() {
if (state < ALIVE) {
throw ScopedAccessError.INSTANCE;
}
}
```
Note that this just uses a simple plain access (which is safe because of the VM hackery we do to support shared memory access).
-------------
PR: https://git.openjdk.java.net/panama-foreign/pull/521
More information about the panama-dev
mailing list