Message ID | 20250515030151.224508-1-zhangzihuan@kylinos.cn |
---|---|
State | New |
Headers | show |
Series | [v1] freezer: Skip zombie processes early to reduce lock contention | expand |
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;
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(+)