From 858e8c6373252ac6118f4c6cdf979246517ab3fe Mon Sep 17 00:00:00 2001 From: Suren Baghdasaryan Date: Wed, 3 Mar 2021 11:05:09 -0800 Subject: [PATCH] lmkd: choose the heaviest task when killing perceptible processes When killing a task at or lower than oom_score_adj PERCEPTIBLE_APP_ADJ choose the heaviest task among the ones at that level to try minimizing the number of required kills. Because killing a perceptible app will affect user experience anyway, it makes sense to choose the one that will release the most memory and therefore no more kills might be necessary. Bug: 181778155 Test: running thrashing.py script Signed-off-by: Suren Baghdasaryan Change-Id: I775ff774430b6fde4d619ede794825dbae59fd8e --- lmkd.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lmkd.cpp b/lmkd.cpp index 034b44f..02a0ab6 100644 --- a/lmkd.cpp +++ b/lmkd.cpp @@ -2163,12 +2163,21 @@ static int find_and_kill_process(int min_score_adj, enum kill_reasons kill_reaso int i; int killed_size = 0; bool lmk_state_change_start = false; + bool choose_heaviest_task = kill_heaviest_task; for (i = OOM_SCORE_ADJ_MAX; i >= min_score_adj; i--) { struct proc *procp; + if (!choose_heaviest_task && i <= PERCEPTIBLE_APP_ADJ) { + /* + * If we have to choose a perceptible process, choose the heaviest one to + * hopefully minimize the number of victims. + */ + choose_heaviest_task = true; + } + while (true) { - procp = kill_heaviest_task ? + procp = choose_heaviest_task ? proc_get_heaviest(i) : proc_adj_lru(i); if (!procp)