所以当我打字时,time <some_program>
我有很好的 CPU 时间测量。但这究竟是如何实现的呢?这对性能也有影响吗some_program
?
答え1
内核跟踪所有进程的 CPU 使用统计信息;time
只是向内核询问有关其子进程的信息,这恰好是您要求它运行的命令。由于内核无论如何都会跟踪这些信息(调度、实施各种资源配额等所需),因此使用该time
命令不会使命令运行速度变慢。
答え2
时间的手册页说
时间命令的统计包括
(i) 调用和终止之间经过的实时时间,
(ii) 用户 CPU 时间(times(2) 返回的 struct tms 中 tms_utime 和 tms_cutime 值的总和)
(iii) 系统 CPU 时间(times(2) 返回的 struct tms 中 tms_stime 和 tms_cstime 值的总和)。
你可以看到这里和这里其中该time
命令是在GNU time
C 程序中实现的。
总 CPU 时间是 CPU 为程序执行某些操作所花费的时间和 CPU 代表程序为内核执行系统调用所花费的时间的组合。当程序循环访问数组时,它会累积用户 CPU 时间。相反,当程序执行 exec 或 fork 等系统调用时,它会累积系统 CPU 时间。
根据时间的GNU实现的源代码,时间显示的大部分信息都来自wait3系统调用。在没有返回状态信息的 wait3 调用的系统上,将使用 times 系统调用。