我有一个MegaRAID SAS 9361-8i,RAID1中有2x240GB的SATA6Gbps SSD,RAID6中有4x10TB的SATA12Gbps硬盘,RAID5中有4x480 Gbps的SATA6Gbps 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 -
---------------------------------------------------------------------------------------在这些VDs上测试写入速度:
# 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)VD0和VD1的值是很糟糕的,值得注意的是,在我删除和重新创建VD0和VD1之前,VD2的值与其他的VD2相似,但由于它们包含数据,所以我无法对其他的VD0和VD1进行修改。
我唯一可以解释的限制是VD2的读取速度,它大约是SATA链路速度的三倍--这对于一个有四个磁盘的RAID5来说是有意义的。VD0的读取速度略低于SATA链路速度的两倍,这可能是媒体的限制,也可能是RAID1中请求的非最佳交织,但两者都是可以接受的。
其他数字对我来说毫无意义。控制器显然能够更快地处理数据,并且并行性能与孤立地查看卷没有显着性差异,这也表明它没有选择瓶颈数据路径。
我对这种情况的解释是,从BIOS创建卷,而不是从StorCLI创建卷,某种程度上给了它们一个次优配置。比较来自storcli /c0/v0 show all和storcli /c0/v2 show all的输出并没有显示出无法解释的差异,所以我担心这个错误在堆栈中的某个更深的地方。
发布于 2021-02-23 23:03:49
首先,dd并不是一个很好的磁盘性能测试工具。您所做的只是测试流、顺序读写。dd在同步读操作和写操作之间交替进行,因此您正在测试的设备在操作之间存在“死区”。
是的,RAID5和RAID6阵列中的多个驱动器甚至允许旋转磁盘保持SSD RAID1镜像的有效性能,或者,对于RAID5数组中的多个SSD,实际上超过了SSD RAID1镜像的性能。
只要你是按顺序传输大量数据。
但是尝试对那些RAID5和RAID6数组进行随机的小块写入,观察性能直线下降(特别是旋转磁盘上的VD .)虽然SSD上的RAID1不会看到任何接近性能下降的地方。
如果要尝试在旋转磁盘上对该RAID6数组执行512个字节的随机写入,那么您的性能可能是几十kb/秒。
当您将小块写入随机位置时,在RAID5和RAID6上发生的是“读-修改-写入”。还记得当您创建RAID5或RAID6数组时选择“条带大小”或“段大小”时吗?根据控制器的不同,这是用于计算奇偶校验的块中的数据量,或者是用于计算奇偶校验的每个数据磁盘的数据量。你选了什么? 64K? 128 K? 2MB是因为“越大越快”?(不,这不是.)用于计算RAID5或RAID6数组上奇偶校验的数据量通常称为“条带大小”。因此,如果您在一个由4个磁盘组成的RAID5数组(3个数据,一个奇偶)上选择了一个2MB的段大小,并且您的控制器将该2MB作为每个磁盘的值,这意味着条带大小为6MB。(不,没有真正的“奇偶校验磁盘”--奇偶校验数据分布在所有磁盘上。但是,这是一种方便的方式,可以考虑保存数据和奇偶校验所需的更大空间。)
而6MB实际上成为您可以操作的RAID数组上最小的数据块。
那么,如果你把512字节写到6MB条纹的中间,你认为会发生什么呢?
控制器必须从所有驱动器中读取整个条带,用新的512字节更新该块的正确部分,重新计算整个条带的奇偶校验,然后将条带和奇偶校验写回所有磁盘。
现在,有许多的优化,好的RAID控制器可以并且确实对“读-修改-写入”操作进行优化,所以您很少看到完全的影响,但从逻辑上讲,这是必须发生的。最终,您可以向任何控制器抛出足够多的小随机写入,使其优化IO和隐藏底层糟糕性能的能力不堪重负。
在旋转硬盘时,控制器必须等待驱动器头找到合适的磁道--这是SSD不需要做的事情。
因此,sequential,流大块写入性能对RAID5和RAID6数组可以非常好。但是,随机的小块写入性能是可怕的,使用大段/条大小通常会加剧这种可怕。旋转盘就更糟了。
IO操作的对齐也很重要。如果您的文件系统块与RAID6 5/RAID6 6条带不对齐,那么您最终会执行过多的读-修改-写入操作。您知道有多少文件系统有6MB的块大小?那将是“没有”。这也是为什么RAID 5/6阵列上的大段/条大小不好的另一个原因,以及您经常看到RAID 5/6阵列具有两个大小的数据磁盘的原因,因此RAID条带大小可以与文件系统块大小相匹配(或小于)。
阅读表演?你在VD0和VD2上已被禁用:
---------------------------------------------------------------
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专栏中的意思--不提前阅读。毫不奇怪,VD1在顺序的流式读取性能上破坏了VD0和VD2--控制器可以在VD1上提前读取,并缓存等待下一次读取请求的数据(还记得我之前说过dd在执行数据移动的另一半时留下了“死区时间”吗?),但是它不能在VD0或VD2上提前读取。
https://serverfault.com/questions/1054776
复制相似问题