Buffer和Cache

Buffer

直译为缓冲区,主要目的是流量整形,通过buffer可以将大量的小IO合并为少量的大IO。比如多个应用同时写相同的磁盘块,可以通过block buffer将对同一个磁盘块的写操作合并为一个,从而减少IO,提高IO效率。利用Buffer较多的一般为生产者消费者模型。例如,网卡收到网络数据后,可以通过DMA直接将其放到内存的ring_buffer中,在这期间不用中断CPU运行的任务。应用程序收发网络数据时,也是通过socket buffer来对数据进行缓冲以提高系统的整体效率。

Cache

直译为缓存,通过利用程序的局部性原理,将少量需要访问的数据放到高速设备中,以解决 高速设备和低速设备速度不匹配造成的效率下降问题。

 

Linux IO模型中的Buffer和Cache

在linux IO系统中,Buffer一般指Block buffer,他是对原始磁盘块的缓冲。通过Buffer可以减少磁盘IO。Cache一般指 Page Cache,他是对文件系统的Page数据的缓存,在现在的linux实现中,Page Cache一般是通过指针指向Block Buffer,从而避免Page Cache将数据多缓存一份的问题。因此,一般来说,通过文件系统进行读写数据,会影响Page Cache,而绕过文件系统,直接进行裸IO操作,会影响Block Buffer。

free命令中的buffer和cache:

  • Buffers 是内核缓冲区用到的内存,对应的是 /proc/meminfo 中的 Buffers 值。

  • Cache 是内核页缓存和 Slab 用到的内存,对应的是 /proc/meminfo 中的 Cached 与 SReclaimable 之和。SReclaimable 是 Slab 的一部分。Slab 包括两部分,其中的可回收部分,用 SReclaimable 记录;而不可回收部分,用 SUnreclaim 记录。

Buffer和Cache都不仅仅作用于读,也作用于写。

Linux系统中清理系统缓存:

echo 3 > /proc/sys/vm/drop_caches

其他资料: 

https://zhuanlan.zhihu.com/p/645904515

posted @ 2023-08-25 18:05  小张同学哈  阅读(73)  评论(0)    收藏  举报