Back in 2012, Microsoft released its 64-bit exFAT ( Extended File Allocation Table) file system as the successor to 32-bit FAT32. Seven years later in 2019, the Redmond giant made a big revelation when it announced support for the exFAT format in Linux. Fast forward three years to now and it looks like exFAT is about to receive a hefty performance boost in upcoming Linux 6.2, thanks to the latest effort from Sony. Yuezhang Mo, an engineer at the Japanese tech giant, found that reducing repeated traversal of directory entries greatly boosts the performance of exFAT. And it is especially noticeable in the case of lower-end CPUs.
Mo explains in his patch:
After traversing all directory entries, hint the empty directory entry no matter whether or not there are enough empty directory entries.
After this commit, hint the empty directory entries like this:
1. Hint the deleted directory entries if enough;
2. Hint the deleted and unused directory entries which at the end of the cluster chain no matter whether enough or not(Add by this commit);
3. If no any empty directory entries, hint the empty directory entries in the new cluster(Add by this commit).
This avoids repeated traversal of directory entries, reduces CPU usage, and improves the performance of creating files and directories(especially on low-performance CPUs).
In order to reach this conclusion, tests were run using 5000 files. The interesting thing that was noted was that the improvement scaled with the number of file sizes. The biggest gain seen was nearly 58%. The test was conducted on a SABRE i.MX6 Lite development board using a Class 4 SD card:
Before After Improvement 1~1000
25.360s 22.168s 14.40% 1001~2000
38.242s 28.72ss [sic] 33.15% 2001~3000
49.134s 35.037s 40.23% 3001~4000
62.042s 41.624s 49.05% 4001~5000
73.629s 46.772s 57.42%
Interestingly, this isn"t the first time that Sony has pushed patches for exFAT that has made massive performance boosts. Back in April, Yuezhang Mo noted that with DirSync enabled, there was up to 85.4% improvement in certain instances.
Via: Phoronix