On Fri, 4 Sep 2026 17:39:19 GMT, Jorn Vernee <[email protected]> wrote:

>> See the JBS issue for the full explanation of the issue.
>> 
>> Now that https://github.com/openjdk/jdk/pull/25315 was integrated, we are 
>> able to reliably scan for session oops in a frame, and only deoptimize those 
>> frames where the oop is live.
>> 
>> I ran the `ConcurrentClose` benchmark before and after this patch, and these 
>> were the results:
>> 
>> 
>> Before:
>> 
>> Benchmark                                        Mode  Cnt   Score   Error  
>> Units
>> ConcurrentClose.sharedClose                      avgt   10  10.139 ± 0.416  
>> us/op
>> ConcurrentClose.sharedClose:closing              avgt   10  29.288 ± 1.257  
>> us/op
>> ConcurrentClose.sharedClose:memorySegmentAccess  avgt   10   0.651 ± 0.030  
>> us/op
>> ConcurrentClose.sharedClose:otherAccess          avgt   10   0.478 ± 0.026  
>> us/op
>> 
>> After:
>> 
>> Benchmark                                        Mode  Cnt   Score   Error  
>> Units
>> ConcurrentClose.sharedClose                      avgt   10   9.860 ± 0.387  
>> us/op
>> ConcurrentClose.sharedClose:closing              avgt   10  28.641 ± 1.175  
>> us/op
>> ConcurrentClose.sharedClose:memorySegmentAccess  avgt   10   0.470 ± 0.013  
>> us/op
>> ConcurrentClose.sharedClose:otherAccess          avgt   10   0.468 ± 0.015  
>> us/op
>> 
>> 
>> We can see that now the unrelated memory access in `memorySegmentAccess` is 
>> no longer being affected by a scope being closed in another thread.
>> 
>> Testing: `jdk_foreign` suite, and I repeat ran 
>> `java/foreign/TestHandshake.java` 50 times as well, which is our stress test 
>> for shared scopes.
>> 
>> ---------
>> - [x] I confirm that I make this contribution in accordance with the 
>> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai).
>
> Jorn Vernee has updated the pull request with a new target base due to a 
> merge or a rebase. The incremental webrev excludes the unrelated changes 
> brought in by the merge/rebase. The pull request contains four additional 
> commits since the last revision:
> 
>  - Remove old comment
>  - Merge branch 'master' into ScanOops
>  - Merge branch 'master' into ScanOops
>  - Scan for session oop before deoptimizing

src/hotspot/share/prims/scopedMemoryAccess.cpp line 248:

> 246: 
> 247:         nmethod* code = last_frame.cb()->as_nmethod();
> 248:         if (code->has_scoped_access() && is_session_live(last_frame, 
> &register_map)) {

I'd assert that this condition is always false for non-deoptimizable frames 
(`last_frame.can_be_deoptimized() == false`). Otherwise, looks good.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/30926#discussion_r3938018487

Reply via email to