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

站长云网 2025-04-01 5iter.com 站长云网

十多年前,即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代码。

  • 添加缺失的关机检查。

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

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

    补丁说明:

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

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

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

    通过以下方式衡量绩效:

    #truncate-s80G/mnt/file

    #timerm/mnt/file

    如果没有这个提交:

  • real4m46.183s

  • user0m0.000s

  • sys0m12.863

  • 通过此提交:

  • real0m1.661s

  • user0m0.000s

  • sys0m0.017s

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

    责任编辑:站长云网