From: ZhangPeng <zhangpeng362@xxxxxxxxxx> If task is allocating a lot of memory and has been marked to be killed first, then it gets the highest score (LONG_MAX). Therefore, there is no need to continue to calculate the points of other tasks. Just terminate the oom_evaluate_task() loop early, when the task with the highest score is found. By doing this, we can get some performance gains in select_bad_process(). To implement it, the return value of oom_evaluate_task() is modified. When the task with the highest score is found (points == LONG_MAX), oom_evaluate_task() will return 1 and the loop will terminate early. Signed-off-by: ZhangPeng <zhangpeng362@xxxxxxxxxx> --- mm/oom_kill.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 10f7826c4035..02d11ae043aa 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -346,6 +346,8 @@ static int oom_evaluate_task(struct task_struct *task, void *arg) get_task_struct(task); oc->chosen = task; oc->chosen_points = points; + if (points == LONG_MAX) + return 1; next: return 0; abort: -- 2.25.1