使用 time 命令测量微处理器使用
使用 time 命令可以了解单个程序和它的同步子程序的性能特征。
time 命令报告实际时间,也就是从程序开始到结束的耗用时间。 它还报告该程序所使用的微处理器时间量。 微处理器时间分为user和sys.uservalue 是程序本身及其调用的任何库子例程所使用的时间。 该sysvalue 是程序调用的系统调用所使用的时间 (直接或间接)。
总和user+sys是执行程序的总直接微处理器成本。 这不包括内核部分的微处理器成本,该部分可以说是代表程序运行,但实际并不在其线程上运行。 例如,程序启动时窃取页帧以代替从空闲列表中取得的页帧的成本并不作为该程序的微处理器消耗的一部分报告。
在单处理器上,real时间和总微处理器时间,即:
real - (user + sys)是所有可以延迟该程序的因子之总加上不是程序本身拥有的花费。 在一个 SMP 中,可以有如下近似:
real * number_of_processors - (user + sys)近似按照大小递减的顺序,这些因素可能为:
- 获得程序的文本和数据所需的 I/O
- 获得程序使用的实内存所需的 I/O
- 其他程序消耗的微处理器时间
- 操作系统消耗的微处理器时间
在下面的示例中,对前一节中使用的程序用 -O3 进行编译以使它运行更快。 运行该程序所需的实际 (正常时钟时间) 时间与其用户和系统微处理器时间之和的差值很小。 该程序正在获取它需要的所有时间,很可能以系统中其他程序为代价。
# time looper
real 0m3.58s
user 0m3.16s
sys 0m0.04s在下面的示例中,通过将它的 nice 值加 10,我们以较低的优先级运行该程序。 它要花几乎两倍的时间来运行,但其他程序也有机会进行它们的工作:
# time nice -n 10 looper
real 0m6.54s
user 0m3.17s
sys 0m0.03s请注意,我们将 nice 命令放置在 time 命令中,而不是相反。 如果我们已输入
# nice -n 10 time looper则会得到生成较低精度报告的不同 time 命令(/usr/bin/time),而不是我们曾使用的 time 命令版本(该版本内建在 ksh shell 中)。 如果 time 命令先执行,您得到的是内置版本,除非您指定 /usr/bin/time 全限定名。 如果从另一个命令调用 time 命令,那么会得到 /usr/bin/time。