问题
这三种小文件聚集的方式,或是基于目录,或是基于reference,有没有其他的,在访问时动态变化分组的。
摘要
逻辑文件到物理元数据之间的映射关系可能被移除。提出了composite-file fs实现file到metadata的多对一的映射关系,提升了性能(什么性能,rename?delete?)。
另外这个fs貌似是在ext4上做的封装,底层还是ext4.
detail
one-to-one的映射在unix系统中,每个逻辑文件对应一个inode节点。本文提出的composite-file fs,聚集多个逻辑文件,关联到一个inode上,因为一起访问的文件经常共享相似的元数据子集,这可以去重(不用多个inode存储相同的数据)。与ext4相比,在webserver和软件开发的负载中,提升了27%的性能。
CFFS设计的原因是:
- 频繁访问小文件
- 冗余的元数据信息,例如文件拥有者的数量,访问权限都是有限的(意味着很大概率重复)
- 文件按组访问
- prefetch的限制:在小文件的情况下,表现并不好,甚至还有额外开销
CCFS:允许多个小文件合并共享一个inode
抽象出composite-file(经常一起访问的文件内容)和对应的composite inode,小文件中inode存储的原始信息,去重之后存储在cinode的额外信息,所以对小文件来说,之前的权限检查,检验等操作并没有变化。
将哪些文件合并到一个cfile中,与工作负载有很大关系,有几种策略来实现:
- 基于目录
- 嵌入引用聚集,比如html中会嵌入超链接,引用其他文件;编译,makefile和其他cpp,c,h文件。问题是需要针对特定text的语义了解
- 频率挖掘的聚集,用的数据挖掘的apriori算法。