我想比较这两个命令的速度:
grep pattern1 files*
grep pattern2 files*
不幸的是,第一个 grep 将大部分文件*读入内存缓冲区,因此第二个 grep 运行得非常快,但原因错误。
我如何告诉 Linux (Fedora 11):“请停止缓存磁盘读取,因为我正在测试某些内容。”
答案1
我认为你不能轻易地告诉它“暂时停止缓存”。但你可以做的是告诉系统在每次运行之前删除缓存:
作为根用户:
sync; echo 3 > /proc/sys/vm/drop_caches
(这在内核文档中有记录文档/sysctl/vm.txt,如果像我们中的一些人一样,您不能总是立即记住值 1、2 或 3 的作用,那么这很方便。)
或者,当然,也可以填充缓存并比较缓存的性能。 (我认为两者都是有用的数字。)
答案2
当像这样计时时,我通常首先运行它来填充缓存。然后使用时间运行命令。在测试此类内容时,您应该更关心 CPU 和运行时间,而不是 I/O 时间。
无论如何,很难获得完全准确的计时。如果输入文件超出了缓冲区可用的内存大小,那么您可能最终会通过缓冲区高速缓存循环所有文件。否则,您可能只访问缓冲区高速缓存中的所有数据。在现实生活中,通常会混合使用缓冲数据和从磁盘读取的数据。