> 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

Reply via email to