在典型的Linux系统上有多个时间(1)命令;缺省值是一个bash(1)内建,它有点基本。还有/usr/bin/time,你可以通过调用它就可以运行它,或者通过在反斜杠前加上前缀来告诉bash(1)不使用别名和内建函数:\time。 Debian在默认安装的“时间”包中包含它,Ubuntu可能是相同的,而其他发行版本会非常相似。
以类似的方式调用它的shell内建已经是更详细和翔实的,尽管也许更不透明的,除非你已经很熟悉这些数字的真正含义:
$ \time df
[output elided]
0.00user 0.00system 0:00.01elapsed 66%CPU (0avgtext+0avgdata 864maxresident)k
0inputs+0outputs (0major+261minor)pagefaults 0swaps
不过,我会想提请你注意手册页列出了-f选项自定义输出格式,特别是%w格式,计算过程中放弃了它的CPU时间片的I/O次数:
$ \time -f 'ios=%w' du Maildir >/dev/null
ios=184
$ \time -f 'ios=%w' du Maildir >/dev/null
ios=1
请注意,第一次运行停止了I/O 184次,但第二次运行仅停止了一次。第一个数字是可信的,因为在我的~/Maildir中有124个目录:读取目录和inode给出的每个目录大致有两个IOPS,少一点因为一些inode可能彼此相邻并在一个操作中读取,再加上一些在du(1)二进制文件,共享库等中再次映射。
由于Linux的磁盘缓存,第二个数字当然更低。所以最后一块是刷新缓存。同步(1)是一种熟悉的命令,它将脏写入刷新到磁盘,但不刷新读取高速缓存。你可以写3到/proc/sys/vm/drop_caches来刷新那个。 (其他值也是偶尔有用,但你想在这里3)作为非root用户,要做到这一点最简单的方法是:
echo 3 | sudo tee /proc/sys/vm/drop_caches
相结合,与/usr/bin/time应该允许你建立你所需要的脚本以标杆命令你感兴趣
作为未成年人一边,三通(1)使用,因为这是行不通的。
sudo echo 3 >/proc/sys/vm/drop_caches
的原因是什么?尽管echo(1)以root用户身份运行,但重定向是您的普通用户帐户,它不具有对drop_caches的写入权限。 tee(1)以root身份有效地进行重定向。