RFR: 8225035: Thread stack size issue caused by large TLS size

Thomas Stüfe thomas.stuefe at gmail.com
Fri Jun 28 05:06:28 UTC 2019


Hi Jiangli,

http://cr.openjdk.java.net/~jiangli/8225035/webrev.03/make/test/JtregNativeHotspot.gmk.udiff.html

Do we really need -lpthread?

http://cr.openjdk.java.net/~jiangli/8225035/webrev.03/src/hotspot/os/linux/os_linux.cpp.udiff.html

+    tls_size = minstack_size - os::vm_page_size() - PTHREAD_STACK_MIN;
+    assert(tls_size > 0, "unexpected size");

tls_size is size_t is unsigned, so I do not think this works as intended.
You may need to do something like:

if (tls_size > os::vm_page_size() + PTHREAD_STACK_MIN) {
   tls_size -= os::vm_page_size() - PTHREAD_STACK_MIN;
}

--

+  // Configure glibc guard page.
+  pthread_attr_setguardsize(&attr, guard_size);

Can you add a "must happen before calling get_static_tls_area_size()" to
the comment ?

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

All the rest looks good. Thank you for the comments, they are well written.

Cheers, Thomas

On Fri, Jun 28, 2019 at 5:58 AM Jiangli Zhou <jianglizhou at google.com> wrote:

> Updated webrev:
> http://cr.openjdk.java.net/~jiangli/8225035/webrev.03/
>
> Thanks for everyone's contribution on carving out the current workaround!
>
> Best regards,
> Jiangli
>
> On Thu, Jun 27, 2019 at 11:42 AM Jiangli Zhou <jianglizhou at google.com>
> wrote:
> >
> > Thank you Thomas and David! Glad to see that we are converging on an
> > acceptable approach here. I'll try to factor in all the latest inputs
> > from everyone and send out a new update.
> >
> > Thanks and best regards,
> > Jiangli
> >
> > On Thu, Jun 27, 2019 at 11:13 AM David Holmes <david.holmes at oracle.com>
> wrote:
> > >
> > > Trimming ....
> > >
> > > On 27/06/2019 12:35 pm, Jiangli Zhou wrote:
> > > > On Thu, Jun 27, 2019 at 9:23 AM Florian Weimer <fweimer at redhat.com>
> wrote:
> > > >> I think you can handle the guard size in this way:
> > > >>
> > > >>    pthread_attr_setguardsize(&attr, guard_size);
> > > >>
> > > >>    size_t stack_adjust_size = 0;
> > > >>    if (AdjustStackSizeForTLS) {
> > > >>      size_t minstack_size = get_minstack(&attr);
> > > >>      size_t tls_size = minstack_size - vm_page_size() -
> PTHREAD_STACK_MIN;
> > > >>      // In glibc before 2.27, tls_size still includes guard_size.
> > > >>      // In glibc 2.27 and later, guard_size is automatically
> > > >>      // added to the stack size by pthread_create.
> > > >>      // In both cases, the guard size is taken into account.
> > > >>      stack_adjust_size += tls_size;
> > > >>    } else {
> > > >>      stack_adjust_size += guard_size;
> > > >>    }
> > > >
> > > > Is the vm_page_size() counted for the dl_pagesize? As long as others
> > > > are okay with the above suggested adjustment, it looks good to me.
> > > > Thomas, David and others, any objection?
> > >
> > > I find the above acceptable. I've been waiting for the dust to settle.
> > >
> > > Thanks,
> > > David
> > >
> > > > Thanks and best regards,
> > > > Jiangli
> > > >>
> > > >> Thanks,
> > > >> Florian
>


More information about the hotspot-runtime-dev mailing list