我需要在kernl-space和user-space之间交换一个struct timeval(通过netlink消息),以便计算消息创建和用户空间中的细化。 我在内核空间中使用函数jiffies_to_timeval
;在用户空间我呼吁gettimeofday
...但如果我打印两个结构的秒数我获得了200秒的差异...我无法弄清楚这个原因。内核空间和用户空间的时间差
任何想法?
谢谢大家!
我需要在kernl-space和user-space之间交换一个struct timeval(通过netlink消息),以便计算消息创建和用户空间中的细化。 我在内核空间中使用函数jiffies_to_timeval
;在用户空间我呼吁gettimeofday
...但如果我打印两个结构的秒数我获得了200秒的差异...我无法弄清楚这个原因。内核空间和用户空间的时间差
任何想法?
谢谢大家!
还有several clocks inside of Linux。差异归结为它们是否在机器暂停时打勾,是否尝试追踪“挂钟时间”以及它们的分辨率如何。
do_gettimeofday
可能不是你想要使用的,因为那个时钟试图跟踪“挂钟时间”;也就是说,它实际上可以向前或向后跳转。如果某人或某事(如NTP)决定在两次阅读之间设置系统时钟,该怎么办?
对于计时,我建议使用POSIX clock_gettime
函数和CLOCK_MONOTONIC
时钟ID。 (您可能必须与-lrt
编译你的用户空间应用程序,虽然)。
我相信clock_gettime
也存在一个内核函数,虽然我没有我的内核源代码的时刻派上用场......
感谢Nemo的回复!你是对的,但似乎没有clock_gettime作为内核函数:(也许有类似的功能? – MirkoBanchi
找到了一些在线内核源代码,看起来像这些活在'posix_timers.c'中。在内核中尝试'do_posix_clock_monotonic_gettime'(并且让我知道它是否可以工作,以便我可以更新我的答案...) – Nemo
是的,它的工作原理非常完美......我在内核空间的用户空间交互约100〜 200微秒,非常感谢Nemo! – MirkoBanchi
我找到了一个解决方案...而不是函数'jiffies_to_timeval'我用'do_gettimeofday'现在所有的作品...所以,这两个函数有什么区别? – MirkoBanchi