目录
一、重要概念
1.汉明码
2.布尔逻辑运算
3.扇区、块、段、条带、条带长度和深度
4.读/写IO
5.大/小块IO
6.连续/随机IO
7.顺序/并发IO
8.持续/间断IO
9.稳定/突发IO
10.实/虚IO
11.IO并发几率
12.IOPS
13.每秒IO吞吐量
二、磁盘阵列
1. RAID 0
2. RAID 1
3. RAID 2
4.RAID 3
5.RAID 4
6.RAID 5
7 RAID6
一、重要概念
1.汉明码
汉明码在原有的数据中插入一定数量的校验位来进行措施检测和纠错。比如,对于一组4位数据编码为例,汉明码会在者4位中加入三个校验位,从而使实际数据传输达到7位。
需要被插入的汉明码位数与数据位之间的数量关系为。汉明码只能纠正一个位的错误。
2.布尔逻辑运算
1 XRO 0 =1,1 XOR 1 = 0 ,0 XOR 0=01 XRO 0 XOR 1 = 00 XOR 1XOR 0=1
不管多少位,进行逻辑运算后还是一位,假如有中间某一位被掩盖,也完全可以推断出来。
3.扇区、块、段、条带、条带长度和深度
在下图RAID0中五个竖条,分别代表5个磁盘。然后再磁盘相同偏移处上共享逻辑分割,形成Stripee。一个Stripee横跨过的扇区或块的个数或字节容量,就是条带长度,即Stripee Length。而一个Stripee所占用的单位块磁盘上的区域,称为一个Segment。一个Segment中所包含的dataBlock或者扇区的个数或者字节容量,称为Stripee Depth。Data Block或者扇区的个数或者字节容量,称为Stripe Depth。Data Block可以是N倍个扇区大小的容量,应该可以调或者不可调,有控制器而定。
4.读/写IO
指令通知磁盘开始扇区的位置,然后给出需要从这个初始山区网吧读取的连续扇区个数,同时给出动作时读还是写。磁盘收到这条指令满清会按照指令的要求来读或者写数据。控制器发出这种指令加数据并得到对方回执的过程就是一次IO读或者IO写。
5.大/小块IO
控制器的指令中给出的连续读取扇区数目的多少。如果数目很大就是大块IO,如128,如果很小就是小块IO。大块和小块之间没有界限。
6.连续/随机IO
连续和随机IO指本次IO给出的初始扇区地址应该和上一次IO的结束扇区地址时不是完全连续的或者相隔不多的。是——连续IO,不是——随机IO。连续IO几乎不用换道,或者换道时间极短。如果相差太大,则磁头需要很长的环道时间。随机IO需要很长的环道时间
7.顺序/并发IO
顺序IO:发向磁盘的IO只包含了文件系统级下发的一个IO
并发IO:发向磁盘的IO只包含了文件系统级下发的多个IO
8.持续/间断IO
持续IO:持续不断地发送或者接受IO请求数据流.
间断IO:IO数据流时断时续
9.稳定/突发IO
稳定IO:某存储设备或者某程序在一段时间内接收或者发送的IOPS以及吞吐量保持相对恒定.
突发IO:单位时间的IOPS或者吞吐量突然猛增,突发IO
10.实/虚IO
实IO:请求读或者写实际文件或者磁盘数据区数据
虚IO:针对文件元数据操作,或对磁盘发送非实体数据IO请求。
11.IO并发几率
单盘:0
RAIO:0.5
12.IOPS
完成一次IO所用的时间=寻道时间+旋转延迟时间+数据传输时间,IOPS=IO并发数/(寻道时间+旋转延迟时间+数据传输时间)。
由于寻道时间相对于传输时间要大几个数量级,所以影响IOPS的关键因素就是降低寻道时间。在连续IO的情况下,寻道时间很短,仅在换磁道时候需要寻道。在这个前提下,传输时间越少,IOPS越高。
13.每秒IO吞吐量
每秒IO吞吐量=IOPS*平均IO SIZE。IO SIZE越大,IOPS越高,每秒IO吞吐量就越高。设磁头每秒读写数据速度为V,V为定值。则IOPS=IO 并发数/(寻道时间+旋转延迟时间+IO SIZE/V)。可以看出每秒IO吞吐量的最大因素就是IO SIZE 和寻道时间以及旋转延迟时间。IO SIZE越大,寻道时间越小,吞吐量越高。相比能显著影响IOPS的因素就只有一个,就是寻道时间。
二、磁盘阵列
1. RAID 0
左边是4块普通硬盘, 右边是引入分割思想的后的硬盘,使用4个扇区组成的块作为基本单元。不同硬盘的相同偏移处的块组合成Stripe,也就是条带。
当有大块数据写入时,数据可以被分为多个块,写入4个硬盘,这样就提高了速度。
假如某一时刻,主控制器发出指令;读取 初始扇区10000 长度128。RAID控制器接受到这个指令后,计算逻辑扇区10000对应的物理磁盘扇区号。依次计算出逻辑上连续的下128哥扇区所在物理磁盘的扇区号。分别向对应这些扇区磁盘再次发出指令,读取数据,磁盘接受道道指令,各自将数据交给RAID控制器,经过控制器,在Cache中的组合,再提交给主机控制器。
如果这128个扇区都落在同一个Segment中,也就是条带深度大于128个扇区容量,则这次IO只能从就只能真实的从这一块物理磁盘上读取,性能反而减慢,还增加控制器开销,因此要减小条带深度。在磁盘数量不变的情况下,减少条带大小(也就是条带长度)。让这个IO的数据被控制器分割。同时放满一个条带的第一个Segment、第二Segment等。但是条带太小会导致并发概率低。
因此,如果小块IO多,则适当增大条带深度;如果脸上大块IO多,则适当减小条带深度。
2. RAID 1
写IO没有提升,因为写数据要向多块物理盘同时写数据。但是可以同时从两块物理盘上读数据,提升速度。
3. RAID 2
RAID 2 在写入数据的是常被,计算出他们的汉明码并写入校验阵列,读取时也要对数据进行校验,最后再发向系统。
RAID2每次的读写都要劝阻磁盘联动,所以为了优化性能,最好保证每块磁盘主轴同步,使同一时刻每块磁盘磁头所处的扇区逻辑编号都一致,并存并取,达到最佳性能。如果不能同步,则会产生等待,影响速度。
根据IOPS公式,避免寻道时间影响,最佳做法是尽量产生连续IO。RAID2 适合连续IO的情况。
4.RAID 3
RAID2 以bit为单位分割数据,而RAID3以一个扇区或者几个扇区来分散数据。
采用的是布尔逻辑运算,每次IO都会分散到所有盘,RAID3 把一个逻辑块又分割成N块,数据在一次写入之前,控制器就会计算好校验块,然后同时将数据和校验块写入磁盘。
RAID3 的每一个条带,其长度被设计为一个文件系统块的大小,深度随磁盘数量而定,但是最小深度为一个扇区。这样的话,每个Segment的大小就是1个扇区或者几个扇区的容量。
这种情况,大块IO虽然可以提高效率,但小块IO很不适用。所有磁盘同一时刻都被一个IO占用着。
5.RAID 4
在RAID3 的基础上进行改造,实现并发IO,保证有空闲的磁盘未被IO占用,控制器一个IO过来,如果这个IO块小于条带深度,那么这次IO就会被完全禁锢在一块磁盘上,直接写入了一个磁盘的Segment中,这个过程只用到了一块磁盘,而其他IO也可以个这个IO同时进行,前提是其他IO的目标不是这个IO要写入或读取的磁盘。
但有个非常重要的地方就是,每个IO写操作必须占用校验盘。
6.RAID 5
整条写(Full-StripeeWrite):整条写需要修改奇偶校验群组中所有的条带单元,因此新的奇偶校验值可以根据所有新的条带数据计算得到,不需要额外的读、写操作。因此,整条写是最有效的写类型。整条写的例子,如RAID2、RAID3。它们每次IO总是几乎能保证占用所有盘,因此每个条带上的每个Segment都被写更新,所以控制器可以直接利用这些更新的数据计算出校验数据之后,在数据被写入数据盘的同时,将计算好的校验信息写入校验盘。
重构写(ReconstructWrite):如果要写入的磁盘数目超过阵列磁盘数目的一半,可采取重构写方式。在重构写中,从这个条带中不需要修改的Segment中读取原来的数据,再和本条带中所有需要修改的Segment上的新数据计算奇偶校验值,并将新的Segment数据和没有更改过的Segment数据以及新的奇偶校验值一并写入。显然,重构写要牵涉更多的I/O操作,因此效率比整条写低。重构写的例子,比如在RAID4中,如果数据盘为8块,某时刻一个IO只更新了一个条带的6个Segment,剩余两个没有更新。在重构写模式下,会将没有被更新的两个Segment的数据读出,和需要更新的前6个Segment的数据计算出校验数据,然后将这8个Segment连同校验数据一并写入磁盘。可以看出,这个操作只是多出了读两个Segment中数据的操作和写两个segment的操作,但是写的时候几乎不产生延迟开销,因为是宏观同时写入。
读改写(Read-ModifyWrite):如果要写入的磁盘数目不足阵列磁盘数目的一半,可采取读改写方式。读改写过程是:先从需要修改的Segment上读取旧的数据,再从条带上读取旧的奇偶校验值;根据旧数据、旧校验值和需要修改的Segment上的新数据计算出这个条带上的新的校验值;最后写入新的数据和新的奇偶校验值。这个过程中包含读取、修改和写入的一个循环周期,因此称为读改写。读改写计算新校验值的公式为:新数据的校验数据=(老数据EOR新数据)EOR老校验数据。如果待更新的Segment已经超过了条带中总Segment数量的一半,则此时不适合用读改写,因为读改写需要读出这些Segment中的数据和校验数据。而如果采用重构写,只需要读取剩余不准备更新数据的Segment中的数据即可,而后者数量比前者要少。所以超过一半用重构写,不到一半用读改写。整条更新就用整条写。
写效率排列为:整条写>重构写>读改写。
把校验盘分隔开,组合与数据盘之中,依附于数据盘。RAID5是继RAID0和RAID1之后又一个能实现并发IO的阵式。
RAID5写的基本过程是,新数据过来之后,控制器立即读取待更新扇区的原数据,同时也要读取这个条带上的校验数据。三者按照公式运算,便可以得出新数据的校验数据,然后将新数据和新数据的校验数据写到磁盘。
新数据的校验数据=(老数据 EOR 新数据) EOR 老校验数据。
RAID 5E和RAID 5EE
再磁盘阵列中增加热备盘,有一个故障盘之后,故障盘的数据,再系统空闲的时候迁移到热备盘。
7 RAID6
RAID0-RAID5都是只能坏一个盘。RAID6目标是可以坏两个盘
RAID6采用两块校验盘,每次写数据的时候,计算两个等式,将两个等式的结果写入校验盘。
x XOR y =1Ax XOR Bx=0