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

Grz*_*cki 5 linux filesystems ext4 btrfs xattr

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

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

我想知道这些费用是多少?例如,如果标记所有文件会显着影响存储和性能?什么是临界值,低于它可以忽略不计,然后是锤击文件系统?

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

(如果您觉得方便,欢迎包含有关其他文件系统的位,而不仅仅是 ext4 和 btrfs - 谢谢)

Lus*_*One 4

对于 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 中。

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