Merge "lmkd: Do not downgrade/ignore events when swap is full"

am: c48943165d

Change-Id: Id9497112443f9a11cbf2368dd10019359c4fc3ee
This commit is contained in:
Vic Yang 2018-08-14 16:10:18 -07:00 committed by android-build-merger
commit 19a9c239ba
1 changed files with 23 additions and 13 deletions

14
lmkd.c
View File

@ -125,6 +125,7 @@ static bool kill_heaviest_task;
static unsigned long kill_timeout_ms; static unsigned long kill_timeout_ms;
static bool use_minfree_levels; static bool use_minfree_levels;
static bool per_app_memcg; static bool per_app_memcg;
static int swap_free_low_percentage;
static android_log_context ctx; static android_log_context ctx;
@ -205,6 +206,7 @@ enum meminfo_field {
MI_BUFFERS, MI_BUFFERS,
MI_SHMEM, MI_SHMEM,
MI_UNEVICTABLE, MI_UNEVICTABLE,
MI_TOTAL_SWAP,
MI_FREE_SWAP, MI_FREE_SWAP,
MI_ACTIVE_ANON, MI_ACTIVE_ANON,
MI_INACTIVE_ANON, MI_INACTIVE_ANON,
@ -227,6 +229,7 @@ static const char* const meminfo_field_names[MI_FIELD_COUNT] = {
"Buffers:", "Buffers:",
"Shmem:", "Shmem:",
"Unevictable:", "Unevictable:",
"SwapTotal:",
"SwapFree:", "SwapFree:",
"Active(anon):", "Active(anon):",
"Inactive(anon):", "Inactive(anon):",
@ -249,6 +252,7 @@ union meminfo {
int64_t buffers; int64_t buffers;
int64_t shmem; int64_t shmem;
int64_t unevictable; int64_t unevictable;
int64_t total_swap;
int64_t free_swap; int64_t free_swap;
int64_t active_anon; int64_t active_anon;
int64_t inactive_anon; int64_t inactive_anon;
@ -1346,6 +1350,10 @@ static void mp_event_common(int data, uint32_t events __unused) {
} }
} }
// If we still have enough swap space available, check if we want to
// ignore/downgrade pressure events.
if (mi.field.free_swap >=
mi.field.total_swap * swap_free_low_percentage / 100) {
// If the pressure is larger than downgrade_pressure lmk will not // If the pressure is larger than downgrade_pressure lmk will not
// kill any process, since enough memory is available. // kill any process, since enough memory is available.
if (mem_pressure > downgrade_pressure) { if (mem_pressure > downgrade_pressure) {
@ -1353,14 +1361,14 @@ static void mp_event_common(int data, uint32_t events __unused) {
ALOGI("Ignore %s memory pressure", level_name[level]); ALOGI("Ignore %s memory pressure", level_name[level]);
} }
return; return;
} else if (level == VMPRESS_LEVEL_CRITICAL && } else if (level == VMPRESS_LEVEL_CRITICAL && mem_pressure > upgrade_pressure) {
mem_pressure > upgrade_pressure) {
if (debug_process_killing) { if (debug_process_killing) {
ALOGI("Downgrade critical memory pressure"); ALOGI("Downgrade critical memory pressure");
} }
// Downgrade event, since enough memory available. // Downgrade event, since enough memory available.
level = downgrade_level(level); level = downgrade_level(level);
} }
}
do_kill: do_kill:
if (low_ram_device) { if (low_ram_device) {
@ -1635,6 +1643,8 @@ int main(int argc __unused, char **argv __unused) {
property_get_bool("ro.lmk.use_minfree_levels", false); property_get_bool("ro.lmk.use_minfree_levels", false);
per_app_memcg = per_app_memcg =
property_get_bool("ro.config.per_app_memcg", low_ram_device); property_get_bool("ro.config.per_app_memcg", low_ram_device);
swap_free_low_percentage =
property_get_int32("ro.lmk.swap_free_low_percentage", 10);
ctx = create_android_logger(MEMINFO_LOG_TAG); ctx = create_android_logger(MEMINFO_LOG_TAG);