Thread time spikes
Damian Cieslicki
dcieslicki at yahoo.com
Wed Dec 29 18:47:07 PST 2004
Hi folks,
I just wonder about the time behavior of this simple
threaded program:
#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?
--
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
More information about the freebsd-threads
mailing list