Linux中cache和buffer的区别
一、buffer/cache两者区别
buffer指Linux内存的:
Buffer cache
。翻译成中文可以叫做缓冲区缓存
。 是内核缓冲区用到的内存,对应的是 /proc/meminfo 中的 Buffers 值。cache指Linux内存中的:
Page cache
。翻译成中文可以叫做页面缓存
。是内核页缓存Slab 用到的内存,对应的是 /proc/meminfo 中的 Cached 与 SReclaimable 之和。
Buffers 是对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会特别大(20MB 左右)。这样,内核就可以把分散的写集中起来,统一优化磁盘的写入,比如可以把多次小的写合并成单次大的写等等。合并这里似乎和大数据生态中的Hadoop组件中的小文件合并有相似。
Cached 是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据。这样,下次访问这些文件数据时,就可以直接从内存中快速获取,而不需要再次访问缓慢的磁盘。
SReclaimable 是 Slab 的一部分。Slab 包括两部分,其中的可回收部分,用 SReclaimable 记录;而不可回收部分,用 SUnreclaim 记录。
Buffer 既可以用作“将要写入磁盘数据的缓存”,也可以用作“从磁盘读取数据的缓存”。
Cache 既可以用作“从文件读取数据的页缓存”,也可以用作“写文件的页缓存”。
简单来说,Buffer 是对磁盘数据的缓存,而 Cache 是文件数据的缓存,它们既会用在读请求中,也会用在写请求中。
二、如何划分buffer/cache
1、操作系统的角度:这块内存确实被操作系统使用了。
2、用户角度:如果用户要使用,这块内存是可以很快被回收而被用户空间程序使用,因此从用户角度而言这块内存应被划为空闲状态。
三、buff/cache的好处
这是Linux一种非常优秀的设计,目的就是为了提升磁盘IO的性能,从低速的块设备上读取的数据会暂时保存在内存中,即使数据在当时已经不再需要了,但在应用程序下一次访问该数据时,它可以从内存中直接读取,绕开了低速的块设备,从而提高系统的整体性能。
为了提高系统性能和不浪费内存,linux把多的内存做了cache,以提高io速度.你的那些内存并没有被占用。
四、清除缓存
1.表示清除page cache
。
echo 1 > /proc/sys/vm/drop_caches
2表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存)
echo 2 > /proc/sys/vm/drop_caches
3表示清除pagecache和slab分配器中的缓存对象。3等于1和2
echo 3 > /proc/sys/vm/drop_caches