RAID 0 和 RAID 1 的性能

raid0

上个星期订购的硬盘到了,8个 Seagate 500GB SATA 2 硬盘用来升级几台 SUN 服务器,替换上面的几个 250GB 老硬盘。VPSee 一直在服务器上用的是 RAID 10 和 RAID 5,传说中 RAID 0 的 IO 性能有很大提高,VPSee 对 RAID 0 的 IO 性能向往已久,今天刚好有多余的硬盘,可以测试一下。理论上来说,RAID 0 实现了一个线性的磁盘阵列,数据被切分成块(blocks)后分别写入各自硬盘,分散了 IO 负载,IO 性能会有很大提高,如果磁盘阵列里的每个磁盘控制器都只对应一个硬盘,充分分散 IO,那么 IO 性能应该更好。今天的测试结果发现不管是硬件 RAID 0 还是软件 RAID 0 性能都很差,差得自己都不能解释,理论上双硬盘 RAID 0 的性能应该是无 RAID 0的2倍,VPSee 的实际测试数据结果刚好相反,无 RAID 0 的性能是有 RAID 0 的2倍。测试结果还显示硬件 RAID 和 软件 RAID 性能接近,这一点很好解释,测试用的是 SunFire X2100 M2 服务器,上面自带的是 Nvidia RAID,被称为 “FakeRAID”,FakeRAID 其实也是一种软件实现,和 Software RAID 一样都会消耗 CPU,其性能和 Software RAID 相似不奇怪。

10月15日更新:10月13日测试结果显示不带 RAID 0 的性能比带 RAID 0 的还好得多,原因查明是因为其中的一个硬盘有问题,没料到没拆封的新硬盘居然还会有故障,导致先前的测试环境不公平,测试的结果无法合理解释。换了硬盘重新测试硬件 RAID 0,新的测试结果显示 RAID 0 的 IO 性能有较大提高,与理论相符;软件 RAID 1 用 CPU 模拟 RAID 功能,导致系统负载(load average)保持较高状态,和理论相符。(下面的数据已经更新)

双硬盘 + 普通挂载

无 RAID 0 测试也是设置的两块硬盘,一个硬盘用来装系统,另外一个硬盘挂上去。分别用 hdparm,bonnie++,iozone 测试:

# /sbin/hdparm -Tt /dev/sda
/dev/sda:
 Timing cached reads:   4076 MB in  2.00 seconds = 2036.86 MB/sec
 Timing buffered disk reads:  162 MB in  3.00 seconds =  53.97 MB/sec

# ./bonnie++
Version 1.03e ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine  Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
bang       4G 63786  98 68561  64 33488  16 35061  80 100811  19 232.2   0
              ------Sequential Create------ --------Random Create--------
              -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
        files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
           16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
bang,4G,63786,98,68561,64,33488,16,35061,80,100811,19,232.2,0,16,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++

# ./iozone -s 100M
                                                  random  random    bkwd   record   stride                                   
    KB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
102400       4  340155  508979   586930   599212  566258  520126  534720   590170   563886   320739   433341  528295   520245

双硬盘 + 硬件 RAID 0(FakeRaid)

分别用 hdparm,bonnie++,iozone 测试:

# /sbin/hdparm -tT /dev/mapper/nvidia_igcjceec3
/dev/mapper/nvidia_igcjceec3:
 Timing cached reads:   1766 MB in  2.00 seconds = 883.57 MB/sec
 Timing buffered disk reads:  374 MB in  3.01 seconds = 124.24 MB/sec

# ./bonnie++
Version 1.03e ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine  Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
bang       4G 58566  92 116851  66 50132  30 27333  86 149623  35 364.4   1
              ------Sequential Create------ --------Random Create--------
              -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
        files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
           16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
bang,4G,58566,92,116851,66,50132,30,27333,86,149623,35,364.4,1,16,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++

# ./iozone -s 100M
                                                  random  random    bkwd   record   stride                                   
    KB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
102400       4  149748  507946   937291   798155  792109  399647  852672   524171   802494   254962  1249892 1514190  1291883

双硬盘 + 软件 RAID 1(Software RAID)

分别用 hdparm,bonnie++,iozone 测试,系统负载 load average 居高不下:

# /sbin/hdparm -tT /dev/sda
/dev/sda:
 Timing cached reads:   2236 MB in  2.00 seconds = 1118.92 MB/sec
 Timing buffered disk reads:   86 MB in  3.05 seconds =  28.19 MB/sec

# ./bonnie++
Version 1.03e ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine  Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
bang       16G  4735  10  4831   2  4117   1 18128  50 48536   7 344.5   1
               ------Sequential Create------ --------Random Create--------
               -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
        files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
           16 17649  47 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
bang,16G,4735,10,4831,2,4117,1,18128,50,48536,7,344.5,1,16,17649,47,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++

# ./iozone -s 100M
                                                  random  random    bkwd   record   stride                                   
    KB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
102400       4  285771  558272   910466  1622948 1803419  919134 1026424  1561120  1785501   327527   768025 1131377  1174904

评论 (4 Comments)

  1. 怎么不买1T的?价格差不多啊

    做raid还要看raid卡参数的,有次我买了两块1T硬盘组硬raid,但我发现RAID卡的速率比硬盘还低

  2. 对啊,RAID 卡速率低也就算了,问题是关闭 RAID 后用软件 RAID 性能也很差,差一点也就算了,差了近一半,实在不知道怎么回事:(

  3. nvidia芯片组的服务器?Sun太有才了吧……

  4. […] 我们如何知道系统性能是好还是差呢?这需要事先建立一个底线,如果性能监测得到的统计数据跨过这条线,我们就可以说这个系统性能差,如果数据能保持在线内我们就说性能好。建立这样底线需要知道一些理论、额外的负载测试和系统管理员多年的经验。如果自己没有多年的经验,有一个简单划底线的办法就是:把这个底线建立在自己对系统的期望上。自己期望这个系统有个什么样的性能,这是一个底线,如果没有达到这个要求就是性能差。比如,VPSee 上个月有个 RAID0 的测试,期望的测试结果应该是 RAID0 的 IO 性能比单硬盘有显著提高,底线是 RAID0 的 IO 至少要比单硬盘要好(好多少不重要,底线是至少要好),测试结果却发现 RAID0 性能还不如单硬盘,说明性能差,这个时候需要问个为什么,这往往是性能瓶颈所在,经过排查发现是原硬盘有硬件瑕疵造成性能测试结果错误。 […]

发表评论