#define XA_DEBUG
#include "test.h"
#include <time.h>
+#include <sys/resource.h>
#define module_init(x)
#define module_exit(x)
unsigned long xa_m, mt_m;
void *entry;
unsigned long i, max = 100000;
+ struct rusage sru, eru;
+ /* xarray first */
radix_tree_init();
DEFINE_XARRAY(xa);
entry = &xa;
- start = clock();
+ getrusage(RUSAGE_SELF, &sru);
for (i = 0; i <= max; i++) {
xa_store(&xa, i, entry, GFP_KERNEL);
}
- end = clock();
+ getrusage(RUSAGE_SELF, &eru);
+ start = sru.ru_utime.tv_usec;
+ end = eru.ru_utime.tv_usec;
for (i = 0; i <= max; i++) {
BUG_ON(entry != xa_load(&xa, i));
}
- /* xarray first */
+ rcu_barrier();
xa_t = ((double) (end - start)) / CLOCKS_PER_SEC;
xa_m = xa_get_alloc_size();
printk("xa %lu inserts: %fs using %luK in %d allocations\n",
maple_tree_init();
DEFINE_MTREE(mt);
- start = clock();
+ getrusage(RUSAGE_SELF, &sru);
for (i = 0; i <= max; i++) {
mtree_insert(&mt, i, entry, GFP_KERNEL);
}
- end = clock();
+ getrusage(RUSAGE_SELF, &eru);
+ start = sru.ru_utime.tv_usec;
+ end = eru.ru_utime.tv_usec;
for (i = 0; i <= max; i++) {
BUG_ON(entry != mtree_load(&mt, i));
}
- /* xarray first */
+ rcu_barrier();
mt_t = ((double) (end - start)) / CLOCKS_PER_SEC;
mt_m = mt_get_alloc_size();
printk("mt %lu inserts: %fs using %luK in %d allocations\n",
max, mt_t, mt_m/1024, nr_allocated);
mtree_destroy(&mt);
- printk(" Delta : %f (%f%%)\n", xa_t - mt_t, (xa_t - mt_t)/(xa_t + mt_t) * 100);
+ printk(" Delta : %f (%f%% of xa time) %ldK\n",
+ xa_t - mt_t, (mt_t - xa_t)/xa_t * 100,
+ (signed long)(xa_m - mt_m)/1024);
rcu_barrier();
- if (nr_allocated)
- printf("nr_allocated = %d\n", nr_allocated);
printk("Done\n");
return 0;
}