应用程序:
添加头文件(有的不加也可)
#include <sys/time.h>
struct timeval tBegin, tEnd;
gettimeofday(&tBegin, NULL);
{
执行的函数
}
gettimeofday(&tEnd, NULL);
long deltaTime = 1000000L * (tEnd.tv_sec - tBegin.tv_sec ) + (tEnd.tv_usec - tBegin.tv_usec);
printf(“Time spent: %ldus\n”, deltaTime);
内核kernel:
-
jiffies记录时间差的特点
使用jiffies较为简单,jiffies变量可以看成一个只读的跟随系统运行时间不断增长的计数器。他在<linux/juiffies.h>文件中定义。使用时可以简单的使用如下方法。#include <linux/jiffies.h>
u32 j1, j2, diff, diff_ms;
j1 = jiffies; //记录当前时间的jiffies
{
执行函数
}
j2 = jiffies; //记录令以时刻的jiffies值
diff = j2 - j1;//计算jiffies的差值diff_ms = jiffies_to_msecs(diff);//将差值转化为毫秒值
使用jiffies的方法较为简单,但是缺点是精确度不够。 -
do_gettimeofday()函数
do_gettimeofday()函数是gettimeofday()系统调用在内核的实现。该函数需要传入结构体timeval指针。
struct timeval
{
__time_t tv_sec; /* Seconds. /
__suseconds_t tv_usec; / Us. */
}
其中的tv_sec存储秒数,而tv_usec则存储微秒数。常见用法为:#include <linux/time.h>
struct timeval t1;
struct timeval t2;
u64 diff;do_gettimeofday(&t1);
{
执行函数
}
do_gattimeofday(&t2);diff = ((u64)t1.tv_usec - (u64)t2.tv_usec) * 1000000 + ((u64)t1.tv_usec - (u64)t2.tv_usec);
printk(“time consumed------------ = %lld us\n”, diff);
//diff =(u32) diff *(u32) 1000UL;
//printk(“time consumed------------ = %lld ns\n”, diff);
diff =(u32) diff /(u32) 1000UL;
printk(“time consumed------------ = %lld ms\n”, diff);
使用do_gettimeofday()函数需要注意timeval结构体的tv_usec成员的取值范围为0~10000000,以此表示tv_sec无法表示的微秒数。
3、ktime_get_boottime_ts64函数
#include <linux/timex.h>
struct timespec64 ts_start, ts_end;
struct timespec64 ts_delta;
ktime_get_boottime_ts64(&ts_start);
{
执行函数
}
ktime_get_boottime_ts64(&ts_end);
ts_delta = timespec64_sub(ts_end, ts_start);// 计算时间差
u64 diff =timespec64_to_ns(&ts_delta);
printk(“time consumed------------ = %lld ns\n”, diff);
diff =(u32) diff /(u32) 1000UL;
printk(“time consumed------------ = %lld us\n”, diff);
diff =(u32) diff /(u32) 1000000UL;
printk(“time consumed------------ = %lld ms\n”, diff);
4、实践可行:
u64 start_time, end_time;
start_time = ktime_get_real_ns();
{
执行函数
}
end_time = ktime_get_real_ns();
u64 diff = end_time - start_time;
printk(“time consumed------------ = %lld ns\n”, diff);
diff =(u32) diff /(u32) 1000UL;
printk(“time consumed------------ = %lld us\n”, diff);
diff =(u32) diff /(u32) 1000000UL;
printk(“time consumed------------ = %lld ms\n”, diff);