我设置了一个由 4 * 2 TB 磁盘组成的 Linux 软件 RAID 级别 5。磁盘阵列的条带大小为 64k,没有其他配置参数。在初始重建后,我尝试创建一个文件系统,此步骤花费很长时间(大约半小时或更长时间)。我尝试创建一个 xfs 和 ext3 文件系统,两者都花费了很长时间,使用 mkfs.ext3 我观察到以下行为,这可能会有所帮助:
- 写入 inode 表运行速度很快,直到达到 1053(约 1 秒),然后写入约 50,等待两秒钟,然后写入接下来的 50 个(根据控制台显示)
- 当我尝试使用 Control+C 取消操作时,它会挂起半分钟才真正取消
磁盘的单独性能非常好,我在每个磁盘上分别运行 bonnie++,写入/读取值约为 95/110MB/s。即使我在每个驱动器上并行运行 bonnie++,值也只减少了约 10 MB。因此,我排除了硬件/ I/O 调度作为问题源。
我尝试了 stripe_cache_size 和 readahead size 的不同配置参数,但没有成功,但我认为它们与文件系统创建操作不太相关。
服务器详细信息:
- Linux 服务器 2.6.35-27-通用 #48-Ubuntu SMP x86_64 GNU/Linux
- mdadm——v2.6.7.1
有人对如何进一步调试这个问题有什么建议吗?
答案1
我同意,这可能与条带对齐有关。根据我的经验,在 3*2TB RAID-0 上创建未对齐的 XFS 大约需要 5 分钟,但如果与条带大小对齐,则大约需要 10-15 秒。以下是将 XFS 对齐到 256KB 条带大小的命令:
mkfs.xfs -l internal,lazy-count=1,sunit=512 -d agsize=64g,sunit=512,swidth=1536 -b size=4096 /dev/vg10/lv00
顺便说一句,我的情况中的条带宽度是 3 个单位,对于有 4 个驱动器但在 raid-5 中的情况来说,这也是相同的。
显然,这也提高了 FS 性能,因此您最好保持一致。
答案2
我怀疑您遇到了典型的 RAID5 小写入问题。对于小于条带大小的写入,它必须对数据和奇偶校验执行读取-修改-写入。如果写入的大小与条带的大小相同,它可以简单地覆盖奇偶校验,因为它知道该值是什么,而不必重新计算它。
答案3
如果在创建文件系统时指定步幅和条带宽度,mkfs 和后续文件系统的性能可能会提高。如果您使用默认的 4k 块,则步幅为 16(64k 的 RAID 条带除以 4k 的文件系统块),条带宽度为 48(文件系统步幅 16 乘以阵列中的 3 个数据磁盘)。
mkfs.ext3 -E stride=16 stripe-width=48 /dev/your_raid_device
答案4
您确实应该查看块组大小(mkfs.ext* 上的 -g 选项)。我知道手册页说您可以忽略这一点,但我的经验表明手册页在这方面是完全错误的。您应该调整块组大小,以确保块组不会全部从同一磁盘开始,而是均匀地在所有磁盘上旋转。这对性能有非常明显的影响。我写了一篇关于如何优化文件系统对齐你可能会觉得有用。