linux 内存中的cache 和buffer 理解以及区别

cache :pagecache实际上是针对文件系统的,是文件的缓存,在文件上的数据会缓存到pagecahce,文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成,当pagecache中的数据需要刷新时,pagecache中的数据交给buffercache。但这种处理在2.6版本内核之后就变得简单了,没有真正意义的cache操作。

buffer:buffercache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘操作的数据会缓存到buffercache中,如:文件系统的元数据都会缓存到buffercache中。

简单来说,pagecache用来缓存文件数据,buffercache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,数据会缓存到pagecache。若直接采用dd工具对磁盘进行读写,那么数据会缓存到buffercache。

free中的buffer和cache都是基于内存

buffer作为buffercache的内存,是块设备的读写缓冲区,

cache作为pagecache的内存,文件系统的cache

如果cache的值很大,说明cache中的文件数很多,如果频繁访问到的文件都能被cache住,那么磁盘的读IO必会非常小。

总结:

cachecpu和内存之间的,buffer内存和磁盘之间的,都是为了解决速度不对等的问题。

缓存(cache)是把读取过来的数据保存起来,重新读取时若命中,就不去硬盘了,若没有命中就去读硬盘,其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读取的内容不断往后排,直至从中删除。

缓冲(buffer)时根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的的反复寻道,从而提高系统性能,linux有一个守护进程定期清空缓冲内容(即写入磁盘)。

也可以通过sync命令手动清空缓冲。举个例子:我这里有个ext2的的u盘,我往里面cp一个3M的mp3,但u盘的灯没有跳动,过了一会(或者手动输入sync),U盘的灯就跳动起来了。卸载设备时会清空缓存,所以有时候卸载一个设备要等上几秒中。

修改/etc/sysctl.conf中的vm.swappiness右边的数字可以在下次开机时调节swap使用策略。该数字范围是0~100,数字越大越倾向于使用swap。默认为60,可以改一下试试。–两者都是RAM中的数据。

buffer是即将要写入磁盘的,而cache是被从磁盘中读出来的

buffer由各种进程分配,被用在如输入队列等方面。一个简单的例子是某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。

cache经常被用在磁盘的I/O请求上,如果有多个进程要访问某个文件,于是该文件被做成cache以便下次被访问,这样可以提高系统性能。

Buffer Cachebuffer cache,又称bcache,其中文名称为缓冲器高速缓冲存储器,简称缓冲器高缓。另外,buffer cache按照其工作原理,又被称为块高缓

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注