#include __u8 bitmaps[11][27] = { {1, 123, 2, 3, 127, 200, 100, 123, 23, 13, 78, 42, 123, 50, 123, 56, 198, 0, 58, 22, 19, 123, 23, 13, 78, 42, 123}, {2, 0, 0, 0, 0, 0, 0, 123, 23, 13, 78, 42, 123, 50, 123, 56, 198, 0, 58, 22, 19, 23, 123, 2, 34, 123, 12}, {4, 0, 0, 0, 0, 0, 0, 123, 56, 198, 0, 58, 22, 19, 123, 23, 13, 78, 42, 123, 0, 0, 0, 34, 45, 29}, {8, 0, 0, 0, 0, 0, 0, 1, 123, 2, 3, 127, 200, 100, 123, 23, 13, 78, 42, 123, 50, 0, 0, 0, 0, 0, 0}, {16, 0, 0, 0, 0, 0, 0, 8, 78, 0, 0, 23, 0, 213, 0, 12, 0, 45, 0, 109, 111, 231, 11, 11, 88, 77, 99}, {32, 0, 0, 0, 0, 0, 0, 8, 78, 0, 0, 23, 0, 213, 0, 12, 0, 45, 0, 109, 111, 231, 11, 11, 88, 77, 99}, {64, 0, 0, 0, 0, 0, 0, 8, 78, 0, 0, 23, 0, 213, 0, 12, 0, 45, 0, 109, 111, 0, 0, 0, 0, 0, 0}, {255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, {170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170}, {255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255}, {15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15} }; uint64_t rdtsc(void) { uint32_t lo, hi; __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi)); return (uint64_t)hi << 32 | lo; } static void test_bit_search_speed(void) { unsigned long flags; uint64_t tsc_s, tsc_diff; int i, j, pos; const void *bit_addr; local_irq_save(flags); preempt_disable(); printk("find_next_bit_le test_bit_le\n"); for (i = 0; i < 11; i++) { bit_addr = &bitmaps[i]; pos = 0; tsc_s = rdtsc(); for (j = 0; j < 1000; j++, pos = 0) while (pos < 216) pos = find_next_bit_le(bit_addr, 216, pos) + 1; mb(); tsc_diff = (rdtsc() - tsc_s)/1000; printk("%8llu", tsc_diff); pos = 0; tsc_s = rdtsc(); for (j = 0; j < 1000; j++, pos = 0) while (pos < 216) test_bit_le(pos++, bit_addr); mb(); tsc_diff = (rdtsc() - tsc_s)/1000; printk("%20llu \n", tsc_diff); } preempt_enable(); local_irq_restore(flags); } static int __init start_test(void) { test_bit_search_speed(); return 0; } static void __exit exit_test(void) { } module_init(start_test); module_exit(exit_test); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Gu Zheng");