我依次使用 clock_gettime(CLOCK_MONOTONIC, &tsp1)
和 clock_gettime(CLOCK_REALTIME, &tsp2)
。我可以通过一次调用来减少差异吗?
最佳答案
没有标准的、可移植的方法来执行此操作 - clock_gettime
基于不支持此类“多查询”的操作系统功能。扩展此功能并非易事 - 并且可能需要开发一个驱动程序来为您公开此功能。
特别是在 Linux 上,这可能相对容易,并且不需要编写驱动程序。
在 Linux 上,clock_gettime
实际上并不调用内核 - 它使用 vdso它允许内核向用户空间公开信息,而无需切换到内核模式。这种用法的经典示例是像 gettimeofday
和 clock_gettime
这样的函数 - 这些不是特权函数(CLOCK_REALTIME
除外,它确实需要一些权限),并且可以将信息提供给用户空间以提高效率。
您可以利用 vdso
自己直接访问数据 - 查看 /lib/vdso/gettimeofday.c
中的函数- 访问暴露给vdso
的表来获取当前时间。我专门链接到 do_hres
这似乎是直接访问时间戳的函数。
通过亲自访问 vdso
表,您可以最大限度地减少开销并减少两次调用之间的差异。
关于单次调用的 CLOCK_REALTIME 和 CLOCK_MONOTONIC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69188720/