LSI MegaRAID 9260-8i 控制器的最大传输速率限制为 200 MB/s。服务器是 HP DL180 G6,带有 CentOS 7(64 位),我们正在测试 4TB SAS 驱动器(型号:WD4001FYYG)。控制器使用 iBBU08(512 缓存)。我们已经测试过启用/禁用缓存和直接 I/O,但这并不能解决问题。
根据我们的测试,同时写入两个不同的虚拟磁盘(6 个磁盘的 RAID10 驱动器和单个磁盘的 RAID0 驱动器),读取时最大速度为 200 MB/s,写入时最大速度为 200 MB/s。
我们验证了在不同的驱动器上同时操作时性能会下降,因为带宽(约 200 MB/s)由不同的独立操作磁盘驱动器操作共享(瓶颈)。
结论:
LSI 控制器将带宽限制为最大 200 MB/s。
为什么会发生这种情况?我们该如何解决?这可能与 PCI 卡有关吗?我们可以测量传输速率吗?
附言:该问题已提交至支持票 SR # P00117431,但在向 AVAGOTECH (ex- LSI) 发送详细信息后,我们就没有再收到任何答复。
谢谢
这是我们的 IO 测试:
--- 1)单驱动IO测试---
编写测试:
# sync
# echo 3 > /proc/sys/vm/drop_caches
# dd if=/dev/zero of=/tmp/test bs=8k count=1M conv=fsync
1048576+0 records in
1048576+0 records out
8589934592 bytes (8.6 GB) copied, 46.7041 s, 184 MB/s
阅读测试:
# sync
# echo 3 > /proc/sys/vm/drop_caches
# dd if=/dev/zero of=/tmp/test bs=8k count=1M conv=fsync
1048576+0 records in
1048576+0 records out
8589934592 bytes (8.6 GB) copied, 47.1691 s, 182 MB/s
--- 2)两盘并发IO测试---
我们将重复之前的测试,但同时在第二个独立驱动器上运行相同的 IO 操作。结果,同一个驱动器现在只执行了 50%,这证明第二个驱动器 (/mnt/sdb/test) 上的 IO 正在共享 LSI 控制器上的一些有限资源。
编写测试:
流程一:
[root@hp ~]# sync
[root@hp ~]# echo 3 > /proc/sys/vm/drop_caches
[root@hp ~]# dd if=/dev/zero of=/tmp/test bs=8k count=1M conv=fsync
1048576+0 records in
1048576+0 records out
8589934592 bytes (8.6 GB) copied, 87.8613 s, 97.8 MB/s
流程2:
[root@hp ~]# dd if=/dev/zero of=/mnt/sdb/test bs=8k count=1M conv=fsync
1048576+0 records in
1048576+0 records out
8589934592 bytes (8.6 GB) copied, 86.3504 s, 99.5 MB/s
阅读测试:
流程一:
[root@hp ~]# dd if=/tmp/test of=/dev/null bs=8k count=1M
1048576+0 records in
1048576+0 records out
8589934592 bytes (8.6 GB) copied, 81.5574 s, 105 MB/s
流程2:
[root@hp ~]# dd if=/mnt/sdb/test of=/dev/null bs=8k count=1M
1048576+0 records in
1048576+0 records out
8589934592 bytes (8.6 GB) copied, 84.2258 s, 102 MB/s
答案1
这种情况很容易发生,因为驱动器上的 4k 扇区是 512e(你没有指定驱动器型号,所以这有点猜测,但考虑到它是 4Tb 驱动器,我会说它是高级格式)。因此,除非您想要读取-修改-写入循环,否则我会检查您的操作系统是否知道扇区的大小。这意味着正确的分区对齐和您正在使用的文件系统的块大小。
是的,没有这样的事情HP DL 180 G7
,gen6 是最后一个,然后模型索引从 180 更改。
以防万一,还有相当不错的文章对你来说(是的,你使用的是 CentOS,但是......你知道,就内部结构而言,它基本上是相同的东西)。
您可能还应该检查并启用另一件事 - 它是控制器写入缓存,当然,如果您有 BBU 的话。
答案2
嗯,这里确实还没有足够的信息。
首先,驱动器有哪些?支持的型号和 SAS 版本?
其次,您是否从另一个驱动器或阵列写入阵列?还是从同一阵列写入和读取?如果您将所有内容保存在同一个阵列中,那么您将驱动器本身的可用 IO 分成两半(最好),而不管 SAS 是全双工的(如果数据分布在相同的磁盘上),并且您正在读取/写入每个磁盘,从磁盘操作的角度来看,它可以处理的内容有自己的限制...
此外,如果您在 Raid0 和 RAID10 之间来回读写……那么您的瓶颈就是单个驱动器。您只能获得一个驱动器可以处理的最大速度。顺便说一下,200M乙(1.6G)bs)对于单个 HDD 来说还不错。
答案3
也许你正在达到你的卡提供的最大 IOPS:使用 8K 数据包,以 200 MB/s 的速度写入/读取意味着持续速率约为 25K IOPS。
您能否使用更大的数据包重试(即使用 bs=1M 或类似值)?这会改变什么吗?