为什么第二次运行“find”命令比第一次完成得更快?

DK *_*ose 5 command-line bash find

当我time find ~第一次运行时,即我第一次find在会话中运行时,它比第二次运行时需要更长的时间。这是为什么?

第一次运行:

real    0m12.410s
user    0m0.424s
sys     0m1.287s
Run Code Online (Sandbox Code Playgroud)

第二次运行:

real    0m0.988s
user    0m0.214s
sys     0m0.405s
Run Code Online (Sandbox Code Playgroud)

DK *_*ose 3

Rinzwind 提供的链接标题为“如果运行两次,为什么 [find] 运行速度令人难以置信?” top 命令中的 \xe2\x80\x9ccached\xe2\x80\x9d 是什么?涵盖同一问题。

\n\n

本质上,如果有空闲 RAM,内核可以使用其中的一部分来缓存信息。以这种方式使用的内存可以按需提供给应用程序。

\n\n

Linux ate my RAM解释了可用缓冲区空闲已用等术语 。它还提供以下命令来清除“大部分磁盘缓存”:

\n\n
echo 3 | sudo tee /proc/sys/vm/drop_caches\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了确认第二次查找速度time find ~更快,我第一次运行:

\n\n
real    0m10.765s\nuser    0m0.395s\nsys     0m1.169s\n
Run Code Online (Sandbox Code Playgroud)\n\n

第二次看看内存缓存的有益效果:

\n\n
real    0m1.119s\nuser    0m0.196s\nsys     0m0.476s\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我清除缓存并再次echo 3 | sudo tee /proc/sys/vm/drop_caches运行time find ~。果然,时间又到了:

\n\n
real    0m19.198s\nuser    0m0.457s\nsys     0m1.425s\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,由于新的缓存,随后按预期运行的查找显示出改进的时间:

\n\n
real    0m1.100s\nuser    0m0.199s\nsys     0m0.484s\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

在阅读有关缓存的内容时,我遇到了在 Linux 上缓存/预加载文件到 RAM 中的问题,并且有几个答案建议使用vmtouch - 虚拟内存触摸器:它被描述为“便携式文件系统缓存诊断和控制”,并且位于Bionic 的存储库中然后。

\n