From owner-freebsd-threads@FreeBSD.ORG Thu Dec 30 02:47:07 2004 Return-Path: Delivered-To: freebsd-threads@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 136D316A4CE for ; Thu, 30 Dec 2004 02:47:07 +0000 (GMT) Received: from web52401.mail.yahoo.com (web52401.mail.yahoo.com [206.190.39.109]) by mx1.FreeBSD.org (Postfix) with SMTP id A038043D46 for ; Thu, 30 Dec 2004 02:47:06 +0000 (GMT) (envelope-from dcieslicki@yahoo.com) Received: (qmail 94881 invoked by uid 60001); 30 Dec 2004 02:47:06 -0000 Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; b=AR3pI4A6YF4a7HvKr3ReEYvndBrv4NafDeb94yLruRq/K/Qu4R+IavIdNlJEiEB7lCwmnOvuguqzqS0bydgfi6YTjhNKceCxIKF6ADbulhYeHKNcAQdesmT/XNUVa1Xf4nnS5wDaVEXrgOkcOBDxJfGqvVRCeLdM51T440wYz9M= ; Message-ID: <20041230024706.94879.qmail@web52401.mail.yahoo.com> Received: from [129.210.209.28] by web52401.mail.yahoo.com via HTTP; Wed, 29 Dec 2004 18:47:06 PST Date: Wed, 29 Dec 2004 18:47:06 -0800 (PST) From: Damian Cieslicki To: freebsd-threads@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Subject: Thread time spikes X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Dec 2004 02:47:07 -0000 Hi folks, I just wonder about the time behavior of this simple threaded program: #include /* threading */ #include /* printf */ #include /* 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