页缓存(PageCache)和预读机制(readahead )

news2024/11/23 9:30:25

页缓存(PageCache)和预读机制(readahead )

页缓存(PageCache)是操作系统(OS)对文件的缓存,用于加速对文件的读写。

page 是内存管理分配的基本单位, Page Cache 由多个 page 构成,page 在操作系统中通常为 4KB 大小,而 Page Cache 的大小则为 4KB 的整数倍。

一般来说,程序对文件进行顺序读写的速度几乎接近于内存的读写速度,主要原因就是由于OS使用PageCache机制和预读机制对读写访问操作进行了性能优化,将一部分的内存用作PageCache,大大减少磁盘 I/O 次数,加快了数据的访问。

在这里插入图片描述

对于数据的写入,OS会先写入至PageCache内,随后通过异步的方式由pdflush内核线程将PageCache内的数据刷盘至物理磁盘上。

对于数据的读取,由于操作系统为基于 Page Cache 的读缓存机制提供预读机制(readahead),如果一次读取文件时未命中PageCache,OS从物理磁盘上读取文件的同时,会顺序对其他相邻块的数据文件进行预读取,然后缓存到PageCache。

假设用户线程请求读取磁盘上文件 A 的 offset 为 0-3KB 范围内的数据,由于磁盘的基本读写单位为 page(4KB),于是操作系统至少会读 0-4KB 的内容,这恰好可以在一个 page 中装下,但是操作系统出于局部性原理,会选择将相邻磁盘块 offset [4KB,8KB)、[8KB,12KB) 以及 [12KB,16KB) 都加载到PageCache,于是额外在PageCache中申请了 3 个 page用于缓存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1606240.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【观察】容器化部署“再简化”,云原生体验“再升级”

自2013年云原生概念被提出以来,云原生技术和架构在过去十多年得到了迅速的发展,并对数字基础设施、应用架构和应用构建模式带来了深刻的变革。根据IDC预测,到2024年,新增的生产级云原生应用在新应用的占比将从2020年的10%增加到60…

YoloV9改进策略:下采样改进|自研下采样模块(独家改进)|疯狂涨点|附结构图

摘要 本文介绍我自研的下采样模块。本次改进的下采样模块是一种通用的改进方法,你可以用分类任务的主干网络中,也可以用在分割和超分的任务中。已经有粉丝用来改进ConvNext模型,取得了非常好的效果,配合一些其他的改进&#xff0…

MTK MFNR 学习笔记

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、MFNR 简介二、MFNR 开关与决策三、MFNR 相关的adb 命令四、MFNR log 分析五 参考文献 一、MFNR 简介 MFNR : Multiple Frame Noise ReductionMFLL …

lv_micropython for ESP32/S2/S3/C3

由于官方的lv_micropython编译ESP32S3/S2/C3会报错,因为这些芯片的esp-idf底层重写了接口,参照网友提供的方法修改lv_bindings/driver/esp32里的文件,解决编译错误。 问题列举:Issues lvgl/lv_binding_micropython GitHub 一…

Maven的dependencyManagement与dependencies区别

先说结论:Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式。 在maven多模块项目的pom文件中,有的小伙伴会发现最外层的pom文件和里面的pom文件有个地方不一样 如下图 父pom 子pom 一般来说是在maven的最外父工程pom文件里&…

4.18学习总结

多线程补充 等待唤醒机制 现在有两条线程在运行,其中一条线程可以创造一个特殊的数据供另一条线程使用,但这个数据的创建也有要求:在同一时间只允许有一个这样的特殊数据,那么我们要怎样去完成呢?如果用普通的多线程…

云原生Kubernetes: K8S 1.29版本 部署Kuboard

目录 一、实验 1.环境 2.K8S 1.29版本 部署Kuboard (第一种方式) 3.K8S 1.29版本 部署Kuboard (第二种方式) 4.K8S 1.29版本 使用Kuboard 二、问题 1.docker如何在node节点间移动镜像 一、实验 1.环境 (1)主机 表1 主机 主机架构版本IP备注ma…

Java学习-Module的概念和使用、IDEA的常用设置及常用快捷键

Module的概念和使用 【1】在Eclipse中我们有Workspace (工作空间)和Project (工程)的概念,在IDEA中只有Project (工程)和Module (模块)的概念。 这里的对应关系为: IDEA官网说明: An Eclipse workspace is similar to a project in IntelliJ IDEA An Eclipse pr…

二刷大数据(三)- Flink1.17

目录 Flink概念与SparkStreaming区别分层API 工作流程部署模式**Local Mode****Standalone Mode****YARN Mode****Kubernetes Mode****Application Mode** 运行架构stand alone 核心概念算子链任务槽 窗口窗口**窗口的目的与作用****时间窗口(Time Windows&#xff…

ARouter之kotlin build.gradle.kts

ARouter之kotlin build.gradle.kts kotlin的配置需要用到kapt 项目的build.gradle.kts plugins {id("com.android.application") version "8.1.2" apply falseid("org.jetbrains.kotlin.android") version "1.9.0" apply falseid(&…

typecho博客的相对地址实现

typecho其中的博客地址,必须写上绝对地址,否则在迁移网址的时候会出现问题,例如页面记载异常 修改其中的 typecho\var\Widget\Options\General.php 中的165行左右, /** 站点地址 */if (!defined(__TYPECHO_SITE_URL__)) {$siteUrl new Form\Element\Text(siteUrl,null,$this-…

OpenCV从入门到精通实战(五)——dnn加载深度学习模型

从指定路径读取图像文件、利用OpenCV进行图像处理,以及使用Caffe框架进行深度学习预测的过程。 下面是程序的主要步骤和对应的实现代码总结: 1. 导入必要的工具包和模型 程序开始先导入需要的库os、numpy、cv2,同时导入utils_paths模块&…

【opencv】dnn示例-person_reid.cpp 人员识别(ReID,Re-Identification)系统

ReID(Re-Identification,即对摄像机视野外的人进行再识别) 0030_c1_f0056923.jpg 0042_c5_f0068994.jpg 0056_c8_f0017063.jpg 以上为输出结果:result文件夹下 galleryLIst.txt queryList.txt 模型下载: https://github.com/ReID-Team/ReID_e…

华为手机p70即将上市,国内手机市场或迎来新局面?

4月15日,华为官宣手机品牌全新升级,p系列品牌升级为Pura。华为P70系列手机预计将于2024年第一季度末发布,而网友也纷纷表示期待p70在拍照、性能上的全新突破。 网友们对华为P70系列的热情高涨,也印证了国内高端手机市场的潜力巨大…

吴恩达机器学习笔记:第 8 周-13 聚类(Clustering)13.1-13.2

目录 第 8 周 13、 聚类(Clustering)13.1 无监督学习:简介 第 8 周 13、 聚类(Clustering) 13.1 无监督学习:简介 在这个视频中,我将开始介绍聚类算法。这将是一个激动人心的时刻,因为这是我们学习的第一个非监督学习算法。我们…

数仓建模—数据仓库初识

数仓建模—数据仓库初识 数据仓库之父Bill Inmon在1991年出版的"Building the Data Warehouse"一书中所提出的定义被广泛接受 数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integ…

SOLIDWORKS Composer如何使用3D工具实现更真实的动画效果

当我们使用SOLIDWORKS composer创建动画时,往往会涉及到产品的安装与拆解,现实生活中我们在拆卸组装产品的时候,我们往往需要一些工具的协助,比如扳手、螺丝刀等等,那么我们如何在虚拟动画中也将这一过程以逼真的形式展…

【网站项目】新生报到系统小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

【XR806开发板试用】XR806在U8G2上增加MQTT+JSON控制

一、前言 U8G2移植参见之前写的文章 https://aijishu.com/a/1060000000292472本次增加MQTTJSON是站在大佬的肩膀上,参见 https://aijishu.com/a/1060000000284320CJSON的使用,参见 https://blog.csdn.net/fengxinlinux/article/details/53121287 二、成…

Hive进阶(2)----HDFS写入数据流程(赋图助君理解)

HDFS写入数据流程 一、写入流程 1、 Client向NameNode发起RPC请求,来确定请求文件block所在的位置; 2、 NameNode会视情况返回文件的部分或者全部block列表,对于每个block,NameNode都会返回含有该block副本的DataNode地址&…