On Thu, May 12, 2011 at 5:34 AM, David Rientjes <rientjes@xxxxxxxxxx> wrote: > On Tue, 10 May 2011, CAI Qian wrote: > >> Sure, I saw there were some discussion going on between you and David >> about your patches. Does it make more sense for me to test those after >> you have settled down technical arguments? >> > > Something like the following (untested) patch should fix the issue by > simply increasing the range of a task's badness from 0-1000 to 0-10000. > > There are other things to fix like the tasklist dump output and > documentation, but this shows how easy it is to increase the resolution of > the scoring. Â(This patch also includes a change to only give root It does make sense. I think raising resolution should be a easy way to fix the problem. > processes a 1% bonus for every 30% of memory they use as proposed > earlier.) I didn't follow earlier your suggestion. But it's not formal patch so I expect if you send formal patch to merge, you would write down the rationale. > > > diff --git a/mm/oom_kill.c b/mm/oom_kill.c > --- a/mm/oom_kill.c > +++ b/mm/oom_kill.c > @@ -160,7 +160,7 @@ unsigned int oom_badness(struct task_struct *p, struct mem_cgroup *mem, > Â Â Â Â */ > Â Â Â Âif (p->flags & PF_OOM_ORIGIN) { > Â Â Â Â Â Â Â Âtask_unlock(p); > - Â Â Â Â Â Â Â return 1000; > + Â Â Â Â Â Â Â return 10000; > Â Â Â Â} > > Â Â Â Â/* > @@ -177,32 +177,32 @@ unsigned int oom_badness(struct task_struct *p, struct mem_cgroup *mem, > Â Â Â Âpoints = get_mm_rss(p->mm) + p->mm->nr_ptes; > Â Â Â Âpoints += get_mm_counter(p->mm, MM_SWAPENTS); > > - Â Â Â points *= 1000; > + Â Â Â points *= 10000; > Â Â Â Âpoints /= totalpages; > Â Â Â Âtask_unlock(p); > > Â Â Â Â/* > - Â Â Â Â* Root processes get 3% bonus, just like the __vm_enough_memory() > - Â Â Â Â* implementation used by LSMs. > + Â Â Â Â* Root processes get 1% bonus per 30% memory used for a total of 3% > + Â Â Â Â* possible just like LSMs. > Â Â Â Â */ > Â Â Â Âif (has_capability_noaudit(p, CAP_SYS_ADMIN)) > - Â Â Â Â Â Â Â points -= 30; > + Â Â Â Â Â Â Â points -= 100 * (points / 3000); > > Â Â Â Â/* > Â Â Â Â * /proc/pid/oom_score_adj ranges from -1000 to +1000 such that it may > Â Â Â Â * either completely disable oom killing or always prefer a certain > Â Â Â Â * task. > Â Â Â Â */ > - Â Â Â points += p->signal->oom_score_adj; > + Â Â Â points += p->signal->oom_score_adj * 10; > > Â Â Â Â/* > Â Â Â Â * Never return 0 for an eligible task that may be killed since it's > - Â Â Â Â* possible that no single user task uses more than 0.1% of memory and > + Â Â Â Â* possible that no single user task uses more than 0.01% of memory and > Â Â Â Â * no single admin tasks uses more than 3.0%. > Â Â Â Â */ > Â Â Â Âif (points <= 0) > Â Â Â Â Â Â Â Âreturn 1; > - Â Â Â return (points < 1000) ? points : 1000; > + Â Â Â return (points < 10000) ? points : 10000; > Â} > > Â/* > @@ -314,7 +314,7 @@ static struct task_struct *select_bad_process(unsigned int *ppoints, > Â Â Â Â Â Â Â Â Â Â Â Â */ > Â Â Â Â Â Â Â Â Â Â Â Âif (p == current) { > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âchosen = p; > - Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â *ppoints = 1000; > + Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â *ppoints = 10000; Scattering constant value isn't good. You are proving it now. I think you did it since this is not a formal patch. I expect you will define new value (ex, OOM_INTERNAL_MAX_SCORE or whatever) -- Kind regards, Minchan Kim -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href