From 09138ccf3d11987a358853723dcfa87cc378e1d0 Mon Sep 17 00:00:00 2001 From: Kalesh Singh Date: Fri, 11 Nov 2022 11:48:01 -0800 Subject: [PATCH] AMS: Add Phenotype key for low swap threshold KEY_LOW_SWAP_THRESHOLD_PERCENT controls the minimum percentage of free swap imposed by proactive kills. Bug: 249601646 Test: adb shell device_config put activity_manager low_swap_threshold_percent 0.50 Test: adb shell device_config get activity_manager low_swap_threshold_percent Change-Id: Ieadd31efc677b43ce008a3b26726b565e9f497ab Signed-off-by: Kalesh Singh --- .../server/am/ActivityManagerConstants.java | 22 +++++++++++++++++++ .../com/android/server/am/OomAdjuster.java | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/am/ActivityManagerConstants.java b/services/core/java/com/android/server/am/ActivityManagerConstants.java index 4f207a76a4d5b..003f7f0d88fb7 100644 --- a/services/core/java/com/android/server/am/ActivityManagerConstants.java +++ b/services/core/java/com/android/server/am/ActivityManagerConstants.java @@ -253,6 +253,13 @@ final class ActivityManagerConstants extends ContentObserver { */ private static final String KEY_PROACTIVE_KILLS_ENABLED = "proactive_kills_enabled"; + /** + * Trim LRU cached app when swap falls below this minimum percentage. + * + * Depends on KEY_PROACTIVE_KILLS_ENABLED + */ + private static final String KEY_LOW_SWAP_THRESHOLD_PERCENT = "low_swap_threshold_percent"; + /** * Default value for mFlagBackgroundActivityStartsEnabled if not explicitly set in * Settings.Global. This allows it to be set experimentally unless it has been @@ -881,6 +888,8 @@ final class ActivityManagerConstants extends ContentObserver { private static final boolean DEFAULT_PROACTIVE_KILLS_ENABLED = false; + private static final float DEFAULT_LOW_SWAP_THRESHOLD_PERCENT = 0.10f; + private static final String KEY_MIN_ASSOC_LOG_DURATION = "min_assoc_log_duration"; public static long MIN_ASSOC_LOG_DURATION = DEFAULT_MIN_ASSOC_LOG_DURATION; @@ -912,6 +921,7 @@ final class ActivityManagerConstants extends ContentObserver { public static int BINDER_HEAVY_HITTER_AUTO_SAMPLER_BATCHSIZE; public static float BINDER_HEAVY_HITTER_AUTO_SAMPLER_THRESHOLD; public static boolean PROACTIVE_KILLS_ENABLED = DEFAULT_PROACTIVE_KILLS_ENABLED; + public static float LOW_SWAP_THRESHOLD_PERCENT = DEFAULT_LOW_SWAP_THRESHOLD_PERCENT; private final OnPropertiesChangedListener mOnDeviceConfigChangedListener = new OnPropertiesChangedListener() { @@ -1051,6 +1061,9 @@ final class ActivityManagerConstants extends ContentObserver { case KEY_PROACTIVE_KILLS_ENABLED: updateProactiveKillsEnabled(); break; + case KEY_LOW_SWAP_THRESHOLD_PERCENT: + updateLowSwapThresholdPercent(); + break; default: break; } @@ -1678,6 +1691,13 @@ final class ActivityManagerConstants extends ContentObserver { DEFAULT_PROACTIVE_KILLS_ENABLED); } + private void updateLowSwapThresholdPercent() { + LOW_SWAP_THRESHOLD_PERCENT = DeviceConfig.getFloat( + DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, + KEY_LOW_SWAP_THRESHOLD_PERCENT, + DEFAULT_LOW_SWAP_THRESHOLD_PERCENT); + } + private void updateMinAssocLogDuration() { MIN_ASSOC_LOG_DURATION = DeviceConfig.getLong( DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_MIN_ASSOC_LOG_DURATION, @@ -1880,6 +1900,8 @@ final class ActivityManagerConstants extends ContentObserver { pw.print("="); pw.println(mMaxServiceConnectionsPerProcess); pw.print(" "); pw.print(KEY_PROACTIVE_KILLS_ENABLED); pw.print("="); pw.println(PROACTIVE_KILLS_ENABLED); + pw.print(" "); pw.print(KEY_LOW_SWAP_THRESHOLD_PERCENT); + pw.print("="); pw.println(LOW_SWAP_THRESHOLD_PERCENT); pw.println(); if (mOverrideMaxCachedProcesses >= 0) { diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java index 96e6ace5c56f2..eb2b7d493251e 100644 --- a/services/core/java/com/android/server/am/OomAdjuster.java +++ b/services/core/java/com/android/server/am/OomAdjuster.java @@ -1149,7 +1149,7 @@ public class OomAdjuster { int numTrimming = 0; boolean proactiveKillsEnabled = mConstants.PROACTIVE_KILLS_ENABLED; - double lowSwapThresholdPercent = 0.10; // TODO: Configure from phenotype + double lowSwapThresholdPercent = mConstants.LOW_SWAP_THRESHOLD_PERCENT; double freeSwapPercent = proactiveKillsEnabled ? getFreeSwapPercent() : 1.00; ProcessRecord lruCachedApp = null;