• Home
Name Date Size #Lines LOC

..--

include/03-May-2024-432190

libpsi/03-May-2024-242144

tests/03-May-2024-710525

.clang-formatD03-May-2024291

Android.bpD03-May-20241.8 KiB10394

OWNERSD03-May-202418 21

PREUPLOAD.cfgD03-May-2024142 64

README.mdD03-May-20244.6 KiB10172

event.logtagsD03-May-20241.8 KiB4038

liblmkd_utils.cppD03-May-20242.3 KiB8552

lmkd.cppD03-May-2024118.9 KiB3,8482,883

lmkd.rcD03-May-20242 KiB5238

reaper.cppD03-May-20247.4 KiB267195

reaper.hD03-May-20241.9 KiB6133

statslog.cppD03-May-202410 KiB352252

statslog.hD03-May-20244.7 KiB17187

watchdog.cppD03-May-20243 KiB12480

watchdog.hD03-May-20241.1 KiB4019

README.md

1Android Low Memory Killer Daemon
2================================
3
4
5Introduction
6------------
7
8Android Low Memory Killer Daemon (lmkd) is a process monitoring memory
9state of a running Android system and reacting to high memory pressure
10by killing the least essential process(es) to keep system performing
11at acceptable levels.
12
13
14Background
15----------
16
17Historically on Android systems memory monitoring and killing of
18non-essential processes was handled by a kernel lowmemorykiller driver.
19Since Linux Kernel 4.12 the lowmemorykiller driver has been removed and
20instead userspace lmkd daemon performs these tasks.
21
22
23Android Properties
24------------------
25
26lmkd can be configured on a particular system using the following Android
27properties:
28
29  - `ro.config.low_ram`:         choose between low-memory vs high-performance
30                                 device. Default = false.
31
32  - `ro.lmk.use_minfree_levels`: use free memory and file cache thresholds for
33                                 making decisions when to kill. This mode works
34                                 the same way kernel lowmemorykiller driver used
35                                 to work. Default = false
36
37  - `ro.lmk.low`:                min oom_adj score for processes eligible to be
38                                 killed at low vmpressure level. Default = 1001
39                                 (disabled)
40
41  - `ro.lmk.medium`:             min oom_adj score for processes eligible to be
42                                 killed at medium vmpressure level. Default = 800
43                                 (non-essential processes)
44
45  - `ro.lmk.critical`:           min oom_adj score for processes eligible to be
46                                 killed at critical vmpressure level. Default = 0
47                                 (all processes)
48
49  - `ro.lmk.critical_upgrade`:   enables upgrade to critical level. Default = false
50
51  - `ro.lmk.upgrade_pressure`:   max mem_pressure at which level will be upgraded
52                                 because system is swapping too much. Default = 100
53                                 (disabled)
54
55  - `ro.lmk.downgrade_pressure`: min mem_pressure at which vmpressure event will
56                                 be ignored because enough free memory is still
57                                 available. Default = 100 (disabled)
58
59  - `ro.lmk.kill_heaviest_task`: kill heaviest eligible task (best decision) vs.
60                                 any eligible task (fast decision). Default = false
61
62  - `ro.lmk.kill_timeout_ms`:    duration in ms after a kill when no additional
63                                 kill will be done. Default = 0 (disabled)
64
65  - `ro.lmk.debug`:              enable lmkd debug logs, Default = false
66
67  - `ro.lmk.swap_free_low_percentage`: level of free swap as a percentage of the
68                                 total swap space used as a threshold to consider
69                                 the system as swap space starved. Default for
70                                 low-RAM devices = 10, for high-end devices = 20
71
72  - `ro.lmk.thrashing_limit`:    number of workingset refaults as a percentage of
73                                the file-backed pagecache size used as a threshold
74                                 to consider system thrashing its pagecache.
75                                 Default for low-RAM devices = 30, for high-end
76                                 devices = 100
77
78  - `ro.lmk.thrashing_limit_decay`: thrashing threshold decay expressed as a
79                                 percentage of the original threshold used to lower
80                                 the threshold when system does not recover even
81                                 after a kill. Default for low-RAM devices = 50,
82                                 for high-end devices = 10
83
84  - `ro.lmk.psi_partial_stall_ms`: partial PSI stall threshold in milliseconds for
85                                 triggering low memory notification. Default for
86                                 low-RAM devices = 200, for high-end devices = 70
87
88  - `ro.lmk.psi_complete_stall_ms`: complete PSI stall threshold in milliseconds for
89                                 triggering critical memory notification. Default =
90                                 700
91
92lmkd will set the following Android properties according to current system
93configurations:
94
95  - `sys.lmk.minfree_levels`:    minfree:oom_adj_score pairs, delimited by comma
96
97  - `sys.lmk.reportkills`:       whether or not it supports reporting process kills
98                                 to clients. Test app should check this property
99                                 before testing low memory kill notification.
100                                 Default will be unset.
101