Review request 6983240: guarantee((Solaris::min_stack_allowed >= (StackYellowPages+StackRedPages...) wrong
Dmitriy Samersoff
Dmitriy.Samersoff at oracle.com
Thu Oct 7 10:33:18 PDT 2010
Coleen,
Code looks good for me but I have a few questions (below):
1.
Is it possible to create
static inline size_t min_stack_allowed(){
return
(size_t)(StackYellowPages+StackRedPages+StackShadowPages+
2*BytesPerWord COMPILER2_PRESENT(+1)) * os::vm_page_size();
in os.hpp ?
1".
If not:
os_linux.cpp uses Linux::page_size()
os_solaris.cpp uses page_size
os_windows.cpp uses os::vm_page_size()
I believe all three returns a correct value but is it possible to keep
the same semantics across OSes i.e. always use either
{Linux,Solaris,Windows}::page_size or os::vm_page_size() ?
2. We don't store calculated min_stack_allowed under windows.
I'm not a windows expert - do we have a reason for it?
And (a nit) I'm a little bit worried about cast from size_t
to int here.
-Dmitry
On 2010-10-06 22:53, Coleen Phillimore wrote:
> -------- Original Message --------
> Subject: Re: Review request 6983240:
> guarantee((Solaris::min_stack_allowed >=
> (StackYellowPages+StackRedPages...) wrong
> Date: Wed, 06 Oct 2010 11:19:13 -0700
> From: Vladimir Kozlov <vladimir.kozlov at oracle.com>
> To: Coleen Phillimore <coleen.phillimore at oracle.com>
> CC: hotspot-runtime-dev at openjdk.java.net
> References: <4CAA58F4.5030100 at oracle.com> <4CAA743C.3060905 at oracle.com>
> <4CAB43A0.60001 at oracle.com> <4CACB80D.6060708 at oracle.com>
>
>
>
> Looks good for me.
>
> Vladimir
>
> Coleen Phillimore wrote:
>>
>> Can I get one more review?
>>
>> webrev athttp://cr.openjdk.java.net/~coleenp/6983240_2/
>>
>> Thanks,
>> Coleen
>>
>>
>>
>> On 10/05/10 11:26, Coleen Phillimore wrote:
>>>
>>> Thanks David - some comments inline...
>>>
>>> On 10/04/10 20:41, David Holmes wrote:
>>>> Hi Coleen,
>>>>
>>>> In os_solaris.cpp this comment should now refer to 2*BytesPerWord
>>> Okay.
>>>>
>>>> // Add in BytesPerWord times page size to account for VM stack during
>>>> // class initialization depending on 32 or 64 bit VM.
>>>>
>>>> That said this formulation (not your I know) is confusing. What does
>>>> bytesPerWord have to do with the amount of stack needed? Is this just
>>>> some weird way of getting twice the amount of stack on 64-bit as
>>>> 32-bit? Are the pages sizes even the same in that case?
>>> Yeah, I believe it's just to account for 64 vs. 32 bit. The page
>>> sizes are the same if 32 or 64 bit. I have
>>>>
>>>> Also in os_solaris.cpp isn't this guarantee always false:
>>>>
>>>> ! guarantee(os::Solaris::min_stack_allowed>= thr_min_stack(),
>>>> ! "need to increase min_stack_allowed");
>>> No, it doesn't assert, because in your next mail you found that
>>> thr_min_stack() is smaller than our min_stack_allowed. I could revert
>>> that change but min_stack_allowed() is for the VM to get initialized
>>> rather than this thr_min_stack() which is for the OS to initialize the
>>> thread. I would assume the latter is always smaller than the former
>>> or something is really wrong. Changing it back probably doesn't hurt
>>> anything.
>>>
>>> Thanks,
>>> Coleen
>>>>
>>>> AFAICS min_stack_allowed is set to one of these values:
>>>>
>>>> ./os_cpu/solaris_sparc/vm/os_solaris_sparc.cpp:size_t
>>>> os::Solaris::min_stack_allowed = 128*K;
>>>> ./os_cpu/solaris_sparc/vm/os_solaris_sparc.cpp:size_t
>>>> os::Solaris::min_stack_allowed = 96*K;
>>>> ./os_cpu/solaris_x86/vm/os_solaris_x86.cpp:size_t
>>>> os::Solaris::min_stack_allowed = 224*K;
>>>> ./os_cpu/solaris_x86/vm/os_solaris_x86.cpp:size_t
>>>> os::Solaris::min_stack_allowed = 64*K;
>>>>
>>>> but the manpage for thr_min_stack states:
>>>>
>>>> thr_min_stack() will return the unsigned int THR_MIN_STACK,
>>>> which is the minimum-allowable size for a thread's stack.
>>>>
>>>> In this implementation the default size for a user-thread's
>>>> stack is one mega-byte.
>>>>
>>>> 1MB> all the above. ???
>>>>
>>>> Cheers,
>>>> David
>>>>
>>>> Coleen Phillimore said the following on 10/05/10 08:45:
>>>>> Summary: min_stack_allowed is a compile time constant and
>>>>> Stack*Pages are settable
>>>>>
>>>>> Also stress tested various combinations of -Xss and
>>>>> -XX:StackShadowPages=n. This also fixes a bug
>>>>> 6346701: stack overflow in native method results in segfault, not a
>>>>> StackOverflowError
>>>>> or rather it fixes the observed SEGVs with different settings of
>>>>> -Xss and -XX:StackShadowPages in the evaluation. We were getting
>>>>> stack overflow before the stack overflow exception was initialized,
>>>>> causing infinite recusion trying to initialize it.
>>>>>
>>>>> Also fixed a random g++ compilation error.
>>>>>
>>>>> open webrev athttp://cr.openjdk.java.net/~coleenp/6983240/
>>>>> bug link athttp://bugs.sun.com/view_bug.do?bug_id=6983240
>>>>>
>>>>> Thanks,
>>>>> Coleen
>>>
>>
>
--
Dmitry Samersoff
J2SE Sustaining team, SPB04
* Give Rabbit time and he'll always get the answer ...
More information about the hotspot-runtime-dev
mailing list