Whamcloud - gitweb
LU-12133 osd-zfs: set blocksize to 8K for llog objects 92/37192/4
authorAlex Zhuravlev <bzzz@whamcloud.com>
Fri, 10 Jan 2020 20:15:12 +0000 (23:15 +0300)
committerOleg Drokin <green@whamcloud.com>
Sat, 1 Feb 2020 08:10:37 +0000 (08:10 +0000)
with ZFS-0.8+ default blocksize is 512 bytes. as many llog
operations use 8K chunks it turns into 16 dbuf lookups
which is quite expensive.

for example, sanity/60a takes 104s with blocksize=512 and
90s with blocksize=8K

Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: I86e6e598899e5d09a550dff7dcb9edd5ee56abd5
Reviewed-on: https://review.whamcloud.com/37192
Reviewed-by: Olaf Faaland-LLNL <faaland1@llnl.gov>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/osd-zfs/osd_object.c

index d2b2f03..63ab904 100644 (file)
@@ -1816,6 +1816,14 @@ static dnode_t *osd_mkreg(const struct lu_env *env, struct osd_object *obj,
                               osd->od_svname, rc);
                        return ERR_PTR(rc);
                }
                               osd->od_svname, rc);
                        return ERR_PTR(rc);
                }
+       } else if ((fid_is_llog(fid))) {
+               rc = -dmu_object_set_blocksize(osd->od_os, dn->dn_object,
+                                              LLOG_MIN_CHUNK_SIZE, 0, oh->ot_tx);
+               if (unlikely(rc)) {
+                       CERROR("%s: can't change blocksize: %d\n",
+                              osd->od_svname, rc);
+                       return ERR_PTR(rc);
+               }
        }
 
        return dn;
        }
 
        return dn;