diff options
author | Evgeniy Polyakov <zbr@ioremap.net> | 2009-01-29 17:25:09 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-29 21:04:43 -0500 |
commit | 9e9e3cbc62da43c66e894d5a61fa08b427e25202 (patch) | |
tree | 5dafdeb919c99a014e694745c2dfe4c46ca6f69e | |
parent | dc19835df6c47ff676ad6c98722d5e529db5d74c (diff) |
mm: OOM documentation update
Signed-off-by: Evgeniy Polyakov <zbr@ioremap.net>
Acked-by: David Rientjes <rientjes@google.com>
Cc: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | Documentation/filesystems/proc.txt | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt index bbebc3a43ac0..a87be42f8211 100644 --- a/Documentation/filesystems/proc.txt +++ b/Documentation/filesystems/proc.txt | |||
@@ -2027,6 +2027,34 @@ increase the likelihood of this process being killed by the oom-killer. Valid | |||
2027 | values are in the range -16 to +15, plus the special value -17, which disables | 2027 | values are in the range -16 to +15, plus the special value -17, which disables |
2028 | oom-killing altogether for this process. | 2028 | oom-killing altogether for this process. |
2029 | 2029 | ||
2030 | The process to be killed in an out-of-memory situation is selected among all others | ||
2031 | based on its badness score. This value equals the original memory size of the process | ||
2032 | and is then updated according to its CPU time (utime + stime) and the | ||
2033 | run time (uptime - start time). The longer it runs the smaller is the score. | ||
2034 | Badness score is divided by the square root of the CPU time and then by | ||
2035 | the double square root of the run time. | ||
2036 | |||
2037 | Swapped out tasks are killed first. Half of each child's memory size is added to | ||
2038 | the parent's score if they do not share the same memory. Thus forking servers | ||
2039 | are the prime candidates to be killed. Having only one 'hungry' child will make | ||
2040 | parent less preferable than the child. | ||
2041 | |||
2042 | /proc/<pid>/oom_score shows process' current badness score. | ||
2043 | |||
2044 | The following heuristics are then applied: | ||
2045 | * if the task was reniced, its score doubles | ||
2046 | * superuser or direct hardware access tasks (CAP_SYS_ADMIN, CAP_SYS_RESOURCE | ||
2047 | or CAP_SYS_RAWIO) have their score divided by 4 | ||
2048 | * if oom condition happened in one cpuset and checked task does not belong | ||
2049 | to it, its score is divided by 8 | ||
2050 | * the resulting score is multiplied by two to the power of oom_adj, i.e. | ||
2051 | points <<= oom_adj when it is positive and | ||
2052 | points >>= -(oom_adj) otherwise | ||
2053 | |||
2054 | The task with the highest badness score is then selected and its children | ||
2055 | are killed, process itself will be killed in an OOM situation when it does | ||
2056 | not have children or some of them disabled oom like described above. | ||
2057 | |||
2030 | 2.13 /proc/<pid>/oom_score - Display current oom-killer score | 2058 | 2.13 /proc/<pid>/oom_score - Display current oom-killer score |
2031 | ------------------------------------------------------------- | 2059 | ------------------------------------------------------------- |
2032 | 2060 | ||