我读过很多文档说,sync
在执行之前执行 a 是个好主意echo [1,2,3] > /proc/sys/vm/drop_caches
。我无法理解为什么需要它,因为 drop_cache 是一个非破坏性操作,脏数据不会被 drop_cache 删除。我还看到了一种行为,echo 1 > /proc/sys/vm/drop_caches
首先将脏数据提交回磁盘,然后释放缓存。这可以通过/proc/meminfo
“Dirty”和“Writeback”看到。
答案1
无论如何,我在 stackoverflow 上得到了答案,我通过做一个小实验证实了这一点。
“sync”仅使脏缓存变为干净缓存。缓存仍然保留。 drop_caches 不会触及脏缓存,只会删除干净的缓存。因此,为了释放所有内存,有必要在 drop_caches 之前先进行同步,以防刷新守护进程尚未将更改写入磁盘。
我的博客关于这个小实验 -
Linux 存储 I/O 中的 O_DIRECT、O_SYNC 标志、缓冲区和缓存到底是什么?
堆栈溢出链接 -