Thread time spikes
Petri Helenius
pete at he.iki.fi
Wed Dec 29 23:47:53 PST 2004
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?
>
>
>
>
>
More information about the freebsd-threads
mailing list