Sunday July 19, 2009 After the surprise interest in the maximum number of processes on a system it seems rude not to try and see how many threads I can squeeze into a single process while I have access to a system where physical memory will not be the limiting factor. The expectation is that this will closely match the number of processes as each thread will have an LWP in the kernel which will in turn consume the segkp.
A slight modification to the forker program:
: exdev.eu FSS 62 $; cat thr_creater.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <thread.h>
int
main(int argc, char **argv)
{
pid_t pid;
int count=0;
while(count < (argc != 2 ? 100 : atoi(argv[1])) &&
(pid = thr_create(NULL, 0, (void * (*)(void *))pause,
NULL, THR_DETACHED, NULL)) != -1) {
if (pid == 0 ) {
/* Success, ) */
if (count % 1000 == 0)
printf("%d\n", count);
count++;
}
}
if (pid < 0)
perror("fork");
printf("%d\n", count);
pause();
}and this time it has to be built as a 64 bit program:
# make "CFLAGS=-m64 -mt" thr_creater #
Here is how it went:
$; ./thr_creater 1000000 0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 11000 12000 13000 14000 15000 ..... 782000 783000 784000
Here things have stopped and for some bizarre reason attaching a debugger to see what is going on does not seem to be a good idea. I had prstat running in another window and it reported:
2336 cg13442 7158M 7157M cpu73 0 0 1:42:59 1.6% thr_creater/784970
Which is just a few more threads than I got processes (784956) when running in multi user. However at this point the system is pretty much a warm brick as if I exit any process thr_creater hoovers up the process so I can create no more. Fortunately I had realized this would happen and had some sleep(1) processes running so I could pause the thr_creater and then kill one of the sleeps to allow me to run a command:
$; ps -o pid,vsz,rss,nlwp,comm -p 2336 PID VSZ RSS NLWP COMMAND 2336 7329704 7329248 784972 ./thr_creater
as you can see it managed to get another two threads created since the prstat exited.
Except where otherwise noted, this site is
licensed under a Creative Commons License 2.0
This is a personal weblog, I do not speak for my employer.