暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

三分钟增强内功!Linux中的Buffer与Cache

Linux驯兽师 2021-09-01
852

Cache与Buffer的概念

Cache
Buffer
是我们容易混淆的内存概念,Cache
名为缓存,Buffer
名为缓冲,虽一字之差,但是它们在不同语境下的含义却大不相同。

CPU执行的指令需要从内存中取出,计算结果也需回写到内存中,但内存的响应速度跟不上CPU的话,CPU只能等待,这样CPU也无法发挥效率。同理,内存中的数据也是要回写到磁盘的,但是磁盘的低速读写远比不上内存的二进制电压变化速度。这样巨大的差异,即使内存读写速度再快,还是要被磁盘拖后腿。而Cache
Buffer
的出现就是为了弥补高速设备和低速设备之间的矛盾而设立的中间层。

Cache
会将低速设备中常被访问的数据缓存起来,当高速设备需要再次访问这些数据时,会命中Cache
中的数据,以减少对低速设备的访问。

Buffer
用于缓和高速设备要把数据回写到低速设备时带来的冲击,当数据量比较大时,Buffer
能将数据分割成合适的大小,分批回写到磁盘;当数据量比较小的时候,Buffer
能将分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,通过“流量整形”提高系统性能。

Linux中的Page Cache与Buffer Cache

如下图,程序读取的文件数据保留在Page Cache(页面缓存)
中,以便将来读取时重用。如第一次使用find
grep
命令时速度比较慢,再次执行就非常快。当Page Cache
中的数据需要刷新时,Page Cache
中的数据会交给Buffer Cache
,而Buffer Cache
中的数据会定时刷新到磁盘中,也可通过sync
命令将缓冲区里的数据写入磁盘。如果突然断电,Buffer Cache
没来得及写入到磁盘中,那么就会发生数据丢失。

在Linux 2.4以前page cache和buffer cache是两个独立的缓存,从Linux 2.4以后buffer cache
不再是一个独立的缓存,如下图所示的那样,它被包含在page cache
中,通过page cache
来实现。

相关命令

通过free -m
查看buff/cache
列使用情况

通过如下命令查看脏页数据大小

释放页缓存

 echo 1 > proc/sys/vm/drop_caches

释放索引节点和目录项

 echo 2 > proc/sys/vm/drop_caches

释放页缓存、索引节点、目录项

 echo 3 > /proc/sys/vm/drop_caches


如果对文章内容存在疑问

欢迎各位移步到公众号后台留言。

有问必答,共同进步!


文章转载自Linux驯兽师,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论