我知道同步命令将脏缓存刷新到磁盘中。我free
先运行命令,然后运行命令sync
,然后free
再次运行。后一个命令的结果free
显示比前一个命令有更多的可用内存。
这是否意味着执行时脏缓存会从内存中删除sync
?谁能给我一个更确凿的证据?
答案1
不,没有。我自己检查了很多次,但是不用担心,Linux 内核会非常聪明地照顾你宝贵的内存。读写入磁盘时缓存在 RAM 中的内容 - Linux 和http://linuxatemyram.com
答案2
这将导致内核从内存中删除干净的缓存、目录项和索引节点,从而使该内存变得空闲。
释放页面缓存:
echo 1 > /proc/sys/vm/drop_caches
释放 dentry 和 inode:
echo 2 > /proc/sys/vm/drop_caches
释放页面缓存、目录项和索引节点:
echo 3 > /proc/sys/vm/drop_caches
由于这是一个非破坏性操作,并且脏对象不可释放,因此用户应首先运行“sync”以确保释放所有缓存的对象。
答案3
他们不是 :-)。这是确凿的证据:
$ dd if=/dev/zero of=test bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.409106 s, 256 MB/s
$ sync
$ time cat test > /dev/null
real 0m0.027s
user 0m0.000s
sys 0m0.026s
之后数据仍然被缓存sync
。您可以通过查看读取文件的时间来判断它已被缓存。 (我有一个旋转硬盘,最大读取速度约为 100MB/s)。将此与sync
和的组合进行比较drop_caches
:
$ sync
$ echo 1 | sudo tee /proc/sys/vm/drop_caches
1
$ time cat test > /dev/null
real 0m1.030s
user 0m0.001s
sys 0m0.073s