在索尼的帮助下 微软exFAT文件系统在Linux上的性能再次大幅提升

摘要:

十多年前,即 2012 年,微软发布了 64 位 exFAT (扩展文件分配表)文件系统,作为 32 位 FAT32 的后继者。七年后的 2019 年,这家巨头宣布在 Linux 中支持 exFAT 格式,这是一个重大消息。快进十年,2022 年,索尼工程师莫岳章发现,减少目录条目的重复遍历可以使exFAT的性能提高高达 57%。 这在 Linux 内核版本 6.2 中被推动。

现在,莫再次回来帮助 exFAT,这一次,最新的拉取请求包含大量与 exFAT 相关的改进,性能提升就是其中之一。他写道:

此拉取请求的描述:

  • 修复 exfat_get_block() 中的随机堆栈损坏和不正确的错误返回。

  • 通过改进检查极端情况来优化 exfat_get_block()。

  • 修复 exfat_find_last_cluster 中自链接造成的无限循环。

  • 删除无效的 EXFAT_CLUSTERS_UNTRACKED 代码。

  • 添加缺失的关机检查。

  • 使用丢弃挂载选项提高删除性能。

对于那些想知道的人来说,“丢弃挂载”选项是指通知底层存储设备不再使用的块的操作。因此,当使用丢弃选项挂载文件系统时,它会启用实时丢弃操作。每当块从“已使用”转换为“空闲”时,这些操作都会自动通知存储设备。

补丁说明:

如果启用了丢弃挂载选项,则在释放簇时会丢弃文件的簇。逐个丢弃簇会显著降低性能。当释放大量簇时,性能不佳可能会导致软锁定。

此提交通过批量丢弃连续簇来提高性能。

性能改进是使用 80 GB 的文件来测量的,删除该文件需要 4 分 46 秒,即接近 287 秒。通过新的优化,任务在 2 秒内完成,相当于提高了 172 倍:

通过以下方式衡量绩效:

# truncate -s 80G /mnt/file

# time rm /mnt/file

如果没有这个提交:

  • real 4m46.183s

  • user 0m0.000s

  • sys 0m12.863

通过此提交:

  • real 0m1.661s

  • user 0m0.000s

  • sys 0m0.017s

您可以在此处的Linux 内核邮件列表 (LKML) 网站上查看拉取请求。

我们在FebBox(https://www.febbox.com/cnbeta) 开通了新的频道,更好阅读体验,更及时更新提醒,欢迎前来阅览和打赏。
查看评论
created by ceallan