The Composite-file File System: Decoupling the One-to-one Mapping of Files and Metadata for...——论文阅读

FAST 2016 Paper 分布式元数据论文阅读笔记整理

问题

传统的文件系统使用逻辑文件到其物理元数据表示的一对一映射,这提供了多对一优化的空间。

观察

  • 频繁访问小文件:大多数文件引用访问小文件。本文对桌面文件系统的内部分析证实,超过80%的访问是对小于32字节的文件的访问。此外,访问磁盘上小文件的访问时间约有40%可归因于元数据访问。因此,减少这种访问开销可能导致大的性能增益。

  • 冗余元数据信息:传统文件与其元数据相关联,用于跟踪文件块的位置、访问权限等信息。然而,由于文件所有者的数量、权限模式等受到限制,许多文件共享相似的文件属性。Edel等人表明,典型工作站的元数据压缩率高达75%。因此,我们看到了许多减少冗余元数据信息的机会。

  • 分组访问的文件:文件往往是一起访问的,例如,web访问通常访问许多相关联的文件。然而,利用文件分组的优化不会自动提高性能,因为识别和分组文件的过程会产生开销。

  • 预取的局限性:虽然预取是一种有效的优化,但提取每个文件和相关元数据访问行为可能会带来很高的开销。例如,访问32个小文件的延迟可能比访问大小等于32个文件之和的单个文件的延迟高50%,即使使用缓存也是如此。

本文方法

本文设计了一个复合文件文件系统(CFFS),该系统允许文件到元数据的多对一映射。引入了称为复合文件的内部物理表示,保存经常一起访问的小文件的内容。复合文件对用户是不可见的,并且与小文件之间共享的单个复合inode相关联。存储在小文件的索引节点中的原始信息经过重复数据消除,并存储为复合文件的扩展属性。单个小文件的元数据属性仍然可以重建、检查和更新,从而保留访问语义(例如,类型、权限、时间戳)保持不变。通过这种表示,CFFS可以将物理复合文件转换为逻辑文件。

将哪些文件组合成一个复合文件是与工作负载相关决策策略。CFFS有三种配置方式。

  • 基于目录的合并,将一个目录中的所有文件(不包括子目录)形成一个复合文件。

  • 基于嵌入引用合并,提取文件内容中的文件引用,以识别可以形成复合文件的文件。

  • 基于频率挖掘的合并,通过频率挖掘分析文件引用,使经常一起访问的文件形成复合文件。

在Web服务器和软件开发工作负载下,性能比ext4提高了27%。

数据表示

复合文件的内容是通过连接小文件而形成的,所有小文件共享相同的inode,以及间接块、双重间接块等。复合文件中的第一个子文件是入口点,其访问将触发对其余子文件的预取。对于基于频率的合并,子文件的顺序反映了如何访问它们。

元数据表示和操作

复合文件创建:创建复合文件时,CFFS会分配一个inode,并复制和连接子文件的内容作为其数据。复合文件将单个子文件的偏移量和大小以及已消除的重复inode信息记录到其扩展属性中。然后,原始子文件被截断,其目录条目被重新映射到复合文件的inode,并扩展为还包括子文件ID和其原始inode。因此,最终用户仍然可以感知名称空间中的单个逻辑文件,而单个子文件仍然可以定位(图3.3.1)。

Inode内容重建:动态重建重复数据删除的子文件Inode。除非在扩展属性中另有指定,否则子文件的inode字段将继承复合文件的inode字段的值。

权限:打开文件时,首先根据复合inode检查权限测试。如果失败,则无需进一步检查。否则,如果子文件具有存储为扩展属性的不同权限,则会再次检查该权限。因此,复合inode将在所有子文件中具有最广泛的权限。

时间戳:每个文件操作都会更新单个子文件和复合文件的时间戳。在检查过程中(例如,stat系统调用),我们会返回子文件的时间戳。

大小:对于数据访问,通过扩展属性中编码的子文件偏移量和大小进行转换和检查。复合文件的大小是复合文件的长度,该长度可以大于其子文件的总大小。

inode命名空间:对于大于阈值X的inode编号,高零扩展N位用于复合inode号,低M位用于子文件ID。我们将这一范围的i节点编号称为CFFS唯一ID(CUID)。

子文件查找和重命名:如果目录中的名称映射到CUID,则可以通过子文件ID查找子文件的属性。由于将子文件移入和移出复合文件会更改其CUID,因此我们需要存储反向指针,以更新映射到CUID的所有名称。CUID中的更改可能会破坏通过文件的inode号唯一标识文件的应用程序(例如备份),导致不同的文件在不同的时间共享相同的inode号。

子文件和子文件成员身份更新:将子文件添加到复合文件时,它会附加到复合文件中。从复合文件中删除子文件时,复合文件中相应的数据区域在扩展属性中标记为已释放。

子文件打开/关闭操作:对子文件的打开/关闭调用与对复合文件的打开/关闭调用相同,并转换文件位置指针。

子文件写入操作:就地更新与传统文件系统中的相同。如果更新涉及在复合文件的中间增加子文件,并且在子文件的末尾没有可用空间,则将更新的子文件移动到复合文件的末尾。

硬链接:目录中的不同名称可以映射到相同的inode编号或CUID。

空间压缩:当分配大小的一半不包含有用的数据时,压缩其空间。

对复合文件中子文件的并发更新:与对普通文件的并发更新具有相同的语义。为了避免锁争用,涉及并发更新的文件必须提取到多个常规文件中。

组合复合文件

基于目录的组合:围绕目录具有空间局部性优化,此合并方案不包括子目录。对所有目录执行基于目录的合并,可以无需跟踪和分析文件引用。但是,它不会捕获跨目录的文件关系。

基于嵌入式引用的组合:基于文件中的嵌入文件引用来标识复合文件成员身份。例如,根据html文件中的超链接,合并原始html文件和引用的文件。也可以从Makefile中提取依赖规则,并合并生成相同二进制文件的源文件。由于文件更新可能会打破依赖关系,CFFS可以定期筛选修改后的文件,以协调复合文件成员关系。

基于频率挖掘的整合:使用了Apriori算法的变体。关键的观察结果是,如果一组文件被频繁访问,那么它的子集也必须是(Apriori属性)。

  • 统计每个文件的访问次数,删除计数小于阈值(比如两个)的文件进行进一步分析。

  • 对所有可能的两个文件引用集进行排列、构建和计数。每当文件A紧接在B之后被访问时,反之亦然,我们递增文件集{A,B}的计数。计数小于阈值的集合将被删除(例如,{B,D})。

  • 在剩下的两个文件引用集的基础上生成所有三个文件引用集合。但是,如果一个三文件引用集频繁出现,那么它的所有两个文件引用集也需要频繁出现。因此,由于在第二步中消除了{B,D},因此对{A,B,D}文件集进行了修剪。

  • 由于无法再生成四个文件引用集,因此算法结束。将集{A,B,C}和{A,D}作为两个频繁访问的集返回。{A,B}集合被移除,因为它们是{A,B,C}的子集。

总结

针对文件系统中元数据和文件一对一映射的问题,本文设计了一个复合文件文件系统(CFFS),允许文件到元数据的多对一映射。将经常一起访问的小文件组成复合文件,并与小文件之间共享的单个复合inode。将小文件的索引节点的原始信息进行重复数据消除,并存储为复合文件的扩展属性。

选择文件组合成复合文件有三种决策策略:基于目录的合并,将目录中的所有文件(不包括子目录)形成一个复合文件;基于嵌入引用合并,提取文件内容中的文件引用,组成复合文件;基于频率合并,通过频率挖掘分析文件引用,将经常一起访问的文件形成复合文件。

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妙BOOK言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值