【发布时间】:2018-02-02 11:03:46
【问题描述】:
我在 Intel(R) Xeon(R) CPU E5-2667 v4 @ 3.20GHz 上使用 CentOS Linux 版本 7.3.1611
在测试我的用户空间应用程序期间,我注意到 clock_gettime(CLOCK_MONOTONIC, &ts) 可能需要 5-6 微秒,而不是平均约 23 纳秒。它可能每 10000 个后续调用仅发生一次,但是它可能会发生。
如果没有 VDSO 库,可以解释。但是,每个clock_gettime都使用VDSO(我通过strace检查过)。
无论对应的线程是否关联到某个 CPU 核心。不管这个 CPU 内核是否与操作系统隔离。这意味着测试应用程序可能会在独占 CPU 内核上运行,而无论如何可能会出现延迟!
我通过比较两个随后的 clock_gettime 调用的结果来测量延迟,例如:
unsigned long long __gettimeLatencyNs() {
struct timespec t1_ts;
struct timespec t2_ts;
clock_gettime(CLOCK_MONOTONIC, &t1_ts);
clock_gettime(CLOCK_MONOTONIC, &t2_ts);
return ((t2_ts.tv_sec - t1_ts.tv_sec)*NANO_SECONDS_IN_SEC + t2_ts.tv_nsec - t1_ts.tv_nsec);
}
谁能分享一些想法,那里可能有什么问题?
【问题讨论】:
标签: linux time-measurement vdso