我有一台带有 8 通道 LSI SAS3008 控制器芯片的机器,单独的驱动器测试显示我可以以 174 MB/秒和 193 MB/秒之间的速度写入任何磁盘或所有磁盘,并具有持续的写入速度:
这是与所有 12 个磁盘并行dd if=/dev/zero of=/dev/mapper/mpath?p1 bs=1G count=100 oflag=direct
运行的命令的输出:
107374182400 bytes (107 GB) copied, 556.306 s, 193 MB/s
107374182400 bytes (107 GB) copied, 566.816 s, 189 MB/s
107374182400 bytes (107 GB) copied, 568.681 s, 189 MB/s
107374182400 bytes (107 GB) copied, 578.327 s, 186 MB/s
107374182400 bytes (107 GB) copied, 586.444 s, 183 MB/s
107374182400 bytes (107 GB) copied, 590.193 s, 182 MB/s
107374182400 bytes (107 GB) copied, 592.721 s, 181 MB/s
107374182400 bytes (107 GB) copied, 598.646 s, 179 MB/s
107374182400 bytes (107 GB) copied, 602.277 s, 178 MB/s
107374182400 bytes (107 GB) copied, 604.951 s, 177 MB/s
107374182400 bytes (107 GB) copied, 605.44 s, 177 MB/s
但是,当我将这些磁盘作为软件 raid 10 设备放在一起时,我得到了大约 500 MB/秒的写入速度。我预计会得到两倍左右,因为同时访问这些磁盘不会受到任何惩罚。
我确实注意到了 md10_raid10 进程,我假设软件 raid 本身接近 80%,并且一个核心始终处于 100% 等待时间,并且 0% 空闲。然而,哪个核心发生了变化。
此外,当使用缓冲区缓存写入已挂载的 EXT4 文件系统而不是使用 oflag=direct 绕过缓存时,性能会进一步下降。磁盘报告 25% 繁忙(根据 munin 监控),但磁盘显然没有运行热,但我担心 md10 设备本身可能是。
关于下一步该去哪里的任何建议?我正在尝试一个硬件 raid 10 配置来进行比较,虽然我似乎只能构建一个 10 磁盘单元——也就是说,我希望能够保持 900 MB/秒的写入速度。当我发现更多时,我会更新这个问题。
编辑1:
如果我在紧密循环中使用 putdd
命令写入安装在该设备上的 ext4 分区,并且我不使用缓冲区缓存(oflag=direct),我可以在峰值时达到 950 MB/秒以上,并且持续达到 855 MB/秒对安装标志进行了一些更改。
如果我同时使用 iflag=direct 读取,我现在可以获得 480 MB/秒的写入和 750 MB/秒的读取。
如果我在没有 oflag=direct 的情况下写入,因此使用缓冲区缓存,我得到 230 MB/秒的写入和 1.2 MB/秒的读取,但机器似乎非常缓慢。
那么,问题来了,为什么使用缓冲区缓存会如此严重地影响性能呢?我尝试了各种磁盘排队策略,包括在驱动器级别使用“noop”并将“deadline”或“cfq”放在适当的多路径 dm 设备上,或者在所有设备上设置截止日期,或者在 dm 上不使用,在后备驱动器上设置截止日期。似乎后备驱动器应该没有,多路径设备应该是我想要的,但这根本不会影响性能,至少在缓冲区高速缓存的情况下。
编辑:
您的
dd oflag=direct
观察结果可能是由于电源管理问题。使用PowerTOP查看您的 CPU 的 C 状态是否在写入负载下过于频繁地切换到 C1 以上。如果是,请尝试调整 PM 以确保 CPU 不会休眠并重新运行基准测试。请参阅发行版的文档以了解如何执行此操作 - 在大多数情况下,这将是intel_idle.max_cstate=0
内核引导线参数,但 YMMV。写入和缓冲写入之间的巨大性能差异
O_DIRECT
可能是由于:过时的答案:
这看起来很像
md
.推理
dd
运行显示每个驱动器 170MB /s +,因此路径不受连接 PCIe 带宽的限制虽然多线程 RAID5 校验和计算的补丁已
mdraid
在 2013 年提交,但我找不到任何关于类似 RAID1 / RAID10 增强功能的信息,因此它们可能根本不存在。要尝试的事情
dd
,只是为了看看它是否改变了什么FWIW,您很少(如果有的话)会在使用机械存储介质的带宽上看到写入性能峰值(尤其是使用非 CoW 文件系统)。大多数情况下,您会受到寻道次数的限制,因此峰值带宽不必太在意,只要它满足您的最低要求即可。
1如果您使用ZFS,您应该改进您的测试方法,因为将全零块写入 ZFS 数据集可能会非常快。如果为数据集启用压缩,零不会写入磁盘,而只是链接到全零块。