Hi, Use a monotonic clock for the elapsed time trial.
-- Scott Cheloha Index: bin/md5/md5.c =================================================================== RCS file: /cvs/src/bin/md5/md5.c,v retrieving revision 1.91 diff -u -p -r1.91 md5.c --- bin/md5/md5.c 22 May 2017 16:00:47 -0000 1.91 +++ bin/md5/md5.c 10 Sep 2017 19:29:05 -0000 @@ -750,7 +750,7 @@ void digest_time(struct hash_list *hl, int times) { struct hash_function *hf; - struct timeval start, stop, res; + struct timespec start, stop, res; union ANY_CTX context; u_int i; u_char data[TEST_BLOCK_LEN]; @@ -769,14 +769,14 @@ 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); + clock_gettime(CLOCK_MONOTONIC, &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); - elapsed = res.tv_sec + res.tv_usec / 1000000.0; + clock_gettime(CLOCK_MONOTONIC, &stop); + timespecsub(&stop, &start, &res); + elapsed = res.tv_sec + res.tv_nsec / 1000000000.0; (void)printf("\nDigest = %s\n", digest); (void)printf("Time = %f seconds\n", elapsed);