[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <20250611101247.15522-2-zhangzihuan@kylinos.cn>
Date: Wed, 11 Jun 2025 18:12:47 +0800
From: Zihuan Zhang <zhangzihuan@...inos.cn>
To: rafael@...nel.org,
pavel@...nel.org,
len.brown@...el.com
Cc: linux-pm@...r.kernel.org,
linux-kernel@...r.kernel.org,
Zihuan Zhang <zhangzihuan@...inos.cn>
Subject: [PATCH v3 1/1] PM / Freezer: Skip zombie/dead processes to
When freezing user space during suspend or hibernation, the freezer
iterates over all tasks and attempts to freeze them via
try_to_freeze_tasks().
However, zombie processes (i.e., tasks in EXIT_ZOMBIE state) are no
longer running and will never enter the refrigerator. Trying to freeze
them is meaningless and causes extra overhead, especially when there are
thousands of zombies created during stress conditions such as fork
storms.
This patch skips zombie processes during the freezing phase.
In our testing with ~30,000 user processes (including many zombies), the
average freeze time during suspend (S3) dropped from ~43 ms to ~16 ms:
- Without the patch: ~43 ms average freeze latency
- With the patch: ~16 ms average freeze latency
- Improvement: ~62%
This confirms that skipping zombies significantly speeds up the freezing
process when the system is under heavy load with many short-lived tasks.
Signed-off-by: Zihuan Zhang <zhangzihuan@...inos.cn>
Changes in v3:
- Added performance test
Changes in v2:
- Simplified code, added judgment of dead processes
- Rewrite changelog
---
kernel/power/process.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/power/process.c b/kernel/power/process.c
index a6f7ba2d283d..2bbe22610522 100644
--- a/kernel/power/process.c
+++ b/kernel/power/process.c
@@ -51,7 +51,7 @@ static int try_to_freeze_tasks(bool user_only)
todo = 0;
read_lock(&tasklist_lock);
for_each_process_thread(g, p) {
- if (p == current || !freeze_task(p))
+ if (p == current || p->exit_state || !freeze_task(p))
continue;
todo++;
--
2.25.1
Powered by blists - more mailing lists