Whamcloud - gitweb
LU-11999 dne: performance improvement for file creation 91/34291/4
authorJinshan Xiong <jinshan.xiong@gmail.com>
Sun, 24 Feb 2019 22:32:41 +0000 (14:32 -0800)
committerOleg Drokin <green@whamcloud.com>
Thu, 21 Mar 2019 03:42:11 +0000 (03:42 +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

Signed-off-by: Jinshan Xiong <jinshan.xiong@gmail.com>
Change-Id: Ib474dc28d6edc7d15801b6821edc0e1d108bb4b6
Reviewed-on: https://review.whamcloud.com/34291
Reviewed-by: Lai Siyao <lai.siyao@whamcloud.com>
Reviewed-by: Andrew Perepechko <c17827@cray.com>
Tested-by: Jenkins
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/lmv/lmv_intent.c
lustre/mdt/mdt_handler.c

index 86e666e..5cc1687 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 680ba89..8064065 100644 (file)
@@ -1653,12 +1653,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)