256 threads maximum?

Panagiotis Issaris panagiotis.issaris at mech.kuleuven.ac.be
Thu Mar 4 19:54:40 UTC 2004


Hi,

The following simple testprogram tries to create the number of threads 
given as argv[1].
When I'm using a 2.6.3 kernel with glibc 2.3.2/NPTL 0.60, the maximum 
number of threads this application can create is 255. With any number 
higher it complains about memory allocation failing.

./thrs 255
Creating 255 threads

./thrs 256
pthread_create problem: Cannot allocate memory
                                         ^^^ perror msg

When using LinuxThreads 0.10 on the same system, same binary it works 
just fine
LD_ASSUME_KERNEL=2.4.1 ./thrs 256
Creating 256 threads

For LinuxThreads the maximum number of threads appears to be 1532:
LD_ASSUME_KERNEL=2.4.1 ./thrs 1532
Creating 1532 threads

LD_ASSUME_KERNEL=2.4.1 ./thrs 1533
Creating 1532 threads
pthread_create problem: Success

Other then the strange error message, LinuxThreads seems to work.

What am I doing wrong? I know that NPTL can do a lot better then this, 
since I have been reading reports on NPTL creating thousands of threads 
( I think I recall someone stating creating 300000 threads from one 
process). Where does the 255 limit come from?


Thanks for any reply.

With friendly regards,
Takis


#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

void* foo( void*p )
{
    return 0;
}

int main( int argc, char *argv[] )
{
    pthread_t * p;
    int i, nr = atoi( argv[ 1 ] );

    p = ( pthread_t* ) calloc( nr, sizeof( pthread_t ) );
    if ( p == NULL )
    {
        perror( "not enough mem for allocating thread structs in 
userspace" );
        exit( 1 );
    }

    printf( "Creating %d threads\n", nr );
    for ( i = 0; i < nr; i++ )
        if ( pthread_create( &p[ i ], 0, foo, 0 ) != 0 )
        {
            perror( "pthread_create problem" );
            exit( 1 );
        }
    for ( i = 0; i < nr; i++ )
        if ( p[ i ] != 0 )
            pthread_join( p[ i ], 0 );
    return 0;
}



With friendly regards,
Takis





More information about the Phil-list mailing list