[foreign-jextract] RFR: MemorySegmentPool + Allocator [v6]

Radoslaw Smogura github.com+7535718+rsmogura at openjdk.java.net
Tue Apr 20 16:35:15 UTC 2021


On Tue, 20 Apr 2021 15:36:47 GMT, Radoslaw Smogura <github.com+7535718+rsmogura at openjdk.org> wrote:

>> (Preview)
>> 
>> The MemorySegmentPool is a pool maintaining memory segments, optionally can expose allocator which can be bound to other scope, and which will return allocated segments back to pool.
>> 
>> However the best results has been achieved by using getSegmentEntry & putSegmentEntry methods.
>> 
>> The pool is intended to be used by long running applications (i.e. like global shared pool), where fast allocation and de-allocation of segments is critical (was designed during implementation of I/O subsystem with Panama, as a pool for temporary buffers between system I/O methods and Java byte arrays from InputStreams).
>> 
>> The pool uses hand-made SpinLockQueue as the Deque from JDK offers too much functionality and overhead.
>
> Radoslaw Smogura has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Use VH insted of volatile
>   
>   Replacee
>   //    while ((int) LOCK.compareAndExchange(this, 0, 1) != 1) { }
>       while (!LOCK.compareAndSet(this, 0, 1)) { }
>   
>   Performane around 34 ns / oop

I have following results (did I optimized something too much)

Benchmark                                          (size)  Mode  Cnt    Score   Error  Units
StrLenTest.jni_strlen                                   5  avgt   30  109.788 ? 6.553  ns/op
StrLenTest.jni_strlen                                  20  avgt   30  118.230 ? 2.807  ns/op
StrLenTest.jni_strlen                                 100  avgt   30  185.568 ? 1.925  ns/op
StrLenTest.panama_strlen                                5  avgt   30  114.209 ? 0.819  ns/op
StrLenTest.panama_strlen                               20  avgt   30  121.100 ? 3.347  ns/op
StrLenTest.panama_strlen                              100  avgt   30  152.947 ? 1.934  ns/op
StrLenTest.panama_strlen_arena                          5  avgt   30   36.248 ? 0.646  ns/op
StrLenTest.panama_strlen_arena                         20  avgt   30   48.894 ? 1.081  ns/op
StrLenTest.panama_strlen_arena                        100  avgt    9   94.346 ? 7.055  ns/op
StrLenTest.panama_strlen_memsegmentpool_allocator       5  avgt   30   59.867 ? 4.796  ns/op
StrLenTest.panama_strlen_memsegmentpool_allocator      20  avgt   30   57.990 ? 2.443  ns/op
StrLenTest.panama_strlen_memsegmentpool_allocator     100  avgt   30   72.129 ? 0.289  ns/op
StrLenTest.panama_strlen_memsegmentpool_direct          5  avgt   30   34.098 ? 0.128  ns/op
StrLenTest.panama_strlen_memsegmentpool_direct         20  avgt   30   37.481 ? 0.199  ns/op
StrLenTest.panama_strlen_memsegmentpool_direct        100  avgt   30   53.836 ? 0.267  ns/op
StrLenTest.panama_strlen_prefix                         5  avgt   30   26.680 ? 0.340  ns/op
StrLenTest.panama_strlen_prefix                        20  avgt   30   32.913 ? 0.099  ns/op
StrLenTest.panama_strlen_prefix                       100  avgt   30   61.064 ? 0.218  ns/op
StrLenTest.panama_strlen_unsafe                         5  avgt   30   44.110 ? 2.567  ns/op
StrLenTest.panama_strlen_unsafe                        20  avgt   30   46.377 ? 0.151  ns/op
StrLenTest.panama_strlen_unsafe                       100  avgt   30   65.233 ? 1.631  ns/op
StrLenTest.panama_strlen_unsafe_trivial                 5  avgt   30   27.910 ? 0.972  ns/op
StrLenTest.panama_strlen_unsafe_trivial                20  avgt   30   37.179 ? 3.002  ns/op
StrLenTest.panama_strlen_unsafe_trivial               100  avgt   30   62.084 ? 1.610  ns/op

-------------

PR: https://git.openjdk.java.net/panama-foreign/pull/509


More information about the panama-dev mailing list