Here is a follow up for this patch. As I've mentioned in the other email, I would like to mark oom victim in the mm_struct but that requires more changes and the patch simplifies select_bad_process nicely already so I like this patch even now. --- >From 06fc6821e581f82fb186770d84f5ee28f9fe18c3 Mon Sep 17 00:00:00 2001 From: Michal Hocko <mhocko@xxxxxxxx> Date: Fri, 20 May 2016 09:45:05 +0200 Subject: [PATCH] mmotm: mmoom-speed-up-select_bad_process-loop-fix Do not blow the signal_struct size. pahole -C signal_struct says: struct signal_struct { atomic_t sigcnt; /* 0 4 */ atomic_t live; /* 4 4 */ int nr_threads; /* 8 4 */ /* XXX 4 bytes hole, try to pack */ struct list_head thread_head; /* 16 16 */ So we can stick the new counter after nr_threads and keep the size of the structure on 64b. While we are at it also remove the thread_group_leader check from select_bad_process because it is not really needed as we are iterating processes rather than threads. Signed-off-by: Michal Hocko <mhocko@xxxxxxxx> --- include/linux/sched.h | 2 +- mm/oom_kill.c | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index 65b9d3807b1b..e137fa6db049 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -660,6 +660,7 @@ struct signal_struct { atomic_t sigcnt; atomic_t live; int nr_threads; + atomic_t oom_victims; /* # of TIF_MEDIE threads in this thread group */ struct list_head thread_head; wait_queue_head_t wait_chldexit; /* for wait4() */ @@ -781,7 +782,6 @@ struct signal_struct { struct tty_audit_buf *tty_audit_buf; #endif - atomic_t oom_victims; /* # of TIF_MEDIE threads in this thread group */ oom_flags_t oom_flags; short oom_score_adj; /* OOM kill score adjustment */ short oom_score_adj_min; /* OOM kill score adjustment min value. diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 8e151d018d65..5bb2f7698ad7 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -327,9 +327,6 @@ static struct task_struct *select_bad_process(struct oom_control *oc, points = oom_badness(p, NULL, oc->nodemask, totalpages); if (!points || points < chosen_points) continue; - /* Prefer thread group leaders for display purposes */ - if (points == chosen_points && thread_group_leader(chosen)) - continue; chosen = p; chosen_points = points; -- 2.8.1 -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>