我有一个典型的场景,可以并行写入请求,每个文件大小为几百 GB。
我的测试系统 Lustre 文件系统有 4 个 OST(每个 3TB)和 1 个 MDS。
我实际观察到的是,在禁用条带化的情况下,Lustre 会将所有文件写入单个 OST,除非它已满。
是否可以将 Lustre 配置为当出现并行或重叠的写入请求时,MDS 会自动选择当前不忙的目标?
我很好奇为什么 Lustre 默认不这样做,或者可能是因为我错过了什么?
我有一个典型的场景,可以并行写入请求,每个文件大小为几百 GB。
我的测试系统 Lustre 文件系统有 4 个 OST(每个 3TB)和 1 个 MDS。
我实际观察到的是,在禁用条带化的情况下,Lustre 会将所有文件写入单个 OST,除非它已满。
是否可以将 Lustre 配置为当出现并行或重叠的写入请求时,MDS 会自动选择当前不忙的目标?
我很好奇为什么 Lustre 默认不这样做,或者可能是因为我错过了什么?
如果您的文件系统上通常有大文件(例如 > 32MB),您应该适当地设置文件系统的默认条带计数。您可以基于每个目录、每个文件系统(取决于您的权限和使用情况)或创建单个文件时指定默认条带化。
用于lfs setstripe -c N /path/to/directory
将默认条带计数设置为N
on directory
,这将仅影响该目录中的所有新文件。如果您只有有限数量的 OST(在您的情况下为 4 个),或者您的所有文件都很大(在您的情况下在 GB 范围内),那么您可以使用-c -1
,这意味着“对所有 OST 进行条带化”,而不是显式条数。
使用lfs setstripe -c N /mnt/lustre
(或任何文件系统的挂载点)为整个文件系统中的新文件设置默认条带计数(除非目录级默认布局另有指定,或在文件创建时明确指定)。
使用 Lustre 2.10 及更高版本,您可以使用复合文件布局,以便随着文件变大而增加条带数,例如:
lfs setstripe -E64M -c 1 -E4G -c 4 -E-1 -S 4M -c -1
这意味着对于64MB
文件的第一个仅使用 1 个条带,对于64MB-4GB
文件的一部分使用 4 个条4GB
带,并且在所有 OST 上使用 4MB 的条带大小和条带(在您的情况下也是 4 个,但在某些文件系统上可能是数百个 OST)。
是的,如果您启用了条带化,那么 Lustre 将在您想要的任意数量的 OST 上将写入分配到单个文件(取决于您设置的条带数量)。由于您禁用了条带化,因此文件的所有 IO 将被限制为单个 OST。
如果我误解了,而您看到的是发送到同一 OST 的所有文件的所有 IO,那么您可能无意中将“索引”选项设置为 -1 以外的值。此选项将覆盖默认设置,这将允许 MDS 在所有 OST 之间平衡文件创建。