对于 XFS 文件系统,sunit=0 和 swidth=0 是什么意思?

对于 XFS 文件系统,sunit=0 和 swidth=0 是什么意思?

我创建了一个 XFS 文件系统,使用创建系统时的默认参数。现在查看 的输出,它显示和xfs_info的值均为 0。我似乎找不到 0 在此上下文中的含义的解释。(我所讨论的和sunitswidthsunitswidth发现的重点是设置这些参数的正确值,而不是将它们设置为 0。)

# xfs_info .
meta-data=/dev/mapper/centos-root isize=256    agcount=8, agsize=268435455 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=1927677952, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

这肯定是一个无知的问题,对此我深表歉意,因为我是 XFS 新手,但是 和 的 0 值是什么意思sunitswidth我如何才能找出 XFS 实际使用的这些参数值,以及这些值与适合我的 RAID 阵列的值有何关系?(这是位于硬件 RAID 之上的 LVM 之上的 XFS 系统。)

答案1

这是一个老问题,但我认为更全面的答案会很有用。

简而言之:使用软件 RAID 时,让 XFS 自动检测底层阵列几何结构。如果在较新的内核上使用硬件 RAID,XFS应该能够自动检测正确的参数;如果没有,您可以使用su/sw/sunit/swidth来指定它们。

了解底层几何结构有助于 XFS 分配器尽可能避免跨越两个磁盘,从而为其他工作节省 IOPS(即:使用更少的数据磁盘)。

在上面的特定示例中,mkfs.xfs报告sunit=0swidth=0,意味着 XFS 没有在创建文件系统的块设备上检测到任何特定的 RAID 几何。

长答案:让我们从su和开始sw。从(有些过时的)XFS 常见问题解答

su = <RAID controllers stripe size in BYTES (or KiBytes when used with k)>
sw = <# of data disks (don't count parity disks)>

请注意,本文中的“条带大小”是指单身的条带单元大小,也称为块大小由 Linux MD RAID 提供。再次引用常见问题解答:

RAID 条带大小为 256KB,RAID-10 超过 16 个磁盘,应使用

su = 256k sw = 8(16 个磁盘的 RAID-10 有 8 个数据磁盘)

sunitswidth另一种表达相同 RAID 几何结构的方法,这次是以 512B 扇区表示。从mkfs.xfs 手册页

sunit

用于指定 RAID 设备或逻辑卷的条带单元。该值必须在512字节块单元

swidth

用于指定 RAID 设备或条带逻辑卷的条带宽度。该值必须以 512 字节块为单位指定。

简而言之:

su * sw = entire data stripe size
swidth / sunit = number of data disk

如您所见,它们是两种不同的方法,用于向 XFS 告知底层 RAID 几何结构。但是,常见问题解答告诉我们mkfs.xfs报告sunit和操作中的一个问题swidth

请注意,xfs_info 和 mkfs.xfs 将 sunit 和 swidth 解释为以 512B 扇区为单位指定;但不幸的是,这不是它们报告的单位。xfs_info 和 mkfs.xfs 以基本块大小 (bsize) 的倍数报告它们,而不是以 512B 扇区为单位。

例如,假设:swidth 1024(在 mkfs.xfs 命令行中指定;因此 512B 扇区中有 1024 个)且块大小为 4096(mkfs.xfs 在输出中报告的 bsize)。您应该看到 swidth 128(mkfs.xfs 在输出中报告)。128 * 4096 == 1024 * 512。

基本上,在创建文件系统时您指定sunitswidth在 512B 扇区中,而相同的mkfs.xfs报告则以 4K 块大小进行。这种差异常常引起混淆。

答案2

如果你不使用 RAID,sunit并且swidth选项已经过时,则它用于 RAID 优化

有关更多信息sunitswidth请参阅XFS 常见问题解答

答案3

零意味着相对于底层 RAID 结构的范围分配零优化,这是正确的。

因此,如果您关心性能,而您只需重新创建 FS,分析 raid 集/控制器中的驱动器数量及其块大小,然后进行sunit相应swidth设置mkfs.xfs

并且如果(且仅当)您需要在 RAID LUN 上创建分区,请确保第一个分区从 1 MByte 边界开始(如果扇区 = 512 字节,则为 2048 秒),因为这是大多数 RAID 块大小都可以被其整除的。

相关内容