【发布时间】:2019-11-19 06:13:42
【问题描述】:
您是否知道任何用于 Linux 的用户空间中高分辨率时钟(最小微秒)的 C/C++ 实现(即使它不可移植)?
目标是测量一些低延迟操作的时间间隔。 我测量了内核空间时钟有时会导致延迟峰值。
根据我对 Red Hat 7.2 的研究:
- std::chrono::high_resolution_clock 最大分辨率为毫秒;
- clock_gettime CLOCK_MONOTONIC 和 CLOCK_REALTIME 通过内核系统调用执行;
- gettimeofday 通过内核系统调用执行;
- clock_gettime CLOCK_MONOTONIC_COARSE 和 CLOCK_REALTIME_COARSE 在用户空间执行,但最大分辨率为毫秒;
谢谢。
【问题讨论】:
-
目标是测量一些低延迟操作的时间间隔。我测量了内核空间时钟有时会导致延迟峰值。 做到这一点的诀窍是进行大量调用。如果您进行十亿次呼叫,即使获得时间的成本是一秒,十亿次呼叫也是一秒,因此平均每次呼叫需要 1 纳秒。没有比这更准确的了。
-
你说非便携式解决方案还可以。绑定到特定硬件(如特定 CPU 架构)的解决方案怎么样?
-
是的。我愿意绑定到特定的硬件。我们使用英特尔至强。
标签: c++ linux-kernel clock chrono low-latency