硬盘性能提升100倍的秘密:看懂顺序I/O的魔力
I/O缓存
局部性原理
局部性原理(Principle of Locality)指在程序执行过程中,倾向于访问某些局部特定的数据或指令,而不是随机地访问整个内存空间。这是缓存技术得以有效的根本原因。
1)时间局部性(Temporal Locality):如果一个数据项被访问,那么在不久的将来它很可能被再次访问(如循环中的变量、常用函数)。
2)空间局部性(Spatial Locality):如果一个数据项被访问,那么物理地址邻近它的数据项也很可能在不久的将来被访问(如顺序执行的指令、数组元素的遍历)。
局部性原理,很好平衡了存储介质的存取速率和成本的问题。以计算机存储层次为例,寄存器缓存高速缓存的数据,高速缓存 L1~L3层视具体实现彼此缓存或直接缓存内存的数据,而内存往往缓存来自本地硬盘的数据。
Page Cache

操作系统内核为了提升磁盘I/O性能,利用主存中的一部分空间作为磁盘数据的缓存,这就是Page Cache(在Linux中如此称呼,也称Buffer Cache)。它位于应用程序的read/write系统调用与底层块设备驱动之间,利用局部性原理工作。
1)当一个数据页被从硬盘读取到内存时,它被存储在Page Cache中。如果这个数据页在近期内被再次访问(时间局部性),那么可以直接从Page Cache中读取,而无需再次访问硬盘。
2)当一个数据页被读取时,操作系统通常会预读取一些附近的数据页(空间局部性),并将它们也存储在Page Cache中,以便后续的访问。
Page Cache的大小是根据当前系统的可用内存和工作负载动态调整的,此外还会通过页面置换算法如 LRU (Least Recently Used)定期淘汰旧的数据页。Page Cache可以大大减少硬盘I/O,从而提高系统的性能。
Page Cache支持写回(Write-back)和写穿(Write-through)两种策略:
1)在写回策略中,当程序写入数据时,数据首先被写入Page Cache,然后在适当的时机被写入硬盘。
2)在写穿策略中,数据同时被写入Page Cache和硬盘。
Linux下默认使用写回策略,即文件操作的写只写到Page Cache就返回。Page Cache中被修改的内存页称之为脏页(Dirty Page),脏页在特定的时候被一个叫做pdflush(Page Dirty Flush)的内核线程写入硬盘,写入的时机和条件如下:
1)当空闲内存低于一个特定的阈值时。
2)当脏页在内存中驻留时间超过一个特定的阈值时。
3)用户进程调用sync()、fsync(fd)、fdatasync(fd)系统调用时。
顺序I/O

顺序I/O(Sequential I/O)是一种数据访问模式,其中数据按照连续的顺序进行读取或写入。这与随机I/O(Random I/O)形成对比,随机I/O是指数据的访问位置在存储设备上是随机分布的。
顺序I/O的性能之所以高,主要是因为它能够最大化利用存储设备的局部性原理,并且减少了寻道时间和旋转延迟。
1)局部性原理:在顺序I/O中,数据是连续读取或写入的,Page Cache可以将文件的连续数据块缓存在内存中,以提供快速的连续读取。此外Page Cache可以将内存中缓存的连续数据,比如按页大小批次刷新到硬盘。这样可以减少频繁的硬盘写入操作。
2)减少机械硬盘的寻道时间和旋转延迟:寻道操作指磁头移动到硬盘的正确轨道的过程,旋转延迟指磁头等待硬盘旋转到正确位置的时间。在顺序I/O中,由于数据是连续存储的,因此可以大大减少寻道时间和旋转延迟,从而提高I/O性能。
3)虽然固态硬盘没有机械部件,随机读性能远好于机械硬盘,但顺序I/O仍然更优。这是因为固态硬盘内部以页(Page,如4KB/8KB/16KB)为单位读写,以块(Block,通常包含多个页,如128-512KB)为单位擦除。随机写小数据块可能导致“读-修改-擦除-写”的复杂流程,引发写放大。顺序写则能更高效地利用NAND闪存的特性,减少内部管理开销。
内存访问速度和硬盘访问速度的对比结果。
1)硬盘访问时间等于寻道时间+旋转时间+传输时间的总和。
寻道时间:8ms~12ms;
旋转时间:7200转/min:半周4ms;
传输时间:50M/s,约0.3ms 。
2)性能量级对比:硬盘随机I/O ≪ 硬盘顺序I/O(尤其对HDD) ≈ 内存随机I/O≪ 内存顺序I/O(内存的顺序访问也能受益于处理器 Cache Line的填充等)。
3)机械硬盘和固态硬盘构成:
机械硬盘:核心是高速旋转的磁盘盘片(表面覆盖磁性材料)和在盘片上移动的磁头臂。通过改变磁性材料的极性来存储0和1。
固态硬盘:核心是NAND闪存颗粒(Flash Memory)阵列,由主控芯片负责管理数据的读写、磨损均衡、垃圾回收等。通过在浮栅中存储电荷来表示0和1。

未完待续
很高兴与你相遇!如果你喜欢本文内容,记得关注哦!!!
硬盘性能提升100倍的秘密:看懂顺序I/O的魔力的更多相关文章
- 优化临时表使用,SQL语句性能提升100倍
[问题现象] 线上mysql数据库爆出一个慢查询,DBA观察发现,查询时服务器IO飙升,IO占用率达到100%, 执行时间长达7s左右.SQL语句如下:SELECT DISTINCT g.*, cp. ...
- 转--优化临时表使用,SQL语句性能提升100倍
转自:http://www.51testing.com/html/01/n-867201-2.html [问题现象] 线上mysql数据库爆出一个慢查询,DBA观察发现,查询时服务器IO飙升,IO占用 ...
- Databricks缓存提升Spark性能--为什么NVMe固态硬盘能够提升10倍缓存性能(原创)
我们兴奋的宣布Databricks缓存的通用可用性,作为统一分析平台一部分的 Databricks 运行时特性,它可以将Spark工作负载的扫描速度提升10倍,并且这种改变无需任何代码修改. 1.在本 ...
- Web 应用性能提升 10 倍的 10 个建议
转载自http://blog.jobbole.com/94962/ 提升 Web 应用的性能变得越来越重要.线上经济活动的份额持续增长,当前发达世界中 5 % 的经济发生在互联网上(查看下面资源的统计 ...
- MySQL 5.7 优化SQL提升100倍执行效率的深度思考(GO)
系统环境:微软云Linux DS12系列.Centos6.5 .MySQL 5.7.10.生产环境,step1,step2是案例,精彩的剖析部分在step3,step4. 1.慢sql语句大概需要13 ...
- 重构、插件化、性能提升 20 倍,Apache DolphinScheduler 2.0 alpha 发布亮点太多!
点击上方 蓝字关注我们 社区的小伙伴们,好消息!经过 100 多位社区贡献者近 10 个月的共同努力,我们很高兴地宣布 Apache DolphinScheduler 2.0 alpha 发布.这是 ...
- 阿里云maven仓库地址,速度提升100倍
参照:https://www.cnblogs.com/xxt19970908/p/6685777.html maven仓库用过的人都知道,国内有多么的悲催.还好有比较好用的镜像可以使用,尽快记录下来. ...
- Elasticsearch Reindex性能提升10倍+实战
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484134&idx=1&sn=750249a ...
- 如何利用缓存机制实现JAVA类反射性能提升30倍
一次性能提高30倍的JAVA类反射性能优化实践 文章来源:宜信技术学院 & 宜信支付结算团队技术分享第4期-支付结算部支付研发团队高级工程师陶红<JAVA类反射技术&优化> ...
- 有史以来性价比最高最让人感动的一次数据库&SQL优化(DB & SQL TUNING)——半小时性能提升千倍
昨天,一个客户现场人员急急忙忙打电话找我,说需要帮忙调优系统,因为经常给他们干活,所以,也就没多说什么,先了解情况,据他们说,就是他们的系统最近才出现了明显的反应迟钝问题,他们的那个系统我很了解,软硬 ...
随机推荐
- web ctf日记
X-Forworded-For:从本地访问 Refer:从**网址访问 一句话木马:`<?php @eval($_POST['a']);?>` eval将a作为PHP程序post进入(用蚁 ...
- 飞牛OS给容器魔方上行宽带限速
下面我将详细讲解(容器网络命名空间限速)的持久化配置步骤,确保在飞牛OS重启后自动生效.请严格按照顺序执行以下操作: ️ 完整持久化配置教程(带详细解释) 步骤1:确认容器魔方名称 # 查看运行的容器 ...
- 2025年6月Docker镜像加速失效终极解决方案
以下是融合整理的Docker镜像加速终极解决方案,结合基础配置与深度技术方案,形成分层递进的完整体系: 一.分层加速架构 图表 二.全链路解决方案 1. 基础层:公共镜像源(5分钟快速配置) json ...
- gitlabrunner之executor配置拉取镜像的账户密码
docker executor $ cat config.toml ...... [[runners]] environment = ["DOCKER_AUTH_CONFIG={\" ...
- 化学数据分析AI实验室?ChatMoney帮你打造
本文由 ChatMoney团队出品 AI确实是个好东西,但AI到底是有什么用?其实很多人都没搞明白.AI如果在某个行业用的好,是能带来很大经济价值的.就拿AI在化学应用来说,AI在化工领域上的应用和化 ...
- 现代Web安全实践:基于Token与Refresh Token的单点登录(SSO)实现
在数字化转型加速的今天,单点登录(SSO)已成为企业身份管理的核心基础设施.袋鼠云UED团队在过去几年中,为金融.政务.医疗等领域的大型系统构建SSO解决方案.本文将分享基于Token的标准SSO ...
- ET框架服务端部署到Linux
运行环境:Centos7.3 + JetBrains Rider 2020 + ET 5.0 + Mac笔记本 (这里要说一下低于Centos7的没法安装.net core环境) 服务器和资源服务部署 ...
- ES索引迁移优化:3倍速ReIndex + 零感知切换
在大模型驱动的时代,向量模型.索引抽取模型.文本切分模型(chunking)的迭代速度令人目不暇接,几乎每几个月就要升级一次.随之而来的,是Elasticsearch索引结构的频繁变更需求.然而,ES ...
- 提前完成今年flag😍
大半夜的头脑一热就冲上去了,其实很多年前就该这样做的,算是给以前的自己一个答复吧
- Ubuntu系统安装部署Pandawiki智能知识库
一.系统环境准备 bash # 更新系统 sudo apt update && sudo apt upgrade -y sudo apt install -y git python3- ...