#include #include #include #include #include #include #include void get_start_time(struct timeval *tv) { do_gettimeofday(tv); } void account_time(struct timeval *stv, struct timeval *etv, int loops) { do_gettimeofday(etv); if (loops) { while (etv->tv_usec < stv->tv_usec) { etv->tv_sec--; etv->tv_usec += 1000000; } etv->tv_usec -= stv->tv_usec; etv->tv_sec -= stv->tv_sec; while (etv->tv_usec > 1000000) { etv->tv_usec -= 1000000; etv->tv_sec++; } printk("\tTotal loops: %d\n", loops); printk("\tTotal time: %lds%ldus\n", etv->tv_sec, etv->tv_usec); } else printk("Didn't do any loop!\n"); } char *str; int init_module(void) { struct timeval stv, etv; int loops, i; str = kmalloc(1000, GFP_KERNEL); if (!str) return 0; loops = i = 5000000; printk("memcpy:\n"); get_start_time(&stv); while (i--) memcpy(str + 400, str, 500); account_time(&stv, &etv, loops); i = loops; printk("\nmemmove:\n"); get_start_time(&stv); while (i--) memmove(str + 400, str, 500); account_time(&stv, &etv, loops); return 0; } void cleanup_module(void) { kfree(str); } MODULE_LICENSE("GPL");