2011-06-30 127 views
3

我需要在kernl-space和user-space之间交换一个struct timeval(通过netlink消息),以便计算消息创建和用户空间中的细化。 我在内核空间中使用函数jiffies_to_timeval;在用户空间我呼吁gettimeofday ...但如果我打印两个结构的秒数我获得了200秒的差异...我无法弄清楚这个原因。内核空间和用户空间的时间差

任何想法?

谢谢大家!

+0

我找到了一个解决方案...而不是函数'jiffies_to_timeval'我用'do_gettimeofday'现在所有的作品...所以,这两个函数有什么区别? – MirkoBanchi

回答

5

还有several clocks inside of Linux。差异归结为它们是否在机器暂停时打勾,是否尝试追踪“挂钟时间”以及它们的分辨率如何。

do_gettimeofday可能不是你想要使用的,因为那个时钟试图跟踪“挂钟时间”;也就是说,它实际上可以向前或向后跳转。如果某人或某事(如NTP)决定在两次阅读之间设置系统时钟,该怎么办?

对于计时,我建议使用POSIX clock_gettime函数和CLOCK_MONOTONIC时钟ID。 (您可能必须与-lrt编译你的用户空间应用程序,虽然)。

我相信clock_gettime也存在一个内核函数,虽然我没有我的内核源代码的时刻派上用场......

+0

感谢Nemo的回复!你是对的,但似乎没有clock_gettime作为内核函数:(也许有类似的功能? – MirkoBanchi

+1

找到了一些在线内核源代码,看起来像这些活在'posix_timers.c'中。在内核中尝试'do_posix_clock_monotonic_gettime'(并且让我知道它是否可以工作,以便我可以更新我的答案...) – Nemo

+0

是的,它的工作原理非常完美......我在内核空间的用户空间交互约100〜 200微秒,非常感谢Nemo! – MirkoBanchi

相关问题