十多年前,即 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) 网站上查看拉取请求。