我需要在kernl-space和用户空间之间交换struct timeval(通过netlink消息),以便计算消息创建和用户空间细化之间的经过时间。
我在内核空间中使用函数jiffies_to_timeval
;在用户空间我调用gettimeofday
...但如果我打印两个结构的秒数我得到200秒的差异...我无法弄清楚这个的原因。
有什么想法吗?
谢谢大家!
答案 0 :(得分:5)
有several clocks inside of Linux。差异归结为它们是否在机器暂停时打勾,是否试图跟踪“挂钟时间”以及它们的高分辨率。
do_gettimeofday
可能不是您想要使用的,因为该时钟试图跟踪“挂钟时间”;也就是说,它实际上可以向前或向后跳跃。如果有人 - 或某些东西(如NTP) - 决定在您阅读它的两次之间设置系统时钟怎么办?
对于时间安排,我建议使用带有CLOCK_MONOTONIC
时钟ID的POSIX clock_gettime
函数。 (但您可能必须使用-lrt
编译用户空间应用程序。)
我相信clock_gettime
也作为内核函数存在,虽然我目前没有内核源代码...