Re: Maximum threads reached on mips and mipsel buildds?

James Cowgill <[email protected]>
Newsgroups gmane.linux.debian.ports.mips
Message-ID <[email protected]>
Hi,

[moved to [email protected]]

On 24/07/17 22:48, Steven Capper wrote:
> Hi,
> I've been tweaking my tbb package for Buster, and have upgraded to
> latest upstream release and am closing off a few bugs.
> 
> One thing I noticed is a strange failure mode for 2017~U7-2
> (targetting sid) on the mips and mipsel buildds. Logs at:
> https://buildd.debian.org/status/fetch.php?pkg=tbb&arch=mips&ver=2017~U7-2&stamp=1500818436&raw=0
> and,
> https://buildd.debian.org/status/fetch.php?pkg=tbb&arch=mipsel&ver=2017~U7-2&stamp=1500865997&raw=0
> 
> (mips64el appears to work fine)
> 
> The failure mode is:
> 
> ./test_malloc_pools.exe  1:4
> Call stack info (6):
> ./test_malloc_pools.exe(_Z16print_call_stackv+0x8c)[0x5565ea78]
> ./test_malloc_pools.exe(_Z11ReportErrorPKciS0_S0_+0x40)[0x5565ec1c]
> ./test_malloc_pools.exe(_Z19TestFixedBufferPoolv+0x828)[0x55660b60]
> ./test_malloc_pools.exe(_Z8TestMainv+0x64)[0x55662af8]
> ./test_malloc_pools.exe(main+0x98)[0x5565e2d8]
> /lib/mipsel-linux-gnu/libc.so.6(__libc_start_main+0x108)[0x778ed4c8]
> ../../src/test/harness.h:530, assertion 0==status: NativeParallelFor:
> pthread_create failed

Running it in strace gives:
> clone(child_stack=0x7f045ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f0464f8, tls=0x7f04d920, child_tidptr=0x7f0464f8) = 16753
> mmap2(NULL, 4194304, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f047000
> mprotect(0x7f047000, 4096, PROT_NONE)   = 0
> clone(child_stack=0x7f445ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f4464f8, tls=0x7f44d920, child_tidptr=0x7f4464f8) = 16754
> mmap2(NULL, 4194304, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f447000
> mprotect(0x7f447000, 4096, PROT_NONE)   = 0
> clone(child_stack=0x7f845ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f8464f8, tls=0x7f84d920, child_tidptr=0x7f8464f8) = 16755
> mmap2(NULL, 4194304, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = -1 ENOMEM (Cannot allocate memory)

Which means it probably run out of virtual memory to allocate any more
stacks. Since 32-bit mips is limited to 2GB of virtual memory and the
default stack size is 4MB, this places an upper limit on the number of
threads per process at 512. In practice it will be smaller than that
since we have to store the heap, executables etc.

James
signature.asc (application/pgp-signature, 833 B)
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEE+Ixt5DaZ6POztUwQx/FnbeotAe8FAll3WxEACgkQx/Fnbeot
Ae/5Cg/9EI9PLCyQmFNs1Cn6UqcM5JrcqlmIWOZftIkqAXUB5UoHAQGNB2Jbkt6F
u14KkNdPG8D5ETY27TETfQav/4iJhjr+R1KpqVYJru0R0JxrJRvVwkP0DlQHfMe6
PE8giMrFrkTy3KNxdt1yO9JkmUj5RZQc7H+y2Ti+Q7wGKl3/Lmq8Lbv05FUHJAnx
RnnMilywJeEaS1HXOSRluDBfq60NseVcv6bCnqXKVZ8bbvMKxLEe+7diRKxSookU
5SIi7uU3w1RssqGWMO4CQOi0Lk8e5X+RFC4TTP3GvGrhxF5/NmKqLgdpEC4aheHW
e5wiLS3rbDwjsvHbxThoYbUO89Sh66AI8nVi4Z2qFBFBMYxzudaZCe7S9zQW9fXm
wOSBx6xWqg8CsYXjEmByLO1o0HjflJVQXwjPxT3GM0/dlZC7jtfiy4k5j1yAF0Zl
yOKI3z0p7qaP3zvfX0J+R4ENaZpicmEUjLfgcWRIpGPsheZQaqvFWscROXWixbc6
4kG6iJq+mOGXLUITo92jYuMxR1S9U6XNJbQyQrjLV9cHULEmo/umO8MzPumPD8mL
ddRQorn9J60HdNbvsMjuAd6bj0XNCNhmPVmufdK1hxs1wE0G22CZbkgJvAnfc95o
LBL/jI08Ua7LbkC9/nKR6kBEGUdnbQObVcPpsZpErlR+Dz61lOE=
=rI/R
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.