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

List:       openjdk-hotspot-runtime-dev
Subject:    Integrated: 8286302: Port JEP 425 to PPC64
From:       Richard Reingruber <rrich () openjdk ! org>
Date:       2022-11-28 8:12:50
Message-ID: Qi6bOBPl5ZISiVzhTIsJbV66xWkg_AxvzGrcQSVJv5Y=.c2acc0c2-aadd-44a5-82ab-deb0e5daa888 () github ! com
[Download RAW message or body]

On Wed, 2 Nov 2022 21:54:26 GMT, Richard Reingruber <rrich@openjdk.org> wrote:

> Hi,
> 
> this is the port of [JEP 425: Virtual Threads \
> (Preview)](https://openjdk.org/jeps/425)) to PPC64. More precisely it is the port \
> of vm continuations in hotspot to PPC64. It allows to run with \
> `-XX:+VMContinuations` which is a prerequisit for 'real' virtual threads \
> (oxymoron?). 
> Most of the shared code changes are related to a new platform dependent constant \
> `frame::metadata_words_at_top`. It is either added or subtracted to a frame address \
> or size. 
> The following is supposed to explain (without real life details) why it is needed \
> in addition to the existing `frame::metadata_words`. The diagram shows a frame at \
> `SP` and its stack arguments. The caller frame is located at `callers_SP`. 
> 
> X86 / AARCH64                             PPC64:
> 
> > > > > 
> > > > > 
> > > > > 
> > -----------------|                       |-----------------|
> > > > > 
> > stack arguments |                       | stack arguments |
> > > <- callers_SP          |                 |
> ===================                       |-----------------|
> > > > > 
> > metadata@bottom |                       | metadata@top    |
> > > > > <- callers_SP
> > -----------------|                       ===================
> > > > > 
> > > > > 
> > > > > 
> > > > > 
> > > <- SP                  |                 |
> ===================                       |-----------------|
> > > 
> > metadata@top    |
> > > <- SP
> ===================
> 
> 
> On X86 and AARCH64 metadata (that's return address, saved SP/FP, etc.) is stored at \
> the frame bottom (`metadata@bottom`). On PPC64 it is stored at the frame top \
> (`metadata@top`) where it affects size and address calculations. Shared code deals \
> with this by making use of the platform dependent constant \
> `frame::metadata_words_at_top`. 
> * size required to 'freeze' a single frame with its stack arguments in a \
> `StackChunk`: `sizeof(frame) + sizeof(stack arguments) + \
> frame::metadata_words_at_top` 
> * address of stack arguments:
> `callers_SP + frame::metadata_words_at_top`
> 
> * The value of `frame::metadata_words_at_top` is 0 words on X86 and AARCH64. On \
> PPC64 it is 4 words. 
> Please refer to comments I've added for more details (e.g. the comment on \
> StackChunkFrameStream<frame_kind>::frame_size()). Recently I've given a talk about \
> vm continuations and the PPC64 port to my colleagues. It's rather an overview than \
> a deep dive. [The slides](http://cr.openjdk.java.net/~rrich/webrevs/2022/8286302/202210_loom_ppc64_port.pdf) \
> might serve as well as an intro to the matter. 
> The pr includes the new test jdk/jdk/internal/vm/Continuation/BasicExp.java which I \
> wrote while doing the port. The test cases vary from simple to not-so-simple. One \
> of the main features is that a CompilationPolicy passed as argument controls which \
> frames are compiled/interpreted when freezing by defining a sliding window of \
> compiled / interpreted frames which produces interesting transitions with and \
> without stack arguments. There is overlap with Basic.java and Fuzz.java. Let me \
> know wether to remove or keep BasicExp.java. Runtime with fastdebug: 2m on Apple M1 \
> Pro and 3m on Intel Xeon E5-2660 v3 @ 2.60GHz. Note that -XX:+VerifyContinuations \
> is explicitly set as a found it very useful, it increases the runtime quite a bit \
> though. 
> Testing: the change passed our CI testing: most JCK and JTREG tests, also in Xcomp \
> mode, SPECjvm2008, SPECjbb2015, Renaissance Suite and SAP specific tests with \
> fastdebug and release builds on the standard platforms plus PPC64. These tests do \
> include hotspot_loom and jdk_loom JTREG tests which I've also run with \
> TEST_VM_OPTS="-XX:+VerifyContinuations" on X86_64, PPC64, and AARCH64. 
> Thanks, Richard.

This pull request has now been integrated.

Changeset: 43d11736
Author:    Richard Reingruber <rrich@openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/43d1173605128126dda0dc39ffc376b84065cc65
                
Stats:     3564 lines in 66 files changed: 3156 ins; 109 del; 299 mod

8286302: Port JEP 425 to PPC64

Reviewed-by: tsteele, mdoerr

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

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


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

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