From: Wang Shilong Date: Mon, 5 Aug 2019 02:10:09 +0000 (+0800) Subject: LU-12520 osc: reserve lru pages for read in batch X-Git-Tag: 2.12.57~19 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=0692dadfba87b963f1209defff81be7e6196c38e;p=fs%2Flustre-release.git LU-12520 osc: reserve lru pages for read in batch The benefit of doing this is to reduce contention against atomic counter cl_lru_left by changing it from per-page access to per-IO access. We have done this optimization for write, do it for read too. Change-Id: Ifd15d0a59eda265dce43876d953e32f27b07b6a0 Signed-off-by: Wang Shilong Reviewed-on: https://review.whamcloud.com/35440 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Patrick Farrell Reviewed-by: Li Dongyang Reviewed-by: Oleg Drokin --- diff --git a/lustre/include/lustre_osc.h b/lustre/include/lustre_osc.h index 32a2c63..d6c2701 100644 --- a/lustre/include/lustre_osc.h +++ b/lustre/include/lustre_osc.h @@ -693,9 +693,9 @@ int osc_io_commit_async(const struct lu_env *env, int osc_io_iter_init(const struct lu_env *env, const struct cl_io_slice *ios); void osc_io_iter_fini(const struct lu_env *env, const struct cl_io_slice *ios); -int osc_io_write_iter_init(const struct lu_env *env, - const struct cl_io_slice *ios); -void osc_io_write_iter_fini(const struct lu_env *env, +int osc_io_rw_iter_init(const struct lu_env *env, + const struct cl_io_slice *ios); +void osc_io_rw_iter_fini(const struct lu_env *env, const struct cl_io_slice *ios); int osc_io_fault_start(const struct lu_env *env, const struct cl_io_slice *ios); void osc_io_setattr_end(const struct lu_env *env, diff --git a/lustre/mdc/mdc_dev.c b/lustre/mdc/mdc_dev.c index 15e5f51..394bb3e 100644 --- a/lustre/mdc/mdc_dev.c +++ b/lustre/mdc/mdc_dev.c @@ -1288,13 +1288,13 @@ static void mdc_io_data_version_end(const struct lu_env *env, static struct cl_io_operations mdc_io_ops = { .op = { [CIT_READ] = { - .cio_iter_init = osc_io_iter_init, - .cio_iter_fini = osc_io_iter_fini, + .cio_iter_init = osc_io_rw_iter_init, + .cio_iter_fini = osc_io_rw_iter_fini, .cio_start = osc_io_read_start, }, [CIT_WRITE] = { - .cio_iter_init = osc_io_write_iter_init, - .cio_iter_fini = osc_io_write_iter_fini, + .cio_iter_init = osc_io_rw_iter_init, + .cio_iter_fini = osc_io_rw_iter_fini, .cio_start = osc_io_write_start, .cio_end = osc_io_end, }, diff --git a/lustre/osc/osc_io.c b/lustre/osc/osc_io.c index 25e6239..68cc041 100644 --- a/lustre/osc/osc_io.c +++ b/lustre/osc/osc_io.c @@ -375,8 +375,8 @@ int osc_io_iter_init(const struct lu_env *env, const struct cl_io_slice *ios) } EXPORT_SYMBOL(osc_io_iter_init); -int osc_io_write_iter_init(const struct lu_env *env, - const struct cl_io_slice *ios) +int osc_io_rw_iter_init(const struct lu_env *env, + const struct cl_io_slice *ios) { struct cl_io *io = ios->cis_io; struct osc_io *oio = osc_env_io(env); @@ -395,7 +395,7 @@ int osc_io_write_iter_init(const struct lu_env *env, RETURN(osc_io_iter_init(env, ios)); } -EXPORT_SYMBOL(osc_io_write_iter_init); +EXPORT_SYMBOL(osc_io_rw_iter_init); void osc_io_iter_fini(const struct lu_env *env, const struct cl_io_slice *ios) @@ -413,8 +413,8 @@ void osc_io_iter_fini(const struct lu_env *env, } EXPORT_SYMBOL(osc_io_iter_fini); -void osc_io_write_iter_fini(const struct lu_env *env, - const struct cl_io_slice *ios) +void osc_io_rw_iter_fini(const struct lu_env *env, + const struct cl_io_slice *ios) { struct osc_io *oio = osc_env_io(env); struct osc_object *osc = cl2osc(ios->cis_obj); @@ -427,7 +427,7 @@ void osc_io_write_iter_fini(const struct lu_env *env, osc_io_iter_fini(env, ios); } -EXPORT_SYMBOL(osc_io_write_iter_fini); +EXPORT_SYMBOL(osc_io_rw_iter_fini); int osc_io_fault_start(const struct lu_env *env, const struct cl_io_slice *ios) { @@ -980,14 +980,14 @@ EXPORT_SYMBOL(osc_io_end); static const struct cl_io_operations osc_io_ops = { .op = { [CIT_READ] = { - .cio_iter_init = osc_io_iter_init, - .cio_iter_fini = osc_io_iter_fini, + .cio_iter_init = osc_io_rw_iter_init, + .cio_iter_fini = osc_io_rw_iter_fini, .cio_start = osc_io_read_start, .cio_fini = osc_io_fini }, [CIT_WRITE] = { - .cio_iter_init = osc_io_write_iter_init, - .cio_iter_fini = osc_io_write_iter_fini, + .cio_iter_init = osc_io_rw_iter_init, + .cio_iter_fini = osc_io_rw_iter_fini, .cio_start = osc_io_write_start, .cio_end = osc_io_end, .cio_fini = osc_io_fini