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

Re: Maximum threads reached on mips and mipsel buildds?



Hi,

[moved to debian-mips@l.d.o]

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

Attachment: signature.asc
Description: OpenPGP digital signature


Reply to: