On Mon, 3 Mar 2014, He, Bo wrote: > if oom_score_adj is a big negative number, such as -941, > adj *= totalpages / 1000 will be a big negative number, > finally the oom_badness will get 0 points, here normalize > the oom_score_adj to ensure oom_badness return the > positive number. >
Sorry, I have no clue what you're talking about or trying to fix. A /proc/pid/oom_score_adj of -941 would mean discounting 94.1% of system memory from pid's resident memory usage for a system oom condition. This is the effect of adj *= totalpages / 1000 and is working as intended per Documentation/filesystems/proc.txt. oom_badness() will then return the smallest integer possible, 1 (not 0), that still allows the process to be killed, that's the effect of "return points > 0 ? points : 1". It never returns 0 as you state, you're either not reading the code correctly or not working on any recent kernel. > Change-Id: I1c56a948ce48b65a1bb63b56ffef07d5d76d7ec8 > Signed-off-by: he, bo <bo...@intel.com> > Signed-off-by: wang, biao <biao.w...@intel.com> > Reviewed-by: Yanmin Zhang <yanmin_zh...@intel.com> > --- > mm/oom_kill.c | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > > diff --git a/mm/oom_kill.c b/mm/oom_kill.c > index 3291e82..5a93986 100644 > --- a/mm/oom_kill.c > +++ b/mm/oom_kill.c > @@ -181,6 +181,9 @@ unsigned long oom_badness(struct task_struct *p, struct > mem_cgroup *memcg, > points -= (points * 3) / 100; > > /* Normalize to oom_score_adj units */ > + if(OOM_SCORE_ADJ_MIN < 0) > + adj -= OOM_SCORE_ADJ_MIN; > + > adj *= totalpages / 1000; > points += adj; > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/