linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: David Rientjes <rientjes@google.com>
To: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>, caiqian@redhat.com
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	hughd@google.com, kamezawa.hiroyu@jp.fujitsu.com,
	minchan.kim@gmail.com, oleg@redhat.com
Subject: Re: [PATCH 3/5] oom: oom-killer don't use proportion of system-ram internally
Date: Mon, 23 May 2011 15:48:42 -0700 (PDT)	[thread overview]
Message-ID: <alpine.DEB.2.00.1105231547060.17840@chino.kir.corp.google.com> (raw)
In-Reply-To: <alpine.DEB.2.00.1105231522410.17840@chino.kir.corp.google.com>

On Mon, 23 May 2011, David Rientjes wrote:

> I already suggested an alternative patch to CAI Qian to greatly increase 
> the granularity of the oom score from a range of 0-1000 to 0-10000 to 
> differentiate between tasks within 0.01% of available memory (16MB on CAI 
> Qian's 16GB system).  I'll propose this officially in a separate email.
> 

This is an alternative patch as earlier proposed with suggested 
improvements from Minchan.  CAI, would it be possible to test this out on 
your usecase?

I'm indifferent to the actual scale of OOM_SCORE_MAX_FACTOR; it could be 
10 as proposed in this patch or even increased higher for higher 
resolution.


diff --git a/mm/oom_kill.c b/mm/oom_kill.c
--- a/mm/oom_kill.c
+++ b/mm/oom_kill.c
@@ -38,6 +38,9 @@ int sysctl_oom_kill_allocating_task;
 int sysctl_oom_dump_tasks = 1;
 static DEFINE_SPINLOCK(zone_scan_lock);
 
+#define OOM_SCORE_MAX_FACTOR	10
+#define OOM_SCORE_MAX		(OOM_SCORE_ADJ_MAX * OOM_SCORE_MAX_FACTOR)
+
 #ifdef CONFIG_NUMA
 /**
  * has_intersects_mems_allowed() - check task eligiblity for kill
@@ -160,7 +163,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 OOM_SCORE_MAX;
 	}
 
 	/*
@@ -177,32 +180,38 @@ 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 *= OOM_SCORE_MAX;
 	points /= totalpages;
 	task_unlock(p);
 
 	/*
-	 * Root processes get 3% bonus, just like the __vm_enough_memory()
-	 * implementation used by LSMs.
+	 * Root processes get a bonus of 1% per 10% of memory used.
 	 */
-	if (has_capability_noaudit(p, CAP_SYS_ADMIN))
-		points -= 30;
+	if (has_capability_noaudit(p, CAP_SYS_ADMIN)) {
+		int bonus;
+		int granularity;
+
+		bonus = OOM_SCORE_MAX / 100;		/* bonus is 1% */
+		granularity = OOM_SCORE_MAX / 10;	/* granularity is 10% */
+
+		points -= bonus * (points / granularity);
+	}
 
 	/*
 	 * /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 * OOM_SCORE_MAX_FACTOR;
 
 	/*
 	 * 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 < OOM_SCORE_MAX) ? points : OOM_SCORE_MAX;
 }
 
 /*
@@ -314,7 +323,7 @@ static struct task_struct *select_bad_process(unsigned int *ppoints,
 			 */
 			if (p == current) {
 				chosen = p;
-				*ppoints = 1000;
+				*ppoints = OOM_SCORE_MAX;
 			} else {
 				/*
 				 * If this task is not being ptraced on exit,

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  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=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2011-05-23 22:48 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-20  8:00 [PATCH v2 0/5] Fix oom killer doesn't work at all if system have > gigabytes memory (aka CAI founded issue) KOSAKI Motohiro
2011-05-20  8:01 ` [PATCH 1/5] oom: improve dump_tasks() show items KOSAKI Motohiro
2011-05-23 22:16   ` David Rientjes
2011-05-20  8:02 ` [PATCH 2/5] oom: kill younger process first KOSAKI Motohiro
2011-05-23  2:37   ` Minchan Kim
2011-05-23 22:20   ` David Rientjes
2011-05-20  8:03 ` [PATCH 3/5] oom: oom-killer don't use proportion of system-ram internally KOSAKI Motohiro
2011-05-23  3:59   ` Minchan Kim
2011-05-24  1:14     ` KOSAKI Motohiro
2011-05-24  1:32       ` Minchan Kim
2011-05-23  4:02   ` Minchan Kim
2011-05-24  1:44     ` KOSAKI Motohiro
2011-05-24  3:11       ` KOSAKI Motohiro
2011-05-23 22:28   ` David Rientjes
2011-05-23 22:48     ` David Rientjes [this message]
2011-05-24  1:21       ` KOSAKI Motohiro
2011-05-24  8:32       ` CAI Qian
2011-05-26  7:08       ` CAI Qian
2011-05-27 19:12         ` David Rientjes
2011-05-24  2:07     ` KOSAKI Motohiro
2011-05-26  9:34   ` CAI Qian
2011-05-26  9:56     ` KOSAKI Motohiro
2011-05-20  8:04 ` [PATCH 4/5] oom: don't kill random process KOSAKI Motohiro
2011-05-23  4:31   ` Minchan Kim
2011-05-24  1:53     ` KOSAKI Motohiro
2011-05-24  8:46       ` Minchan Kim
2011-05-24  8:49         ` KOSAKI Motohiro
2011-05-24  9:04           ` Minchan Kim
2011-05-24  9:09             ` KOSAKI Motohiro
2011-05-24  9:20               ` Minchan Kim
2011-05-24  9:38                 ` KOSAKI Motohiro
2011-05-23 22:32   ` David Rientjes
2011-05-24  1:35     ` KOSAKI Motohiro
2011-05-24  1:39       ` David Rientjes
2011-05-24  1:55         ` KOSAKI Motohiro
2011-05-24  1:58           ` David Rientjes
2011-05-24  2:03             ` KOSAKI Motohiro
2011-05-25 23:50               ` David Rientjes
2011-05-30  1:17                 ` KOSAKI Motohiro
2011-05-31  4:48                   ` David Rientjes
2011-05-31  4:54                     ` KOSAKI Motohiro
2011-05-20  8:05 ` [PATCH 5/5] oom: merge oom_kill_process() with oom_kill_task() KOSAKI Motohiro
2011-05-31  1:33 ` [PATCH v2 0/5] Fix oom killer doesn't work at all if system have > gigabytes memory (aka CAI founded issue) CAI Qian
2011-05-31  4:10   ` KOSAKI Motohiro
2011-05-31  4:14     ` CAI Qian
2011-05-31  4:34       ` KOSAKI Motohiro
2011-05-31  4:49       ` KOSAKI Motohiro
2011-05-31  4:32     ` KOSAKI Motohiro
2011-05-31  4:52     ` CAI Qian
2011-05-31  7:04       ` KOSAKI Motohiro
2011-05-31  7:50         ` CAI Qian
2011-05-31  7:56           ` KOSAKI Motohiro
2011-05-31  7:59             ` CAI Qian
2011-05-31  8:11               ` KOSAKI Motohiro
2011-05-31 10:01                 ` KOSAKI Motohiro
2011-06-01  1:17                   ` CAI Qian
2011-06-01  3:32                   ` Minchan Kim
2011-06-06  3:07                     ` KOSAKI Motohiro
2011-06-06 14:44                       ` Minchan Kim

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.DEB.2.00.1105231547060.17840@chino.kir.corp.google.com \
    --to=rientjes@google.com \
    --cc=akpm@linux-foundation.org \
    --cc=caiqian@redhat.com \
    --cc=hughd@google.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=minchan.kim@gmail.com \
    --cc=oleg@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox