[lworld] RFR: 8378771: [lworld] JFR Cooperative Sampling support for needs_stack_repair methods and frames [v3]

Markus Grönlund mgronlun at openjdk.org
Fri Feb 27 10:01:09 UTC 2026


> JFR Cooperative Sampling relies on a trick to reconstruct a sampled frame at the method exit poll instruction, because at that location, the frame has already been popped. The trick takes the frame_size() from the nmethod and subtracts that value from the SafepointBlob sender frames' sp, thus recreating the form of the just popped frame.
> 
> With Valhalla's new scalarized and non-scalarized frames and calling conventions, this trick no longer works because the actual frame size is not kept in the nmethod; instead, it is part of the frame itself, on the stack (it's the first word below rbp). The problem for JFR Cooperative Sampling is that, at frame reconstruction time, the SafepointBlob stub will have overwritten the sp_inc slot of the popped frame, making frame reconstruction problematic and next to impossible.
> 
> [JDK-8368099](https://bugs.openjdk.org/browse/JDK-8368099) provided a workaround for this problem by skipping all sampled frames with the property "needs_stack_repair" and moving directly to the sender frame instead. This results in biased sampling for nearly all samples taken inside frames whose next poll instruction is the method exit return.
> 
> This solution handles both scalarized and non-scalarized frame layouts.
> 
> Testing: jdk_valhalla, hotspot_valhalla, hotspot_valhalla_runtime, jdk_jfr, stress testing
> 
> Thanks
> Markus

Markus Grönlund has updated the pull request incrementally with one additional commit since the last revision:

  rename

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

Changes:
  - all: https://git.openjdk.org/valhalla/pull/2176/files
  - new: https://git.openjdk.org/valhalla/pull/2176/files/bd07449d..1837fdaa

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=valhalla&pr=2176&range=02
 - incr: https://webrevs.openjdk.org/?repo=valhalla&pr=2176&range=01-02

  Stats: 11 lines in 1 file changed: 0 ins; 3 del; 8 mod
  Patch: https://git.openjdk.org/valhalla/pull/2176.diff
  Fetch: git fetch https://git.openjdk.org/valhalla.git pull/2176/head:pull/2176

PR: https://git.openjdk.org/valhalla/pull/2176


More information about the valhalla-dev mailing list