> Certain signatures for foreign function calls (e.g. HVA return by value) 
> require allocation of an intermediate buffer to adapt the FFM's to the native 
> stub's calling convention. In the current implementation, this buffer is 
> malloced and freed on every FFM invocation, a non-negligible overhead.
> 
> Sample stack trace:
> 
>    java.lang.Thread.State: RUNNABLE
>       at jdk.internal.misc.Unsafe.allocateMemory0(java.base@25-ea/Native 
> Method)
> ...
>       at 
> jdk.internal.foreign.abi.SharedUtils.newBoundedArena(java.base@25-ea/SharedUtils.java:386)
>       at 
> jdk.internal.foreign.abi.DowncallStub/0x000001f001084c00.invoke(java.base@25-ea/Unknown
>  Source)
> ...
>       at 
> java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base@25-ea/Invokers$Holder)
> 
> 
> To alleviate this, this PR remembers and reuses up to two small intermediate 
> buffers per carrier-thread in subsequent calls.
> 
> Performance (MBA M3):
> 
> 
> Before:
> Benchmark                    Mode  Cnt   Score   Error  Units
> CallOverheadByValue.byPtr    avgt   10   3.333 ? 0.152  ns/op
> CallOverheadByValue.byValue  avgt   10  33.892 ? 0.034  ns/op
> 
> After:
> Benchmark                         Mode  Cnt    Score    Error  Units
> CallOverheadByValue.byPtr    avgt   10  3.291 ? 0.031  ns/op
> CallOverheadByValue.byValue  avgt   10  5.464 ? 0.007  ns/op
> 
> 
> `-prof gc` also shows that the new call path is fully scalar-replaced vs 160 
> byte/call before.

Matthias Ernst has updated the pull request incrementally with one additional 
commit since the last revision:

  --unnecessary annotations

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/23142/files
  - new: https://git.openjdk.org/jdk/pull/23142/files/d408852d..ad0b9282

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=23142&range=08
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=23142&range=07-08

  Stats: 2 lines in 1 file changed: 0 ins; 2 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/23142.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/23142/head:pull/23142

PR: https://git.openjdk.org/jdk/pull/23142

Reply via email to