5.2. POSIX 时钟
POSIX 是实施和代表时间源的标准。您可以将 POSIX 时钟分配给应用程序,而不影响系统中的其他应用程序。这与内核选择并在系统中实施的硬件时钟不同。
用于读取给定 POSIX 时钟的功能是 clock_gettime (),它在 < time.h > 定义。内核与 clock_gettime () 是系统调用。当用户进程调用 clock_gettime () 时:
-
对应的 C 库(
glibc)调用sys_clock_gettime ()系统调用。 -
sys_clock_gettime ()执行请求的操作。 -
sys_clock_gettime()returns the result to the user program.
但是,从用户应用程序切换到内核的上下文会有 CPU 成本。尽管这种成本非常低,如果操作重复了数以千计的时间,但累计成本可能会对应用程序的整体性能产生影响。为了避免上下文切换到内核,从而可以更快地读取时钟,支持 CLOCK_MONOTONIC_COARSE 和 CLOCK_REALTIME_COARSE POSIX 时钟,格式为虚拟动态共享对象(VDSO)库功能。
使用其中一个 _COARSE 时钟变体执行 clock_gettime () 执行的时间读取,不需要内核干预,完全在用户空间中执行。这带来了显著的性能提升。读取 _COARSE 时钟的时间读取具有毫秒(ms)解析,这意味着不会记录时间间隔小于 1 ms。POSIX 时钟的 _COARSE 变体适合可容纳数毫秒时钟解析的任何应用程序。
要将读取 POSIX 时钟的成本和解析与没有 _COARSE 前缀的成本和解析进行比较,请参阅 RHEL for Real Time 参考指南。