From 48135c4cba933c9d74021fe994de7a9b2e116630 Mon Sep 17 00:00:00 2001 From: Suren Baghdasaryan Date: Tue, 19 May 2020 12:59:18 -0700 Subject: [PATCH] lmkd: Do not kill perceptible apps due to low swap if above min wmark Prevent kills of perceptible apps due to swap shortages unless system free memory is below the min watermark. This prevents kills of important apps when the system is recovering from the memory pressure. Bug: 155709603 Test: memory stress test with multiple foreground apps Signed-off-by: Suren Baghdasaryan Change-Id: I6beb4b55f8b4f7bc22818b5a7bdfa3adc6cd31c1 --- lmkd.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lmkd.cpp b/lmkd.cpp index 29bbc9a..8cef9f1 100644 --- a/lmkd.cpp +++ b/lmkd.cpp @@ -2396,12 +2396,20 @@ static void mp_event_psi(int data, uint32_t events, struct polling_params *poll_ snprintf(kill_desc, sizeof(kill_desc), "device is low on swap (%" PRId64 "kB < %" PRId64 "kB) and thrashing (%" PRId64 "%%)", mi.field.free_swap * page_k, swap_low_threshold * page_k, thrashing); + /* Do not kill perceptible apps unless below min watermark */ + if (wmark < WMARK_LOW) { + min_score_adj = PERCEPTIBLE_APP_ADJ + 1; + } } else if (swap_is_low && wmark < WMARK_HIGH) { /* Both free memory and swap are low */ kill_reason = LOW_MEM_AND_SWAP; snprintf(kill_desc, sizeof(kill_desc), "%s watermark is breached and swap is low (%" PRId64 "kB < %" PRId64 "kB)", wmark > WMARK_LOW ? "min" : "low", mi.field.free_swap * page_k, swap_low_threshold * page_k); + /* Do not kill perceptible apps unless below min watermark */ + if (wmark < WMARK_LOW) { + min_score_adj = PERCEPTIBLE_APP_ADJ + 1; + } } else if (wmark < WMARK_HIGH && swap_util_max < 100 && (swap_util = calc_swap_utilization(&mi)) > swap_util_max) { /*