|
发表于 2010-11-18 05:55:02
|
显示全部楼层
本帖最后由 Plutonium 于 2010-11-18 05:58 编辑
回复 cycle6 的帖子
其实你这么说可能是我没说清楚,小文件读写确切地说其实是“Small read/write”,大文件的读写是:“Large read/write”,如果你知道RAID的基本工作方式,这方面因该不难理解。如果你还对这方面有疑问可以参考一下计算机构架方面的书籍,ECE/EE/CS的学生因该都有,你要是不介意,我也可以推荐你一些。其次我原以为你对效验不感兴趣的说……从RAID1开始都有“效验”能力,或者更准确的讲是对错误(Failures)的容忍能力,1的方式Mirrored,2是Memory-style ECC,所谓ECC就是你说的“奇偶效验”,3是Bit-Interleaved parity,4是Block-Interleaved parity,5是Block-Interleaved Distributed Parity,6是Row-Diagonal Parity EVEN-ODD(这个比较有趣)。其实也就是这些不同的“Disk Failures tolerate”导致他们对数据读写性能的不一致。你要说RAID1对数据不“效验”其实也对,只是他的保证方式采取了直接备份的方式,这也导致1的最大不足就是“High check storage overhead”。
不可否认高阶的RAID的一个很大的目的就是为了提高服务器的Throughput,但是其实降低服务器的维护复杂程度也是非常重要的一方面,你要是知道各个RAID的机制就会发现当某一块硬盘出了问题以后,该怎么找到出问题的硬盘,怎么修复等等。
你对RAID0的理解基本问题不大,至于对RAID1的说法就有问题了,RAID1的写确实比更高阶的RAID组合更快一些,特别是Small writes,当两个硬盘的读写操作不是独立的时候,两块硬盘还是可以同时写一个文件的两个部分,当他们都有了那个文件的一半以后,写的过程就已经完成了,而这时候控制器要做的就是继续让两块硬盘进行交流,保持一致性,这个时候可以想象,在写小文件的时候,用户面对的Delay只是一个文件大小一半的写需要的时间,但是当出现大量写操作时这部分Delay就没办法被掩盖了;当然使用RAID1的很多情况下控制器会同意两块硬盘独立处理读操作,而这个情况下你说的对写数据性能降低的情况才出现。
至于你说的Deadlock的算法其实在Distributed System里面讲的比较多一些,虽然这个算法不是最好的,但是确实是现在唯一商业化了的……
RAID3、4、5、6的数据存放其实也是有差异的,原因在于他们的“效验”方式不一样。比如4和5,前面讲到4是Block-Interleaved parity采用一块Extra硬盘来存放所有效验信息,所以当有一个指令要求从多块银盘读写数据时就会同时产生多个对这块Extra硬盘的访问指令,显而易见这块Extra硬盘就会使整个系统的瓶颈。但是5采用的是Block-interleaved distributed parity所以他尽管也需要一快Extra硬盘,但是这块硬盘本质上和其他硬盘没有区别,因为效验信息都被均匀分布在这些硬盘中,其好处可以为Small read and write提供额外的带宽。但是也正如前面讲到,small write 最快的还是RAID1了。
另外如果你对RAID还有疑问可以看一下一本“Computer Architecture a quantitative approch”的第6章,3版和4版都还不错。如果你对RAID还有更多兴趣的话可以看看相关的文献,可以从RAID最早的那篇由Patterson, Gibson和Katz在1987年发表的“A case for Redundent arrays of inexpensive disks(RAID)”,不过我个人认为看一下那本书的第六章以及附录C就足够了。 |
|