2 * This program can be used to calibrate the clock reading jitter of a
3 * particular CPU and operating system. It first tickles every element
4 * of an array, in order to force pages into memory, then repeatedly calls
5 * gettimeofday() and, finally, writes out the time values for later
6 * analysis. From this you can determine the jitter and if the clock ever
14 #include "ntp_types.h"
19 #define NBUF 100001 /* size of basic histogram */
20 #define NSRT 20000 /* size of overflow histogram */
21 #define NCNT (600 * 1000000) /* sample interval (us) */
23 int col P((long *, long *));
31 struct timeval ts, tr, tp;
34 long t, u, v, w, gtod[NBUF], ovfl[NSRT];
37 * Force pages into memory
39 for (i = 0; i < NBUF; i++)
41 for (i = 0; i < NSRT; i++)
48 gettimeofday(&ts, &tzp);
49 t = ts.tv_sec * 1000000 + ts.tv_usec;
52 gettimeofday(&tr, &tzp);
53 u = tr.tv_sec * 1000000 + tr.tv_usec;
59 printf("error <= 0 %ld %d %d, %d %d\n", w, ts.tv_sec,
60 ts.tv_usec, tr.tv_sec, tr.tv_usec);
62 } else if (w > NBUF - 1) {
76 for (i = 0; i < NBUF - 1; i++) {
78 printf("%ld %ld\n", i, gtod[i]);
83 #ifdef QSORT_USES_VOID_P
88 ovfl, (size_t)n, sizeof(long), col);
91 for (i = 0; i < n; i++) {
94 printf("%ld %ld\n", w, j);
101 printf("%ld %ld\n", w, j);