On Fri, 11 Nov 2022 16:16:18 GMT, Erik Österlund <eosterl...@openjdk.org> wrote:

> The current loom code makes some assumptions about GC that will not work with 
> generational ZGC. We should make this code more GC agnostic, and provide a 
> better interface for talking to the GC.
> 
> In particular,
> 1) All GCs have a way of encoding oops inside of the heap differently to oops 
> outside of the heap. For non-ZGC collectors, that is compressed oops. For 
> ZGC, that is colored pointers. With generational ZGC, pointers on-heap will 
> be colored and pointers off-heap will be "colorless". So we need to 
> generalize encoding and decoding of oops in the heap, for loom.
> 
> 2) The cont_oop is located on a stack. In order to access it we need to 
> start_processing on that thread, if it isn't the current thread. This 
> happened to work so far for ZGC, because the stale pointers had enough 
> colors. But with generational ZGC, these on-stack oops will be colorless, so 
> we have to be more accurate here and ensure processing really has started on 
> any thread that cont_oop is used on. To make life a bit easier, I'm moving 
> the oop processing responsibility for these oops to the thread instead. 
> Currently there is no more than one of these, so doing it lazily per frame 
> seems a bit overkill.
> 
> 3) Refactoring the stack chunk allocation code
> 
> Tested with tier1-5 and manually running Skynet. No regressions detected. We 
> have also been running with this (yet a slightly different backend) in the 
> generational ZGC repo for a while now.

PS: I see JVM crashes when running Skynet with extra VM option: 
-XX:+VerifyContinuations on linux-aarch64 platform.

$java  --enable-preview -XX:+VerifyContinuations Skynet


# A fatal error has been detected by the Java Runtime Environment:

# after -XX: or in .hotspotrc:  SuppressErrorAt=#
#  Internal Error/stackChunkOop.cpp 
(/home/realfyang/openjdk-jdk/src/hotspot/share/oops/stackChunkOop.cpp:433), 
pid=1904185:433, tid=1904206

[thread 1904216 also had an error]#  assert(_chunk->bitmap().at(index)) failed: 
Bit not set at index 208 corresponding to 0x0000000637c512d0

#
# JRE version: OpenJDK Runtime Environment (20.0) (fastdebug build 
20-internal-adhoc.realfyang.openjdk-jdk)
# Java VM: OpenJDK 64-Bit Server VM (fastdebug 
20-internal-adhoc.realfyang.openjdk-jdk, mixed mode, sharing, tiered, 
compressed oops, compressed class ptrs, g1 gc, linux-aarch64)

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

PR: https://git.openjdk.org/jdk/pull/11111

Reply via email to