1. HDD 顺序与随机 IO 的差异
机械硬盘(HDD)在顺序 IO 与随机 IO 场景下性能差异巨大,请解释造成这种差异的物理机制,以及在实际存储规划中如何避免随机 IO 拖垮性能?
- 机械硬盘的寻道与旋转延迟是随机 IO 的主要瓶颈
- 顺序 IO 几乎规避寻道开销,可发挥最大带宽
- 如何通过存储分层、缓存、SSD 提升随机 IO 性能
HDD 由盘片、磁头和马达组成,写入/读取数据时磁头需要移动到目标磁道(寻道),并等待盘片旋转到目标扇区(旋转延迟)。顺序 IO 时磁头沿同一方向连续移动,几乎无寻道与旋转等待,数据吞吐接近盘片最大带宽(现代盘 150-250MB/s)。随机 IO 每次都要寻道(平均 4-9ms)并等待旋转(平均 4-5ms),单次 IO 延迟可达 10ms 以上,IOPS 通常只有 100-200 左右,与顺序 IO 的吞吐相差两个数量级。因此数据库、日志等随机访问密集的应用不应直接放在单块 HDD 上,而应通过 RAID 条带化、SSD 缓存层、内存/Page Cache 等手段缓解。
关键在理解"位置无关的连续 vs 位置跳变的随机"对机械寻道的影响。规划时优先把随机 IO 交给 SSD/NVMe,把顺序 IO(如归档、备份流)留给 HDD。
# 用 fio 分别测顺序读与随机读,直观对比差异
fio --name=seq --filename=/dev/sdb --rw=read --bs=1M --size=1G --numjobs=1 --direct=1
fio --name=rand --filename=/dev/sdb --rw=randread --bs=4k --size=1G --numjobs=1 --direct=1