在 Linux 中测量时间 - 时间、时钟、getrusage、clock_gettime、gettimeofday、timespec_get?

2024-10-12 10:28:00
admin
原创
429
摘要:问题描述:在计时函数中time,,,,和clock getrusage,clock_gettime我想清楚地了解它们是如何实现的,以及它们的返回值是什么,以便知道在什么情况下必须使用它们。gettimeofday`timespec_get`首先,我们需要对返回挂钟值的函数进行分类,与返回进程或线程值的函数进行...

问题描述:

在计时函数中time,,,,和clock getrusageclock_gettime我想清楚地了解它们是如何实现的,以及它们的返回值是什么,以便知道在什么情况下必须使用它们。gettimeofday`timespec_get`

首先,我们需要对返回挂钟值的函数进行分类,与返回进程或线程值的函数进行比较。gettimeofday返回挂钟值,clock_gettime返回挂钟值进程或线程值,具体取决于Clock传递给它的参数。getrusageclock返回进程值。

然后第二个问题涉及这些功能的实现以及其准确性。这些功能使用哪种硬件或软件机制。

似乎getrusage只使用内核滴答(通常为 1ms 长),因此不可能比 ms 更精确。对吗?那么该gettimeofday函数似乎使用最精确的底层硬件。因此,在最近的硬件上,它的精度通常是微秒(由于 API,不可能更高)。那么clock,手册页提到“近似值”,这是什么意思?那么clock_gettime,API 以纳秒为单位,这是否意味着如果底层硬件允许,它就可以如此精确?单调性呢?

还有其他功能吗?


解决方案 1:

问题是 C 和 C++ 中有几种不同的时间函数,其中一些函数在不同的实现中行为不同。还有很多不完整的答案。编制一个时钟函数列表及其属性可以正确回答这个问题。首先,让我们问一下我们正在寻找的相关属性是什么。看了你的帖子,我建议:

  • 时钟测量什么时间?(真实时间,用户时间,系统时间,或者希望不是挂钟?)

  • 时钟的精度是多少? (s、ms、µs,还是更快?)

  • 时钟经过多长时间才会回转?或者有某种机制可以避免这种情况?

  • 时钟是单调的吗,还是会随着系统时间的变化而变化(通过 NTP、时区、夏令时、用户等)?

  • 上述内容在不同的实现方式下有何不同?

  • 具体功能是否过时、非标准等?

在开始列表之前,我想指出的是,挂钟时间很少是合适的时间,而它会随着时区变化、夏令时变化或挂钟是否由 NTP 同步而变化。如果您使用时间来安排活动或对性能进行基准测试,那么这些都不是好东西。它只适用于顾名思义,挂在墙上(或桌面)的时钟。

以下是我目前在 Linux 和 OS X 中发现的时钟信息:

  • time()返回操作系统的挂钟时间,精度为秒。

  • clock()似乎返回用户和系统时间的总和。它存在于 C89 及更高版本中。曾经这被认为是周期中的 CPU 时间,但现代标准(如 POSIX)要求 CLOCKS_PER_SEC 为 1000000,最大精度为 1 µs。我的系统上的精度确实是 1 µs。此时钟一旦达到最高点就会回绕(这通常发生在 ~2^32 个刻度之后,对于 1 MHz 时钟来说,这不是很长)。表示自 glibc 2.18 以来,它在 Linux 中man clock实现。clock_gettime(CLOCK_PROCESS_CPUTIME_ID, ...)

  • clock_gettime(CLOCK_MONOTONIC, ...)提供纳秒级分辨率,是单调的。我相信“秒”和“纳秒”是分开存储的,每个都存储在 32 位计数器中。因此,任何回绕都会在正常运行数十年后发生。这看起来是一个非常好的时钟,但不幸的是它在 OS X 上尚不可用。POSIX 7描述CLOCK_MONOTONIC为可选扩展。

  • getrusage()事实证明,它对我来说是最好的选择。它分别报告用户和系统时间,并且不会回绕。我的系统上的精度为 1 µs,但我也在 Linux 系统(Red Hat 4.1.2-48 和 GCC 4.1.2)上对其进行了测试,精度仅为 1 ms。

  • gettimeofday()返回精度为(名义上)µs 的挂钟时间。在我的系统上,这个时钟似乎具有 µs 精度,但这并不能保证,因为“系统时钟的分辨率取决于硬件”。POSIX.1-2008规定。“应用程序应该使用该clock_gettime()函数而不是过时的gettimeofday()函数”,因此您应该远离它。Linux x86 并将其实现为系统调用。

  • mach_absolute_time()是 OS X 上非常高分辨率 (ns) 计时的一个选项。在我的系统上,这确实提供了 ns 分辨率。原则上,此时钟会回绕,但是它使用 64 位无符号整数存储 ns,因此回绕在实践中不应该成为问题。可移植性值得怀疑。

  • 我根据此代码片段编写了一个混合函数,该函数在 Linux 上编译时使用 clock_gettime,在 OS X 上编译时使用 Mach 计时器,以便在 Linux 和 OS X 上获得 ns 精度。

除非另有说明,以上所有内容都存在于 Linux 和 OS X 中。上面的“我的系统”是运行 OS X 10.8.3 的 Apple,带有来自 MacPorts 的 GCC 4.7.2。

最后,除了上面的链接之外,这里是我发现有用的参考资料列表:


更新:对于 OS X,clock_gettime已从 10.12 (Sierra) 开始实施。此外,基于 POSIX 和 BSD 的平台(如 OS X)共享rusage.ru_utimestruct 字段。

解决方案 2:

C11timespec_get

使用示例:https: //stackoverflow.com/a/36095407/895245

返回的最大可能精度是纳秒,但实际精度是由实现定义的,可能会更小。

它返回的是挂钟时间,而不是 CPU 使用率。

glibc 2.21 在其下实现它sysdeps/posix/timespec_get.c并直接转发到:

clock_gettime (CLOCK_REALTIME, ts) < 0)

clock_gettime并且CLOCK_REALTIME是 POSIX http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html,并man clock_gettime表示如果在程序运行时更改某些系统时间设置,该度量可能会出现不连续性。

C++11 计时

既然我们已经讨论过了,那么就让我们也来介绍一下它们:http://en.cppreference.com/w/cpp/chrono

GCC 5.3.0(C++ stdlib 位于 GCC 源代码中):

  • high_resolution_clocksystem_clock

  • system_clock转发至下列第一个可用项:

+ `clock_gettime(CLOCK_REALTIME, ...)`
+ `gettimeofday`
+ `time`
  • steady_clock转发至下列第一个可用项:

+ `clock_gettime(CLOCK_MONOTONIC, ...)`
+ `system_clock`

询问:std::system_clock 和 std::steady_clock 之间的区别?

CLOCK_REALTIMEvs CLOCK_MONOTONIC:CLOCK_REALTIME 和 CLOCK_MONOTONIC 之间的区别?

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2579  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1553  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   27  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   22  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   19  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用