文章

《Operating Systems: Three Easy Pieces》学习笔记(三十) 廉价冗余磁盘阵列(RAID)

简介

本章将介绍廉价冗余磁盘阵列(Redundant Array of Inexpensive Disks),更多时候称为 RAID,这种技术使用多个磁盘一起构建更快、更大、更可靠的磁盘系统。

优点:

  • 性能。并行使用多个磁盘可以大大加快 I/O 时间。
  • 容量。将多个磁盘合并为逻辑上的一个单磁盘。
  • 可靠性。在多个磁盘上传输数据(无 RAID 技术)会使数据容易受到单个磁盘丢失的影响。通过某种形式的冗余(redundancy),RAID 可以容许损失一个磁盘并保持运行,就像没有错误一样。
  • 透明。RAID 接口和普通硬盘接口相同,无需修改已有软件即可迁移。

接口和 RAID 内部

对于文件系统,RAID 看起来像是一个很大的、快速的、并且可靠的磁盘。就像使用单个磁盘一样,它将自己展现为线性的块数组,每个块都可以由文件系统(或其他客户端)读取或写入。

RAID 内部包括一个微控制器,运行固件以指导 RAID 的操作。 它还包括 DRAM 这样的易失性存储器,在读取和写入时缓冲数据块。在某些情况下,还包括非易失性存储器,安全地缓冲写入。它甚至可能包含专用的逻辑电路,来执行奇偶校验

评估 RAID

  • 容量(capacity)。在给定一组 N 个磁盘的情况下,RAID 的客户端可用的容量有多少?没有冗余,答案显然是 N。
  • 可靠性(reliability)。给定设计允许有多少磁盘故障?根据我们的故障模型,我们只假设整个磁盘可能会故障。
  • 性能(performance)。性能有点难以评估,取决于磁盘阵列提供的工作负载。

3 个重要的 RAID 设计:RAID 0 级(条带化),RAID 1 级(镜像)和 RAID4/5 级(基于奇偶校验的冗余)

RAID 0 级:条带化

无冗余,高性能,低可靠

下面是在不同磁盘里依次放连续逻辑块的情况:

磁盘 0磁盘 1磁盘 2磁盘 3
0123
4567
891011
12131415

表格中的格子表示物理块,序号表示逻辑块序号,比如写入 4 个连续块(如 0,1,2,3)的数据,就能同时并发的往 4 个磁盘写入,写入速度提升

下面是同一个磁盘里放两个连续逻辑块的情况:

磁盘 0磁盘 1磁盘 2磁盘 3 
0246大块大小
13572
8101214 
9111315 

对于逻辑块的访问,RAID 系统会根据映射定位到物理块,这个映射关系还是比较简单的,上面两个例子看也看得出来

性能

映射是个很快的过程,这个时间可以忽略

  • 顺序写:好
  • 随机写:一般
  • 顺序读:一般
  • 随机读:一般

RAID 1 级:镜像

冗余,低性能,高可靠

示例,两个磁盘存同一份数据:

磁盘 0磁盘 1磁盘 2磁盘 3
0011
2233
4455
6677

写入时需要同时向两个磁盘写入相同的数据,读取时可以从两个磁盘中的任意一个磁盘中读取

性能

虽然并行写入,但受限于最慢的那块硬盘速度。且占用两个硬盘的带宽,影响其他写入

  • 顺序写:差
  • 随机写:差
  • 顺序读:一般
  • 随机读:一般

RAID 4 级:通过奇偶校验节省空间

在 RAID 0 的基础上增加了校验冗余

磁盘 0磁盘 1磁盘 2磁盘 3磁盘 4
0123P0
4567P1
891011P2
12131415P3

可以使用奇偶校验实现数据恢复

性能

写之前需要读取要写的块和校验块(如 4 和 P1,奇偶校验,不需要读其他块),修改校验后再写入这两个块

由于校验所在的磁盘为单一磁盘,相当于临界资源,对多个块的修改都需要访问该临界资源,不能并行执行

  • 顺序写:一般
  • 随机写:很差
  • 顺序读:一般
  • 随机读:一般

RAID 5 级:旋转奇偶校验

RAID 4 的优化版,将冗余分散在各个块,解决了竞争校验块的问题,提高随机写性能

磁盘 0磁盘 1磁盘 2磁盘 3磁盘 4
0123P0
567P14
1011P289
15P3121314
P416171819

RAID 比较:总结

 RAID-0RAID-1RAID-4RAID-5
容量NN/2N−1N−1
可靠性01(肯定)  
  N/2(如果走运)  
吞吐量    
顺序读N · S(N/2) · S(N − 1) · S(N − 1) · S
顺序写N · S(N/2) · S(N − 1) · S(N − 1) · S
随机读N · RN · R(N − 1) · RN · R
随机写N · R(N/2) · R1/2 · RN/4 · R
延迟    
TTTT
TT2T2T

如果你严格要求性能而不关心可靠性,那么 RAID 0 显然是最好的。但是,如果你想要随机 I/O 的性能和可靠性RAID 1 是最好的,你付出的代价是容量下降。如果容量和可靠性是你的主要目标,那么 RAID 5 胜出,你付出的代价是小写入的性能。最后,如果你总是在按顺序执行 I/O 操作并希望最大化容量,那么 RAID 5 的也是最有意义。

参考

本文由作者按照 CC BY 4.0 进行授权

© Kai. 保留部分权利。

浙ICP备20006745号-2,本站由 Jekyll 生成,采用 Chirpy 主题。