为了提高磁盘存取效率,Linux做了一些精心的设计,除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。
1 | # free -h |
一般来说使用者是不需要去管这些缓存何时会被清除的。但如有需求使用/proc/sys/vm/drop_caches
可以强制内核清理缓存。
/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。
写入1,清除 pagecache1
sync;echo 1 > /proc/sys/vm/drop_caches
写入2,清除 dentries 与 inodes1
sync;echo 2 > /proc/sys/vm/drop_caches
写入3,清除 dentries 与 inodes 及 inodes (危险)1
sync;echo 3 > /proc/sys/vm/drop_caches
基本上执行这个指令没有什么好处,所以除非你很明确知道你想干嘛(例如这边是为了避免缓存影响实验结果),否则建议不要随便手动清除快取记忆体。另外,也建议在做这个 动作前先执行sync让档案写入操作先完成,否则可能会造成意想不到的结果。
/proc/sys/vm/drop_caches
预设的值是0,只有echo 1 > /proc/sys/vm/drop_caches
才会触发对应的清理工作,仅执行一次而已。
1 | # sync;echo 1 > /proc/sys/vm/drop_caches |