Linux RCU subsystem development
 help / color / mirror / Atom feed
* [PATCH v6 15/45] rcu: dynamically allocate the rcu-lazy shrinker
       [not found] <20230911094444.68966-1-zhengqi.arch@bytedance.com>
@ 2023-09-11  9:44 ` Qi Zheng
  2023-09-18  7:27   ` Muchun Song
  2023-09-11  9:44 ` [PATCH v6 16/45] rcu: dynamically allocate the rcu-kfree shrinker Qi Zheng
  1 sibling, 1 reply; 4+ messages in thread
From: Qi Zheng @ 2023-09-11  9:44 UTC (permalink / raw)
  To: akpm, david, tkhai, vbabka, roman.gushchin, djwong, brauner,
	paulmck, tytso, steven.price, cel, senozhatsky, yujie.liu, gregkh,
	muchun.song
  Cc: linux-kernel, linux-mm, linux-fsdevel, Qi Zheng, Joel Fernandes,
	rcu

Use new APIs to dynamically allocate the rcu-lazy shrinker.

Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
CC: rcu@vger.kernel.org
---
 kernel/rcu/tree_nocb.h | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h
index 5598212d1f27..4efbf7333d4e 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,15 @@ 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;
+
+		shrinker_register(lazy_rcu_shrinker);
+	}
 #endif // #ifdef CONFIG_RCU_LAZY
 
 	if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) {
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v6 16/45] rcu: dynamically allocate the rcu-kfree shrinker
       [not found] <20230911094444.68966-1-zhengqi.arch@bytedance.com>
  2023-09-11  9:44 ` [PATCH v6 15/45] rcu: dynamically allocate the rcu-lazy shrinker Qi Zheng
@ 2023-09-11  9:44 ` Qi Zheng
  2023-09-12  7:30   ` Uladzislau Rezki
  1 sibling, 1 reply; 4+ messages in thread
From: Qi Zheng @ 2023-09-11  9:44 UTC (permalink / raw)
  To: akpm, david, tkhai, vbabka, roman.gushchin, djwong, brauner,
	paulmck, tytso, steven.price, cel, senozhatsky, yujie.liu, gregkh,
	muchun.song
  Cc: linux-kernel, linux-mm, linux-fsdevel, Qi Zheng, Joel Fernandes,
	Muchun Song, rcu

Use new APIs to dynamically allocate the rcu-kfree shrinker.

Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
Reviewed-by: Muchun Song <songmuchun@bytedance.com>
CC: rcu@vger.kernel.org
---
 kernel/rcu/tree.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index cb1caefa8bd0..06e2ed495c02 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -3449,13 +3449,6 @@ kfree_rcu_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
 	return freed == 0 ? SHRINK_STOP : freed;
 }
 
-static struct shrinker kfree_rcu_shrinker = {
-	.count_objects = kfree_rcu_shrink_count,
-	.scan_objects = kfree_rcu_shrink_scan,
-	.batch = 0,
-	.seeks = DEFAULT_SEEKS,
-};
-
 void __init kfree_rcu_scheduler_running(void)
 {
 	int cpu;
@@ -4931,6 +4924,7 @@ static void __init kfree_rcu_batch_init(void)
 {
 	int cpu;
 	int i, j;
+	struct shrinker *kfree_rcu_shrinker;
 
 	/* Clamp it to [0:100] seconds interval. */
 	if (rcu_delay_page_cache_fill_msec < 0 ||
@@ -4962,8 +4956,17 @@ static void __init kfree_rcu_batch_init(void)
 		INIT_DELAYED_WORK(&krcp->page_cache_work, fill_page_cache_func);
 		krcp->initialized = true;
 	}
-	if (register_shrinker(&kfree_rcu_shrinker, "rcu-kfree"))
-		pr_err("Failed to register kfree_rcu() shrinker!\n");
+
+	kfree_rcu_shrinker = shrinker_alloc(0, "rcu-kfree");
+	if (!kfree_rcu_shrinker) {
+		pr_err("Failed to allocate kfree_rcu() shrinker!\n");
+		return;
+	}
+
+	kfree_rcu_shrinker->count_objects = kfree_rcu_shrink_count;
+	kfree_rcu_shrinker->scan_objects = kfree_rcu_shrink_scan;
+
+	shrinker_register(kfree_rcu_shrinker);
 }
 
 void __init rcu_init(void)
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v6 16/45] rcu: dynamically allocate the rcu-kfree shrinker
  2023-09-11  9:44 ` [PATCH v6 16/45] rcu: dynamically allocate the rcu-kfree shrinker Qi Zheng
@ 2023-09-12  7:30   ` Uladzislau Rezki
  0 siblings, 0 replies; 4+ messages in thread
From: Uladzislau Rezki @ 2023-09-12  7:30 UTC (permalink / raw)
  To: Qi Zheng
  Cc: akpm, david, tkhai, vbabka, roman.gushchin, djwong, brauner,
	paulmck, tytso, steven.price, cel, senozhatsky, yujie.liu, gregkh,
	muchun.song, linux-kernel, linux-mm, linux-fsdevel,
	Joel Fernandes, Muchun Song, rcu

On Mon, Sep 11, 2023 at 05:44:15PM +0800, Qi Zheng wrote:
> Use new APIs to dynamically allocate the rcu-kfree shrinker.
> 
> Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
> Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
> Reviewed-by: Muchun Song <songmuchun@bytedance.com>
> CC: rcu@vger.kernel.org
> ---
>  kernel/rcu/tree.c | 21 ++++++++++++---------
>  1 file changed, 12 insertions(+), 9 deletions(-)
> 
> diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> index cb1caefa8bd0..06e2ed495c02 100644
> --- a/kernel/rcu/tree.c
> +++ b/kernel/rcu/tree.c
> @@ -3449,13 +3449,6 @@ kfree_rcu_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
>  	return freed == 0 ? SHRINK_STOP : freed;
>  }
>  
> -static struct shrinker kfree_rcu_shrinker = {
> -	.count_objects = kfree_rcu_shrink_count,
> -	.scan_objects = kfree_rcu_shrink_scan,
> -	.batch = 0,
> -	.seeks = DEFAULT_SEEKS,
> -};
> -
>  void __init kfree_rcu_scheduler_running(void)
>  {
>  	int cpu;
> @@ -4931,6 +4924,7 @@ static void __init kfree_rcu_batch_init(void)
>  {
>  	int cpu;
>  	int i, j;
> +	struct shrinker *kfree_rcu_shrinker;
>  
>  	/* Clamp it to [0:100] seconds interval. */
>  	if (rcu_delay_page_cache_fill_msec < 0 ||
> @@ -4962,8 +4956,17 @@ static void __init kfree_rcu_batch_init(void)
>  		INIT_DELAYED_WORK(&krcp->page_cache_work, fill_page_cache_func);
>  		krcp->initialized = true;
>  	}
> -	if (register_shrinker(&kfree_rcu_shrinker, "rcu-kfree"))
> -		pr_err("Failed to register kfree_rcu() shrinker!\n");
> +
> +	kfree_rcu_shrinker = shrinker_alloc(0, "rcu-kfree");
> +	if (!kfree_rcu_shrinker) {
> +		pr_err("Failed to allocate kfree_rcu() shrinker!\n");
> +		return;
> +	}
> +
> +	kfree_rcu_shrinker->count_objects = kfree_rcu_shrink_count;
> +	kfree_rcu_shrinker->scan_objects = kfree_rcu_shrink_scan;
> +
> +	shrinker_register(kfree_rcu_shrinker);
>  }
>  
>  void __init rcu_init(void)
> -- 
> 2.30.2
> 
Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>

Makes sense to me. Thank you for improving it.

--
Uladzislau Rezki

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v6 15/45] rcu: dynamically allocate the rcu-lazy shrinker
  2023-09-11  9:44 ` [PATCH v6 15/45] rcu: dynamically allocate the rcu-lazy shrinker Qi Zheng
@ 2023-09-18  7:27   ` Muchun Song
  0 siblings, 0 replies; 4+ messages in thread
From: Muchun Song @ 2023-09-18  7:27 UTC (permalink / raw)
  To: Qi Zheng
  Cc: Andrew Morton, david, tkhai, Vlastimil Babka, Roman Gushchin,
	djwong, Christian Brauner, Paul E. McKenney, tytso, steven.price,
	cel, Sergey Senozhatsky, yujie.liu, Greg KH, LKML, Linux-MM,
	linux-fsdevel, Joel Fernandes, rcu



> On Sep 11, 2023, at 17:44, 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>

Acked-by: Muchun Song <songmuchun@bytedance.com>

Thanks.


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-09-18  7:30 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20230911094444.68966-1-zhengqi.arch@bytedance.com>
2023-09-11  9:44 ` [PATCH v6 15/45] rcu: dynamically allocate the rcu-lazy shrinker Qi Zheng
2023-09-18  7:27   ` Muchun Song
2023-09-11  9:44 ` [PATCH v6 16/45] rcu: dynamically allocate the rcu-kfree shrinker Qi Zheng
2023-09-12  7:30   ` Uladzislau Rezki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox