作用:

  Buffer Cache和Page Cache都用来提升IO读写性能,大致原理如下:

  • 读性能: 通过预读提前加载数据,以及缓存频繁访问数据,减少I/O次数,提升读性能;
  • 写性能: 对上层的应用程序直接写入Page/Buffer即可返回,不用等待数据真正落盘;对下层的磁盘,由pdflush内核线程一次性地将多个写请求数据刷新到磁盘,减少I/O次数,提升写性能;

区别

  Buffer Cache和Page Cache最大的差别在于:Page Cache是针对文件系统的缓存,Buffer Cache是针对块设备的缓存,如下图所示: Linux基础之Buffer/Cache

Page Cache的数据是否还要经过Buffer Cache?

  在以前的Linux系统中,当Page Cache的数据需要刷新时,会先写入Buffer Cache,然后再落盘,这样就会显得冗余。为了解决这个问题,在内核版本2.6之后,Page Cache和Buffer Cache进行了整合,文件的系统的IO不再使用Buffer Cache,只有不经过文件系统直接对磁盘操作的数据会被Buffer Cache缓存。

Page Cache的同步

  Page Cache的数据同步有两种方式:Write Through(写穿,同步方式)和Write back(写回,异步方式)。Write Through意味着数据写入Page Cache后还要等待数据落盘才会返回;Write back则指数据写入Page Cache后即可返回,由pdflush内核线程在特定的时候写入磁盘:

  • 用户主动刷盘:调用sync(2)、fsync(2)、fdatasync(2)等系统函数;
  • 操作系统刷盘(时间维度):脏页在内存中驻留时间超过一个特定的阈值;
  • 操作系统刷盘(空间维度):可用内存低于一个特定的阈值;

参考:

  1. Linux系统中的Page cache和Buffer cache
  2. 浅墨: 聊聊Linux IO(下)

相关文章:

  • 2022-12-23
  • 2021-09-01
  • 2021-10-19
  • 2021-07-10
  • 2022-12-23
  • 2021-11-09
  • 2021-06-30
猜你喜欢
  • 2021-12-13
  • 2021-08-06
  • 2021-11-28
  • 2022-12-23
  • 2022-02-19
  • 2021-04-18
  • 2021-09-29
相关资源
相似解决方案