我想向文件和目录添加n
长度为 的 xattrs可能会产生成本:l
f
d
- 贮存
- 路径解析时间/访问时间?
- 目录迭代? (递归查找(重新启动后未缓存的新)文件系统?)
我想知道这些费用是多少?例如,标记所有文件是否会显着影响存储和性能?临界值是多少,低于该值可以忽略不计,超过该值就会对文件系统造成影响?
对于这样的分析,显然最好考虑 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 提供更多空间。