On Mon 14-08-23 14:34:28, Peng Zhang wrote: > 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(). The point of evaluating all tasks is that there might be pre-existing oom victim still being torn down. If you cut this short you might kill more tasks than necessary. So I do not think we want this patch. > 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 -- Michal Hocko SUSE Labs