On Thu, 23 Apr 2026 16:24:53 GMT, Paul Hübner <[email protected]> wrote:

>> Hi all,
>> 
>> The Java FF&M API includes functionality to both initialize and read from 
>> thread-local data prior to and immediately after downcalls, respectively, 
>> through the `Linker.Option::captureCallState` API. This is useful, as an 
>> example, when setting or capturing `errno` when interfacing with C 
>> functions. However, using this linker option introduces some invocation 
>> overhead at runtime.
>> 
>> This RFE introduces a JMH microbenchmark which quantifies this overhead. A 
>> simple downcall to `strtoll` is measured with and without call state 
>> capturing. 
>> 
>> Testing: GHA for sanity testing.
>> 
>> # Benchmarking Results
>> 
>> I have executed this benchmark on Oracle-supported platforms, the results 
>> can be found below. For each platform, I've done two trials corresponding to 
>> different JDKs: one being the current HEAD ("current", based on 
>> 28506ca7a8f03cddb0903e4f58b4f38742f15606), and one with 
>> [JDK-8378559](https://bugs.openjdk.org/browse/JDK-8378559) reverted 
>> ("legacy", revert commit on top of 
>> 28506ca7a8f03cddb0903e4f58b4f38742f15606). This one-off experiment is 
>> insightful since [JDK-8378559](https://bugs.openjdk.org/browse/JDK-8378559) 
>> increased the overhead of downcalls using state capturing by introducing 
>> thread-local data initialization. The performance impact of this change was 
>> previously unquantified.
>> 
>> ## Linux x64
>> 
>> **Current:**
>> 
>> Benchmark                                               Mode  Cnt   Score   
>> Error  Units
>> CaptureCallStateOverheadBench.doNotUseCaptureCallState  avgt   30  39.261 ± 
>> 0.025  ns/op
>> CaptureCallStateOverheadBench.useCaptureCallState       avgt   30  45.539 ± 
>> 0.653  ns/op
>> 
>> 
>> **Legacy:**
>> 
>> Benchmark                                               Mode  Cnt   Score   
>> Error  Units
>> CaptureCallStateOverheadBench.doNotUseCaptureCallState  avgt   30  39.249 ± 
>> 0.015  ns/op
>> CaptureCallStateOverheadBench.useCaptureCallState       avgt   30  43.887 ± 
>> 1.919  ns/op
>> 
>> 
>> ## Linux AArch64
>> 
>> **Current:**
>> 
>> Benchmark                                               Mode  Cnt   Score   
>> Error  Units
>> CaptureCallStateOverheadBench.doNotUseCaptureCallState  avgt   30  47.175 ± 
>> 0.067  ns/op
>> CaptureCallStateOverheadBench.useCaptureCallState       avgt   30  58.490 ± 
>> 0.532  ns/op
>> 
>> 
>> **Legacy:**
>> 
>> Benchmark                                               Mode  Cnt   Score   
>> Error  Units
>> CaptureCallStateOverheadBench.doNotUseCaptureCallState  avgt   30  47.396 ± 
>> 0.217  ns/op
>> CaptureCallStateOverheadBench.useCaptureCall...
>
> Paul Hübner has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Reviewer feedback.

Marked as reviewed by jvernee (Reviewer).

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

PR Review: https://git.openjdk.org/jdk/pull/30719#pullrequestreview-4236636723

Reply via email to