Most OOM kills triggered by user-space processes produce kernel stack traces that are not helpful for diagnosing the root cause. These traces usually just show the page fault handler or system call entry. Furthermore, dump_stack() can be expensive. It often runs with interrupts disabled or holds the console lock for a long time, potentially causing system latencies and preventing the system from responding to other events. This patch adds a new sysctl vm.oom_dump_stack to control this behavior. Writing '0' to /proc/sys/vm/oom_dump_stack suppresses the kernel stack dump during OOM kills, while '1' (the default) preserves the existing behavior. Signed-off-by: Yang Xin --- mm/oom_kill.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 5eb11fbba704..a51dbd2e6912 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -56,6 +56,7 @@ static int sysctl_panic_on_oom; static int sysctl_oom_kill_allocating_task; static int sysctl_oom_dump_tasks = 1; +static int sysctl_oom_dump_stack = 1; /* * Serializes oom killer invocations (out_of_memory()) from all contexts to @@ -464,7 +465,9 @@ static void dump_header(struct oom_control *oc) if (!IS_ENABLED(CONFIG_COMPACTION) && oc->order) pr_warn("COMPACTION is disabled!!!\n"); - dump_stack(); + if (sysctl_oom_dump_stack) + dump_stack(); + if (is_memcg_oom(oc)) mem_cgroup_print_oom_meminfo(oc->memcg); else { @@ -736,6 +739,13 @@ static const struct ctl_table vm_oom_kill_table[] = { .mode = 0644, .proc_handler = proc_dointvec, }, + { + .procname = "oom_dump_stack", + .data = &sysctl_oom_dump_stack, + .maxlen = sizeof(sysctl_oom_dump_stack), + .mode = 0644, + .proc_handler = proc_dointvec, + }, }; #endif -- 2.30.2