linux内核获取时间问题
一个程序有很多的case,我想知道从casea发生到执行caseb,所消耗了多久的时间。这是在一个驱动里面的。但是很奇怪的是我使用do_gettimeofday();所获...
一个程序有很多的case,我想知道从case a发生到执行case b,所消耗了多久的时间。这是在一个驱动里面的。但是很奇怪的是我使用do_gettimeofday();所获取的时间差好多。
do_gettimeofday(&tv);
printk(KERN_ALERT" test_cnt_onhook :[%d] voltage:%d usec: %ld\n",test_cnt_onhook++,voltage,tv.tv_usec);
这个usec的值打印出来之后,有很多下面这种东西:
test_cnt_onhook :[2] voltage:0 usec: 915186
test_cnt_onhook :[3] voltage:0 usec: 36222
怎么到后面还变小了呢?
后打想使用jiffies做,但是我不知道多少个jiffies才是一个ms,我就是想精度到毫秒最好能使微妙的获取执行前的时间和执行后的时间。
好吧,那么有几个问题:
1,为什么前面会那样,tv.tv_usec返回的应该是微妙么,但是为什么后面又变小了呢?
2,使用jiffies是多少个节拍才代表1个ms呢?;
3,还有其他方法吗?精确度要比较好一点。 展开
do_gettimeofday(&tv);
printk(KERN_ALERT" test_cnt_onhook :[%d] voltage:%d usec: %ld\n",test_cnt_onhook++,voltage,tv.tv_usec);
这个usec的值打印出来之后,有很多下面这种东西:
test_cnt_onhook :[2] voltage:0 usec: 915186
test_cnt_onhook :[3] voltage:0 usec: 36222
怎么到后面还变小了呢?
后打想使用jiffies做,但是我不知道多少个jiffies才是一个ms,我就是想精度到毫秒最好能使微妙的获取执行前的时间和执行后的时间。
好吧,那么有几个问题:
1,为什么前面会那样,tv.tv_usec返回的应该是微妙么,但是为什么后面又变小了呢?
2,使用jiffies是多少个节拍才代表1个ms呢?;
3,还有其他方法吗?精确度要比较好一点。 展开
1个回答
展开全部
1 tv_usec是微秒,变小是因为秒进位了,你要同时把秒输出就能看出来了
2 有个常量HZ 它和jiffies是互为倒数. 以前一直是100, 也就是1秒100下,就是1个j=10毫秒
如今也有更快的,比如1000.但是在用户空间,一直是100.
所以jiffies非常快,会容易溢出, 例如一个无符号整形存储秒,那么69年左右会溢出
毫秒的话要除1000, 不到一个月就溢出了.而电脑的运行时间是完全可以达到这么久不重启的.
jiffies_64就不用担心这个问题了.
3可参加linux/time.h中提供的api,精确到微秒
2 有个常量HZ 它和jiffies是互为倒数. 以前一直是100, 也就是1秒100下,就是1个j=10毫秒
如今也有更快的,比如1000.但是在用户空间,一直是100.
所以jiffies非常快,会容易溢出, 例如一个无符号整形存储秒,那么69年左右会溢出
毫秒的话要除1000, 不到一个月就溢出了.而电脑的运行时间是完全可以达到这么久不重启的.
jiffies_64就不用担心这个问题了.
3可参加linux/time.h中提供的api,精确到微秒
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询