linux系统中buffer和cache的比较

Buffers
是内核缓冲区用到的内存,对应的是/proc/meminfo中的buffers的值,是对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会特别大(20MB左右),这样,内核就可以把分散的写集中起来,统一优化磁盘的写入,可以把多次小的写合并成单次大的写等等。

Cache
是内核页缓存和Slab用到的内存,对应的是/proc/meminfo中cache与SReclaimable之和,cache是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据,这样下次访问这些文件数据时,就可以直接从缓存中快速获取,而不需要再次去访问磁盘

SReclaimable
是Slab的一部分,Slab包括两部分,其中的可回收部分,用SReclaimable记录;而不可回收部分,用SUnreclaim记录

可以看到,这些数据都是可以通过/proc/meminfo可以查看到,而proc是linux内核提供的一种特殊的文件系统,也是用户跟内核交互的接口。

接下来做一个关于buffer和cache的实验:
在这里插入图片描述
首先清理一下缓存

cache:

在这里插入图片描述
在这里插入图片描述
当我去读文件的时候,Cache的值也是一直变大,bi的值也是一直大于0,所以读文件用到了Cache,这是没有问题的。
注:bi 和bo分别表示块设备读取和写入的大小,单位为块/秒,因为Linux中的块的大小是1KB,所以这个单位也就是等价于KB/s
在这里插入图片描述
在这里插入图片描述
可以看到,在写文件的时候,使用vmstat命令去查看,Cache的值一直在变大,bo的值也比较大,说明在写文件的时候,也用到了Cache。

Buffer:

在这里插入图片描述
在这里插入图片描述
可以看到,在写磁盘的时候,buff的值是比较大的,增长速度也是比较快的,bo的值也较大,所以在写磁盘的时候,用到了buffer,这是正确的。

在这里插入图片描述
在这里插入图片描述
可以看到,在读磁盘的时候,使用vmstat时buffer的值也是在一直变大,bi的值也是比较大,所以,在读磁盘的时候,也用到了buffer。

结论:

虽然官方文档说cache是用于文件读的缓存,buffer是用于磁盘写的缓存,但是,通过自己做实验,最后证明:

1.读文件时数据会缓存到Cache中,而读磁盘时数据会缓存到Buffer中
2.写文件时数据会缓存到Cache中,而写磁盘时数据会缓存到Buffer中

简单来说,Buffer是对磁盘数据的缓存,而Cache是文件数据的缓存,它们既会用在读请求中,也会用在写请求中。

发布了13 篇原创文章 · 获赞 2 · 访问量 459

猜你喜欢

转载自blog.csdn.net/qq_38114620/article/details/102551157