From ec46feab365a10960f36da017b41066915b79c40 Mon Sep 17 00:00:00 2001 From: Alex Zhuravlev Date: Fri, 10 Jan 2020 23:15:12 +0300 Subject: [PATCH] LU-12133 osd-zfs: set blocksize to 8K for llog objects 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 Change-Id: I86e6e598899e5d09a550dff7dcb9edd5ee56abd5 Reviewed-on: https://review.whamcloud.com/37192 Reviewed-by: Olaf Faaland-LLNL Tested-by: jenkins Tested-by: Maloo Reviewed-by: Brian Behlendorf Reviewed-by: Andreas Dilger Reviewed-by: Oleg Drokin --- lustre/osd-zfs/osd_object.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lustre/osd-zfs/osd_object.c b/lustre/osd-zfs/osd_object.c index d2b2f03..63ab904 100644 --- a/lustre/osd-zfs/osd_object.c +++ b/lustre/osd-zfs/osd_object.c @@ -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); } + } 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; -- 1.8.3.1