linux page cache和Disk Buffer原理

一、PageCache和Disk buffer的区别

Page Cache主要用来缓存文件的内容,以Page(4K)为单位组织;

Disk Buffer主要缓存设备的读写,以Block(默认1K)为单位组织管理,

二、DiskBuffer的策略

Disk Buffer有两大功能,预读和回写;

1 disk buffer的预读

预读其实就是利用了局部性原理,具体过程是:对于每个文件的第一个读请求,系统读入所请求的页面并读入紧随其后的少数几个页面(通常是三个页面),这时的预读称为同步预读。对于第二次读请求,如果所读页面不在Cache中,即不在前次预读的页中,则表明文件访问不是顺序访问,系统继续采用同步预读;如果所读页面在Cache中,则表明前次预读命中,操作系统把预读页的大小扩大一倍,此时预读过程是异步的,应用程序可以不等预读完成即可返回,只要后台慢慢读页面即可,这时的预读称为异步预读。任何接下来的读请求都会处于两种情况之一:第一种情况是所请求的页面处于预读的页面中,这时继续进行异步预读;第二种情况是所请求的页面处于预读页面之外,这时系统就要进行同步预读。

2. disk buffer的回写方式

i). pdflush模式(2.6.32内核以前)

下面两种情况下,脏页会被写回到磁盘:

  • 在空闲内存低于一个特定的阈值时,内核必须将脏页写回磁盘,以便释放内存。
  • 当脏页在内存中驻留超过一定的阈值时,内核必须将超时的脏页写会磁盘,以确保脏页不会无限期地驻留在内存中。

回写开始后,pdflush会持续写数据,直到满足以下两个条件:

  • 已经有指定的最小数目的页被写回到磁盘。
  • 空闲内存页已经回升,超过了阈值。

ii). bdi_writeback机制

bdi_writeback机制主要解决了原有fdflush机制存在的一个问题:在多磁盘的系统中,pdflush管理了所有磁盘的Cache,从而导致一定程度的I/O瓶颈。bdi_writeback机制为每个磁盘都创建了一个线程,专门负责这个磁盘的Page Cache的刷新工作,从而实现了每个磁盘的数据刷新在线程级的分离,提高了I/O性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux内核中,Page CacheBuffer Cache都是用于缓存文件系统数据的机制,但它们的缓存对象和缓存方式不同。 Page Cache是用于缓存文件系统数据块的机制,它缓存的是文件系统中的整个页(通常为4KB)。当应用程序请求访问文件时,内核会首先在Page Cache中查找对应的页,如果找到了就直接返回给应用程序,避免了访问磁盘的开销。如果Page Cache中没有找到对应的页,则内核会从磁盘中读取相应的数据块,并将其缓存到Page Cache中。Page Cache的优点是能够加速对文件的访问速度,提高系统的性能。但是,它也会占用系统的内存资源,如果文件系统中的文件过多,Page Cache可能会占用大量的内存资源。 Buffer Cache是用于缓存块设备数据块的机制,它缓存的是块设备中的数据块(通常为512字节或4KB)。当应用程序请求访问块设备时,内核会首先在Buffer Cache中查找对应的数据块,如果找到了就直接返回给应用程序,避免了访问块设备的开销。如果Buffer Cache中没有找到对应的数据块,则内核会从块设备中读取相应的数据块,并将其缓存到Buffer Cache中。Buffer Cache的优点是能够加速对块设备的访问速度,提高系统的性能。但是,它也会占用系统的内存资源,如果块设备中的数据块过多,Buffer Cache可能会占用大量的内存资源。 因此,Page CacheBuffer Cache都是用于加速对文件系统或块设备的访问速度的机制,它们的区别在于缓存的对象和缓存的方式不同。Page Cache缓存的是文件系统的整个页,Buffer Cache缓存的是块设备的数据块。Page Cache的缓存方式是基于文件系统的,Buffer Cache的缓存方式是基于块设备的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值