From 0e64eadc213a9f15ee9d6714830021a674998c06 Mon Sep 17 00:00:00 2001 From: Suren Baghdasaryan Date: Wed, 1 Sep 2021 00:49:51 -0700 Subject: [PATCH] lmkd: Do not re-initialize lmkd when persistent properties are loaded When a device boots, lmkd starts before persistent properties are loaded, therefore if experiments set any flags, the corresponding persistent properties will trigger change notifications when they are first loaded during boot. In order to prevent lmkd from re-initializing on every property load, mark persistent property change by setting lmkd.reinit to 0 and delay lmkd re-initialization until sys.boot_completed=1 when all properties are set and only one re-initialization will capture them all. On devices with no experiment flags being set lmkd.reinit will be undefined at the boot completion time and re-initialization will not be triggered at all. Bug: 194316048 Test: adb shell device_config put lmkd_native thrashing_limit_critical 350 Test: adb shell device_config put lmkd_native thrashing_limit 100 Test: adb reboot; adb -b all logcat | grep lmkd Signed-off-by: Suren Baghdasaryan Change-Id: Iba34fc719a18d58b890549c7415bec869d471901 --- lmkd.cpp | 2 +- lmkd.rc | 30 ++++++++++++++++++------------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/lmkd.cpp b/lmkd.cpp index eae24ce..4e4490f 100644 --- a/lmkd.cpp +++ b/lmkd.cpp @@ -3482,7 +3482,7 @@ static void update_props() { int main(int argc, char **argv) { if ((argc > 1) && argv[1] && !strcmp(argv[1], "--reinit")) { - if (property_set(LMKD_REINIT_PROP, "0")) { + if (property_set(LMKD_REINIT_PROP, "")) { ALOGE("Failed to reset " LMKD_REINIT_PROP " property"); } return issue_reinit(); diff --git a/lmkd.rc b/lmkd.rc index c9eee68..6f90bcb 100644 --- a/lmkd.rc +++ b/lmkd.rc @@ -10,36 +10,42 @@ service lmkd /system/bin/lmkd on property:lmkd.reinit=1 exec_background /system/bin/lmkd --reinit -# properties most likely to be used in experiments -on property:persist.device_config.lmkd_native.debug=* +# reinitialize lmkd after device finished booting if experiments set any flags during boot +on property:sys.boot_completed=1 && property:lmkd.reinit=0 setprop lmkd.reinit 1 +# properties most likely to be used in experiments +# setting persist.device_config.* property either triggers immediate lmkd re-initialization +# if the device finished booting or sets lmkd.reinit=0 to re-initialize lmkd after boot completes +on property:persist.device_config.lmkd_native.debug=* + setprop lmkd.reinit ${sys.boot_completed:-0} + on property:persist.device_config.lmkd_native.kill_heaviest_task=* - setprop lmkd.reinit 1 + setprop lmkd.reinit ${sys.boot_completed:-0} on property:persist.device_config.lmkd_native.kill_timeout_ms=* - setprop lmkd.reinit 1 + setprop lmkd.reinit ${sys.boot_completed:-0} on property:persist.device_config.lmkd_native.swap_free_low_percentage=* - setprop lmkd.reinit 1 + setprop lmkd.reinit ${sys.boot_completed:-0} on property:persist.device_config.lmkd_native.psi_partial_stall_ms=* - setprop lmkd.reinit 1 + setprop lmkd.reinit ${sys.boot_completed:-0} on property:persist.device_config.lmkd_native.psi_complete_stall_ms=* - setprop lmkd.reinit 1 + setprop lmkd.reinit ${sys.boot_completed:-0} on property:persist.device_config.lmkd_native.thrashing_limit=* - setprop lmkd.reinit 1 + setprop lmkd.reinit ${sys.boot_completed:-0} on property:persist.device_config.lmkd_native.thrashing_limit_decay=* - setprop lmkd.reinit 1 + setprop lmkd.reinit ${sys.boot_completed:-0} on property:persist.device_config.lmkd_native.thrashing_limit_critical=* - setprop lmkd.reinit 1 + setprop lmkd.reinit ${sys.boot_completed:-0} on property:persist.device_config.lmkd_native.swap_util_max=* - setprop lmkd.reinit 1 + setprop lmkd.reinit ${sys.boot_completed:-0} on property:persist.device_config.lmkd_native.filecache_min_kb=* - setprop lmkd.reinit 1 + setprop lmkd.reinit ${sys.boot_completed:-0}