这是命令dd的输出if = / dev / zero of = / dev / mapper / mpath?p1 bs = 1G count = 100 oflag =直接与所有12个磁盘并行运行:
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,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:
如果我在紧密循环中使用dd命令写入安装在该设备上的ext4分区,并且我不使用缓冲区缓存(oflag = direct),我可以在峰值和855 MB /秒时达到950 MB /秒持续对挂载标志进行一些改动.
如果我也同时使用iflag = direct读取,我现在可以获得480 MB /秒的写入速度和750 MB /秒的读取速度.
如果我在没有oflag = direct的情况下编写,那么使用缓冲区缓存,我得到230 MB /秒的写入和1.2 MB /秒的读取,但机器似乎非常迟缓.
所以,问题是,为什么使用缓冲区缓存会严重影响性能呢?我已经尝试了各种磁盘排队策略,包括在驱动器级别使用’noop’并在适当的多路径dm设备上放置’deadline’或’cfq’,或者在所有的最后期限,或者在dm和后备驱动器的截止时间上没有.看起来后备驱动器应该没有,并且多路径设备应该是我想要的,但是这根本不会影响性能,至少在缓冲区缓存情况下如此.
解决方法
您的dd oflag =直接观察可能是由于电源管理问题.使用PowerTOP查看cpu的C状态是否在写入负载下经常切换到C1以上.如果是,请尝试调整PM以确保cpu不会睡眠并重新运行基准测试.请参阅您的发行版文档,了解如何执行此操作 – 在大多数情况下,这将是intel_idle.max_cstate = 0内核引导线参数,但是YMMV.
O_DIRECT写入和缓冲写入之间的巨大差异可能是由于:
>当使用O_DIRECT时,cpu不会被发送到C3睡眠或
> cpu被发送到C3,但由于使用O_DIRECT时显着简化的处理并不重要 – 只需指向归零的内存区域并发出DMA写请求所需的周期比缓冲处理少,并且延迟时间更短 – 敏感
废弃的答案:
这看起来非常像是由md中的单个线程引起的瓶颈.
推理
> controller’s data sheet承诺6,000吞吐量
>您的并行dd运行每个驱动器显示170MB / s,因此路径不受连接PCIe带宽的限制
>您看到md10_raid10的利用率接近100%
虽然2013年多线程RAID5校验和计算have been committed to mdraid
的修补程序,我找不到类似RAID1 / RAID10增强功能的任何内容,因此它们可能根本就不存在.
要尝试的事情
>多个带dd的写作线程,只是为了看它是否有任何改变
>一个不同的RAID10实现 – LVM RAID 10浮现在脑海中,但你也可能在look at ZFS1中设计了这个用例(很多磁盘,没有硬件RAID控制器)
>可能是更新的内核版本
FWIW,您很少(如果有的话)会在带宽机械存储介质上看到写入性能达到峰值(特别是对于非CoW文件系统).大多数情况下,您将受到寻道时间的限制,因此只要符合您的最低要求,峰值带宽就不应该受到高度关注.
1如果你做ZFS,你应该优化你的测试方法,因为将全零块写入ZFS数据集可能是任意的快速.如果为数据集启用了压缩,则不会将零写入磁盘,而只是链接到全零块.