Whamcloud - gitweb
LU-13799 clio: Skip prep for transients 48/39448/17
authorPatrick Farrell <farr0186@gmail.com>
Fri, 7 May 2021 19:51:32 +0000 (15:51 -0400)
committerOleg Drokin <green@whamcloud.com>
Tue, 27 Jul 2021 21:36:48 +0000 (21:36 +0000)
The work done by cpo_prep() (etc) is unnecessary for
transient pages.  This gives only a minimal performance
boost and is better seen as a step towards removing the
cl_page abstraction for transient pages.

But, it does consistently give around 1% better
performance.

This patch reduces i/o time in ms/GiB by:
Write: 1 ms/GiB
Read: 1 ms/GiB

Totals:
Write: 169 ms/GiB
Read: 161 ms/GiB

mpirun -np 1  $IOR -w -r -t 64M -b 64G -o ./iorfile --posix.odirect

With previous patches in series:
write        6028 MiB/s
read         6305 MiB/s

Plus this patch:
write        6071 MiB/s
read         6355 MiB/s

Signed-off-by: Patrick Farrell <farr0186@gmail.com>
Change-Id: Ib94f57cde468c9aaea952e1bb89db8fcf4b35e07
Reviewed-on: https://review.whamcloud.com/39448
Reviewed-by: Wang Shilong <wshilong@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/obdclass/cl_page.c

index 5525ef5..0dc44cf 100644 (file)
@@ -983,13 +983,16 @@ int cl_page_prep(const struct lu_env *env, struct cl_io *io,
        if (crt >= CRT_NR)
                return -EINVAL;
 
        if (crt >= CRT_NR)
                return -EINVAL;
 
-       cl_page_slice_for_each(cl_page, slice, i) {
-               if (slice->cpl_ops->cpo_own)
-                       result = (*slice->cpl_ops->io[crt].cpo_prep)(env,
+       if (cl_page->cp_type != CPT_TRANSIENT) {
+               cl_page_slice_for_each(cl_page, slice, i) {
+                       if (slice->cpl_ops->cpo_own)
+                               result =
+                                (*slice->cpl_ops->io[crt].cpo_prep)(env,
                                                                     slice,
                                                                     io);
                                                                     slice,
                                                                     io);
-               if (result != 0)
-                       break;
+                       if (result != 0)
+                               break;
+               }
        }
 
        if (result >= 0) {
        }
 
        if (result >= 0) {