core::posix::linux::proc::process::OomScoreAdj Struct Reference

`#include <oom_score_adj.h>`

Collaboration diagram for core::posix::linux::proc::process::OomScoreAdj:

## Public Member Functions

bool | is_valid () const
| is_valid checks whether the contained value is within the predefined bounds.

## Static Public Member Functions

static int | min_value ()
| Returns the minimum valid value.
static int | max_value ()
| Returns the maximum valid value.

## Public Attributes

int | value
| Current value.

## Detailed Description

This file can be used to adjust the badness heuristic used to select which process gets killed in out-of-memory conditions.

The badness heuristic assigns a value to each candidate task ranging from 0 (never kill) to 1000 (always kill) to determine which process is targeted. The units are roughly a proportion along that range of allowed memory the process may allocate from, based on an estimation of its current memory and swap use. For example, if a task is using all allowed memory, its badness score will be 1000. If it is using half of its allowed memory, its score will be 500.

There is an additional factor included in the badness score: root processes are given 3% extra memory over other tasks.

The amount of "allowed" memory depends on the context in which the OOM-killer was called. If it is due to the memory assigned to the allocating task's cpuset being exhausted, the allowed memory represents the set of mems assigned to that cpuset (see cpuset(7)). If it is due to a mempolicy's node(s) being exhausted, the allowed memory represents the set of mempolicy nodes. If it is due to a memory limit (or swap limit) being reached, the allowed memory is that configured limit. Finally, if it is due to the entire system being out of memory, the allowed memory represents all allocatable resources.

The value of oom_score_adj is added to the badness score before it is used to determine which task to kill. Acceptable values range from -1000 (OOM_SCORE_ADJ_MIN) to +1000 (OOM_SCORE_ADJ_MAX). This allows user space to control the preference for OOM-killing, ranging from always preferring a certain task or completely disabling it from OOM- killing. The lowest possible value, -1000, is equivalent to disabling OOM-killing entirely for that task, since it will always report a badness score of 0.

Consequently, it is very simple for user space to define the amount of memory to consider for each task. Setting a oom_score_adj value of +500, for example, is roughly equivalent to allowing the remainder of tasks sharing the same system, cpuset, mempolicy, or memory controller resources to use at least 50% more memory. A value of -500, on the other hand, would be roughly equivalent to discounting 50% of the task's allowed memory from being considered as scoring against the task.

For backward compatibility with previous kernels, /proc/[pid]/oom_adj can still be used to tune the badness score. Its value is scaled linearly with oom_score_adj.

Writing to /proc/[pid]/oom_score_adj or /proc/[pid]/oom_adj will change the other with its scaled value.

Definition at line 81 of file oom_score_adj.h.

## Member Function Documentation

## is_valid()

bool core::posix::linux::proc::process::OomScoreAdj::is_valid | ( |  | ) | const

inline

is_valid checks whether the contained value is within the predefined bounds.

Returns
  true iff min_value() <= value <= max_value().

Definition at line 99 of file oom_score_adj.h.

Referenced by core::posix::linux::proc::process::operator<<().

## max_value()

int core::posix::linux::proc::process::OomScoreAdj::max_value | ( |  | ) |

static

Returns the maximum valid value.

Returns
  The maximum valid value that the Oom Score Adj can be set to.

Definition at line 45 of file oom_score_adj.cpp.

Referenced by TEST(), and TEST().

## min_value()

int core::posix::linux::proc::process::OomScoreAdj::min_value | ( |  | ) |

static

Returns the minimum valid value.

Returns
  The minimum valid value that the Oom Score Adj can be set to.

Definition at line 40 of file oom_score_adj.cpp.

Referenced by TEST(), and TEST().

## Member Data Documentation

## value

int core::posix::linux::proc::process::OomScoreAdj::value

Current value.

Definition at line 107 of file oom_score_adj.h.

Referenced by core::posix::linux::proc::process::operator<<(), and core::posix::linux::proc::process::operator>>().

The documentation for this struct was generated from the following files:

- oom_score_adj.h
- oom_score_adj.cpp