--- loadgen.c.orig 2009-02-13 12:21:48.000000000 +0200 +++ loadgen.c 2009-12-01 11:52:10.000000000 +0200 @@ -731,6 +731,19 @@ out: pthread_exit((void *)(long)rc); } +/* + * PTHREAD_STACK_MIN is 16K minimal stack for threads. This + * is stack consumed by one thread, which executes NULL procedure. + * We need some more here and 20k stack for one client thread + * is enough to not overflow. In same time it does not consume + * a lot of memory for large number of threads. + * + * 20K virtual clients will only consume 320M + 400M. Still to + * create this number of virtual clients we need to fix 8192 + * OBDs limit. + */ +#define CLIENT_THREAD_STACK_SIZE (PTHREAD_STACK_MIN + (20 * 1024)) + static int loadgen_start_clients(int argc, char **argv) { int rc = 0, i, numt; @@ -756,7 +769,7 @@ static int loadgen_start_clients(int arg cmdname, rc, strerror(errno)); return -errno; } - pthread_attr_setstacksize (&attr, PTHREAD_STACK_MIN); + pthread_attr_setstacksize (&attr, CLIENT_THREAD_STACK_SIZE); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); numt += live_threads;