mirror of
https://github.com/syncthing/syncthing.git
synced 2026-10-08 12:11:51 -04:00
This tweaks the casefs cache to do in-place updates for modifications we perform, instead of dropping the entire cache. That is, we add, remove and rename things in the cache after having done the corresponding operation. We still drop the cache entirely on larger operations like MkdirAll, and before Walk, and the 1s expiry is unchanged. The result is performance much closer to the original. I set up a device with 150 000 tiny files and measured the time it took for a blank device to come online and sync all the files, with default settings apart from `fsync` being disabled, as it otherwise dominated the benchmark... There are three runs, all are identical in the first 40 seconds which is the index transmission & reception, then we can see the `sensitive` run (casefs disabled) finishes at 137 seconds (137-40 = 97s spent syncing); the `before` run finishes at 238s (198s spent syncing); the `after` run finishes at 142 seconds (102s spent syncing). So, effectively the sync time is cut in half, and is now very close to having case sensitive enabled. <img width="812" height="476" alt="Screenshot 2026-07-25 at 23 22 22" src="https://github.com/user-attachments/assets/0aa39712-9fd7-46cf-969e-b6a20f150a3c" /> --------- Signed-off-by: Jakob Borg <jakob@kastelo.net>