Skip site navigation (1)Skip section navigation (2)
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>