From c24c25dc1b84912063f79e44602526c482ca0479 Mon Sep 17 00:00:00 2001 From: Patrick Farrell Date: Mon, 13 Apr 2020 11:23:42 -0500 Subject: [PATCH] LU-13419 osc: Move shrink update to per-write Updating the grant shrink interval is currently done for each page submitted, rather than once per write. Since the grant shrink interval is in seconds, this is unnecessary. This came up because this function showed up in the perf traces for https://review.whamcloud.com/#/c/38151/, and it is called with the cl_loi_list_lock held. Note that this change makes this access to the grant shrink interval a 'dirty' access, without locking, but the grant shrink interval is: A) Already accessed like this in various places, and B) can safely be out of date or suffer a lost update without affecting correctness or performance. IOR performance testing with this test: mpirun -np 36 $IOR -o $LUSTRE -w -t 1M -b 2G -i 1 -F No patches: 5942 MiB/s With 38151: 14950 MiB/s With 38151+this: 15320 MiB/s Signed-off-by: Patrick Farrell Change-Id: I8110b3c2570c183d58be2bccdbf76813ea3e373a Reviewed-on: https://review.whamcloud.com/38214 Reviewed-by: Andreas Dilger Reviewed-by: Wang Shilong Tested-by: jenkins Tested-by: Maloo Reviewed-by: Oleg Drokin --- lustre/osc/osc_cache.c | 1 - lustre/osc/osc_io.c | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lustre/osc/osc_cache.c b/lustre/osc/osc_cache.c index 21bc5f1c..9d3d22b 100644 --- a/lustre/osc/osc_cache.c +++ b/lustre/osc/osc_cache.c @@ -1370,7 +1370,6 @@ static void osc_consume_write_grant(struct client_obd *cli, pga->flag |= OBD_BRW_FROM_GRANT; CDEBUG(D_CACHE, "using %lu grant credits for brw %p page %p\n", PAGE_SIZE, pga, pga->pg); - osc_update_next_shrink(cli); } /* the companion to osc_consume_write_grant, called when a brw has completed. diff --git a/lustre/osc/osc_io.c b/lustre/osc/osc_io.c index 0038286..07f45bf 100644 --- a/lustre/osc/osc_io.c +++ b/lustre/osc/osc_io.c @@ -357,6 +357,11 @@ int osc_io_commit_async(const struct lu_env *env, pagevec_reinit(pvec); } } + /* The shrink interval is in seconds, so we can update it once per + * write, rather than once per page. + */ + osc_update_next_shrink(osc_cli(osc)); + /* Clean up any partially full pagevecs */ if (pagevec_count(pvec) != 0) -- 1.8.3.1