RFR(S): 8017313: PPC64 (part 6): cppInterpreter: stack handling improvements

Coleen Phillimore coleen.phillimore at oracle.com
Tue Jun 25 07:23:15 PDT 2013


On 06/25/2013 10:07 AM, Lindenmaier, Goetz wrote:
>
> Hi,
>
> that's something I don't get:  x86 does
>
>   // Use the maximum number of pages we might bang.
>
>   const int max_pages = StackShadowPages > 
> (StackRedPages+StackYellowPages) ? StackShadowPages :
>
> (StackRedPages+StackYellowPages)
>
> and sparc
>
>     __ set( (StackRedPages+StackYellowPages) * page_size, Rscratch2 );
>
> in generate_stack_overflow_check().
>

I don't know why these are different, except that they are coded 
separately and probably last touched at different times.

> And we use the sum of all three.  This is because we want to use the
>
> shadow space for exception handling, so we must overflow before we
>
> run into the shadow space.
>

Yes, we don't want to check that we are not pushing stack frames into 
the shadow space here.

> All these different values could be set in the os_cpu file.
>
> But maybe they only differ because there is no shared coding
>
> yet?  And they should be harmonized?
>

They absolutely should be harmonized, which would  be good if the 
calculation that it uses is shared and the assembly code is 
simplified.   We can do that after your change.

> Bertrand, recomputing stack_base seems a good idea to me.
>
> But this would require that all platforms are adapted before
>
> _/stack/_base is removed.
>

We could do that when we fix the other platforms to use 
stack_overflow_limit().   The extra field in Thread is worth it. There 
are a lot of fields in Thread that we can remove (our out-pointer 
because they're never used) instead.

Coleen

> Best regards,
>
> Goetz.
>
> *From:*Coleen Phillimore [mailto:coleen.phillimore at oracle.com]
> *Sent:* Dienstag, 25. Juni 2013 15:34
> *To:* Lindenmaier, Goetz
> *Cc:* hotspot-dev at openjdk.java.net; David Holmes
> *Subject:* Re: RFR(S): 8017313: PPC64 (part 6): cppInterpreter: stack 
> handling improvements
>
>
> Yes, I think this would be useful for the other platforms to simplify 
> the stack overflow limit checking in the interpreter assembly code.
>
>        100    // Initialize the memory stack limit.
>        101    address mem_stk_limit = thread->stack_base() - thread->stack_size() +
>        102      ((StackShadowPages + StackYellowPages + StackRedPages) * os::vm_page_size());
>        103  
>        104    thread->set_memory_stack_limit(mem_stk_limit);
>   
>   
>
> My other comment was to move 101-102 into the function 
> set_stack_overflow_limit() since nothing on those lines depends on the 
> platform and the values used to compute this are owned by class Thread 
> anyway.
>
> thanks,
> Coleen
>
> On 06/25/2013 09:27 AM, Lindenmaier, Goetz wrote:
>
>     Hi Colleen, David,
>
>       
>
>     I'll rename the methods to stack_overflow_limit and update the webrev,
>
>     I like that name better too.
>
>       
>
>     We set it in os::initialize_thread():
>
>     http://hg.openjdk.java.net/ppc-aix-port/jdk8/hotspot/file/2a6fd169b0b7/src/os_cpu/linux_ppc/vm/os_linux_ppc.cpp
>
>     and we use it here (line427):
>
>     http://hg.openjdk.java.net/ppc-aix-port/jdk8/hotspot/file/2a6fd169b0b7/src/cpu/ppc/vm/cppInterpreter_ppc.cpp
>
>     In that files the method is called [set_]memory_stack_limit().
>
>       
>
>     Actually, it's got nothing to do with the cppInterpreter.  I first thought so,
>
>     because we only used it with the cppInterpreter when I moved this from
>
>     our VM to the port (a while ago now).  But look at the code in
>
>     void InterpreterGenerator::generate_stack_overflow_check(void) on x86 that
>
>     computes the stack bound in rax ... that's not really simple, and requires
>
>     two loads (stack_base, stack_size).
>
>       
>
>     The difference between cppInterpreter and template interpreter is that
>
>     we always check against the stack_limit in the cppInterpreter, but the
>
>     templateInterpreter first checks whether the stack is < 1 page, thus
>
>     experiencing less overhead from the lengthy coding.
>
>       
>
>     Best regards,
>
>        Goetz
>
>       
>
>       
>
>     -----Original Message-----
>
>     From:hotspot-dev-bounces at openjdk.java.net  <mailto:hotspot-dev-bounces at openjdk.java.net>  [mailto:hotspot-dev-bounces at openjdk.java.net] On Behalf Of Coleen Phillimore
>
>     Sent: Dienstag, 25. Juni 2013 14:49
>
>     To:hotspot-dev at openjdk.java.net  <mailto:hotspot-dev at openjdk.java.net>
>
>     Subject: Re: RFR(S): 8017313: PPC64 (part 6): cppInterpreter: stack handling improvements
>
>       
>
>       
>
>     Which stack limit is this?   Does it subtract off the red and yellow
>
>     zones?   Where do you set it?  Yes, it would simplify the assembler code
>
>     in the interpreter entries to use this.
>
>       
>
>     It might be better to rename it though if it's the usable stack
>
>     (subtracting red and yellow zones) and maybe compute the value inside of
>
>     Thread class (so you see it always subtracting the red and yellow
>
>     zones).   It's sort of ambiguous that this is happening. How about
>
>     stack_overflow_limit()?
>
>       
>
>     Thanks,
>
>     Coleen
>
>       
>
>     On 06/25/2013 08:44 AM, Lindenmaier, Goetz wrote:
>
>         Hi,
>
>           
>
>         We precompute the stack limit for overflow checks and save this
>
>         limit in the thread.  This simplifies the assembler coding checking
>
>         the stack overflow. This change contains the necessary shared
>
>         functionality. It can easily be ported to other platforms, too.
>
>         http://cr.openjdk.java.net/~goetz/webrevs/8017313-stack/  <http://cr.openjdk.java.net/%7Egoetz/webrevs/8017313-stack/>
>
>           
>
>         Please review this change.
>
>           
>
>         Best regards,
>
>             Goetz.
>
>           
>
>         PS: I removed some parts of patch 0006 because I found a better
>
>         platform-only solution.
>
>       
>



More information about the hotspot-dev mailing list