On Mon, 11 Sep 2017 16:19:02 +0200, Christian Weisgerber wrote: > FreeBSD uses getrusage() to fetch the user time used. I think that > makes more sense. > > https://svnweb.freebsd.org/base/head/sbin/md5/md5.c?revision=307658&view=mark > up#l293
Indeed. There's no point in including system time in the measurement. - todd Index: bin/md5/md5.c =================================================================== RCS file: /cvs/src/bin/md5/md5.c,v retrieving revision 1.91 diff -u -p -u -r1.91 md5.c --- bin/md5/md5.c 22 May 2017 16:00:47 -0000 1.91 +++ bin/md5/md5.c 11 Sep 2017 15:48:29 -0000 @@ -24,6 +24,7 @@ #include <sys/types.h> #include <sys/time.h> #include <sys/queue.h> +#include <sys/resource.h> #include <netinet/in.h> #include <ctype.h> #include <err.h> @@ -750,7 +751,8 @@ void digest_time(struct hash_list *hl, int times) { struct hash_function *hf; - struct timeval start, stop, res; + struct rusage start, stop; + struct timeval res; union ANY_CTX context; u_int i; u_char data[TEST_BLOCK_LEN]; @@ -769,13 +771,13 @@ digest_time(struct hash_list *hl, int ti for (i = 0; i < TEST_BLOCK_LEN; i++) data[i] = (u_char)(i & 0xff); - gettimeofday(&start, NULL); + getrusage(RUSAGE_SELF, &start); hf->init(&context); for (i = 0; i < count; i++) hf->update(&context, data, (size_t)TEST_BLOCK_LEN); digest_end(hf, &context, digest, sizeof(digest), hf->base64); - gettimeofday(&stop, NULL); - timersub(&stop, &start, &res); + getrusage(RUSAGE_SELF, &stop); + timersub(&stop.ru_utime, &start.ru_utime, &res); elapsed = res.tv_sec + res.tv_usec / 1000000.0; (void)printf("\nDigest = %s\n", digest);