大容量存储¶
本章问题:磁盘读一个块的时间花在哪里?怎样安排请求、保存冗余,并理解SSD的额外写入?
学习顺序:
- 把机械盘服务时间拆成寻道、旋转、传输等部分。
- 按方向和端点规则画磁盘调度路径。
- 分清物理设备、分区、文件系统与网络存储接口。
- 看SSD更新、垃圾回收和写放大。
- 计算RAID容量、校验和故障恢复边界。
机械盘的一次读取¶
机械盘有旋转盘片;圆环形记录区域称磁道,磁道再划分成扇区。磁头移动到目标磁道后,还要等目标扇区转到磁头下,才能读出内容。
同一半径上的多个盘面磁道构成柱面。题目用柱面编号画寻道路径时,先算的是移动距离。
flowchart LR
Q["请求进入队列"] --> S["寻道:磁头移动到目标磁道"]
S --> R["旋转等待:目标扇区转到磁头下"]
R --> T["传输:读出目标字节"]
T --> F["完成与控制器收尾"]
响应时间覆盖排队至完成,服务时间只统计设备为本请求实际工作的阶段。请求越多,排队可能越长,即使同一个块的寻道和传输时间没有变化。
机械盘用磁头选择磁道,再等待目标扇区旋转到磁头下,最后传输数据。一次服务时间通常由寻道、旋转等待、传输和控制器开销组成;若请求先排队,响应时间还要加排队时间。
转速 \(r\) 转/分钟时,一周为 \(60/r\) 秒。目标相位均匀时,平均旋转等待为半周 \(30/r\) 秒。读取D字节、传输速率V字节/秒,传输耗时 \(D/V\)。
6000转/分钟对应一周10 ms,平均5 ms;5000 B按50 MB/s传输,若MB为 \(10^6\) B,耗时0.1 ms。
再加寻道4 ms、控制器0.2 ms,总服务9.3 ms。
磁头走过多少柱面是距离,不能直接当毫秒,除非题目给出距离到时间的关系。柱面、磁道、扇区坐标的映射也须按题给编号、每磁道扇区数和磁头数逐级除余。
练习 1¶
题目
自编题:机械盘6000转/分钟,平均寻道4 ms,控制器开销0.2 ms。读取5000 B,速率50 MB/s;MB=\(10^6\) B。目标相位均匀,无请求排队。
- ① 求平均旋转、传输、总服务时间。
- ② 有人把磁头移动30柱面直接写为30 ms,指出缺失的条件。
参考解答
解答
- 一周60/6000=0.01 s=10 ms。
- 平均旋转为半周,得5 ms。
- 传输5000/(50×1,000,000)=0.0001 s,即0.1 ms。
- 总服务时间4+5+0.1+0.2=9.3 ms。
- 30柱面是距离,不是时间;
- 还缺寻道时间与距离的关系或明确速率模型。
- 本题没有排队,不能额外加入未知排队时间。
判分要点
- 须用半周而非一周作平均旋转等待。
- 须区分MB与bit并统一ms单位。
- 须明确柱面距离不能无条件转换为毫秒。
六种调度先定方向¶
手算先把请求按柱面位置画在轴上,再记录初始方向。
SCAN/LOOK的区别在“走到物理端点还是最后一个请求”;普通与循环版本的区别在“反向途中服务,还是回绕后再按同一方向服务”。路径写全后,把相邻位置之差的绝对值相加。
若题目要求最后请求完成就停止,不再补上之后尚未走的端点。
- FCFS按请求到达次序;
- SSTF选离当前磁头最近者,可能让远请求饥饿。
- SCAN向一个方向服务,到物理端点再反向;
- LOOK只到该方向最远请求就反向。
- C-SCAN只单向服务,到端点后回另一端,回程不服务;
- C-LOOK从最远请求回到另一端最远请求。
例子与推演
例:柱面0—99,起点40,初始向大号,请求按70、20、90、10到达且全部已排队,无新请求。所有移动都计距离,完成最后请求立即停止:
| 算法 | 路径 | 总柱面数 |
|---|---|---|
| FCFS | 40→70→20→90→10 | 230 |
| SSTF | 40→20→10→70→90 | 110 |
| SCAN | 40→70→90→99→20→10 | 148 |
| LOOK | 40→70→90→20→10 | 130 |
| C-SCAN | 40→70→90→99→0→10→20 | 178 |
| C-LOOK | 40→70→90→10→20 | 140 |
SCAN多走到99再回来,比LOOK多18;C-SCAN回绕99→0也计99。题目若明确回绕不计费,只减那一段,不改变服务顺序。
若请求动态到达,还要判断磁头经过时它是否已存在,不能把晚到请求提前排序。
练习 2¶
题目
自编题:柱面0—99,起点40,初始向大号。全部请求同时已到达,队列70、20、90、10;以后无新请求,完成最后一个请求立即停止计数。SCAN到物理端点反向;C-SCAN到99后回0,回绕期间不服务,所有实际移动都计距离。
- ① 分别写SCAN、C-SCAN路径和距离。
- ② 若误把SCAN按LOOK计算,少算多少?
- ③ 仅改成C-SCAN回绕不计距离,结果多少?
参考解答
解答
- SCAN:40→70→90→99→20→10。
- 距离(99−40)+(99−10)=59+89=148柱面。
- 最后在10完成,不再补到0。
- C-SCAN:40→70→90→99→0→10→20。
- 距离59+99+20=178柱面。
- LOOK在90反向:40→70→90→20→10,距离50+80=130柱面,少算18柱面,即90到99再返回90的两段。
- 回绕不计费时C-SCAN为59+20=79柱面;
- 服务顺序不变,只扣99→0的99柱面。
判分要点
- 须保留SCAN的99端点,并在最后请求停止。
- 须区分SCAN反向服务与C-SCAN回绕不服务。
- 须计入题设回绕距离,改口径时仅扣对应段。
- 答案须有服务路径及柱面单位,不只给总数。
从物理设备到卷¶
低级格式化建立设备可识别的扇区等结构,分区划定区域,逻辑格式化创建文件系统;它们解决不同层次的问题。坏块需要检测、替换或重映射,引导区域和交换区也有专门用途。
交换区可用分区或文件承载,其目标是为内存回收提供后备空间。
- 存储可直接接本机;
- NAS通过网络提供文件服务;
- SAN通常通过网络提供块设备视图。
- 看到“网络存储”还要区分上层使用的是文件还是块接口。
- 稳定存储是一种希望数据在故障后仍可恢复的抽象,实际需通过冗余、写入顺序和恢复协议实现。
SSD省掉寻道后¶
**FTL(闪存转换层)**是设备内部维护逻辑地址与闪存物理位置对应关系的层。主机请求“覆盖逻辑页A”时,设备可把新内容写入另一个空闲物理页,再更新映射;旧页随后失效。
因为擦除以更大的块为单位,回收时可能必须搬走同块内仍有效的其他页面,这些搬写就产生写放大。
SSD没有机械寻道与旋转,不能照搬“减少柱面移动”的优化目标。闪存通常按页读写、按更大的擦除块擦除;覆盖更新常写到新页,由FTL维护逻辑到物理映射,旧页标失效。
垃圾回收先搬走仍有效的页,再擦除整块供复用;磨损均衡分散擦写次数,TRIM帮助设备得知哪些逻辑数据不再需要。
主机写2 MiB,回收额外写3 MiB,设备总写5 MiB,写放大为 \(5/2=2.5\)。有效页仍需保留时不能直接擦掉所在块。
RAID保住什么¶
- RAID 0只条带化,无冗余;
- 镜像把同一数据存多份;
- RAID 5用一份容量的分布式校验,保证单盘故障可恢复;
- RAID 6需两组独立校验,可承受双盘故障。
- N块等容量C的盘,忽略开销时,RAID 5容量 \((N-1)C\),RAID 6为 \((N-2)C\)。
- 重复同一校验不增加独立恢复方程。
异或校验例:A=1010、B=1100,P=A异或B=0110。
A改为0011时,可用“旧P异或旧A异或新A”算新P=1111;无缓存读改写需读旧A、旧P,写新A、新P,共2读2写。B丢失可由新A异或新P恢复1100。
重建会占带宽,并在冗余下降期间增加风险;更新中断电还可能造成数据与校验不一致。RAID冗余不替代原子更新协议,也不替代防误删和历史版本的备份。
练习 3¶
题目
自编题:
- ① 4块等容量3 TiB盘,忽略管理开销。求RAID 5、RAID 6可用容量及保证承受故障盘数。两份相同XOR校验能否替代两组独立校验?
- ② 单重校验条带A=1010,B=1100,P=0110。无缓存读改写,把A改成0011,求新P,列所需块读写;若丢失B,怎样恢复B?
- ③ SSD主机写2 MiB,回收额外搬写3 MiB,求写放大;某擦除块仍有有效页能否直接擦除?
参考解答
解答
- RAID 5容量(4−1)×3=9 TiB,保证单盘故障。
- RAID 6容量(4−2)×3=6 TiB,保证双盘故障。
- 重复同一校验不增加独立方程,不能替代双重校验。
- 新P=0110异或1010异或0011=1111。
- 读旧A、旧P,再写新A、新P,共2读2写。
- 丢B后用新A异或新P:0011异或1111=1100。
- 若更新中断电致新旧不一致,仅冗余不能保证原子性。
- 设备总写量2+3=5 MiB,写放大5/2=2.5。
- 不可直接擦掉仍需保留的有效页;
- 先迁移并更新映射,再整块擦除,迁移也可能增加写放大。
判分要点
- 给容量和故障模型,双重校验须独立。
- 异或结果正确,写成本含读取旧值的两次访问。
- 写放大分子含主机写与搬写,解释有效页保存条件。
记忆要点¶
本章记忆要点
- 机械盘先寻道,再等旋转,再传输;平均旋转等待是半周。
- 柱面距离与毫秒之间需要题给模型,不能直接等同。
- SCAN到端点,LOOK到最远请求;循环版回绕是否计距离看题设。
- SSD按页读写、按更大块擦除;有效页迁移会增加实际写入。
- RAID按独立冗余恢复指定故障;容量、更新原子性与备份分别判断。