Linux中cache和buffer的区别 – 记忆角落

Linux中cache和buffer的区别

/ 0评 / 0

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

发表评论

您的电子邮箱地址不会被公开。