文章目录
第8章 输入输出系统
8.3.0 预备知识
磁盘阵列DA
(Disk Array):使用多个磁盘(包括驱动器)的组合来代替一个大容量的磁盘。
- 多个磁盘并行工作。
- 以条带为单位把数据均匀地分布到多个磁盘上(交叉存放)。
- 条带存放可以使多个数据读/写请求并行地被处理,从而提高总的I/O性能。
并行性的两方面的含义:
-
多个独立的请求可以由多个盘来并行地处理。
减少了I/O请求的排队等待时间
-
如果一个请求访问多个块,就可以由多个盘合作来并行处理。
提高了单个请求的数据传输率
存在的问题:
- 阵列中磁盘数量的增加会导致磁盘阵列可靠性的下降。
- 如果使用了
N
个磁盘构成磁盘阵列,那么整个阵列的可靠性将降低为单个磁盘的1/N
。
解决方法:
- 在磁盘阵列中设置
冗余信息盘
- 当单个磁盘失效时,丢失的信息可以通过冗余盘中的信息重新构建。
- 这种磁盘阵列被称作:
廉价磁盘冗余阵列RAID
(Redundant Arrays of Inexpensive Disks )
大多数磁盘阵列的组成可以由以下两个特征来区分:
-
数据交叉存放的粒度
- 细粒度
- 粗粒度
-
冗余数据的计算方法以及在磁盘阵列中的存放方式
细粒度磁盘阵列
- 细粒度磁盘阵列是在概念上把数据分割成相对较小的单位交叉存放。
- 优点:所有I/O请求都能够获得很高的数据传输率。
- 缺点:在任何时间,都只有一个逻辑上的I/O在处理当中,而且所有的磁盘都会因为为每个请求进行定位而浪费时间。
粗粒度磁盘阵列
- 粗粒度磁盘阵列是把数据以相对较大的单位交叉存放
- 多个较小规模的请求可以同时得到处理。
- 对于较大规模的请求又能获得较高的传输率。
在磁盘阵列中设置冗余需要解决以下两个问题:
-
如何计算冗余信息?
-
大多都是采用奇偶校验码;
-
也有采用汉明码(Hamming code)或Reed-Solomon码的。
-
-
如何把冗余信息分布到磁盘阵列中的各个盘?
- 有两种方法:
- 把冗余信息集中存放在少数的几个盘中。
- 把冗余信息均匀地存放到所有的盘中。
- 一般采取第二种,能避免出现热点问题
- 有两种方法:
有关RAID的几个问题
-
关键问题:如何发现磁盘的故障
在磁盘扇区中除了保存数据信息外,还保存有用于发现该扇区错误的检测信息。
-
设计的另一个问题
如何减少平均修复时间
MTTR
典型的做法:在系统中增加热备份盘
-
热交换技术
与热备份盘相关的一种技术
8.3.1 RAID0
RAID0:非冗余磁盘阵列,无冗余信息。
- 严格地说,它不属于
RAID
系列。 - 把数据切分成条带,以条带为单位交叉地分布存放到多个磁盘中。
8.3.2 RAID1
RAID1:最基本的一种冗余磁盘阵列,称为
镜像磁盘
,对所有的磁盘数据提供一份冗余的备份。
- 每当把数据写入磁盘时,将该数据也写入其镜像盘。
- 在系统中所有的数据都有两份。 (磁盘总数也是采用镜像磁盘前的两倍)
RAID1的特点
- 能实现快速的读取操作。
- 对于写入操作,镜像的两个磁盘都要写入。但可并行进行,而且不需要计算校验信息,所以其速度比级别更高的RAID都快。
- 可靠性很高,数据的恢复很简单(从正常工作的磁盘拷贝数据即可)。
- 实现成本最高。
8.3.3 RAID2
RAID2:存储器式的磁盘阵列(按
汉明纠错码
的思路构建)
RAID2的特点
- 每个数据盘存放所有数据字的一位(
位交叉存放
) - 各个数据盘上的相应位计算汉明校验码,编码位被存放在多个
校验(ECC)磁盘
的对应位上。 - 冗余盘是用来存放汉明码的,其个数为 log 2 m \log_2 m log2m级。 m m m:数据盘的个数(也就是数据字的位数)
- 并未被广泛应用,目前还没有商业化产品。
RAID2的汉明码说明:
- 2 P ≥ P + D + 1 2^{P} \geq P+D+1 2P≥P+D+1,其中 P P P代表汉明码的个数, D D D代表数据位的个数
- 这样,就能算出任何数据位时所需要的汉明码位数:7位数据时需要4位汉明码(16>4+7+1),64位数据时就需要7位汉明码(128>64+7+1)
8.3.4 RAID3
RAID3:位交叉奇偶校验磁盘阵列
RAID3的特点
-
采用
奇偶校验
- 写数据时:为每行数据形成奇偶校验位并写入校验盘
- 读出数据时:如果控制器发现某个磁盘出故障,就可以根据故障盘以外的所有其他盘中的正确信息恢复故障盘中的数据。(通过
异或运算
实现)
-
细粒度
的磁盘阵列,即采用的条带宽度较小。(可以是1个字节或1位)- 优点:能够获得很高的数据传输率,这种磁盘阵列对大数据量的读写具有很大的优越性。
- 缺点:不能同时进行多个I/O请求的处理 。
-
只需要
一个校验盘
,校验空间开销比较小。
8.3.5 RAID4
RAID4:块交叉奇偶校验磁盘阵列
采用比较大的条带,以块为单位
进行交叉存放和计算奇偶校验。
实现目标:能同时处理多个小规模访问请求
RAID4读写特点
- 读取操作
- 每次只需访问数据所在的磁盘。
- 仅在该磁盘出现故障时,才会去读校验盘,并进行数据的重建。
- 写入操作
- 假定:有
4
个数据盘和一个冗余盘(其余情况类似)。 - 写数据需要
2
次磁盘读和2
次磁盘写操作。
- 假定:有
写入操作说明:
- 对于写人操作,由于要重新计算校验码,所以差不多要访问所有的磁盘,以读出旧值。这对磁盘访问的速度有很大的影响。可以采用以下方法进行提速:
- 即要读入新数据 A 0 ′ A0^\prime A0′ 时,先读出旧值 A 0 A0 A0 和旧的奇偶校验 A p a r i t y A_{parity} Aparity 然后对它们进行异或运算,计算出新的奇偶校验 A p a r i t y ′ A_{parity}^{\prime} Aparity′
- 最后把 A 0 ′ A0^{\prime} A0′ 和 A p a r i t y ′ A_{parity}^{\prime} Aparity′ 写人磁盘。
- 虽然这要进行两次读两次写,但这比读出全部旧值还是节省了不少时间。特别是当数据盘个数较多的时候
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5uK7eMHu-1619877287121)(/Users/luomingkai/Desktop/RAID4写加速.png)]
8.3.6 RAID5
RAID5:块交叉分布奇偶校验磁盘阵列
数据以块交叉的方式存于各盘,无专用冗余盘,奇偶校验信息均匀分布在所有磁盘上。
RAID5 与 RAID4、RAID3
-
在RAID4中,所有的写入操作都必须读和写校验盘。当同时处理多个小规模写访问时,它们都必须访问校验盘,而系统中的校验盘只有一个,很容易成为瓶颈。
-
RAID5 通过把校验信息分布到磁盘阵列中的各个磁盘来解决这个问题,
-
与RAID3和RAID4一样,RAID5的校验空间开销也比较小。
-
RAID5除了能跟RAID3一样快地处理
大规模访问
、能跟RAID4一样快地处理小规模读
操作以外,还能比它
们都更快地处理小规模写
操作。 -
其控制器是经典RAID(RAID1 ~ RAID5)中
最复杂
的。
8.3.7 RAID6
RAID6:P+Q双校验磁盘阵列
特点
- 校验空间开销是RAID5的两倍
- 容忍两个磁盘出错(在RAID5度基础上增加了一个独立的校验信息,放在另一个校验盘中)
8.3.8 RAID10与RAID01
RAID10又称为RAID1+0
- 先进行镜像(RAID1),再进行条带存放(RAID0)
RAID01又称为RAID0+1
- 先进行条带存放(RAID0),再进行镜像(RAID1)
8.3.9 RAID的分级及其特性
- 假设数据盘为8个
RAID级别 | 说明 | 可以容忍的故障个数 | 需要的检测盘个数 | 优点 | 缺点 | 公司产品 |
---|---|---|---|---|---|---|
0 | 非冗余,条带存放 | 0 | 0 | 没有空间开销 | 没有纠错能力 | 广泛应用 |
1 | 镜像 | 1 | 8 | 不需计算奇偶校验;数据恢复快;读数据快;小规模写操作比更高级别的RAID快 | 检测空间开销最大(即需要的检测盘最多) | EMC、HP(Tandem)、IBM |
2 | 存储器式ECC | 1 | 4 | 不依靠故障盘进行自诊断 | 检测空间开销的级别是 log 2 m \log_2m log2m级( m m m为数据盘的个数) | 没有 |
3 | 位交叉奇偶校验 | 1 | 1 | 检测空间开销小(即需要的检测盘少),大规模读写操作的带宽高 | 对小规模、随机的读写操作没有提供特别的支持 | 外存概念 |
4 | 块交叉奇偶校验 | 1 | 1 | 检测空间开销小,小规模的读操作带宽更高 | 校验盘是小规模写的瓶颈 | 网络设备 |
5 | 块交叉分布奇偶校验 | 1 | 1 | 检测空间开销小,小规模的读写操作带宽更高 | 小规模写操作需要访问磁盘4次 | 广泛应用 |
6 | P+Q双奇偶校验 | 2 | 2 | 具有容忍2个故障的能力 | 小规模写操作需要访问磁盘6次,检测空间开销加倍(与RAID3、4、5比较) | 网络设备 |
8.4 固态硬盘(Solid State Disk,SSD)
一种基于
闪存
的存储技术,是传统旋转磁盘的极有吸引力的替代产品。
构成:
- 封装插到I/O总线上标准硬盘插槽(通常是USB或SATA)中,行为就和其他硬盘—样。
- 处理来自CPU的读写逻辑磁盘块的请求。
- 一个SSD封装由一个或多个闪存芯片和闪存翻译层。
- 闪存芯片替代传统旋转磁盘中的机械驱动器,而翻译层是一个硬件/固件设备,扮演与磁盘控制器相同的角色,将对逻辑块的请求翻对底层物理设备的访问。
典型SSD的性能特性
- 读SSD比写要快。
- 随机读和写的性能差别是由底层闪存基本属性决定的。
- 一个闪存由B个块的序列组成,块由P页组成。通常,页的大小是512字节~4KB,块是由32~128页组成的,块的大小为16KB~512KB。
- 数据是以页为单位读写的。
- 只有在一页所属的块整个被擦除之后,才能写这一页(通常是指该块中的所有位都被设置为1)。
- 不过,一旦一个块被擦除了,块中每一个页都可以不需要再进行擦除就写一次。
- 在大约进行100 000次重复写之后,块就会磨损坏。一旦一个块磨损坏之后,就不能再使用了。
SSD随机写很慢原因:
- 擦除块需要相对较长的时间,1ms级的,比访问页所需时间要高一个数量级。
- 如果写操作试图修改一个包含已经有数据(也就是不是全为1)的页p,那么这个块中所有带有用数据的页都必须被复制到一个新(擦除过的)块,然后才能进行对页p的写。
- 制造商已经在闪存翻译层中实现了复杂的逻辑,试图抵消擦写块的高昂代价,最小化内部写的次数,但是随机写的性能不太可能和读一样好。
SSD的优点:
- 它们由半导体存储器构成,没有移动的部件,因而随机访问时间比旋转磁盘要快
- 能耗更低,同时也更结实。
SSD的缺点:
- 反复写之后,闪存块会磨损,所以SSD也容易磨损。
- 闪存翻译层中的
平均磨损(wear leveling)逻辑
试图通过将擦除平均分布在所有的块上来最大化每个块的寿命。 - 实际上,平均磨损逻辑处理得非常好,要很多年SSD才会磨损坏。
- SSD每字比旋转磁盘贵大约30倍,因此常用的存储容量比旋转磁盘小100倍。随着SSD越来越受欢迎,它的价格下降得非常快,而两者的价格差也在减少。