Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 Dec 2004 18:47:06 -0800 (PST)
From:      Damian Cieslicki <dcieslicki@yahoo.com>
To:        freebsd-threads@freebsd.org
Subject:   Thread time spikes
Message-ID:  <20041230024706.94879.qmail@web52401.mail.yahoo.com>

next in thread | raw e-mail | index | archive | help
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 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20041230024706.94879.qmail>