RAID0(硬件和MD)比LVM慢?

当我们构build分布式文件系统时,我正在做一些节点的基准testing。 由于文件将在许多节点上分布和复制,因此我们在节点上使用raid0。 然而,我得到了一些奇怪的性能数字,我很好奇,如果StackOverflow社区可以帮助找出原因。 我使用fio作为我的基准testing工具。 请注意,版本1.38不适合我,我需要使用版本1.59或1.60。

这是我的fioconfiguration文件:

[global] directory=/mnt/gluster lockfile=readwrite ioengine=libaio iodepth=8 rw=randrw nrfiles=200 openfiles=30 runtime=900 [file] filesize=16-8k/8M-512M size=1GiB 

对于使用软件raid的raid0,我得到了以下结果(剪辑的要领):

  read : io=285240KB, bw=324535 B/s, iops=79 , runt=900011msec write: io=283532KB, bw=322592 B/s, iops=78 , runt=900011msec 

在raid1上使用软件raid,我得到了以下结果:

  read : io=683808KB, bw=778021 B/s, iops=189 , runt=900000msec write: io=488184KB, bw=628122 B/s, iops=153 , runt=795864msec 

单磁盘性能仍然超过raid0的performance:

  read : io=546848KB, bw=622179 B/s, iops=151 , runt=900018msec write: io=486736KB, bw=591126 B/s, iops=144 , runt=843166msec 

LVM以4k范围划分四个磁盘:

  read : io=727036KB, bw=827198 B/s, iops=201 , runt=900007msec write: io=489424KB, bw=604693 B/s, iops=147 , runt=828800msec 

硬件RAID0(HighPoint RocketRaid 2470)

  read : io=326884KB, bw=371918 B/s, iops=90 , runt=900008msec write: io=328824KB, bw=374125 B/s, iops=91 , runt=900008msec 

请注意,上面的前四个结果只是在主板的SATA控制器上运行。 不过,我在转移到RocketRaid卡之后用软件RAID复制了结果。 这些是1tb SATA驱动器。 运行multithreadingtesting交付了相同的结果。 有什么理由说RAID0会运行这么慢吗? 我认为它可以提供比单个驱动器或RAID1更好的随机I / O性能。


后续:根据在可伸缩信息学(好人,购买他的东西!)乔的一些build议,我改变了我的testing使用更深的队列和更随机的块大小。

 [global] directory=/mnt/glusterfs lockfile=readwrite ioengine=libaio iodepth=32 rw=randrw numjobs=8 [file] filesize=16-8k/8M-512M blocksize_range=64k-1M size=1GiB nrfiles=50 openfiles=8 runtime=900 

最终的结果是HighPoint RocketRaid 2740卡很糟糕。

  • 单磁盘性能(SuperMicro主板SATA):读取速度为43.2mb / s,写入速度为42.6mb / s
  • MD Raid 0(RocketRAID用作HBA,加载或不加载驱动程序):53.1 mb / s读取,54.1 mb / s写入
  • RocketRaid Raid 0:29.4 mb / s读取,29.2 mb / s写入
  • MD RAID 0(主板SATA):58.0 mb / s读取,58.3mb / s写入

连接到RocketRaid卡的性能在整个板子上都比较慢。

我将打开这个问题 – 在接下来的一周或两周内,我们会得到一个新的RAID卡,以便testing,而且我还在寻求获得超过单磁盘性能的优化技巧,这似乎没有得到彻底的答复。

您可能会遇到一个条形码问题,其中写入或读取的数据是热点单个磁盘 – 有关详细信息,请参阅软件RAID howto 。 你可以通过查看iostat的输出来查看是否是这种情况。

如果您想要检查线性访问性能,请尝试使用“hdparm -t”或dd进行基准testing – 这应该显示性能数字,大约是单磁盘性能的两倍。

我认为它可以提供比单个驱动器或RAID1更好的随机I / O性能。

不,如果您随机search的块大于条带大小,那么它应该是关于单个驱动器的速度。 这仍然不能解释你的结果,哪一个更糟糕,那么一个单一的驱动器。

从维基百科 。

对于大于条带大小的读写操作,例如复制文件或video播放,磁盘将在每个磁盘上寻找相同的位置, 因此arrays的寻道时间将与单个驱动器的寻道时间相同 。 对于小于条带大小的读写操作(如数据库访问),驱动器将能够独立寻找。