【问题标题】:Problem of understanding clock_gettime理解clock_gettime的问题
【发布时间】:2011-08-21 07:09:35
【问题描述】:

我在使用clock_gettime 可以访问的不同时钟时遇到问题。我特别感兴趣:

  • CLOCK_REALTIME
  • CLOCK_PROCESS_CPUTIME_ID
  • CLOCK_THREAD_COUTIME_ID

我阅读了手册页,但对我没有多大帮助。我使用clock_gettime 以便在我的分析器通过套接字发送收集的数据时为其生成时间戳。我注意到以下差异:

  • CLOCK_REALTIME

我从分析器收到的带有此时钟的事件有时顺序错误。时间戳从一个更高的值开始,虽然不是很高。通常最后的消息(具有较高时间戳的消息)首先出现,然后是具有较低值的时间戳。

  • CLOCK_PROCESS_CPUTIME_ID
  • CLOCK_THREAD_COUTIME_ID

我发现两个时钟没有区别,尽管它们以较小的值开始并且总是正确排序。

我无法解释这种行为。

【问题讨论】:

    标签: linux time clock system-calls


    【解决方案1】:
    • CLOCK_REALTIME 可让您访问实时时钟,即存储当前日期和时间的时钟。
    • CLOCK_MONOTONIC 让您可以访问一个永远不会回到过去的时钟,您可能应该使用这个而不是 CLOCK_REALTIME
    • CLOCK_PROCESS_CPUTIME_ID 让您可以访问特定于当前进程的时钟,为您提供进程的 CPU 时间(CPU 运行该特定进程所花费的时间)。
    • CLOCK_THREAD_CPUTIME_ID 让您可以访问特定于当前线程的时钟,为您提供进程的 CPU 时间(CPU 运行该特定线程所花费的时间)。

    【讨论】:

    • 我能猜到 CLOCK_REALTIME 被重置了吗?这是我对这个时钟的错误顺序的唯一解释。
    • 在 Linux 上,CLOCK_REALTIME 和 CLOCK_MONOTONIC 都会因系统时间调整而出现不连续性,例如通过 ntpd。使用 CLOCK_MONOTONIC_RAW 得到一个实际上保证时间不会倒退的计时器。
    • @BDatRivenhill +1 可用于解决我的负面消逝时间问题
    【解决方案2】:

    您的系统时钟源可能设置为 TSC 而不是 HPET。

    一般而言,在现代多核系统上,HPET 是一种更新的系统,更准确、更一致,而 TSC 是一种性能更高的旧系统。

    在 openSUSE 上,您可以通过以下方式了解您当前的时钟源是什么

    cat /sys/devices/system/clocksource/clocksource0/current_clocksource

    要在 openSUSE 上将时钟源设置为 HPET,请执行

    echo 'hpet' > /sys/devices/system/clocksource/clocksource0/current_clocksource

    进一步阅读:

    http://en.wikipedia.org/wiki/HPET

    http://en.wikipedia.org/wiki/Time_Stamp_Counter

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-05
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 2011-10-11
      • 2011-09-26
      相关资源
      最近更新 更多