-static size_t normalize(const struct timeval *start,
- const struct timeval *stop,
+static size_t normalize(const struct timeabs *start,
+ const struct timeabs *stop,
- struct timeval diff;
-
- timersub(stop, start, &diff);
-
- /* Floating point is more accurate here. */
- return (double)(diff.tv_sec * 1000000 + diff.tv_usec)
- / num * 1000;
+ return time_to_nsec(time_divide(time_between(*stop, *start), num));
- jmap_obj_add(jmap, i, objs[i].self);
- gettimeofday(&stop, NULL);
+ jmap_add(jmap, i, objs[i].self);
+ stop = time_now();
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Initial lookup (match): ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Initial lookup (match): ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Initial lookup (miss): ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Initial lookup (miss): ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
/* Lookups in order are very cache-friendly for judy; try random */
printf("Initial lookup (random): ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
/* Lookups in order are very cache-friendly for judy; try random */
printf("Initial lookup (random): ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Initial delete all: ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Initial delete all: ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Initial re-inserting: ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Initial re-inserting: ");
fflush(stdout);
- jmap_obj_add(jmap, i, objs[i].self);
- gettimeofday(&stop, NULL);
+ jmap_add(jmap, i, objs[i].self);
+ stop = time_now();
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Deleting first half: ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Deleting first half: ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Adding (a different) half: ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Adding (a different) half: ");
fflush(stdout);
- jmap_obj_add(jmap, num+i, objs[i].self);
- gettimeofday(&stop, NULL);
+ jmap_add(jmap, num+i, objs[i].self);
+ stop = time_now();
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Lookup after half-change (match): ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Lookup after half-change (match): ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Lookup after half-change(miss): ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Lookup after half-change(miss): ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
/* Hashtables with delete markers can fill with markers over time.
* so do some changes to see how it operates in long-term. */
printf("Details: churning first time\n");
for (i = 1; i < num; i+=2) {
printf(" %zu ns\n", normalize(&start, &stop, num));
/* Hashtables with delete markers can fill with markers over time.
* so do some changes to see how it operates in long-term. */
printf("Details: churning first time\n");
for (i = 1; i < num; i+=2) {
}
for (i = 1; i < 5; i++) {
printf("Churning %s time: ",
}
for (i = 1; i < 5; i++) {
printf("Churning %s time: ",
printf(" %zu ns\n", normalize(&start, &stop, num));
}
/* Spread out the keys more to try to make it harder. */
printf("Details: reinserting with spread\n");
for (i = 0; i < num; i++) {
printf(" %zu ns\n", normalize(&start, &stop, num));
}
/* Spread out the keys more to try to make it harder. */
printf("Details: reinserting with spread\n");
for (i = 0; i < num; i++) {
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Lookup after churn & spread (miss): ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Lookup after churn & spread (miss): ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Lookup after churn & spread (random): ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Lookup after churn & spread (random): ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Lookup after churn & spread (half-random): ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Lookup after churn & spread (half-random): ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Deleting half after churn & spread: ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Deleting half after churn & spread: ");
fflush(stdout);
- jmap_obj_del(jmap, num * 5 + i * 9);
- gettimeofday(&stop, NULL);
+ jmap_del(jmap, num * 5 + i * 9);
+ stop = time_now();
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Adding (a different) half after churn & spread: ");
fflush(stdout);
printf(" %zu ns\n", normalize(&start, &stop, num));
printf("Adding (a different) half after churn & spread: ");
fflush(stdout);
- jmap_obj_add(jmap, num * 6 + i * 9, objs[i].self);
- gettimeofday(&stop, NULL);
+ jmap_add(jmap, num * 6 + i * 9, objs[i].self);
+ stop = time_now();
printf(" %zu ns\n", normalize(&start, &stop, num));
printf(" %zu ns\n", normalize(&start, &stop, num));