我有一台 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。