aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/filesystems/proc.txt
diff options
context:
space:
mode:
authorDavid Rientjes <rientjes@google.com>2014-01-30 18:46:11 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-01-30 19:56:56 -0500
commit778c14affaf94a9e4953179d3e13a544ccce7707 (patch)
treef6ef230867e69c957afbb422dddbc62cbf3f361b /Documentation/filesystems/proc.txt
parent24f91eba18bbfdb27e71a1aae5b3a61b67fcd091 (diff)
mm, oom: base root bonus on current usage
A 3% of system memory bonus is sometimes too excessive in comparison to other processes. With commit a63d83f427fb ("oom: badness heuristic rewrite"), the OOM killer tries to avoid killing privileged tasks by subtracting 3% of overall memory (system or cgroup) from their per-task consumption. But as a result, all root tasks that consume less than 3% of overall memory are considered equal, and so it only takes 33+ privileged tasks pushing the system out of memory for the OOM killer to do something stupid and kill dhclient or other root-owned processes. For example, on a 32G machine it can't tell the difference between the 1M agetty and the 10G fork bomb member. The changelog describes this 3% boost as the equivalent to the global overcommit limit being 3% higher for privileged tasks, but this is not the same as discounting 3% of overall memory from _every privileged task individually_ during OOM selection. Replace the 3% of system memory bonus with a 3% of current memory usage bonus. By giving root tasks a bonus that is proportional to their actual size, they remain comparable even when relatively small. In the example above, the OOM killer will discount the 1M agetty's 256 badness points down to 179, and the 10G fork bomb's 262144 points down to 183500 points and make the right choice, instead of discounting both to 0 and killing agetty because it's first in the task list. Signed-off-by: David Rientjes <rientjes@google.com> Reported-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@suse.cz> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'Documentation/filesystems/proc.txt')
-rw-r--r--Documentation/filesystems/proc.txt4
1 files changed, 2 insertions, 2 deletions
diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt
index 31f76178c987..f00bee144add 100644
--- a/Documentation/filesystems/proc.txt
+++ b/Documentation/filesystems/proc.txt
@@ -1386,8 +1386,8 @@ may allocate from based on an estimation of its current memory and swap use.
1386For example, if a task is using all allowed memory, its badness score will be 1386For example, if a task is using all allowed memory, its badness score will be
13871000. If it is using half of its allowed memory, its score will be 500. 13871000. If it is using half of its allowed memory, its score will be 500.
1388 1388
1389There is an additional factor included in the badness score: root 1389There is an additional factor included in the badness score: the current memory
1390processes are given 3% extra memory over other tasks. 1390and swap usage is discounted by 3% for root processes.
1391 1391
1392The amount of "allowed" memory depends on the context in which the oom killer 1392The amount of "allowed" memory depends on the context in which the oom killer
1393was called. If it is due to the memory assigned to the allocating task's cpuset 1393was called. If it is due to the memory assigned to the allocating task's cpuset