Date: Thu, 30 Dec 2004 09:47:50 +0200 From: Petri Helenius <pete@he.iki.fi> To: Damian Cieslicki <dcieslicki@yahoo.com> Cc: freebsd-threads@freebsd.org Subject: Re: Thread time spikes Message-ID: <41D3B2A6.4090307@he.iki.fi> In-Reply-To: <20041230024706.94879.qmail@web52401.mail.yahoo.com> References: <20041230024706.94879.qmail@web52401.mail.yahoo.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Damian Cieslicki wrote: >Hi folks, > >I just wonder about the time behavior of this simple >threaded program: > > How many CPUs on the box? Pete > >#include <pthread.h> /* threading */ >#include <stdio.h> /* printf */ >#include <stdlib.h> /* exit */ > >#define MILLION 1000000L >#define THOUSAND 1000L > > >/* prototypes */ >void * doit(void *arg); > > >/* >************************************************************************* >*/ > >int main (int argc, char **argv){ > > long duration1; > pthread_t pthread_id; > struct timespec tv1start, tv1end; > > > clock_gettime(CLOCK_REALTIME, &tv1start); // real > > /* thread ... */ > pthread_create(&pthread_id, NULL, doit, NULL); > pthread_join(pthread_id, NULL); > > /* vs function call */ > // doit(NULL); > > clock_gettime(CLOCK_REALTIME, &tv1end); > > duration1 = MILLION*(tv1end.tv_sec - >tv1start.tv_sec) + > (tv1end.tv_nsec - tv1start.tv_nsec)/THOUSAND; > > > printf("%ld\n", duration1); > > > exit(0); >} > > >/* >************************************************************************* >*/ > > >void* doit(void *arg){ > > int k; > > k=42; /* heavy computation */ > > return(NULL); > >} > >/* >************************************************************************* >*/ > > >compiler options: gcc -D_THREAD_SAFE -g -Wall >-pthread threadspikes.c >-o threadspikes > >os: freebsd 5.2, generic kernel > >hw: Pentium III 500 Mhz. > >load: no real computation, just the standard daemons >and x window are >running. > > > >Why does the threaded program take each 10th time much >longer?: Why I get these "time spikes" ? > >359 >392 >365 >379 >374 >2474 >370 >363 >365 >376 >364 >364 >397 >378 >393 >389 >370 >365 >3221 >366 >377 > > > >replacing the thread with a function call reduces the >number of spikes >drastically but they still do occur (even more >drastically): > >: >3 >3 >3 >3 >3 >3 >3 >19021 > > >I assume there is a global re-scheduling after >pthread_create and sometimes a totally different >process (like sendmail) gets chosen. But even >nice -n -n19 doesn't help. > >Is there a way to get deterministic results? > > > > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?41D3B2A6.4090307>