【问题标题】:Diff between times in kernel-space and user-space内核空间和用户空间的时间差异
【发布时间】:2011-09-25 19:14:17
【问题描述】:

我需要在内核空间和用户空间之间交换一个 struct timeval(通过 netlink 消息),以便计算从创建消息到在用户空间中进行详细说明之间经过的时间。 我在内核空间中使用函数jiffies_to_timeval;在用户空间中,我调用gettimeofday...但是如果我打印两个结构的秒数,我会得到 200 秒的差异...我无法找出原因。

有什么想法吗?

谢谢大家!

【问题讨论】:

  • 我找到了解决方案...而不是函数jiffies_to_timeval 我使用了do_gettimeofday 现在一切正常...那么,这两个函数有什么区别?

标签: linux time linux-kernel


【解决方案1】:

several clocks inside of Linux。差异归结为它们是否在机器挂起时滴答作响、它们是否尝试跟踪“挂钟时间”以及它们的分辨率有多高。

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

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

我相信clock_gettime 也作为内核函数存在,尽管我目前手头没有内核源代码...

【讨论】:

  • 感谢 Nemo 的回复!你说得对,但似乎没有 clock_gettime 作为内核函数 :( 也许有类似的函数?
  • 找到了一些在线内核源码。看起来这些住在posix_timers.c。在内核中尝试do_posix_clock_monotonic_gettime。 (让我知道它是否有效,以便我可以更新我的答案......)
  • 是的,它完美运行...我在大约 100~200 微秒内完成了内核空间用户空间交互。非常感谢尼莫!
猜你喜欢
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
相关资源
最近更新 更多