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 <c17827@cray.com>
Cray-bug-id: LUS-4388
Reviewed-on: https://review.whamcloud.com/37758
Reviewed-by: Alexander Boyko <c17825@cray.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Alexander Zarochentsev <alexander.zarochentsev@hpe.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
if (pagevec_add(&pvec, page) == 0)
pagevec_release(&pvec);
}
- dt_object_put(env, dt);
lnb[i].lnb_page = NULL;
}
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