diff mbox series

[v1] freezer: Skip zombie processes early to reduce lock contention

Message ID 20250515030151.224508-1-zhangzihuan@kylinos.cn
State New
Headers show
Series [v1] freezer: Skip zombie processes early to reduce lock contention | expand

Commit Message

Zihuan Zhang May 15, 2025, 3:01 a.m. UTC
Currently, the freezer core processes all tasks, including zombie tasks
(EXIT_ZOMBIE), when performing freeze operations.  However, zombie tasks
cannot be frozen since they are already dead and won't execute further.
Despite this, these tasks are still passed to freeze_task(), which may
involve acquiring locks and accessing unnecessary internal state.

This patch introduces an early check to skip zombie tasks when calling
freeze_task(), significantly reducing the lock contention, especially on
systems with many short-lived processes or a high volume of process
exits.

Benefits:
- Reduces unnecessary lock contention by skipping zombie processes
  earlier in the freeze process.
- Improves overall freezing performance, particularly in high-load
  systems where there are many zombie processes.

Signed-off-by: Zihuan Zhang <zhangzihuan@kylinos.cn>
---
 kernel/freezer.c | 6 ++++++
 1 file changed, 6 insertions(+)
diff mbox series

Patch

diff --git a/kernel/freezer.c b/kernel/freezer.c
index 8d530d0949ff..a6867195bb77 100644
--- a/kernel/freezer.c
+++ b/kernel/freezer.c
@@ -164,6 +164,9 @@  bool freeze_task(struct task_struct *p)
 {
 	unsigned long flags;
 
+	if (p->exit_state == EXIT_ZOMBIE)
+		return false;
+
 	spin_lock_irqsave(&freezer_lock, flags);
 	if (!freezing(p) || frozen(p) || __freeze_task(p)) {
 		spin_unlock_irqrestore(&freezer_lock, flags);
@@ -203,6 +206,9 @@  void __thaw_task(struct task_struct *p)
 {
 	unsigned long flags;
 
+	if (p->exit_state == EXIT_ZOMBIE)
+		return;
+
 	spin_lock_irqsave(&freezer_lock, flags);
 	if (WARN_ON_ONCE(freezing(p)))
 		goto unlock;