buffer cache和page cache的区别?Buffer,Cache区别

Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当page cache的数据需要刷新时,page cache中的数据交给buffer cache
Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存到buffer cache中。
 简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到buffer cache
Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache)L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB512KB L2 Cache
Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。
Free中的buffercache:(它们都是占用内存):
buffer : 作为buffer cache的内存,是块设备的读写缓冲区
cache: 作为page cache的内存, 文件系统的cache
如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO 必会非常小。
当一个进程启动时,内核会先扫描caches和内存中有没有进程需要的数据,如果有就直接用,修改后在把脏页同步到磁盘即可。如果没有,则需要把磁盘的数先写到内存中的高速缓存中cache,这样能减少CPU等待时间,提高效率。
buffercache都是把磁盘数据写到内存中时用的,说白了他们俩都是内存的一部分;不过cache是高速缓存是把进程用的数据写到cache来减少cpu读取数据时间的;而buffer是当从磁盘中读取很长的数据,首先读入的一部分要放在buffer暂时存放,读完后一起使用;所以在cache占用的内存比较大时不能说系统性能差

注意:Linux的内存会被充分利用,在物理内存分配给进程后有比较多的剩余量,系统会把物理内存按当前的需要当作buffercache来使用,所以一般我们看到服务器的物理内存used都比较高,并不是说内存不够用了而是Linux充分利用内存的一种表现;当内存剩余量达到一个阀值,系统会字段清理一下buffercache来释放内存,以供进程分配使用。而windows系统只有在为进程分配内存时才利用物理内存,平时不用所以,当物理内存很大但跑的程序不多时,物理内存大部分都是处于空闲状态。



本文是总结性质的,参考了多篇博文,但是看的多了,地址也没保存,希望被参考的作者见谅,如若被参考的作者看到,烦请告知,我会立刻标注参考地址

你可能感兴趣的:(Linux)