Re: Thread stack allocation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 9/10/2012 11:45 AM, John David Anglin wrote:
> On 9/10/2012 11:13 AM, Carlos O'Donell wrote:
>> On 9/9/2012 6:24 PM, John David Anglin wrote:
>>> >On 9-Sep-12, at 4:23 PM, John David Anglin wrote:
>>> >
>>>> >>It seems to me this must be a kernel bug:
>>> >
>>> >Nope, it's a problem with guard page allocation in openjdk.
>>> >It assumes stack grows down.
>> Yes, that's wrong:-)
>>
>> If you allocate your own stacks then glibc can't setup guard
>> pages for you since it violates some POSIX constraints.
> I need to study the situation in more detail but what I found is openjdk
> initially allocates a fairly large stack with pthread_attr_setstacksize,
> then it mucks with this region setting up guard pages, etc.  This goes
> seriously wrong on parisc and the initial thread is only left with a stack
> which is 4096 bytes.
> 
> I disabled guard pages and the build went a lot further, but died again
> due to what appears to be another stack related issue.  If this package
> is to work again, it's going to need significant porting to fix the stack
> handling.  I think there was a parisc patch at one time but I think it
> has been removed...
> 
> If I understand correctly, we have on parisc a guard region followed
> by TLS stuff at the top of stack.  I assume that the stack size allocated
> with pthread_attr_setstacksize is fully available to the user.

No. This is what the glibc bug is about and it's what I'm fixing right now.

No matter what you do glibc allocates static tls, guard pages, and several
other things *from* the stack size you set.

This is wrong for many reasons, and we're fixing stack size accounting
upstream. Until the fix is in, which would be ~2.17 timeframe this isn't
going to get better.

If you have a small-ish stack, with lots of static tls variables, then you
loose and need to manually allocate your own stack of the appropriate size
to hold everything you need (not that there is any API to figure that out)
and do it all manually.

After the fix goes in the size you request via pthread_attr_setstacksize
will be the real size you have access to use and proper stack analysis
tools will be useful again :-)

Cheers,
Carlos.

--
To unsubscribe from this list: send the line "unsubscribe linux-parisc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux SoC]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux