Whamcloud - gitweb
LU-11999 dne: performance improvement for file creation 05/34505/2
authorJinshan Xiong <jinshan.xiong@gmail.com>
Sun, 24 Feb 2019 22:32:41 +0000 (14:32 -0800)
committerOleg Drokin <green@whamcloud.com>
Mon, 8 Apr 2019 06:27:12 +0000 (06:27 +0000)
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 <jinshan.xiong@gmail.com>
Change-Id: Ib474dc28d6edc7d15801b6821edc0e1d108bb4b6
Reviewed-by: Lai Siyao <lai.siyao@whamcloud.com>
Reviewed-by: Andrew Perepechko <c17827@cray.com>
Signed-off-by: Minh Diep <mdiep@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/34505
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/lmv/lmv_intent.c
lustre/mdt/mdt_handler.c

index cc902bd..27d00fb 100644 (file)
@@ -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;
index 4caa22a..38f58ae 100644 (file)
@@ -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)