问:
1.LZ说"如果用32位数据传输的话,就需要有32块数据盘,而且也同时要有6块校验盘,大家可以算算,32个1加起来,一共几位,对,32个1加起来,二进制是100000,6位,所以一共要用6块校验盘来存放6位数字。一般磁盘受到的io都以字节为单位,所以每次IO必然要占用所有磁盘,因为每块磁盘一次就只能传出去1位,而一个字节就要8位,也就是如果一个IO大小是1个字节,那么完成这一次IO,至少得8块磁盘联动,此过程中,其他的IO都要等待这个IO结束之后,才能进行,因为磁盘都服务于这个IO了。这也是这种做法的一个弱点,即IO不能并发,不适合大IOPS的情况,但是极为适合IOPS小,但是SIZE per IO(SPI)值大的应用,比如视频编辑,一个视频文件动辄几G,持续传输率较高。"
1)上面说道的需要6块校验盘,是指一次IO完成一个32位数据的写入,每个磁盘每次只能读写一位,岂不是很慢?
2)一次IO最大到底可以达到多大,由什么决定的?操作系统,硬件,应用程序?
3)一个扇区是512B,如果你一次只写入1bit,下次这个扇区还能写入数据吗?如果能写入的话,磁盘最小单位已经是512B,读的时候怎么能找到这个只占一位的数据?
4)每块磁盘一次就只能传出去1位,视频文件SPI值大,有矛盾吗?上面说道完成一次IO完成32位数据就需要38个硬盘,SPI值打,如何写入呢?
2.所以唯一可以实现这个的就是增大block的大小,控制器的一个IO过来,这个IO块小于block大小,所以这个块不用分割,直接就写入一个磁盘上的block中,这个过程只用到了一个磁盘,而与此同时,其他IO可以和这个IO同时进行,前提是其他IO的目标不是这个IO要写入或者读取的磁盘,因为这块磁盘正在被这个IO占用。
1.这里的block大小是指磁盘陈列通常说的CHUNK SIZE 吗?
3.用加减算法进行校验,并没有对数据纠错的能力,也就是比如1+0+1=10,这段数据在从磁盘被传输给控制器的时候,会一同传输,即数据位101,校验位10,此时经过控制器的校验,他会算1+0+1=10,和一同传过来的校验位进行比对,如果相同,则证明数据都无误
1)上面是怎么算出来的?
4.如果两个IO同时需要访问校验盘,那么他们访问不同残体的几率是三分之一,因为只有两块校验盘残体,第一种情况:可能两个IO同时需要访问1号残体,那么就不能并发,必须等待。第二种情况,两个IO需同时访问2号残体,那么同样也不能并发。第三种情况,第一个IO访问1号残体,第二个IO访问2号残体,可以并发。所以2块盘的系统,IO可并发访问校验盘残体的几率为三分之一。但是这只考虑了多IO访问校验残体的几率, 没有考虑多IO访问数据盘残体的几率,那么同样,我们作分析,也是三分之一,所以最终得出结论是: 2块盘的系统中,IO可并发几率为九分之一
1)两个盘系统,两个IO能并发吗?一个IO已经占了两个盘,只剩下一个盘了
5.还有一个问题,在RAID-5中,如果两个盘系统,坏了一个,这个时候继续用,如果继续往里面写新数据,肯定不产生奇偶校验数据了?如果此时读出来的数据部分是通过校验算出来,写数据更时是不是只是把一个磁盘数据位更新,另外一次磁盘继续更新原来的校验位还是把原来的校验位用算出来的数据位更新?
答:
《《《1)上面说道的需要6块校验盘,是指一次IO完成一个32位数据的写入,每个磁盘每次只能读写一位,岂不是很慢?
》》》其实这种“每次读写一位”严格来说不准确。磁盘最小IO单位为扇区,也就是512字节,不管你读取多少,最小不可能读取半个扇区,而只能读取N个扇区,N大于等于1。之所以说成每次读写1位,不准确,其实控制器是把一个IO的每位都横跨分布开来,也就是一个扇区中存放的其实都是些“残体”,举个例子,比如8块数据盘,一个横条大小是8位,如果一个IO大小为4096字节,那么这个IO需要占用4096个横条,也就是说平均每块盘上占用4096个横条,而每个横条在每块盘上占用1位,则这个IO恰好占用了每个数据盘上一个扇区。我们知道,就拿windows来举例把,ntfs一簇一般是8个扇区,4096字节,所以除非自己编程,不然所有利用fs接口的应用,低层接受到的IO大小,都会大于等于4096字节。到这里,我就不进一步分析了。
《《《2)一次IO最大到底可以达到多大,由什么决定的?操作系统,硬件,应用程序?
》》》这个上面已经分析过了。和os,fs都有关。
《《《3)一个扇区是512B,如果你一次只写入1bit,下次这个扇区还能写入数据吗?如果能写入的话,磁盘最小单位已经是512B,读的时候怎么能找到这个只占一位的数据?
》》》这个第一个问题已经解释过了。
《《《4)每块磁盘一次就只能传出去1位,视频文件SPI值大,有矛盾吗?上面说道完成一次IO完成32位数据就需要38个硬盘,SPI值打,如何写入呢?
》》》这个第一个问题有解释。纵使即便是真的“每次传一位”,磁盘可以读取扇区内的偏移,这也没关系,只不过效率低而已,spi越大,传输效率就越高。spi值和raid level没必然关系,没人规定某种raid level必须用哪种spi,只不过针对不同spi表现出来的效率不同而已。
《《《1.这里的block大小是指磁盘陈列通常说的CHUNK SIZE 吗?
》》》是否是chunk size,我不了解,厂家自定义的名词太多,这个chunk,需要用图解,才能知道他的具体含义,不过估计差不多的意思。
《《《1)上面是怎么算出来的?
》》》算术加减法啊,用计算器就可以算出来。
《《《1)两个盘系统,两个IO能并发吗?一个IO已经占了两个盘,只剩下一个盘了
》》》为什么两个Io不能并发?没人规定一个IO必须占用两个盘。
《《《还有一个问题,在RAID-5中,如果两个盘系统,坏了一个,这个时候继续用,如果继续往里面写新数据,肯定不产生奇偶校验数据了?
》》》是的,坏的那个盘上,所有数据都是飘着的了,没有人收纳他,只能通过控制器计算得出。
《《《如果此时读出来的数据部分是通过校验算出来,写数据更时是不是只是把一个磁盘数据位更新,另外一次磁盘继续更新原来的校验位还是把原来的校验位用算出来的数据位更新?
》》》看糊涂了。。。。如果坏了一个盘,那么如果要往这块盘写数据,控制器会转变成对应的其他好的盘上的数据,写实,而不是写虚。
问:
谢谢LZ,致以崇高的敬意!
1)两个盘系统,两个IO能并发吗?一个IO已经占了两个盘,只剩下一个盘
了
为什么两个Io不能并发?没人规定一个IO必须占用两个盘。
假设两次IO分别1和2
以三个硬盘组ABC成的RAID-5模式(包含校验),IO1至少包含一个数据盘(假设A),一个校验盘(B)吗,相同的时间下,只剩下一个盘C空闲,还能完成一次IOB吗,除非IOB的校验码正好也在完成IO1所需校验码的扇区的旁边,一起读出来?
答:
是的,感谢提出,我犯了一个错误,写的时候没有搞清,我会算出一份新的几率数据,稍后贴上来。
算了算,基本上。。。。。很复杂
三块盘以下(包括三块)的raid5不能并发IO,3盘的raid5,简直是累赘,棒槌。
4块盘开始的raid5,可以并发两个IO,而且几率很小,因为有两个冲突条件,一个是磁盘不能并发,一个是条带不能并发,两者共同限制了并发几率,但可以肯定的是,raid5磁盘数量越多,可并发几率就越高。
要算出一个并发公式,不是不可能,而是我水平不够。
也请精通算术的大虾如果有兴趣可以算一下,我想这个公式如果出来,将会是上层应用的一个很好的参考。