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

List:       openjdk-serviceability-dev
Subject:    Integrated: 8255243: Reinforce escape barrier interactions with ZGC conc stack processing
From:       Erik =?UTF-8?B?w5ZzdGVybHVuZA==?= <eosterlund () openjdk ! java ! net>
Date:       2020-10-29 14:22:56
Message-ID: waaDM8WUFiFcDd1w3UxZHkD4gtaTVfxZ-fgHnLZbe0Q=.7d0b85cb-d54e-4696-824e-2eb0e6a2e7ce () github ! com
[Download RAW message or body]

On Fri, 23 Oct 2020 10:25:43 GMT, Erik Ă–sterlund <eosterlund@openjdk.org> wrote:

> The escape barrier reallocates scalarized objects potentially deep into the stack \
> of a remote thread. Each allocation can safepoint, causing referenced frames to be \
> invalid. Some sprinklings were added that deal with that, but I believe it was \
> subsequently broken with the integration of the new vector API, that has its own \
> new deoptimization code that did not know about this. Not surprisingly, the \
> integration of the new vector API had no idea about this subtlety, and allocates an \
> object, and then reads an object deep from the stack of a remote thread (using an \
> escape barrier). I suppose the issue is that all these 3 things were integrated at \
> almost the same time. The problematic code sequence is in \
> VectorSupport::allocate_vector() in vectorSupport.cpp, which is called from \
> Deoptimization::realloc_objects(). It first allocates an oop (possibly \
> safepointing), and then reads a vector oop from the stack. This is usually fine, \
> but not through the escape barrier, with concurrent stack sc
 anning. While I have not seen any crashes yet, I can see from code inspection, that \
there is no way that this works correctly.
> 
> In order to make this less fragile for future changes, we should really have a RAII \
> object that keeps the target thread's stack of the escape barrier, stable and \
> processed, across safepoints. This patch fixes that. Then it becomes much easier to \
> reason about its correctness, compared to hoping the various hooks are applied \
> after each safepoint. 
> With this new robustness fix, the thread running the escape barrier, keeps the \
> target thread stack processed, straight through safepoints on the requesting \
> thread, making it easy and intuitive to understand why this works correctly. The \
> RAII object basically just has to cover the code block that pokes at the remote \
> stack and goes in and out of safepoints, arbitrarily. Arguably, this escape barrier \
> doesn't need to be blazingly fast, and can afford keeping stacks sane through its \
> operation.

This pull request has now been integrated.

Changeset: 5b185585
Author:    Erik Ă–sterlund <eosterlund@openjdk.org>
URL:       https://git.openjdk.java.net/jdk/commit/5b185585
Stats:     268 lines in 15 files changed: 164 ins; 72 del; 32 mod

8255243: Reinforce escape barrier interactions with ZGC conc stack processing

Co-authored-by: Richard Reingruber <rrich@openjdk.org>
Reviewed-by: rrich, sspitsyn

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

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


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

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