linux打印时间差,测试函数执行时间

应用程序:

添加头文件(有的不加也可)
#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:

  1. 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的方法较为简单,但是缺点是精确度不够。

  2. 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);

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值