On Sat, 9 Aug 2014 00:39:58 +0800, Li Xi <pkuelelixi@xxxxxxxxx> wrote: > Hi all, > > The following patches propose an implementation of project support > for ext4. A project is an aggregate of unrelated inodes which might > scatter in different directories. Inodes belongs to a project > possesses a same identification i.e. 'project ID', just like every > inode has its user/group indentification. The following patches adds > project quota as supplement to the former uer/group quota types. > > This project ID of an inode is iherited from its parent direcotry > and saved as an internal field of ext4 inode. > > This is not the first existed attepmtion to add project quta support > for ext4. Patches of subtree quota support which was posted by Dmity > Monakhov in 2012 (http://lwn.net/Articles/506064/) implemented the > similar feature in a different way. Rather than saving the project > (or subtree) ID as an internal inode field, those patches manages > the ID as extented attributes. > > We rebased both patch sets onto the same kernel version and run > benchmakrs respectively to comparing the peformance difference. > It is worth noting that patches from Lai Siyao and Niu Yawei > (quota: remove-dqptr_sem, > http://article.gmane.org/gmane.comp.file-systems.ext4/44341/) > improve the performance of quota enforcement significantly, which > can be seen clearly from following results. > > It is obvious that extended attribute implementation has performance > impact when creating files. That is why we choose to push the patches > which use internal inode field to save project ID. I'll bet a box of "russian caviar" that AlViro will never ever allow to place project ID to generic inode. Because it is obviously has no reason for any other filesystem except xfs/ext4. BTW. Which quota options you use for performance testing? It looks like you use non-journaled quota. But this means that you have to fully recalculate quota in case of power failure. It is reasonable to enable journaled-quota, but it result in visible journaling overhead. > > Kernel: 3.16.0-rc5 > Server: Dell R620 (2 x E5-2667@3.3GHz, 256GB memory) > Storage: 10 x 15K SAS disks(RAID10) > Test tool: mdtest-1.9.3. Mdtest created 800K files in total. Each > thread created files in unique directory. > > File Creation: > 1thr 2thr 4thr 8thr 16thr > - vanilla > quota disabled 66094 105781 178968 186647 172536 > quotaon(ug) 60337 99582 157396 171463 162872 > > - vanilla + remove-dqptr_sem patches > quota disabled 65955 112082 185550 181511 171988 > quotaon(ug) 62391 101905 171013 190570 168914 > > - prjquota(xattr) > quota disabled 61396 97580 147852 146423 164895 > quotaon(ug) 57009 93435 140589 135748 153196 > quotaon(ugP) 57500 89419 133604 125291 105127 > > - prjquota(xattr) + remove-dqptr_sem patches > quota disabled 64053 100078 147608 139403 163960 > quotaon(ug) 60754 104726 149231 139053 165990 > quotaon(ugP) 59238 93606 148921 138434 163931 > > - prjquota(internal) + remove-dqptr_sem patches > quota disabled 65826 111828 181486 189227 171241 > quotaon(ug) 65418 107745 173584 180562 173752 > quotaon(ugP) 64669 103890 169176 186426 172192 > > > File Removal: > 1thr 2thr 4thr 8thr 16thr > - vanilla > quota disabled 118059 169825 234661 291812 345656 > quotaon(ug) 106675 135834 153532 100437 87489 > > - vanilla + remove-dqptr_sem patches > quota disabled 120374 168437 236818 291754 331141 > quotaon(ug) 110709 161954 238333 293700 329015 > > - prjquota(xattr) > quota disabled 116680 161662 229190 295642 332959 > quotaon(ug) 104783 134359 154950 100516 87923 > quotaon(ugP) 100240 125978 108653 68286 58991 > > - prjquota(xattr) + remove-dqptr_sem patches > quota disabled 116281 168938 233733 286663 344002 > quotaon(ug) 109775 164995 236001 299389 340683 > quotaon(ugP) 113935 162979 236112 300033 356117 > > - prjquota(internal) + remove-dqptr_sem patches > quota disabled 119537 171565 247418 291068 350138 > quotaon(ug) 121756 159580 240778 298012 342437 > quotaon(ugP) 118954 168022 241206 289055 334008 > > Changelog: > * v2 <- v1: > - Add ioctl interface for setting/getting project; > - Add EXT4_FEATURE_RO_COMPAT_PROJECT; > - Add get_projid() method in struct dquot_operations; > - Add error check of ext4_inode_projid_set/get(). > > v1: http://article.gmane.org/gmane.comp.file-systems.ext4/45153 > > Any comments or feedbacks are appreciated. > > Regards, > - Li Xi > > Li Xi(4): > quota: Adds general codes to enforces project quota limites > ext4: Adds project ID support for ext4 > ext4: Adds project quota support for ext4 > ext4: Adds ioctl interface support for ext4 project > > Documentation/filesystems/ext4.txt | 4 + > fs/ext4/Kconfig | 11 -- > fs/ext4/Makefile | 1 - > fs/ext4/ext4.h | 19 +++- > fs/ext4/ialloc.c | 16 +-- > fs/ext4/inode.c | 85 +++++++++++++- > fs/ext4/ioctl.c | 100 ++++++++++++++++ > fs/ext4/project.c | 224 ------------------------------------ > fs/ext4/project.h | 58 --------- > fs/ext4/super.c | 45 ++++++-- > fs/ext4/xattr.c | 6 - > fs/ext4/xattr.h | 2 - > fs/quota/Kconfig | 9 ++ > fs/quota/dquot.c | 120 ++++++++++++++----- > fs/quota/quota.c | 5 +- > fs/quota/quotaio_v2.h | 4 +- > include/linux/fs.h | 1 - > include/linux/quota.h | 8 ++ > include/uapi/linux/xattr.h | 2 - > 19 files changed, 345 insertions(+), 375 deletions(-) > -- > To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html