From: Jinshan Xiong Date: Sun, 24 Feb 2019 22:32:41 +0000 (-0800) Subject: LU-11999 dne: performance improvement for file creation X-Git-Tag: 2.12.1-RC1~51 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;ds=sidebyside;h=182731f92c4a61d2b7793a798950439a467d9365;p=fs%2Flustre-release.git LU-11999 dne: performance improvement for file creation This is to remove an obsoleted code where it causes drastic performance degradation. This code is written before PERM lock is introduced, and it requests UPDATE lock at path walk for remote directory, which will be cancelled at later file creation. Tests result before and after this patch is applied: Test case: rm -rf /mnt/lustre_purple/testdir lfs mkdir -i 0 /mnt/lustre_purple/testdir lfs mkdir -i 2 /mnt/lustre_purple/testdir/dir2 ./lustre-release/lustre/tests/createmany -o \ /mnt/lustre_purple/testdir/dir2/f 10000 Before the patch is applied: total: 10000 open/close in 12.82 seconds: 780.22 ops/second After the patch is applied: total: 10000 open/close in 4.89 seconds: 2044.75 ops/second Lustre-change: https://review.whamcloud.com/34291 Lustre-commit: bfbd062e6b177cf934b75d6be2db695b9fe1648b Signed-off-by: Jinshan Xiong Change-Id: Ib474dc28d6edc7d15801b6821edc0e1d108bb4b6 Reviewed-by: Lai Siyao Reviewed-by: Andrew Perepechko Signed-off-by: Minh Diep Reviewed-on: https://review.whamcloud.com/34505 Tested-by: Jenkins Reviewed-by: Andreas Dilger Tested-by: Maloo Reviewed-by: Oleg Drokin --- diff --git a/lustre/lmv/lmv_intent.c b/lustre/lmv/lmv_intent.c index cc902bd..27d00fb 100644 --- a/lustre/lmv/lmv_intent.c +++ b/lustre/lmv/lmv_intent.c @@ -74,13 +74,6 @@ static int lmv_intent_remote(struct obd_export *exp, struct lookup_intent *it, LASSERT((body->mbo_valid & OBD_MD_MDS)); /* - * Unfortunately, we have to lie to MDC/MDS to retrieve - * attributes llite needs and provideproper locking. - */ - if (it->it_op & IT_LOOKUP) - it->it_op = IT_GETATTR; - - /* * We got LOOKUP lock, but we really need attrs. */ pmode = it->it_lock_mode; diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index 4caa22a..38f58ae 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -1652,12 +1652,15 @@ static int mdt_getattr_name_lock(struct mdt_thread_info *info, mdt_lock_reg_init(lhc, LCK_PR); /* - * Object's name is on another MDS, no lookup or layout - * lock is needed here but update lock is. + * Object's name entry is on another MDS, it will + * request PERM lock only because LOOKUP lock is owned + * by the MDS where name entry resides. + * + * TODO: it should try layout lock too. - Jinshan */ child_bits &= ~(MDS_INODELOCK_LOOKUP | MDS_INODELOCK_LAYOUT); - child_bits |= MDS_INODELOCK_PERM | MDS_INODELOCK_UPDATE; + child_bits |= MDS_INODELOCK_PERM; rc = mdt_object_lock(info, child, lhc, child_bits); if (rc < 0)