[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    Integrated: 8265753: Remove manual JavaThread transitions to blocked
From:       Robbin Ehn <rehn () openjdk ! java ! net>
Date:       2021-05-28 7:34:15
Message-ID: yrXMGON6giNrrY88RQMLVTGtqs9UetVHypEfJhLYG1w=.5aac7762-82bb-4a75-86ab-25c8a736ce94 () github ! com
[Download RAW message or body]

On Wed, 5 May 2021 08:11:04 GMT, Robbin Ehn <rehn@openjdk.org> wrote:

> Please consider this change which removes the manual transitions to blocked.
> This adds a preprocess template/functor which is executed in the destructor of \
> 'ThreadBlockInVM' if we are going to do any processing. This gives us a way to \
> backout of the object/raw monitor before suspend or other processing, such as a \
> safepoint. 
> The object monitor code could be straight forward changed to use this instead of \
> manual transitions. 
> Raw monitors on the other hand are a bit more complicated due to 'implicit' rules \
> (consequences of the specs). Added a comment in hpp trying to explain it; we cannot \
> simply transition with a raw monitor held. This caused the change in the destructor \
> ~ThreadInVMfromNative() (this specific change have also been tested in unrelated \
> exploration of transition), now this RAII does the same as we do when going to \
> native from Java, just setting the state. Since we are going from an unsafe state, \
> in VM, to a safe state, in native, we do not need to check the poll. That made it \
> possible to careful use ThreadInVMfromNative in raw monitors. 
> I also remove the early CAS in raw_enter.
> We lock a lock to do a CAS, in the uncontended case means CAS on lock then CAS raw \
> monitor. Now we instead do a transitions, in the uncontended case means fence, CAS \
> raw monitor, fence. (multiple fence (CAS is also a fence) very close to each other \
> have little additional performance impact on contemporary hardware) 
> Passes t1-t7 and manual stressing relevant test groups.

This pull request has now been integrated.

Changeset: 97ec5ad0
Author:    Robbin Ehn <rehn@openjdk.org>
URL:       https://git.openjdk.java.net/jdk/commit/97ec5ad0a6ed2cd87a9c75b0559e9bb55b72121e
                
Stats:     340 lines in 8 files changed: 119 ins; 150 del; 71 mod

8265753: Remove manual JavaThread transitions to blocked

Reviewed-by: dcubed, rrich, dholmes, pchilanomate

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

PR: https://git.openjdk.java.net/jdk/pull/3875


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic