MegaRAID:卷之间的性能差异

MegaRAID:卷之间的性能差异

我有一台 MegaRAID SAS 9361-8i,在 RAID1 中有 2x 240GB SATA 6Gbps SSD,在 RAID6 中有 4x 10TB SAS 12Gbps HDD,在 RAID5 中有 4x 480GB SATA 6 Gbps SSD:

-----------------------------------------------------------------------------
DG Arr Row EID:Slot DID Type  State BT       Size PDC  PI SED DS3  FSpace TR 
-----------------------------------------------------------------------------
 0 -   -   -        -   RAID1 Optl  N  223.062 GB dflt N  N   dflt N      N  
 0 0   -   -        -   RAID1 Optl  N  223.062 GB dflt N  N   dflt N      N  
 0 0   0   8:2      13  DRIVE Onln  N  223.062 GB dflt N  N   dflt -      N  
 0 0   1   8:5      16  DRIVE Onln  N  223.062 GB dflt N  N   dflt -      N  
 1 -   -   -        -   RAID6 Optl  N   18.190 TB enbl N  N   dflt N      N  
 1 0   -   -        -   RAID6 Optl  N   18.190 TB enbl N  N   dflt N      N  
 1 0   0   8:0      9   DRIVE Onln  N    9.094 TB enbl N  N   dflt -      N  
 1 0   1   8:1      11  DRIVE Onln  N    9.094 TB enbl N  N   dflt -      N  
 1 0   2   8:3      10  DRIVE Onln  N    9.094 TB enbl N  N   dflt -      N  
 1 0   3   8:4      12  DRIVE Onln  N    9.094 TB enbl N  N   dflt -      N  
 2 -   -   -        -   RAID5 Optl  N    1.307 TB dflt N  N   dflt N      N  
 2 0   -   -        -   RAID5 Optl  N    1.307 TB dflt N  N   dflt N      N  
 2 0   0   8:6      14  DRIVE Onln  N  446.625 GB dflt N  N   dflt -      N  
 2 0   1   8:7      17  DRIVE Onln  N  446.625 GB dflt N  N   dflt -      N  
 2 0   2   8:9      15  DRIVE Onln  N  446.625 GB dflt N  N   dflt -      N  
 2 0   3   8:10     18  DRIVE Onln  N  446.625 GB dflt N  N   dflt -      N  
-----------------------------------------------------------------------------

---------------------------------------------------------------
DG/VD TYPE  State Access Consist Cache Cac sCC       Size Name 
---------------------------------------------------------------
0/0   RAID1 Optl  RW     Yes     NRWBD -   ON  223.062 GB VD0  
1/1   RAID6 Optl  RW     Yes     RWBD  -   ON   18.190 TB VD1  
2/2   RAID5 Optl  RW     Yes     NRWBD -   ON    1.307 TB VD2  
---------------------------------------------------------------

---------------------------------------------------------------------------------------
EID:Slt DID State DG       Size Intf Med SED PI SeSz Model                     Sp Type 
---------------------------------------------------------------------------------------
8:0       9 Onln   1   9.094 TB SAS  HDD N   N  512B HUH721010AL5200           U  -    
8:1      11 Onln   1   9.094 TB SAS  HDD N   N  512B HUH721010AL5200           U  -    
8:2      13 Onln   0 223.062 GB SATA SSD N   N  512B Micron_5100_MTFDDAK240TCC U  -    
8:3      10 Onln   1   9.094 TB SAS  HDD N   N  512B HUH721010AL5200           U  -    
8:4      12 Onln   1   9.094 TB SAS  HDD N   N  512B HUH721010AL5200           U  -    
8:5      16 Onln   0 223.062 GB SATA SSD N   N  512B Micron_5100_MTFDDAK240TCC U  -    
8:6      14 Onln   2 446.625 GB SATA SSD N   N  512B Micron_5100_MTFDDAK480TCC U  -    
8:7      17 Onln   2 446.625 GB SATA SSD N   N  512B Micron_5100_MTFDDAK480TCC U  -    
8:9      15 Onln   2 446.625 GB SATA SSD N   N  512B Micron_5100_MTFDDAK480TCC U  -    
8:10     18 Onln   2 446.625 GB SATA SSD N   N  512B Micron_5100_MTFDDAK480TCC U  -    
---------------------------------------------------------------------------------------

测试这些 VD 的写入速度:

# lvcreate -ntest1 -L32G vg /dev/sda
# lvcreate -ntest2 -L32G vg /dev/sdb
# lvcreate -ntest3 -L32G vg /dev/sdc
# for i in 1 2 3; do sleep 10; dd if=/dev/zero of=/dev/vg/test$i bs=128M count=256 oflag=direct; done
34359738368 bytes (34 GB, 32 GiB) copied, 120.433 s, 285 MB/s  (test1/VD 0)
34359738368 bytes (34 GB, 32 GiB) copied, 141.989 s, 242 MB/s  (test2/VD 1)
34359738368 bytes (34 GB, 32 GiB) copied, 26.4339 s, 1.3 GB/s  (test3/VD 2)

# for i in 1 2 3; do sleep 10; dd if=/dev/vg/test$i of=/dev/zero bs=128M count=256 iflag=direct; done
34359738368 bytes (34 GB, 32 GiB) copied, 35.7277 s, 962 MB/s  (test1/VD 0)
34359738368 bytes (34 GB, 32 GiB) copied, 147.361 s, 233 MB/s  (test2/VD 1)
34359738368 bytes (34 GB, 32 GiB) copied, 16.7518 s, 2.1 GB/s  (test3/VD 2)

并行运行 dd:

# sleep 10; for i in 1 2 3; do dd if=/dev/zero of=/dev/vg/test$i bs=128M count=256 oflag=direct & done
34359738368 bytes (34 GB, 32 GiB) copied, 28.1198 s, 1.2 GB/s  (test3/VD 2)
34359738368 bytes (34 GB, 32 GiB) copied, 115.826 s, 297 MB/s  (test1/VD 0)
34359738368 bytes (34 GB, 32 GiB) copied, 143.737 s, 239 MB/s  (test2/VD 1)

# sleep 10; for i in 1 2 3; do dd if=/dev/vg/test$i of=/dev/zero bs=128M count=256 iflag=direct & done
34359738368 bytes (34 GB, 32 GiB) copied, 16.8986 s, 2.0 GB/s  (test3/VD 2)
34359738368 bytes (34 GB, 32 GiB) copied, 35.7328 s, 962 MB/s  (test1/VD 0)
34359738368 bytes (34 GB, 32 GiB) copied, 153.147 s, 224 MB/s  (test2/VD 1)

VD 0 和 VD 1 的值非常糟糕,值得注意的是,VD 2 的值与其他值相似,直到我删除并重新创建它,而对于其他值,我无法执行此操作,因为它们包含数据。

我可以轻松解释的唯一限制是 VD 2 的读取速度,它大约是 SATA 链接速度的三倍——这对于具有四个磁盘的 RAID5 来说是合理的。VD0 的读取速度略低于 SATA 链接速度的两倍,这可能是介质的限制,也可能是 RAID1 中请求的交错不理想,但两者都仍然可以接受。

其他数字对我来说毫无意义。控制器显然能够更快地处理数据,并且并行性能与单独查看卷没有明显差异,这也表明它没有选择瓶颈数据路径。

storcli /c0/v0 show all我对这种情况的解释是,从 BIOS 而不是从 StorCLI 创建卷不知何故给了它们次优配置。比较和的输出storcli /c0/v2 show all没有显示无法解释的差异,所以我担心错误在堆栈的某个更深层的地方。

  • 是否存在已知的配置缺陷或错误可以解释这种行为?
  • 是否有一个工具可以分析配置瓶颈,或者,如果做不到这一点,
  • 我是否可以以某种方式导出内部配置值以便能够在卷之间进行比较?

答案1

Firstdd并不是一个真正好的磁盘性能测试工具。你所做的只是测试流式、顺序读取和写入。并且dd在同步读取和写入操作之间交替,因此对所测试设备的操作之间存在“死区”。

是的,RAID5 和 RAID6 阵列中的多个驱动器将允许即使是旋转的磁盘也能跟上 SSD RAID1 镜像的有效性能,或者在 RAID5 阵列中的多个 SSD 的情况下,实际上击败了 SSD RAID1 镜像的性能。

只要您按顺序传输大量数据。

但是尝试对那些 RAID5 和 RAID6 阵列进行随机小块写入并观察性能下降(尤其是旋转磁盘上的 VD...),而 SSD 上的 RAID1 不会看到太多的性能下降。

如果您尝试对旋转磁盘上的 RAID6 阵列进行随机 512 字节写入,则您的性能可能会达到几十 kb/秒。

在 RAID5 和 RAID6 中,将小块写入随机位置时,会发生“读取-修改-写入”的过程。还记得创建 RAID5 或 RAID6 阵列时选择的“条带大小”或“段大小”吗?根据控制器的不同,这是用于计算奇偶校验的块中的数据量,或者是用于计算奇偶校验的每个数据磁盘的数据量。您选择了什么?64K?128K?2MB,因为“越大越快”?(不,不是……)在 RAID5 或 RAID6 阵列上用于计算奇偶校验的数据量通常称为“条带大小”。因此,如果您在 4 个磁盘(3 个数据,1 个奇偶校验)的 RAID5 阵列上选择了 2MB 的段大小,并且控制器将 2 MB 视为每个磁盘的值,则意味着条带大小为 6 MB。 (不,实际上没有“奇偶校验磁盘” - 奇偶校验数据分布在所有磁盘上。但这是一种方便的方式来考虑保存数据和奇偶校验所需的更大空间。)

6 MB 实际上成为该 RAID 阵列上您可以操作的最小数据块。

那么,如果您将 512 个字节写入其中一个 6 MB 数据条的中间,您认为会发生什么情况?

控制器必须从所有驱动器读取整个条带,用新的 512 字节更新该块的正确部分,重新​​计算整个条带的奇偶校验,然后将条带和奇偶校验写回到所有磁盘。

现在,有一个很多好的 RAID 控制器可以对“读取-修改-写入”操作进行优化,因此您很少能看到全部影响,但从逻辑上讲,这是必然的。最终,您可以在任何控制器上投入足够多的小型随机写入,以至于其优化 IO 和隐藏底层糟糕性能的能力将不堪重负。

在旋转硬盘上,控制器必须等待驱动器磁头寻找正确的轨道,而 SSD 则不需要这样做。

所以顺序、流式RAID5 和 RAID6 阵列的大块写入性能可能非常好。但是随机的小块写入性能非常糟糕,而且使用较大的段/条带大小通常会加剧这种糟糕。旋转磁盘上的情况甚至更糟。

结盟IO 操作的复杂度也很重要。如果您的文件系统块与 RAID5/RAID6 条带不一致,那么您最终会执行过多的读取-修改-写入操作。您知道有多少文件系统具有 6 MB 的块大小?答案是“没有”。这也是 RAID5/6 阵列上较大的段/条带大小不好的另一个原因,也是您经常看到 RAID5/6 阵列具有 2 的幂数据磁盘的原因 - 因此 RAID 条带大小可以匹配(或被匹配)更小比)文件系统块大小。

读取性能如何?您已在 VD 0 和 VD 2 上禁用预读:

---------------------------------------------------------------
DG/VD TYPE  State Access Consist Cache Cac sCC       Size Name 
---------------------------------------------------------------
0/0   RAID1 Optl  RW     Yes     NRWBD -   ON  223.062 GB VD0  
1/1   RAID6 Optl  RW     Yes     RWBD  -   ON   18.190 TB VD1  
2/2   RAID5 Optl  RW     Yes     NRWBD -   ON    1.307 TB VD2  
---------------------------------------------------------------

这就是列NR中的意思Cache- 不预读。VD 1 在顺序流式读取性能方面远超 VD 0 和 VD 2 也就不足为奇了 - 控制器可以预读 VD 1 并缓存数据以等待下一个读取请求(还记得我之前说过在dd移动另一半数据时留出“死区时间”吗?),但它不会预读 VD 0 或 VD 2。

相关内容