Message ID | 20230807110936.21819-19-zhengqi.arch@bytedance.com |
---|---|
State | New |
Headers | show |
Series | use refcount+RCU method to implement lockless slab shrink | expand |
On Mon, Aug 7, 2023 at 7:36 AM Qi Zheng <zhengqi.arch@bytedance.com> wrote: > > Use new APIs to dynamically allocate the rcu-lazy shrinker. > > Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com> For RCU: Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org> thanks, - Joel > --- > kernel/rcu/tree_nocb.h | 20 +++++++++++--------- > 1 file changed, 11 insertions(+), 9 deletions(-) > > diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h > index 5598212d1f27..e1c59c33738a 100644 > --- a/kernel/rcu/tree_nocb.h > +++ b/kernel/rcu/tree_nocb.h > @@ -1396,13 +1396,6 @@ lazy_rcu_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) > > return count ? count : SHRINK_STOP; > } > - > -static struct shrinker lazy_rcu_shrinker = { > - .count_objects = lazy_rcu_shrink_count, > - .scan_objects = lazy_rcu_shrink_scan, > - .batch = 0, > - .seeks = DEFAULT_SEEKS, > -}; > #endif // #ifdef CONFIG_RCU_LAZY > > void __init rcu_init_nohz(void) > @@ -1410,6 +1403,7 @@ void __init rcu_init_nohz(void) > int cpu; > struct rcu_data *rdp; > const struct cpumask *cpumask = NULL; > + struct shrinker * __maybe_unused lazy_rcu_shrinker; > > #if defined(CONFIG_NO_HZ_FULL) > if (tick_nohz_full_running && !cpumask_empty(tick_nohz_full_mask)) > @@ -1436,8 +1430,16 @@ void __init rcu_init_nohz(void) > return; > > #ifdef CONFIG_RCU_LAZY > - if (register_shrinker(&lazy_rcu_shrinker, "rcu-lazy")) > - pr_err("Failed to register lazy_rcu shrinker!\n"); > + lazy_rcu_shrinker = shrinker_alloc(0, "rcu-lazy"); > + if (!lazy_rcu_shrinker) { > + pr_err("Failed to allocate lazy_rcu shrinker!\n"); > + } else { > + lazy_rcu_shrinker->count_objects = lazy_rcu_shrink_count; > + lazy_rcu_shrinker->scan_objects = lazy_rcu_shrink_scan; > + lazy_rcu_shrinker->seeks = DEFAULT_SEEKS; > + > + shrinker_register(lazy_rcu_shrinker); > + } > #endif // #ifdef CONFIG_RCU_LAZY > > if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) { > -- > 2.30.2 >
diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h index 5598212d1f27..e1c59c33738a 100644 --- a/kernel/rcu/tree_nocb.h +++ b/kernel/rcu/tree_nocb.h @@ -1396,13 +1396,6 @@ lazy_rcu_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) return count ? count : SHRINK_STOP; } - -static struct shrinker lazy_rcu_shrinker = { - .count_objects = lazy_rcu_shrink_count, - .scan_objects = lazy_rcu_shrink_scan, - .batch = 0, - .seeks = DEFAULT_SEEKS, -}; #endif // #ifdef CONFIG_RCU_LAZY void __init rcu_init_nohz(void) @@ -1410,6 +1403,7 @@ void __init rcu_init_nohz(void) int cpu; struct rcu_data *rdp; const struct cpumask *cpumask = NULL; + struct shrinker * __maybe_unused lazy_rcu_shrinker; #if defined(CONFIG_NO_HZ_FULL) if (tick_nohz_full_running && !cpumask_empty(tick_nohz_full_mask)) @@ -1436,8 +1430,16 @@ void __init rcu_init_nohz(void) return; #ifdef CONFIG_RCU_LAZY - if (register_shrinker(&lazy_rcu_shrinker, "rcu-lazy")) - pr_err("Failed to register lazy_rcu shrinker!\n"); + lazy_rcu_shrinker = shrinker_alloc(0, "rcu-lazy"); + if (!lazy_rcu_shrinker) { + pr_err("Failed to allocate lazy_rcu shrinker!\n"); + } else { + lazy_rcu_shrinker->count_objects = lazy_rcu_shrink_count; + lazy_rcu_shrinker->scan_objects = lazy_rcu_shrink_scan; + lazy_rcu_shrinker->seeks = DEFAULT_SEEKS; + + shrinker_register(lazy_rcu_shrinker); + } #endif // #ifdef CONFIG_RCU_LAZY if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) {
Use new APIs to dynamically allocate the rcu-lazy shrinker. Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com> --- kernel/rcu/tree_nocb.h | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-)