8.3 提高磁盘I/O速度的途径
L48
学习目标
通过磁盘高速缓存、提前读、延迟写等技术提高磁盘I/O速度。
- 磁盘高速缓存(Disk Cache):在内存中开辟缓存区暂存常用盘块数据,减少磁盘访问次数。
- 提前读和延迟写:提前读在请求时多读相邻数据;延迟写将写操作暂存缓存,稍后批量写盘。
- 优化物理块的分布:将同一文件的盘块安排在同一柱面或相邻柱面,减少寻道时间。
- 虚拟盘(RAM Disk):用内存模拟磁盘,速度快但断电丢失数据。
原理 · 深入理解
8.3 提高磁盘I/O速度的途径
本节概览:先建立「提高磁盘I/O速度的途径」的框架,再依次展开下列小节。
- 磁盘高速缓存(Disk Cache)
- 提高磁盘I/O速度的其它方法
- 廉价磁盘冗余阵列(RAID)
8.3.1 磁盘高速缓存(Disk Cache)
数据交付(Data Delivery):若 I/O 请求所需数据能从磁盘高速缓存中获取,便将高速缓存中的数据传送给请求进程。系统可采取两种交付方式。
- 数据交付:直接将高速缓存中的数据传送到请求进程的工作区
- 指针交付:只把指向高速缓存中某数据区的指针传送给请求进程,避免数据复制
置换算法:不少系统在设计高速缓存置换算法时,除考虑最近最久未使用(LRU)原则外,还综合考虑以下几点。
- 访问频率
- 可预见性
- 数据的一致性
周期性地写回磁盘:根据 LRU 算法,经常被访问的盘块数据可能一直保留在高速缓存中,长期不会被写回磁盘。为此需定期把高速缓存中已修改的数据写回磁盘,避免因故障丢失。
8.3.2 提高磁盘I/O速度的其它方法
除高速缓存外,还有许多有效提高磁盘 I/O 速度的方法。
- 提前读:在读当前盘块时,把下一盘块也提前读入内存
- 延迟写:本应写回磁盘的数据先暂存内存,待空闲时再写盘
- 优化物理块的分布:把经常顺序访问的盘块安排在同一柱面,减少磁头移动
- 虚拟盘(RAM 盘):利用内存空间仿真磁盘,设备驱动接受标准磁盘操作,但实际在内存中执行,对用户透明
8.3.3 廉价磁盘冗余阵列(RAID)
RAID 分级:RAID 刚推出时分为 6 级,后来又增加了 RAID 6 级和 RAID 7 级。
- RAID 0 级
- RAID 1 级
- RAID 3 级
- RAID 5 级
- RAID 6 级和 RAID 7 级
并行交叉存取:把大、中型机中用于提高内存访问速度的并行交叉存取技术应用到磁盘存储系统中,以提高磁盘 I/O 速度。
系统有多台磁盘驱动器,将每一盘块数据分为若干子盘块数据,分别存储到各磁盘相同位置上。传输时采取并行方式,各子盘块同时向内存传输,使传输时间大大减少。
RAID 的主要优点如下:
- 磁盘 I/O 速度高:并行交叉存取可使磁盘 I/O 速度提高 N-1 倍
- 可靠性高:除 RAID 0 外各级都采用容错技术,某磁盘损坏时不会丢失数据,可根据其它磁盘信息恢复,可靠性比单台磁盘机高出一个数量级
- 性能/价格比高:体积和价格仅为相同容量和速度大型磁盘系统的 1/3,以牺牲 1/N 容量为代价换取高可靠性
做 · 交互动画
- 根据「学习目标」列出 3 个关键词,对照原理段落解释给自己听。
提高磁盘I/O速度的途径
用控件单步操作;日志区记下每一步发生了什么。
总结与提升
- 能说出一种提高 Flash 寿命的软件策略。
- 能用自己的话复述学习目标,并指出概念与板上实验的对应。
延伸思考
- 断电瞬间写元数据为何危险?
- 如果把本节机制拿到 Linux 或完整 OpenHarmony 上,会多出哪些硬件假设?