在 ext4、btrfs 文件系统上存储 xattrs 的成本是多少?

在 ext4、btrfs 文件系统上存储 xattrs 的成本是多少?

我想向文件和目录添加n长度为 的 xattrs可能会产生成本:lfd

  • 贮存
  • 路径解析时间/访问时间?
  • 目录迭代? (递归查找(重新启动后未缓存的新)文件系统?)

我想知道这些费用是多少?例如,标记所有文件是否会显着影响存储和性能?临界值是多少,低于该值可以忽略不计,超过该值就会对文件系统造成影响?

对于这样的分析,显然最好考虑 xattr 的限制 -> 我们可以在不同的文件系统上放置多少 xattr 和多少位 xattr。

(如果您觉得方便的话,欢迎包含有关 ext4 和 btrfs 之外的其他文件系统的信息 - 谢谢)

答案1

对于 ext4(我不能代表 BtrFS),存储小的 xattrs 直接适合 inode,并且不会影响路径解析或目录迭代性能。

“小”xattr 的可用空间量取决于 inode 的格式化大小。较新的 ext4 文件系统使用 512 字节的默认 inode 大小,较旧的 ext4 文件系统使用 256 字节,inode 本身和 xattr 标头使用约 192 字节。其余的可用于扩展属性,尽管通常已经有用于 SELinux 和其他可能的扩展属性(“ getfattr -d -m - -e hex /path/to/file”将转储所有扩展属性到一个 inode 上)。任何不适合此空间的 xattr 将存储在外部块中,或者如果它们大于 4KB 并且您有新内核(4.18 或更高版本),它们可以存储在外部 inode 中。

如果 xattr 性能对于您的工作负载(例如 Samba)很重要,则可以使用“ mke2fs -I <size>”选项在格式化时更改 inode 大小,以为 xattr 提供更多空间。

相关内容