Date: Wed, 16 May 2001 18:35:42 +1000 (EST) From: Bruce Evans <bde@zeta.org.au> To: Matt Dillon <dillon@earth.backplane.com> Cc: Terry Lambert <tlambert2@mindspring.com>, dave <dleimbac@earthlink.net>, freebsd-questions@FreeBSD.ORG, arch@FreeBSD.ORG Subject: Re: Gettimeofday Again... Message-ID: <Pine.BSF.4.21.0105161759410.8173-100000@besplex.bde.org> In-Reply-To: <200105151737.f4FHbBL55271@earth.backplane.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 15 May 2001, Matt Dillon wrote: > Also, using gettimeofday() is a ridiculous way to measure fine grained > time billions of times in production code. I mean, sure, it works... > but getitimer() is about 5 times faster. This seems unlikely, since most of the overhead for both is in the syscall. Actual testing shows that getitimer() is a whole 10% faster on a Celeron 5.5 * 95 MHz: $ sysctl kern.timecounter.hardware kern.timecounter.hardware: TSC $ sysctl machdep.tsc_freq machdep.tsc_freq: 522493830 $ cat z.c #include <sys/types.h> #include <sys/time.h> #include <err.h> #include <stdlib.h> int main(void) { struct timeval tv; int i; for (i = 0; i < 1000000; i++) if (gettimeofday(&tv, NULL) != 0) err(1, "gettimeofday"); exit(0); } $ cc -O -o z z.c $ time ./z 2.04 real 0.47 user 1.57 sys $ cat q.c #include <sys/types.h> #include <sys/time.h> #include <err.h> #include <stdlib.h> int main(void) { struct itimerval it; int i; it.it_interval.tv_sec = 0; it.it_interval.tv_usec = 0; it.it_value.tv_sec = 100; it.it_value.tv_usec = 0; if (setitimer(ITIMER_REAL, &it, NULL) != 0) err(1, "setitimer"); for (i = 0; i < 1000000; i++) if (getitimer(ITIMER_REAL, &it) != 0) err(1, "getitimer"); exit(0); } $ cc -O -o q q.c $ time ./q 1.84 real 0.46 user 1.37 sys This is for my version of -current, which has a few pessimizations in microtime(). Plain -current would be a few nsec faster. OTOH, gettimeofday() may be significantly slower than getitimer() if the hardware timecounter is slow: # sysctl -w kern.timecounter.hardware=i8254 $ sysctl kern.timecounter.hardware kern.timecounter.hardware: i8254 $ time ./z 5.06 real 0.44 user 4.60 sys Bruce To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0105161759410.8173-100000>