微軟在 2006 年推出 exFAT (擴充套件檔案分配表) 檔案系統用於最佳化快閃記憶體儲存效能,到 2012 年微軟推出 64 位版 exFAT 檔案系統作為 FAT32 的後繼者,7 年後的 2019 年微軟宣佈在 Linux 系統中支援 exFAT 格式。
到 2022 年索尼工程師 Yuezhang Mo 注意到減少目錄條目的重複遍歷可以讓 exFAT 檔案系統的效能提升高達 57%,改進後的版本在 Linux Kernel 6.2 版 (釋出於 2023 年 2 月) 中得到實現。
現在這名工程師再次幫助微軟提升 exFAT 檔案系統的效能,最新的拉取請求包含大量與 exFAT 相關的改進,其中就包括關於繼續提升 exFAT 在 Linux 中的效能的改進。

在拉取請求中索尼工程師提到:
-
修復 exfat_get_block () 中的隨機堆疊損壞和不正確的錯誤返回
-
透過改進檢查極端情況來最佳化 exfat_get_block ()
-
修復 exfat_find_last_cluster 中自連結 (self-linked) 造成的無限迴圈
-
刪除無效的 EXFAT_CLUSTERS_UNTRACKED 程式碼
-
新增缺失的關機檢查
-
使用丟棄掛載選項提高刪除效能
丟棄掛載指的是通知底層儲存裝置不再使用的塊的操作,因此當使用丟棄選項掛載檔案系統時,該功能會啟用即時丟棄操作,每次當塊從已使用轉換為空閒狀態時,這些操作都會自動通知儲存裝置。
索尼工程師在補丁說明中寫道:
如果啟用丟棄掛載選項則在釋放簇時就會丟棄檔案的簇,逐個丟棄簇會顯著降低效能,當釋放大量簇時效能不佳還會造成軟鎖定,此提交透過批次丟連續簇來提高效能。
作為測試使用 80GB 的檔案用來對比,刪除該檔案原本在 exFAT 中需要 4 分 46 秒,透過此次最佳化後只需要 2 秒就可以完成,相當於這個補丁給檔案檔案刪除的效能提高了 172 倍,當然具體檔案體積和數量可能會有些效能方面的差異。
下面是衡量指標:
# truncate -s 80G /mnt/file
# time rm /mnt/file
如果沒有這個補丁:
實際花費時間為 4 分 46.183 秒
使用者操作時間為 0 秒
系統操作時間為 12.863 秒
有了這個補丁後:
實際花費時間為 1.661 秒
使用者操作時間為 0 秒
系統操作時間為 0.017 秒
最後雖然補丁是提交了但合併到 Linux Kernel 可能還需要很長時間,一方面這需要微軟檢查並測試,另一方面也需要核心團隊後續的確認,所以短時間應該不會合併到 Linux Kernel 即將釋出的新版本中。