[foreign-memaccess+abi] RFR: Generalize PointerInvoke to benchmark by-ref segment return
Maurizio Cimadamore
mcimadamore at openjdk.org
Fri Feb 10 18:28:38 UTC 2023
On Fri, 10 Feb 2023 18:21:47 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:
> I've generalized an existing benchmark to test by-reference segment return in downcalls.
> Ideally, we should see scalarization of the returned segment, and no GC activity.
Results I got:
Benchmark Mode Cnt Score Error Units
PointerInvoke.long_to_long avgt 30 10.016 ± 0.038 ns/op
PointerInvoke.long_to_long:·gc.alloc.rate avgt 30 0.001 ± 0.001 MB/sec
PointerInvoke.long_to_long:·gc.alloc.rate.norm avgt 30 ≈ 10⁻⁵ B/op
PointerInvoke.long_to_long:·gc.count avgt 30 ≈ 0 counts
PointerInvoke.long_to_ptr avgt 30 14.581 ± 0.185 ns/op
PointerInvoke.long_to_ptr:·gc.alloc.rate avgt 30 2354.079 ± 29.942 MB/sec
PointerInvoke.long_to_ptr:·gc.alloc.rate.norm avgt 30 72.005 ± 0.001 B/op
PointerInvoke.long_to_ptr:·gc.churn.G1_Eden_Space avgt 30 2345.490 ± 102.742 MB/sec
PointerInvoke.long_to_ptr:·gc.churn.G1_Eden_Space.norm avgt 30 71.766 ± 3.260 B/op
PointerInvoke.long_to_ptr:·gc.churn.G1_Survivor_Space avgt 30 0.018 ± 0.007 MB/sec
PointerInvoke.long_to_ptr:·gc.churn.G1_Survivor_Space.norm avgt 30 0.001 ± 0.001 B/op
PointerInvoke.long_to_ptr:·gc.count avgt 30 210.000 counts
PointerInvoke.long_to_ptr:·gc.time avgt 30 124.000 ms
PointerInvoke.ptr_to_long avgt 30 10.712 ± 0.088 ns/op
PointerInvoke.ptr_to_long:·gc.alloc.rate avgt 30 0.001 ± 0.001 MB/sec
PointerInvoke.ptr_to_long:·gc.alloc.rate.norm avgt 30 ≈ 10⁻⁵ B/op
PointerInvoke.ptr_to_long:·gc.count avgt 30 ≈ 0 counts
PointerInvoke.ptr_to_long_new_segment avgt 30 11.386 ± 0.124 ns/op
PointerInvoke.ptr_to_long_new_segment:·gc.alloc.rate avgt 30 0.001 ± 0.001 MB/sec
PointerInvoke.ptr_to_long_new_segment:·gc.alloc.rate.norm avgt 30 ≈ 10⁻⁵ B/op
PointerInvoke.ptr_to_long_new_segment:·gc.count avgt 30 ≈ 0 counts
PointerInvoke.ptr_to_ptr avgt 30 15.769 ± 0.186 ns/op
PointerInvoke.ptr_to_ptr:·gc.alloc.rate avgt 30 2176.427 ± 25.562 MB/sec
PointerInvoke.ptr_to_ptr:·gc.alloc.rate.norm avgt 30 72.005 ± 0.001 B/op
PointerInvoke.ptr_to_ptr:·gc.churn.G1_Eden_Space avgt 30 2186.727 ± 109.313 MB/sec
PointerInvoke.ptr_to_ptr:·gc.churn.G1_Eden_Space.norm avgt 30 72.331 ± 3.393 B/op
PointerInvoke.ptr_to_ptr:·gc.churn.G1_Survivor_Space avgt 30 0.013 ± 0.007 MB/sec
PointerInvoke.ptr_to_ptr:·gc.churn.G1_Survivor_Space.norm avgt 30 ≈ 10⁻³ B/op
PointerInvoke.ptr_to_ptr:·gc.count avgt 30 187.000 counts
PointerInvoke.ptr_to_ptr:·gc.time avgt 30 109.000 ms
PointerInvoke.ptr_to_ptr_new_segment avgt 30 15.848 ± 0.239 ns/op
PointerInvoke.ptr_to_ptr_new_segment:·gc.alloc.rate avgt 30 2165.823 ± 32.328 MB/sec
PointerInvoke.ptr_to_ptr_new_segment:·gc.alloc.rate.norm avgt 30 72.005 ± 0.001 B/op
PointerInvoke.ptr_to_ptr_new_segment:·gc.churn.G1_Eden_Space avgt 30 2175.643 ± 93.914 MB/sec
PointerInvoke.ptr_to_ptr_new_segment:·gc.churn.G1_Eden_Space.norm avgt 30 72.321 ± 2.808 B/op
PointerInvoke.ptr_to_ptr_new_segment:·gc.churn.G1_Survivor_Space avgt 30 0.019 ± 0.009 MB/sec
PointerInvoke.ptr_to_ptr_new_segment:·gc.churn.G1_Survivor_Space.norm avgt 30 0.001 ± 0.001 B/op
PointerInvoke.ptr_to_ptr_new_segment:·gc.count avgt 30 198.000 counts
PointerInvoke.ptr_to_ptr_new_segment:·gc.time avgt 30 116.000 ms
Passing segments as arguments works fine, but returning segments generate allocation. This seems to be unrelated to latest API changes - (even when I tweaked the FFM impl to always use global scope, the allocation seems to be still there).
-------------
PR: https://git.openjdk.org/panama-foreign/pull/788
More information about the panama-dev
mailing list