其他分享
首页 > 其他分享> > 02-RAID技术 学习心得

02-RAID技术 学习心得

作者:互联网

 

RAID

术语

  

 

 

 

  如图上面,一个segement由4个data block,那么stripee depth就是4; 

 

读写IO,针对的是扇区;

  读IO,就是发送指令,从磁盘上读取某段序列号连续的扇区的内容;  指令会告知磁盘从哪个位置的扇区开始;然后给出从这个扇区开始往后的连续扇区个数;如指令 ”读取 初始扇区100 长度128 “

  有个概念特别要清楚,我这里也是迷糊了很久: 每个IO,要读写的扇区,肯定是连续的; 如果要读取不连续的2个扇区段,那必须得分成2个IO;   

随机IO,连续IO

  因为每个IO,读写肯定是连续的扇区段; 要读写不连续的扇区段,那就需要多个IO; 这就引出了连续和随机IO的区别;

  连续和随机IO,是指本次IO给出的初始扇区地址和上次IO的结束扇区地址,是不是完全连续的或相差不多的;

  如果是一个连续的IO,磁头不需要换道,那么读写时间是很快的;

  如果是个随机IO,如果扇区相差不大,不需要换道,其实速度还是可以的; 但大部分随机IO,因为扇区是不连续的,很大可能是需要磁头不停的换道,所以会导致效率降低;

 

顺序IO和并发IO

  这是一个特别容易混淆的概念; 

  磁盘控制器如果可以同时对一个RAID系统中的多块磁盘,”同时“发送IO指令;

  特别要注意:这里的”同时“是个宏观概念 ;  也就时如果所有磁盘都在一个总线或环路上,那么这里的”同时“就是指向一块磁盘发送一条指令后,不必等待它回应,接着向另一块磁盘发送IO指令;  这里的”同时“,其实也是有先后顺序,只是比排序的方式快很多,也就是宏观上看作时 ”同时“,所以这边并不称为”并发“;

  

  个人理解,文件系统下发的IO,横跨条带的多个segement,那么控制器会把每块盘要写入或读取的数据都计算好,把这个IO拆分成多份,”同时“的对多个磁盘的发送IO指令,写入磁盘的segement;  这个”同时“就是上面提到的宏观的同时,不是并发;

  如果直接发向磁盘的IO,只是包含了文件系统下发的一个IO数据,此时就为顺序IO;就是控制器缓存中的文件系统下发的IO队列,只能一个个来; 个人理解,这种情况就是 大IO的场景,横跨条带中的多个磁盘中segement, 占用多个磁盘”同时写入“,磁盘都在忙,所以其他IO无法写入,一次只能一个IO,做不到并发;

  如果直接发向磁盘的这些IO,包含文件系统下发的多个IO,就是并发IO;  个人理解,这里应该就是小IO,不超过条带深度,那么一个IO就会在一个磁盘中进行,其他磁盘空闲,那么就可以同时处理其他IO;

  

  

RAID 对性能的影响和提升

IO读写的详细过程是怎样的? 

  1、程序先发出指令

  如某个时候,主机控制器发出指令: 读取  初始扇区100   长度128

  2、计算出对应的物理扇区号

  RAID控制器做逻辑条带化的时候,制定了公式,如何根据上面的指令,计算出逻辑扇区对应的物理磁盘的扇区号;

  所以RAID控制器接受受道这个指令之后,会立刻进行计算,根据这个公式,就能算出100号逻辑扇区,对应的物理磁盘的扇区号;然后还会依次算出 初始扇区后逻辑上连续的128个扇区,所在的物理磁盘的扇区号; 这些物理扇区号可能不在同一个磁盘上;

  3、操作物理磁盘

  得到物理磁盘的扇区号之后,会分别对这些扇区的磁盘再次发送指令;然后就真实的去读取对应数据了;

  4、磁盘反馈数据

  磁盘接受到指令,各自将数据提交给RAID控制器,经过控制器再Cache中的组合,再提交给主机控制器;

  

  分析:

  128个扇区,也就是 512B*128=64KB;

  上面的过程中,如果128个扇区都在同一个segement,也就是说 条带深度 大于64KB,也就意味着,只需要在一块磁盘上读取就行; 这和单块磁盘性能一样,而且由于RAID控制器参与,甚至比单盘磁带的性能还差一些;

  那如果减小条带深度,那么同样的128扇区的数据,就会存放到更多的磁盘的segement;(而且如果条带深度减小,在磁盘数量不变的情况下,条带长度中字节数总量也会变小,也就是条带长度会变小);

  

  这里有个特别要注意的地方:

  条带中有多个segement,每个磁盘提供一个segement组成条带;如果一个IO很大,需要跨条带中多个磁盘中的segement,控制器不是先放满第一个segement,再去放满第二个segement;  对segement写入数据,这个过程其实是同时进行的,因为控制器会把每块盘要写入或读取的数据都计算好;

  个人理解,这种”同时“是一个宏观上的; 因为计算机总线是共享的,一个时刻只能对一个外设进行IO;那么如果磁盘不在相同的总线中,这种并行写入就更趋于”同时“,也就是说粒度更小; 所以这里不是理解成”并发“,只是宏观上的”同时“,比按顺序写入segement更有效率而已;

 

  这里就出现了一个矛盾的地方:

  RAID 要提升性能,那么条带深度就要越小越好; 能达到同时写入多块磁盘;

  但是条带深度太小,就会导致并发几率降低;  为什么说是并发机率呢? 因为如果条带深度太小,1个IO很大概率会占用多个磁盘,而每个磁盘同一时刻只能处理一个读写任务,其他IO只能等待这个IO完成后才能继续使用物理磁盘;

 

  这里就有一个均衡:

  1、如果随机小IO多,那么就适当加大条带深度;  随机IO的时间主要在寻道上,而不是写入时的时间花费,所以把IO限制在一个磁盘,那么其他磁盘可以做到并行写入;

  2、如果连续大IO多,就减少条带深度; 顺序大IO,主要时间在写入上,而且连续的IO,基本不用换道,所以要增大IO写入效率,尽量让多个磁盘同时处理;

 

RAID 0 性能对单块盘比较:

 

读写,并发IO,随机IO、连续IO: 小IO写入时,并发提升N倍 ; (注意的是, 个人理解 :如果大IO小于segement,其实也是提升N倍;如果遇到大IO是一次IO需要写入多个盘,相对之后提到的小IO,此处没有并发性,没有单独讨论的必要;)

读写,顺序IO,随机IO:不能并发,此时一个IO可以同时读取N个磁盘内容; 一次IO寻道时间相对单盘不变,虽然可同时写入多个磁盘,当相比寻道时间可忽略,所以提升很小;

读写,顺序IO,连续IO: 只经过一次寻道,寻道的影响很小,因为可以同时写入多块磁盘,所以提升N倍;

 

RAID 1 性能对单块盘比较:

读取,并发模式; 不管是随机IO还是连续IO,N个IO,每个IO占用一个磁盘,相当于提升了N倍;

读取,顺序IO,随机IO: 由于不能并发,此时一个IO可以同时读取N个磁盘内容,但是随机IO一次IO寻道时间相对单盘不变,虽然可以读取多个磁盘,当相比寻道时间可以忽略,所以提升很小;

读取,顺序IO,连续IO: 在这种模式下,寻道时间的影响降至最低,同时可以读取多块磁盘数据,所以提升N倍;

 

写入,并发IO,随机IO:  因为是镜像写入,每个磁盘都需要写入,所以没有所谓的并发; 相反,因为要同时写两份,性能取决于最差的磁盘,性能可能还降低;

写入,并发IO,连续IO:有一种情况,是控制器的优化算法,将多个小IO,合并成一个大IO;那就是提升了N倍

写入,顺序IO,随机IO或连续IO: 基本没有提升;因为此时寻道时间不变,传输时间不变,iops不变

 

RAID 5 性能对单块盘比较:

RAID 5,其实最适合小IO; 并发情况下,性能都比单盘有提升;

 

RAID 0

  将两块以上的硬盘合并成一块,数据连续地分割在每块盘上。

1.通过把多个磁盘组织在一起作为一个逻辑卷提供磁盘跨越功能;
2.通过把数据分成多个数据块(Block)并行写入/读出多个磁盘以提高访问磁盘的速度;

  

  条带化之后的多块硬盘,数据是被并行的写入所有磁盘,多管齐下,而不是横向写满一个条带,再写下一个条带;

  从理论上讲,三块硬盘的并行操作使同一时间内磁盘读写速度提升了3倍。 但由于总线带宽等多种因素的影响,实际的提升速率肯定会低于理论值,但是,大量数据并行传输与串行传输比较,提速效果显著显然毋庸置疑。

  

  优缺点:

  读写性能是所有RAID级别中最高的。

  RAID 0的缺点是不提供数据冗余,因此一旦用户数据损坏,损坏的数据将无法得到恢复。RAID0运行时只要其中任一块硬盘出现问题就会导致整个数据的故障。一般不建议企业用户单独使用。

 

那么就出现了一个疑问,数据是如何拆分成多个数据块的?

  个人理解,数据最终写入磁盘之前,都会被CPU翻译为0和1的bit, 控制器接收到要写入的bit,可以存放在缓存;

  每个RAID中,有设定分条深度,也就是每个segement中包含的扇区数量;那么控制器会根据分条深度来决定拆分成多大,根据分条长度,来决定一次拆分出多少份;这些就可以实现并行写入了;

  

RAID 1

  raid 0 ,虽然容量和性能提升了,但是不安全,所以为了安全就出现了raid 1,镜像;

  1个写IO,需要2个写,写惩罚是2;速度取决于最慢的磁盘,因为要同步;

  但是读取时,增加了并发性; 可以同时从2块磁盘上读取;

 

  优缺点:

  RAID1通过硬盘数据镜像实现数据的冗余,保护数据安全,在两块盘上产生互为备份的数据,当原始数据繁忙时,可直接从镜像备份中读取数据,因此RAID1可以提供读取性能。
  RAID1是硬盘中单位成本最高的,但提供了很高的数据安全性和可用性,当一个硬盘失效时,系统可以自动切换到镜像硬盘上读/写,并且不需要重组失效的数据。

 

RAID 5

  RAID 5 ,是需要一块校验盘;这样在保证像RAID 1 一样有并发性的同时,也能保证安全性;  

  RAID 5 的1次写,需要4个读写操作,写惩罚是4 ;  读出老数据,读出老的校验数据,然后写入新数据和新校验数据;

  但有一个特别要注意的地方,每个写IO下来时,都必须重新写入校验,也就是同一个分条内,同一时刻,只能是一个读写IO和校验在进行,不可能同时2个IO写入分条;这就有以下的情况:

  

  1、如果是2块盘,做RAID 5,因为有校验盘,那其实就只有1块盘能正常写入数据;实现不了并发, 没有意义;

  2、如果是3块盘,做RAID 5,也无法做到并发; 

  3、如果是4块盘,做RAID 5 ,可以做大的最大的并发是2个IO;

    为什么是2个,不是3个呢?

校验盘是有规律的斜向存放的?

 

 

1、是上面提到的,为了实现并发,校验盘放在一个磁盘上,一个IO写入时,校验盘一直被占用,无法实现并发;

2、如果校验盘放在一个磁盘上,每次其他磁盘写入IO,都必须更新校验盘,校验盘会特别繁忙,造成热点数据盘,也容易损坏;

为什么要增加并发,需要增加条带宽度而不是条带长度?

  条带长度:一个stripee横跨过的扇区或块的个数或者字节容量,就是条带长度,即Stripee length。
  条带深度:一个segment包含的date block 或者扇区的个数或者字节容量,叫做stripee depth。

    

 

 

   如果条带宽度太小,或IO sieze比较大,那么所有磁盘同一时刻只能被一个IO占用,也做不到并发了,只能一个IO一个IO来处理,这就导致一个IO要很多磁盘参与,得不偿失;

  所以分析也可以知道,要实现并发IO,就需要保证又空闲的磁盘未被IO占用,以便于其他的IO可以去空闲的磁盘进行访问,所以唯一的方法就是增加条带深度;为什么说是条带深度呢?

是因为,如果条带深度够大,也就是一个磁盘上的segemet够大,那么一个IO过来,如果小于这个条带深度,那这个IO就只会在这个segement上写入,这个IO就会被完全”禁锢“在一个磁盘上;此时就只会占用写入的磁盘和校验盘,2块磁盘; 那么其他的磁盘就会空闲出来;

  这些是RAID 5 设计时,条带宽度比较大的原因;  所以RAID 5 在随机读方面性能比较好,因为可以并发;但在写时,因为写惩罚为3,所以随机和顺序写的性能都不太好;

 

RAID 6

  两块校验盘,比RAID 5 更安全,但是写性能当然也更差了;

  RAID一次写,需要6个操作,写惩罚是6; 读出老数据,读出老的校验数据1,读出老校验数据2;然后写入新数据和新校验数据1和新校验数据2; 和RAID 5 相比,区别是2次读取,2次写入;

 

标签:02,RAID,条带,写入,学习心得,扇区,IO,磁盘
来源: https://www.cnblogs.com/lei2017/p/16115125.html