From: Namhyung Kim Date: Wed, 11 Feb 2026 22:32:20 +0000 (-0800) Subject: perf/core: Try to allocate task_ctx_data quickly X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bec2ee2390c95ed0c44494340464e69e79802e4a;p=thirdparty%2Fkernel%2Flinux.git perf/core: Try to allocate task_ctx_data quickly The attach_global_ctx_data() has O(N^2) algorithm to allocate the context data for each thread. This caused perfomance problems on large systems with O(100k) threads. Because kmalloc(GFP_KERNEL) can go sleep it cannot be called under the RCU lock. So let's try with GFP_NOWAIT first so that it can proceed in normal cases. Signed-off-by: Namhyung Kim Signed-off-by: Peter Zijlstra (Intel) Link: https://patch.msgid.link/20260211223222.3119790-3-namhyung@kernel.org --- diff --git a/kernel/events/core.c b/kernel/events/core.c index 90b0c9324cbf7..d357714fc02eb 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -5489,6 +5489,12 @@ again: cd = NULL; } if (!cd) { + /* + * Try to allocate context quickly before + * traversing the whole thread list again. + */ + if (!attach_task_ctx_data(p, ctx_cache, true, GFP_NOWAIT)) + continue; get_task_struct(p); goto alloc; }