介绍

页高速缓存是一种软件机制,它允许系统把通常存放在磁盘上的一些数据保留在RAM中,以便对哪些数据进一步访问不用再访问磁盘而能尽快得到满足。

页高速缓存流程

读请求

操作系统内核在读取磁盘时使用页高速缓存。当用户对磁盘进行读请求时,如果读取的页不在高速缓存中,那么操作系统内核会从磁盘读取数据块追加到页高速缓存中;如果读取的也在高速缓存中,那么操作系统内核就直接访问页高速缓存而会读取磁盘。

写请求

操作系统内核在写磁盘时也会使用也高速缓存。当用户对磁盘进程写请求时,操作系统内核会先检查对应的页是否已经在高速缓存中,如果不在,就现在其中增加一个新项,并用要写入的磁盘中的数据填充到新项中。
当时I/O数据的传送并不是在写入页高速缓存后就立即开始写入磁盘的,而是要等待写入条件满足后才会写入磁盘(延迟写)。

脏页写入条件

  1. 页高速缓存区内存已经被占用完,但是现在依然有新页要放入到页高速缓存中或者脏页数量已经太多,那么操作系统内核会选择对应的页写入磁盘以释放页高速缓存区的内存空间;
  2. 干净的页变成脏页的时间太长(防止刷盘饥饿和数据丢失问题);
  3. 进程调用了对应的刷盘API,比如:Linux的函数sync()、fsync()或fdatasync()系统调用。

Linux页高速缓存

查看脏页大小

cat /proc/meminfo
  1. Dirty:写入缓存页的大小
  2. Writeback: 缓存写入硬盘的大小

执行一次文件复制导致脏页增加:

查看脏页比例

cat /proc/sys/vm/dirty_ratio
# 比例为总内存大小的百分比

更多参考

  1. linux页高速缓存_脏页_延迟写_I/O内核参数优化_pdflush,链接: https://www.douyacun.com/article/37c7ae7c04e74ad0aa75fda1b907ea48

总结

  1. 上层用户对同一磁盘块反复频繁访问,那么这种情况下使用页高速缓存可以提升性能;反过来如果上层用户不会对同一磁盘块反复频繁访问,那么使用页高速缓存反而会降低性能和占用内存空间;
  2. 页高速缓存在提供高性能的文件读写,但是可能在计算机故障时可能会丢失数据。如果上层应用(如数据库)对数据刷盘有限制,那么就需要使用直接I/O(Linux设置O_DIRECT标志来禁用Linux页高速缓存),然后上层应用可以根据业务特性自定义高速缓存机制而不是使用操作系统的页高速缓存。

参考

  1. 深入理解Linux内核(第三版)
  2. linux页高速缓存_脏页_延迟写_I/O内核参数优化_pdflush

页高速缓存(Page Cache)相关推荐

  1. linux文件系统的页高速缓存page cache中的核心数据结构address_space

    address_space对象是文件系统中关于内存中页高速缓存的核心数据结构.这篇博客以address_space对象为切入点,分析文件系统的页高速缓存.(这里大部分都是从原作者那里复制过来的,外加上 ...

  2. 工作于内存和文件之间的页缓存, Page Cache, the Affair Between Memory and Files

    原文作者:Gustavo Duarte 原文地址:http://duartes.org/gustavo/blog/post/what-your-computer-does-while-you-wait ...

  3. linux内核学习6:Linux的CPU高速缓存cache和页高速缓存cache,buffer

    一.CPU高速缓存(cache) 参考:https://blog.csdn.net/u014470361/article/details/80060701 参考:https://blog.csdn.n ...

  4. Linux内核设计与实现---页高速缓存和页回写

    页高速缓存和页回写 1 页高速缓存 2 基树 3 缓冲区高速缓存 4 pdflush后台例程 膝上型电脑模式 bdflush和kupdated 避免拥塞的方法:使用多线程 页高速缓存(cache)是L ...

  5. linux那些事之page cache

    page cache page cache又称高速缓存,主要是针对文件文件系统,为了减少不必要的磁盘IO操作(读/写)造成卡顿问题,内核将磁盘文件中的内容缓存到内存中,并选择适当时机对磁盘进行读写操作 ...

  6. 和linux关系_Linux内核Page Cache和Buffer Cache关系及演化历史

    在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘.这里提到的脏页(dirty ...

  7. Linux的Page Cache

    1. Page Cache 何为Page Cache 为了了解Page Cache我们可以看一下Linux的文件I/O系统 从图中可以看出,Page Cache是由Linux内核进行管理的,而且通过m ...

  8. linux刷新磁盘_Linux内核Page Cache和Buffer Cache关系及演化历史

    在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘.这里提到的脏页(dirty ...

  9. Linux读写缓存Page Cache

    一. 读写缓存Page Cache Linux对文件读写并不是每次都进行磁盘IO,而是将对应的磁盘文件缓存到内存上,之后对该文件的操作实际上也是对内存的读写. 缓存俗称页缓存(page cache), ...

  10. 什么是页缓存(Page Cache)(转载)

    我们知道文件一般存放在硬盘(机械硬盘或固态硬盘)中,CPU 并不能直接访问硬盘中的数据,而是需要先将硬盘中的数据读入到内存中,然后才能被 CPU 访问. 由于读写硬盘的速度比读写内存要慢很多(DDR4 ...

最新文章

  1. Scrapyd部署Scrapy框架项目
  2. P1603 斯诺登的密码
  3. 科大星云诗社动态20210410
  4. sql查询所有商品的信息_属于菜鸟的sql 干货(7)
  5. HDU1878 欧拉回路
  6. 基于mui框架读取nfc数据_基于NFC的数据采集软件系统的设计与实现
  7. 罗技 连点 脚本_罗技推出多款《英雄联盟》联名外设 看了就忍不住想要
  8. 实时计算框架:Flink集群搭建与运行机制
  9. [ES6] 细化ES6之 -- Class关键字
  10. java 熔断_熔断理解 - THISISPAN - 博客园
  11. 查询所有_学会DSUM函数,轻松搞定所有的数据查询与数据求和
  12. spring mvc controller间跳转 重定向 传参
  13. TensorFlow基础篇(八)——tf.contrib.layers.l1regularizer()-12_regularizer(lambda)
  14. java计算机毕业设计小区宠物管理系统源码+系统+数据库+lw文档
  15. 云栖号在线课堂—云服务器数据库快速入门特辑
  16. winform自定义日历控件
  17. VMware破解密码
  18. Pycharm 去掉拼音检查,大小写检查,自动补全不区分大小写
  19. d3-axis坐标轴
  20. 三菱FX系列PLC备份电池电压低报警的处理方法

热门文章

  1. android 动态仿磁贴,UWP开发:给App加上动态磁贴
  2. springmvc转换器converter的使用
  3. 计算机切换用户界面键,电脑如何切换屏幕_电脑怎么切换另一个界面快捷键
  4. mysql中as是什么意思_数据库中as是什么意思
  5. 利用谷歌搜索建立自己的站内搜索引擎
  6. 2022-2028全球及中国薪酬管理系统行业研究及十四五规划分析报告
  7. CCF计算机职业资格认证系列一CCF软件能力认证
  8. 程序员工资高会封顶吗?网友:会谢顶
  9. 《光剑文集》青玉案: 27首
  10. 【秘密】我经历过的币圈天使融资,了解一下