> This patch set changes sync dentry-by-dentry to sync dentrySet-by- > dentrySet, and remove some syncs that do not cause data loss. It not only > improves the performance of sync dentry, but also reduces the consumption > of storage device life. > > I used the following commands and blktrace to measure the improvements on > a class 10 SDXC card. > > rm -fr $mnt/dir; mkdir $mnt/dir; sync > time (for ((i=0;i<1000;i++));do touch $mnt/dir/${prefix}$i;done;sync $mnt) > time (for ((i=0;i<1000;i++));do rm $mnt/dir/${prefix}$i;done;sync $mnt) > > | case | name len | create | unlink | > | | | time | write size | time | write size | > |------+----------+----------+------------+-----------+------------| > | 1 | 15 | 10.260s | 191KiB | 9.829s | 96KiB | > | 2 | 15 | 11.456s | 562KiB | 11.032s | 562KiB | > | 3 | 15 | 30.637s | 3500KiB | 21.740s | 2000KiB | > | 1 | 120 | 10.840s | 644KiB | 9.961s | 315KiB | > | 2 | 120 | 13.282s | 1092KiB | 12.432s | 752KiB | > | 3 | 120 | 45.393s | 7573KiB | 37.395s | 5500KiB | > | 1 | 255 | 11.549s | 1028KiB | 9.994s | 594KiB | > | 2 | 255 | 15.826s | 2170KiB | 13.387s | 1063KiB | > | 3 | 255 | 1m7.211s | 12335KiB | 0m58.517s | 10004KiB | > > case 1. disable dirsync > case 2. with this patch set and enable dirsync case 3. without this patch > set and enable dirsync > > Changes for v3 > - [2/10] Allow deleted entry follow unused entry looks good. Thanks for your patch. Reviewed-by: Sungjong Seo <sj1557.seo@xxxxxxxxxxx> > > Changes for v2: > - Fix typoes in patch subject > - Merge [3/11] and [8/11] in v1 to [7/10] in v2 > - Update some code comments > - Avoid else{} in __exfat_get_dentry_set() > - Rename the argument type of __exfat_get_dentry_set() to > num_entries > > Yuezhang Mo (10): > exfat: add __exfat_get_dentry_set() helper > exfat: add exfat_get_empty_dentry_set() helper > exfat: convert exfat_add_entry() to use dentry cache > exfat: convert exfat_remove_entries() to use dentry cache > exfat: move free cluster out of exfat_init_ext_entry() > exfat: convert exfat_init_ext_entry() to use dentry cache > exfat: convert exfat_find_empty_entry() to use dentry cache > exfat: remove unused functions > exfat: do not sync parent dir if just update timestamp > exfat: remove duplicate update parent dir > > fs/exfat/dir.c | 288 ++++++++++++++++++------------------ > fs/exfat/exfat_fs.h | 25 ++-- > fs/exfat/inode.c | 2 +- > fs/exfat/namei.c | 352 +++++++++++++++++--------------------------- > 4 files changed, 291 insertions(+), 376 deletions(-) > > -- > 2.34.1