> 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 `strtol` is measured with and without call state > capturing. > > Testing: GHA for sanity testing. > > # Benchmarking Results > > ⚠️ **These results apply prior to > [28506ca](https://github.com/openjdk/jdk/pull/30719/commits/28506ca7a8f03cddb0903e4f58b4f38742f15606)!** > > 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 > 8357de88aa35ee998fefe321ee6dae9eb4993fa6), and one with > [JDK-8378559](https://bugs.openjdk.org/browse/JDK-8378559) reverted > ("legacy", revert commit on top of 8357de88aa35ee998fefe321ee6dae9eb4993fa6). > 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 38.442 ± > 0.016 ns/op > CaptureCallStateOverheadBench.useCaptureCallState avgt 30 45.425 ± > 1.826 ns/op > > > **Legacy:** > > Benchmark Mode Cnt Score > Error Units > CaptureCallStateOverheadBench.doNotUseCaptureCallState avgt 30 39.224 ± > 0.789 ns/op > CaptureCallStateOverheadBench.useCaptureCallState avgt 30 41.011 ± > 0.058 ns/op > > > ## Linux AArch64 > > **Current:** > > Benchmark Mode Cnt Score > Error Units > CaptureCallStateOverheadBench.doNotUseCaptureCallState avgt 30 45.396 ± > 0.185 ns/op > CaptureCallStateOverheadBench.useCaptureCallState avgt 30 56.116 ± > 0.463 ns/op > > > **Legacy:** > > Benchmark Mode Cnt Score > Error Units > CaptureCallStateOverheadBench.doNotUseCaptureCallState avgt 30 44.859 ± > 0....
Paul Hübner has updated the pull request incrementally with one additional commit since the last revision: Reviewer feedback. ------------- Changes: - all: https://git.openjdk.org/jdk/pull/30719/files - new: https://git.openjdk.org/jdk/pull/30719/files/9eda9bbd..28506ca7 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=30719&range=02 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=30719&range=01-02 Stats: 22 lines in 1 file changed: 1 ins; 11 del; 10 mod Patch: https://git.openjdk.org/jdk/pull/30719.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/30719/head:pull/30719 PR: https://git.openjdk.org/jdk/pull/30719
