ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

02-RAID技术 学习心得

2022-04-08 02:31:20  阅读:195  来源: 互联网

标签:02 RAID 条带 写入 学习心得 扇区 IO 磁盘


 

RAID

术语

  

 

 

  • 扇区:是磁盘中最小的存储单元,向磁盘读写数据时是以扇区为最小单元进行存储
  • block:block,是由N个扇区组成一个块;

 

  • 在磁盘相同偏移处横向逻辑分割,就形成了stripee;
  • 一个stripee所占用的单块磁盘的区域,就是一个segement; 一个segement中的扇区或datablock 是连续的;一个segement中包含的data block或扇区的个数或者字节容量,叫做stripee depth;
  • 一个stripee横跨过的扇区或块的个数或者字节容量,就是条带长度,即Stripee length。

  如图上面,一个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,也无法做到并发; 

  • 比如,1个IO下来,这没有并发的概念;
  • 那么 2个IO(D1,D2)写入3块盘的RAID 5时,比如D1写入时,同时开始读取旧的校验,之后还要写入新的校验; 校验位是占用的,以为这D2此时是无法写入的; 那么也就是没有并发;

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

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

  • 还是之前提到的,1个IO写入时,这个分条的校验盘是占用的,此时这个分条无法写入第二个IO;
  • 写入2个IO时,一个分条肯定还是1个IO读写; 但是第二个分条上,还是有2个盘时空闲,意味着第二个分条此时也可以写入一个IO; 这也解释了为什么校验盘是有规律的斜向存放的,而且这种并发是基于“恰好”的,所以raid5提供的是盲并发。
  • 写入3个IO时,又回到了之前的情况,分条的4个磁盘全都占用,无法做到并发;

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

 

 

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有