【问题标题】:Can a sub-microsecond clock resolution be achieved with current hardware?当前的硬件能否实现亚微秒级的时钟分辨率?
【发布时间】:2015-10-23 01:15:49
【问题描述】:

我有一个线程需要每 X 纳秒处理一个项目列表,其中 X

【问题讨论】:

  • 我认为这取决于你需要做多少处理而不是时钟分辨率。你能指定你需要的时钟分辨率吗?你也可以给你的代码吗?如果时间太短而无法计时,您能说一下您预计执行所需的时间吗?它应该每 X 纳秒执行一次还是阻塞并每次等待 X 纳秒?很久以前,我使用 RTAI Linux 做了一些非常精确的事情,不久前发现人们正在使用 GPIO 作为 Raspberry Pi 来传输无线电。
  • @terma 实际上,VxWorks 文档指出 15 - 16 毫秒的限制是硬件绑定的。
  • @Elric 我希望线程休眠大约 100 纳秒。

标签: x86-64 clock


【解决方案1】:

您可以使用rdtsc 指令在 x86 上以极高的精度获取当前时间。它计算时钟周期(在固定的参考时钟上,而不是实际的动态频率 CPU 时钟上),因此一旦找到将其映射到实际 GPS 时间的系数,您就可以将其用作时间源。

这是 Linux 内部在足够新的硬件上使用的时钟源。 (较旧的 CPU 在 CPU 空闲时暂停 rdtsc 时钟,和/或随着 CPU 频率缩放改变频率)。它最初用于测量 CPU 时间,但事实证明,具有非常低读取成本(约 30 个时钟周期)的非常精确的时钟很有价值,因此将其与 CPU 内核时钟变化脱钩。


听起来准确的时钟并不是您唯一的问题:如果您需要每约 1 秒处理一个列表,而不会错过任何唤醒,那么您需要一个实时操作系统,或者至少需要实时功能常规操作系统(如 Linux)。

如果您睡了 10 毫秒的时间过长,那么知道您最终醒来的时间并没有帮助,因为您读取了操作系统决定驱逐的内存页面,并且必须从磁盘中获取。

【讨论】:

    猜你喜欢
    • 2010-09-05
    • 2012-11-12
    • 2020-02-13
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多