Re: [PATCH] mm/oom: Add killed process selection information

From: Michal Hocko
Date: Thu Aug 15 2019 - 04:24:37 EST


On Wed 14-08-19 23:06:04, Edward Chron wrote:
> For an OOM event: print oom_score_adj value for the OOM Killed process
> to document what the oom score adjust value was at the time the process
> at the time of the OOM event. The value can be set by the user and it
> effects the resulting oom_score so useful to document this value.

This value is interesting especially for setups which do not print
eligible tasks (sysctl oom_dump_tasks = 0) and helps to notice a
misconfiguration <YOUR UDEV EXAMPLE GOES HERE> or to confirm that
oom_score_adj configuration applies as expected.

> Sample message output:
> Aug 14 23:00:02 testserver kernel: Out of memory: Killed process 2692
> (oomprocs) total-vm:1056800kB, anon-rss:1052760kB, file-rss:4kB,i
> shmem-rss:0kB oom_score_adj:1000
>
> Signed-off-by: Edward Chron <echron@xxxxxxxxxx>

With that feel free to add
Acked-by: Michal Hocko <mhocko@xxxxxxxx>

and post as a stand alone patch. Btw. the patch could be simplified by
not using a helper variable and using victim->signal->oom_score_adj
right in the pr_err.

Thanks!

> ---
> mm/oom_kill.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/mm/oom_kill.c b/mm/oom_kill.c
> index eda2e2a0bdc6..6b1674cac377 100644
> --- a/mm/oom_kill.c
> +++ b/mm/oom_kill.c
> @@ -858,6 +858,7 @@ static void __oom_kill_process(struct task_struct *victim, const char *message)
> struct task_struct *p;
> struct mm_struct *mm;
> bool can_oom_reap = true;
> + long adj;
>
> p = find_lock_task_mm(victim);
> if (!p) {
> @@ -877,6 +878,8 @@ static void __oom_kill_process(struct task_struct *victim, const char *message)
> count_vm_event(OOM_KILL);
> memcg_memory_event_mm(mm, MEMCG_OOM_KILL);
>
> + adj = (long)victim->signal->oom_score_adj;
> +
> /*
> * We should send SIGKILL before granting access to memory reserves
> * in order to prevent the OOM victim from depleting the memory
> @@ -884,12 +887,12 @@ static void __oom_kill_process(struct task_struct *victim, const char *message)
> */
> do_send_sig_info(SIGKILL, SEND_SIG_PRIV, victim, PIDTYPE_TGID);
> mark_oom_victim(victim);
> - pr_err("%s: Killed process %d (%s) total-vm:%lukB, anon-rss:%lukB, file-rss:%lukB, shmem-rss:%lukB\n",
> + pr_err("%s: Killed process %d (%s) total-vm:%lukB, anon-rss:%lukB, file-rss:%lukB, shmem-rss:%lukB oom_score_adj:%ld\n",
> message, task_pid_nr(victim), victim->comm,
> K(victim->mm->total_vm),
> K(get_mm_counter(victim->mm, MM_ANONPAGES)),
> K(get_mm_counter(victim->mm, MM_FILEPAGES)),
> - K(get_mm_counter(victim->mm, MM_SHMEMPAGES)));
> + K(get_mm_counter(victim->mm, MM_SHMEMPAGES)), adj);
> task_unlock(victim);
>
> /*
> --
> 2.20.1

--
Michal Hocko
SUSE Labs