From: Andrew Perepechko Date: Fri, 28 Feb 2020 13:18:40 +0000 (+0300) Subject: LU-13309 osd-ldiskfs: remove per-page object_get/put in brw X-Git-Tag: 2.13.53~112 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=dc9f28a541aec49b1787a25169f56a78a4924ee4 LU-13309 osd-ldiskfs: remove per-page object_get/put in brw According to profiling data, object_get/put calls consume a lot of CPU ticks: 99.99% [kernel.vmlinux] | |--28.82%--_atomic_dec_and_lock | | | --28.82%--lu_object_put | | | --28.73%--osd_bufs_put | ofd_commitrw | tgt_brw_read | tgt_request_handle | ptlrpc_server_handle_request | ptlrpc_main | kthread | ret_from_fork | |--26.51%--osd_bufs_get | | | --26.51%--ofd_preprw | tgt_brw_read | tgt_request_handle | ptlrpc_server_handle_request | ptlrpc_main | kthread | ret_from_fork | |--18.09%--lu_object_put | | | --18.01%--osd_bufs_put | ofd_commitrw | tgt_brw_read | tgt_request_handle | ptlrpc_server_handle_request | ptlrpc_main | kthread | ret_from_fork ofd_preprw_read() and ofd_preprw_write() pin the corresponding ofd object, later ofd_commitrw_read() and ofd_commitrw_write() unpin it. When the ofd object is pinned, its underlying osd object cannot go away, so object_get/object_put in osd_bufs_get()/osd_bufs_put() are basically no-op. Change-Id: Ic48f793de5ef3e62505f44879c91050922160000 Signed-off-by: Andrew Perepechko Cray-bug-id: LUS-4388 Reviewed-on: https://review.whamcloud.com/37758 Reviewed-by: Alexander Boyko Reviewed-by: Andreas Dilger Tested-by: jenkins Reviewed-by: Alexander Zarochentsev Tested-by: Maloo Reviewed-by: Oleg Drokin --- diff --git a/lustre/osd-ldiskfs/osd_io.c b/lustre/osd-ldiskfs/osd_io.c index 3f83d18..3f0bc7b 100644 --- a/lustre/osd-ldiskfs/osd_io.c +++ b/lustre/osd-ldiskfs/osd_io.c @@ -770,7 +770,6 @@ static int osd_bufs_put(const struct lu_env *env, struct dt_object *dt, if (pagevec_add(&pvec, page) == 0) pagevec_release(&pvec); } - dt_object_put(env, dt); lnb[i].lnb_page = NULL; } @@ -883,8 +882,6 @@ bypass_checks: lnb->lnb_locked = 1; wait_on_page_writeback(lnb->lnb_page); BUG_ON(PageWriteback(lnb->lnb_page)); - - lu_object_get(&dt->do_lu); } #if 0