seg fault on kse_release () (fwd)
Yan Yu
yanyu at CS.UCLA.EDU
Tue Jan 25 10:31:09 PST 2005
Hi, thanks a LOT for looking into this.
yes, that is exactly my output before the SEG fault happens (btw, i add
"if (p)" before
"p[id]++ ", the prob remains..
what confuses me is that, if the system is out of memory, then i should
see the error returned from pthread_create() or calloc(), but not SEG
fault, or i must have missed something?
Thanks,
yan
On Tue, 25 Jan 2005, Jose Hidalgo Herrera wrote:
> I ran it into:
> 4.11-STABLE FreeBSD Wed Jan 19 15:23:33 CST 2005
> What you find in
> http://www1.cr.freebsd.org/~jose/stress.tgz
> is the output of:
> ktrace ./a.out > stress.txt
>
>
> On Mon, 2005-01-24 at 14:27 -0800, Yan Yu wrote:
> > Hi, all, I have a newbie Q:
> > I am trying to use creating large number of threads and allocting
> > memory to stress the system.
> > My user program causes SEG fault in the kernel code, kse_release () in
> > kern_kse.c.
> > (it SEG fault before the system can be stressed;(
> >
> > the stack when the SEG fault happens are:
> > #0 0x08064e54 in kse_release ()
> > #1 0x080531c4 in kse_sched_single ()
> > #2 0x00000000 in ?? ()
> >
> > My simple program is:
> > I have a simple function to create threads:
> >
> > #define NUM_THREADS 5000
> > #define THREADS_IN_ONE_PROCESS 5
> > #define BSIZE 500000
> > static int cc;
> >
> > void CreateThread(int n)
> > {
> > assert( n <= NUM_THREADS );
> > pthread_t threads[NUM_THREADS];
> > int rc, t;
> > for(t=0;t < n;t++){
> > printf("#%d: Creating thread %d\n", cc, t);
> > cc++;
> > rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
> > if (rc){
> > printf("ERROR; return code from pthread_create() is %d\n", rc);
> > }
> > }
> >
> > unsigned long id;
> > char * p = (char *) calloc(BSIZE, sizeof(char) );
> > if ( p == NULL )
> > {
> > fprintf(stderr, "calloc error\n");
> > }
> > while (1)
> > {
> > while (BSIZE <= (id = rand() / (RAND_MAX/BSIZE)));
> > p[id] ++;
> > }
> > }
> >
> > void *PrintHello(void *threadid)
> > {
> > printf("\n%d: Hello World!\n", threadid);
> > CreateThread(THREADS_IN_ONE_PROCESS);
> > pthread_exit(NULL);
> > }
> >
> > int main (int argc, char *argv[])
> > {
> > CreateThread(THREADS_IN_ONE_PROCESS);
> > }
> >
> > The SEG fault happens after creating nearly 5000 threads.
> > and I use the default pthread.h coming w/ freeBSD 5.3
> > #define PTHREAD_KEYS_MAX 256
> > #define PTHREAD_STACK_MIN (1 << 22)
> > #define PTHREAD_THREADS_MAX ULONG_MAX
> >
> >
> > Any idea on what might happen?
> >
> > Many Thanks!
> > yan
> > _______________________________________________
> > freebsd-hackers at freebsd.org mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
>
More information about the freebsd-hackers
mailing list