对你这个冬瓜头,一定要小心,一不小心就给绕进去了。
首先我得说下并发IO概念很重要,这个一个要硬件支持,一个要应用支持,如果应用不直接支持,多个应用同时存取磁盘也算并发,否则如果只有一个应用在用,又只能顺序IO,那就会有很大差异。
>>raid0持续读写仅在并发IO+分割块很大的时候,iops会增加很多。
持续读写讨论iops没太大意思。窃以为顺序IO也能传输率提高一倍。
>>raid0随机读写仅在并发IO+分割块很大的时候,iops显著增加。
嗯,只要分割块明显大于一次随机读写的大小。根据我前面的分析,分割块起码要和0.5MB可比的量级,否则io次数太多,效率下降,这远大于一般随机读写方式读的量。如果用明显小的分割块,看不出有什么优点。
>>raid1持续读写,仅在并发IO的情况下,iops显著增加。
如果有优化,顺序IO也能读传输率提高一倍,道理同RAID0。
RAID1只有读才有可能比单盘快,写不可能。
>>raid1随机读写,仅在并发IO的情况下,iops显著增加。
还是只是读会有增加。即使顺序IO,如果控制器有优化,随机读iops仍然能略有增加,因为有两个磁头可选择,可选择离数据近的(问题是磁盘控制器远不如硬盘本身更知道哪个更近,这涉及到旋转相位)。
对RAID5的数据存储我的理解看来有问题,要重新纠正。
写还是和我说的一样,随机写等于或慢于单盘的,持续写要快。
持续读也没有什么问题,要明显快于单盘。
持续的读写我以为假如控制器有优化,即使顺序IO也是一样能快的。
当然是不是有这种优化(对RAID0、RAID1、RAID5都一样),我就不知道了,理论上是没问题的。
随机读我的理解有问题(我以前以为要读所有的盘),应该是类似RAID0 ,并发IO能有很大上升
以上是wdq兄的意见
一下是我的意见
1、您说持续IO中iops没有意义,我认为不然。持续传输中正是因为iops的增
加,才致使数据传输率的增加,因为数据传输速率=iopsXspi(spi:size
per IO),io size增大,或者iops增大,均会影响传输速率,但是io size的
增加所带来的效应曲线,更加陡峭而已。所以你说的持续io讨论iops没有意义
,本身是站不住脚的。:)
我把纠正的论断合并进来:raid0持续IO时,iops约等于单盘N倍。而raid0几
乎不可能并发IO(除非分割块很大,大过spi),如果真并发IO了,那么效能提升将更大!
2、RAID1只有读才有可能比单盘快,写不可能。这个我同意,是我的疏忽。
如果有优化,顺序IO也能读传输率提高一倍,这个我也同意,原理和我最后对持续IO的分析是等价的。
3、raid1随机读写,仅在并发IO的情况下,iops显著增加。
还是只是读会有增加。对,我疏忽了。raid1写永远不会有增加,只要等于就是万幸了。嗯,你说的选择磁头近的,是优化,但是不知道有没有例子。
4、关于raid5。我是完全按照snia的文档中的raid5方式。其他厂家自定义的raid5,不在讨论范围之内。您说的持续写会增加,不敢苟同。如果spi远远大于striple depth,持续写会增加,但是如果小于,远远小于,那么通过学习snia ddf文档可知,raid5是把io顺序放到一个striple depth中,也算一个segment把,如果持续IO,那么还是总操作一个盘,这样不会提升,反而降低,因为还要有校验。
赞wdq兄,敢于审视自己的理解,敢于突破自我,敢于出来讨论。而不像有些人那样,我就不说了。
wdq兄回复:
>>您说的持续写会增加,不敢苟同。
我们还是假定RAID5控制器带电池后备的写缓存吧,不然写的性能怎么搞都是很糟糕的。
还是希望能有厂家做出flash加电容后备的硬盘(断电瞬间电容供电把RAM中未写的 缓存数据写入flash),如果同时随机读写很频繁的话,那样通过排队优化写操作(磁头位置和旋转相位),根据代价把写操作放到磁头读操作移动间隙,可以把随机写操作化为同样的随机读操作1/4以下的代价(比如每次写费时1ms,主要是短距离寻道的磁头稳定时间)。RAID5控制器不了解磁头位置和旋转相位,再怎么优化都赶不上硬盘自身优化的。
我说:电容大概功率能提供到多少,持续时间多少?
马达能持续供电一段时间么?
这个得咨询搞电路的人了。
wdq:
>>电容大概功率能提供到多少,持续时间多少?
那得看电容大小了。
>>马达能持续供电一段时间么?
晕,不是给马达供电啊,是意外断电时把缓存RAM中没写完的数据写到flash里面啊,这个时候其它部分都不供电,所以应该消耗不多的。
我:
flash啊,哦,和和,电容加flash成本大概多少啊
wdq:
>>flash啊,哦,和和,电容加flash成本大概多少啊
很低的啊,需要的电不多,电容不值多少钱,我觉得搞32M RAM和32M flash就差不多了,RAM不需要CPU那么高速的,flash想想闪存盘要多少钱就知道了,好像有把RAM和flash封装在一起的形式,那样带宽大后备转移数据应该非常快的。就是不明白为什么没厂商做。
asyqm:
你的电容硬盘通过这个仅能做到cache降落到flash上,但是阵列控制器在断电一瞬间的状态呢?写哪去?包括硬盘在断电一瞬间的磁头的位置,是否可以恢复到故障前状态?另外,硬盘上加大容量电容,这样是否符合工业生产的要求呢?磁盘厂商不可能就为你磁盘阵列一家单开一条生产线吧???不完全是原料成本的问题,还包括研发以及工业规模生产的问题吧,都算上你就会知道磁盘厂商这么不划算了。
wdq:
>>你的电容硬盘通过这个仅能做到cache降落到flash上,但是阵列控制器在断电一瞬间的状态呢?写哪去?
如果硬盘有写缓存,阵列就可以不需要电池后备的写缓存了(当然如果主要用于持续存取的有可能会对性能好点),断电时自然也就不需要管状态了。
就算和现在一样,硬盘写缓存打开(或是硬盘内自己打开),硬盘负责保存自己未写入的数据,阵列负责保存未传到硬盘的写缓存数据,也没有任何不兼容的。
>>包括硬盘在断电一瞬间的磁头的位置,是否可以恢复到故障前状态?
核心点是进入硬盘内写缓存而未写入硬盘表面的数据,这些后备了,磁头位置无关紧要。
>>另外,硬盘上加大容量电容,这样是否符合工业生产的要求呢?
合理设计的话,需要的电容很小,不会对电源带来冲击。关键点是电路上要把断电的时候进行后备存储的电路供电和其它部分供电隔离开来,不然就会对电容容量有不合理的高要求。
>>磁盘厂商不可能就为你磁盘阵列一家单开一条生产线吧???不完全是原料成本的问题,还包括研发以及工业规模生产的问题吧,都算上你就会知道磁盘厂商这么不划算了。
如上面所说,和磁盘阵列无关,有关的地方是磁盘阵列可以不要电池后备写缓存了。
补充一点,关于RAID5持续写速度。
如果N+1个盘的RAID5能一次持续写远超过N个条带宽度的数据,理论上就几乎不需要读盘只管根据写的数据计算校验和写盘就行了,那样就能达到N倍单盘的持续写速率。但这种情况估计只有阵列带电池后备的大写缓存并且有适当的延迟写策略才有可能达到。一般而言,OS不大可能一次就向磁盘写几十MB的数据,如果不能写长度一次覆盖N个条带宽度,不佳的策略只能导致为计算校验和去读盘,最后性能可能下降到单盘持续写的几分之一。
我:
raid5,一般情况下,不会发生一次覆盖一个条带的动作。因为标准raid5,是局部连续,也就是几个连续的lba都是放在一个striple depth中,在一个物理盘上,放满之后,继续同一个条带上的下一个depth,直到充满条带,再到下一个条带。所以不是条带连续的,而是局部连续。
特殊情况下,也就是一次IO给出一个初始lba,然后给出连续的长度,这个我做过试验,iscsi环境,scsi命令一次最大给出的是128个lba,也就是64k。所以,raid5几乎不可能一次IO写整个条带。再加上fs造成的lba不连续,一次给出的lba可能也小于8个,这样就可以完全忽略raid5这种一次写整条带的情况,就算发生了,那么控制器也貌似不会有这种算法的(也就是你说的“优化”)。
实际中,真正可能产生一次写整条的raid level,只有raid2,raid3。raid5所能提供的最大一个好处就是:并发IO。