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

Cache与Buffer的概念

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

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

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

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

Linux中的Page Cache与Buffer Cache

如下图,程序读取的文件数据保留在Page Cache(页面缓存)中,以便将来读取时重用。如第一次使用findgrep命令时速度比较慢,再次执行就非常快。当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

关注我,更多干货等着你!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值