磁盘阵列的原理及相关知识( 二 )


磁盘1 磁盘2 磁盘3 磁盘4
这四个磁盘形成一个阵列,而磁盘阵列的控制器是将此四个磁盘视为单一的逻辑磁盘,如DOS环境下的C:盘 。这是disk spanning的意义,把小容量的磁盘延伸为大容量的单一磁盘 。因为电脑本身只把硬盘当作一储存空间,并不安排管理数据在硬盘的方式,磁盘阵列控制器会决定如何使用储存空间以得到最好的性能和数据的一致性 。所以用户不必规划数据在磁盘的分布,而且提高磁盘空间的使用率 。Oaraid?;的SCSI磁盘阵列更可连接几十个磁盘,形成数十GB到数百GB的阵列,使磁盘容量几乎可作无限的延伸;而各个磁盘一起作存取的动作,比单一磁盘更为快捷 。很明显地由此阵列形成而产生RAID的各种技术 。我们也可从上图看出inexpensive(便宜)的意义,四个500MB的磁盘比一个2GB的磁盘要便宜,因为以前大磁盘的价格非常昂贵,但在磁盘越来越便宜的今天,inexpensive已非磁盘阵列的重点,虽然对于需要大磁盘容量的系统,仍是考虑的要点 。
磁盘或数据分段(Disk stripping or Data Striping):
因为磁盘阵列是将同一阵列的多个磁盘视为单一的虚拟磁盘(virtual disk),所以其数据是以分段(block or segment)的方式顺序存放在磁盘阵列中,如下图:
磁盘0 磁盘1 磁盘2 磁盘3
A0 A1 A2 A3
A4 A5 A6 A7
… … … …
4N-3 4N-2 4N-1 4N
分段的意思是把数据分小段跨越分布在各个磁盘,数据按需要分段,从第一个磁盘开始放,放到最后一个磁盘再回到第一个磁盘,直到数据分布完毕 。至于分段的大小视系统而定,如果磁盘阵列所分区块和操作系统的所分的区块是一致的话,会有较好的效率 。有的系统或以1KB最有效率,或以4KB,或以6KB,甚至是4MB或8MB的,但除非数据小于扇区(sector, 即512bytes),否则其分段应是512byte的倍数 。因为磁盘的读写是以一个扇区为单位,若数据小于512bytes,系统读取该扇区后,还做组合或分组(视读或写而定)的动作,浪费时间 。从上图我们可以看出数据以段方式放在不同的磁盘,整个阵列的各个磁盘可同时作读写,故数据分段使数据的存取有最好的效率,理论上本来读一个包含四个分段的数据所需要的时间约为(磁盘的access time数据的transfer time)* 4次,现在只要一次就可以完成 。
Oaraid?;可将同一数据分段放在不同的磁盘,比如磁盘阵列定义的分段为4KB,而5KB的数据可把4KB的数据放在一个磁盘的分段上,另外1KB的数据放在另一磁盘的分段,而另一笔数据可从这个磁盘分段所剩下的3KB空位放起,这样不但能增加磁盘的利用率,而且可同时启动多个磁盘一起动作,增加存取的速度,在很多情况之下,即使是小于一个分段的数据,也能得到负载均衡的好处,所以分段大小优化心脏可作跨盘分段(同一数据分段放在不同的磁盘分段) 。可得到较好的存取效能,这也是为什么OAraid?; Viper-II5000系列能有37MB/sec的存取效能的原因 。
若以N表示磁盘的数目,R表示读取,W表示写入,S表示可使用空间,则数据分段的性能为:
R:N(可同时读取所有磁盘)
W:N(可同时写入所有磁盘)
S:N(可利用所有的磁盘,并有最佳的使用率)
Disk striping也称为RAID 0,很多人以为RAID 0没有什么,其实这是非常错误的观念,因为RAID 0使磁盘的输入输出有最高的效率 。而磁盘阵列有更好的效率的原因除数据分段外,它可以同时执行多个输入输出的要求,因为阵列中的每一个磁盘都能独立动作,分段放在不同的磁盘,不同的磁盘可同时作读写,而且能在快取内存及磁盘作并行存取(parallel access)的动作 。Striping打破了单一磁盘所形成的瓶颈 。Oapro对以上图4个1GB硬盘的阵列和1个4GB的硬盘作过比较,磁盘阵列的效能约为单一磁盘的3至3.5倍,若4个磁盘分别接Oaraid?; 4个SCSI通道形成阵列,其I/O性能是单一磁盘的4倍 。但是否真能表现出这种能力,要视操作系统,用户数目或工作负荷的特性而定,要能同时得到各个磁盘的交通,其工作负荷也必须分布在各个磁盘 。

推荐阅读