[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