On Sat, 12 Nov 2022 08:08:15 GMT, Fei Yang <fy...@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) > @RealFYang did you have a chance to see if my RISC-V changes worked out for > you? Hi, I have performed tier1-3 tests on my linux-riscv64 HiFive Unmatched boards. Results looks good. Thanks for handling riscv at the same time :-) ------------- PR: https://git.openjdk.org/jdk/pull/11111