大话存储第四章-详解七种RAID(主要RAID5)
纯技术角度剖析RAID模式的组成原理和结构,以及相对于单盘IO的速率变化:
注意:Stripe完全是程序在内存中虚拟出来的,就是一个map公式,就是实现RAID的程序代码,物理上磁盘只有扇区。此外,程序会在磁盘特定的一些扇区中写入自己运行时需要的信息,比如一些RAID标签信息等。
1 存储分区相关概念:
- 磁盘相同偏移处横向逻辑分割形成Stripe条带,一个Stripe横跨的扇区或块的个数或字节容量就是条带长度,即Stripe Length。
- 一个Stripe占用的单块磁盘上的区域叫做Segment,一个Segment中包含的data Block或者扇区的个数或者字节容量称为Stripe Depth。Data Block可以是N倍扇区大小的容量,应该可以调节或不可以,由控制器决定。
2 IO相关重要概念
IO可以分为读/写IO、大/小块IO、连续/随机IO、顺序/并发IO、稳定/突发IO、持续/间断IO和实/虚IO。
- 读/写IO: 指令一般指通知磁盘开始扇区位置,然后给出需要从这个初始扇区往后读取连续扇区个数,同时给出动作是读还是写。控制器发出这种指令加数据并得到对方回执的过程就是一次读/写IO。一个IO想要提取或写入的扇区段一定是连续的,否则只能放入多个IO中分别执行,此乃为何随机IO对设备IOPS指标要求较高。
- 大/小块IO: 控制器指令中给出连续读取扇区数目很大如128、64应该算大块IO,如果很小比如1、4、8算小IO。大块小块之间没有明确界限。
- 连续/随机IO: 如果本次IO给出的初始扇区地址和上一次IO结束的扇区地址是完全连续或者相隔不多,则本次IO算一个连续IO,如果相差太大,算一次随机IO。连续IO磁头几乎不用换道或换道时间极短,如果随机IO很多,,导致磁头不停换道,效率大大降低。
- 顺序/并发IO: 磁盘控制器可以同时对一个RAID系统中多块磁盘同时发送IO指令,并且这些最底层IO数据包含了文件系统下发的多个IO数据,则称为并发IO。如果这些直接发向磁盘的IO只包含文件系统下发的一个IO数据,则此时为顺序IO,即控制器缓存中文件系统下发的IO队列,只能一个一个来。并发IO模式在特定条件下可以很大程度提高速率和速度。
- 稳定/突发IO: 某存储设备或程序在一段时间内接受或发送的IOPS以及Throughput(吞吐量)保持相对稳定和恒定,则称为稳定IO;如果突然猛增,则为突发IO。
- 持续/间断IO: 持续不断或时断时续的发送或接受IO数据流。
- 实/虚IO: 实IO指请求中包含对应实际数据地址的,比如磁盘LBA或文件偏移量,请求或写实际文件或者磁盘扇区数据的;虚IO指应用程序针对文件元数据操作的(在文件系统层以上没有文件主体数据操作),或者针对磁盘发送的非实体数据请求等控制性IO。
- 并发几率 单盘IO并发几率为0,因为一块磁盘同时只可以进行一次IO。对于RAID 0有2块盘且条带深度比较大的时候(条带太小不能并发IO)并发两个IO的几率是1/2。
- IOPS 一次IO时间=寻道+旋转延迟+数据传输,IOPS = \frac{IO并发系数}{一次IO时间} 。寻道时间对于传输时间大几个数量级,影响IOPS的关键是降低寻道时间。在连续IO的情况下,寻道时间很短,仅在换磁道时需要寻道,在此前提下,传输时间越少,IOPS越高。
- 每秒IO吞吐量 每秒IO吞吐量= IOPS\times平均IO_SIZE
3 整条写、重构写、读改写
- 整条写(Full-Stripe Write) 需要修改奇偶校验群组中所有条带单元,因此新的校验值可以根据所有新的条带数据计算得到,不需要在原来的数据区域进行额外的读写操作。因此整条写是最有效的写类型。如RAID 2、RAID 3它们每次IO总是几乎保证占用所有磁盘,每个条带上的Segment都被写更新,所以控制器利用这些更新的数据计算校验数据,在数据写入时将计算好的校验信息一同写入。
- 重构写(Reconstruct Write) 要写入的磁盘数目超过阵列磁盘数目的一半,可采用重构写。从条带中读取不需要修改的Segment中读取原来的数据,在和本条带中需要修改的Segment上的新数据计算校验值,最后将需要修改的Segment上新数据、不要修改的Segment上原数据、新校验数据一同写入磁盘。
- 读改写(Read-Modify Write) 要写入磁盘的数目不足阵列磁盘数目的一半,利用读改写。先从需要修改的Segment上读取旧数据,再从条带上读取旧数据的奇偶校验值,根据旧数据、旧校验值、需要修改Segment上新数据计算这个条带上的新校验值,最后写入新数据和新校验值。整个过程包含读-改-写三个过程。
- 写效率排序:整条写>重构写>读改写
4 RAID 5结构与原理
RAID有好多种组织结构,RAID5是比较常用的类型,这里只介绍RAID5,对其他类型感兴趣可以访问我的博客:
RAID 4并发困难是因为校验盘争用问题,RAID 5对此采用分布式校验盘的做法,将检验盘打散在RAID组的每块磁盘上。每个条带都有一个校验Segment,但是位置不同,在相邻条带之间循环分布。为保证并发IO,RAID 5将条带深度做得较大,以保证每次IO不会占满整个条带,造成队列中其他IO等待。随机写IO下如果碰巧并发的IO同处于一个条带,可以降低写惩罚几率。
上图中由于校验盘和数据盘都没有冲突,红框中两个IO可以被控制器并发执行。RAID 5在底层就实现了并发,可以脱离文件系统的干预,磁盘数量越多,并发几率越大。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Smartog!