一、时间介绍
unix 环境下一共有两种时间值:
- 日历时间 (Calendar time):该值是自 1970 年 1 月 1 日 00:00:00 以来所经过的秒数累计值,也叫国际标准时间 (UTC,早期的手册称 UTC 为格林尼治标准时间),这些时间值可用于记录文件最近一次的修时间等,是最常用到的时间。
- 进程时间 (Process time):也被称作 CPU 时间,用来度量进程使用的中央处理器资源,它由时钟滴答 (clock ticks) 表示,每秒 50 、 60 或者 100 个时钟滴答。
通常当我们度量一个进程的执行时间时会包含三种时间属性:时钟时间、用户 CPU 时间和系统 CPU 时间。
时钟时间 (wall clock time) 指进程运行所花费的时间,也就是命令开始执行到结束的时间。它的值与系统中其他的进程数量有关,包括了其他进程所占用的时间和进程被阻塞时所花费的时间。
用户 CPU 时间是指进程执行用户指令所花费的时间,系统 CPU 时间则指进程在进行系统调用时占用的时间 (例如当我们执行 open
和 write
等函数时) 。用户 CPU 时间和系统 CPU 时间的和被称为 CPU 时间。
二、度量时间
linux 系统中可以通过 time
命令度量一个命令的执行时间,把待执行的命令加在 time 命令后面就可以了。
1 2 3 4 5 6 |
> cd /usr/include > time grep _POSIX_SOURCE */*.h > /dev/null real 0m0.012s user 0m0.008s sys 0m0.000s |
默认情况下使用的
time
命令是 shell 自带的,这个命令的功能有限,更多的时候可以选择使用/usr/bin/time
。
它的常用选项:
-f
:自定义输出格式,后面接%U %E %S
等等。-o
:重定向输出到文件。-p
:固定输出为以下格式:
123real %euser %Usys %S
1 2 3 4 5 6 7 8 9 10 11 12 |
> /usr/bin/time grep _POSIX_SOURCE */*.h > /dev/null # 默认输出 Command exited with non-zero status 1 0.00user 0.00system 0:00.00elapsed 57%CPU (0avgtext+0avgdata 2448maxresident)k 0inputs+0outputs (0major+114minor)pagefaults 0swaps > /usr/bin/time -p grep _POSIX_SOURCE */*.h > /dev/null # -p Command exited with non-zero status 1 real 0.00 user 0.00 sys 0.00 > /usr/bin/time -f "%U %E %S" grep _POSIX_SOURCE */*.h > /dev/null # 自定义格式 Command exited with non-zero status 1 0.00 0:00.00 0.00 |
评论