0
点赞
收藏
分享

微信扫一扫

Java学习:今日成果,明日挑战

niboac 2024-08-04 阅读 42
lmkdAndroid

用户空间 lmkd

Android LowMemoryKiller原理分析
AOSP>文档>核心主题低内>存终止守护程序

1、概览

1.1 配置lmkd

属性使用默认
ro.config.low_ram指定设备是低内存设备还是高性能设备false
ro.lmk.use_new_strategy当低内存设备(ro.config.low_ram)或无低内存阈值(ro.lmk.use_minfree_levels)策略时,使用基于zone watermarks, free swap and thrashing stats的新策略
ro.lmk.use_psi使用 PSI 监视器(而不是 vmpressure 事件)true
ro.lmk.low在低 vmpressure 水平下可被终止的进程的最低 oom_adj 得分1001
ro.lmk.medium在中等 vmpressure 水平下可被终止的进程的最低 oom_adj 得分800
ro.lmk.critical在临界 vmpressure 水平下可被终止的进程的最低 oom_adj 得分0
ro.lmk.debug启用 lmkd 调试日志false
ro.lmk.critical_upgrade支持升级到临界水平false
ro.lmk.upgrade_pressure由于系统交换次数过多,将在该水平执行水平升级的 mem_pressure 上限100
ro.lmk.downgrade_pressure由于仍有足够的可用内存,将在该水平忽略 vmpressure 事件的 mem_pressure 下限100
ro.lmk.kill_heaviest_task终止符合条件的最繁重任务(最佳决策)与终止符合条件的任何任务(快速决策)true
ro.lmk.kill_timeout_ms从某次终止后到其他终止完成之前的持续时间(以毫秒为单位)0
ro.lmk.use_minfree_levels使用可用内存和文件缓存阈值来做出进程终止决策 (即与内核中的 LMK 驱动程序的功能一致)false
ro.lmk.swap_free_low_percentage可用交换水平,以占总交换空间的百分比表示。“lmkd”使用该值作为阈值来判断何时将系统视为交换空间不足。如果“lmkd”因交换空间过多而终止,请降低该百分比。如果“lmkd”终止得太晚,从而导致 OOM 终止,请提高该百分比。10
ro.lmk.psi_partial_stall_ms部分 PSI 失速阈值(以毫秒为单位),用于触发内存不足通知。如果设备收到内存压力通知的时间太晚,可以降低此值以在较早的时间触发通知。如果在不必要的情况下触发了内存压力通知,请提高此值以降低设备对噪声的敏感度。70(ro.config.low_ram默认false)
ro.lmk.psi_complete_stall_ms完全 PSI 失速阈值(以毫秒为单位),用于触发关键内存通知。如果设备收到关键内存压力通知的时间太晚,可以降低该值以在较早的时间触发通知。如果在不必要的情况下触发了关键内存压力通知,可以提高该值以降低设备对噪声的敏感度。700
ro.lmk.thrashing_limit工作集 refault 数量的上限,以占具有文件支持的页面缓存总大小的百分比表示。如果工作集 refault 的数量超过该值,则视为系统对其页面缓存造成抖动。如果设备性能在内存压力期间受到影响,请降低该值以限制抖动。如果因抖动原因而导致设备性能不必要地降低,请提高该值以允许更多抖动。100(ro.config.low_ram默认false)
ro.lmk.thrashing_limit_decay抖动阈值衰减,以占在系统无法恢复时(甚至是终止后)用于降低阈值的原始阈值的百分比表示。如果持续抖动导致不必要的终止,请降低该值。如果终止后对持续抖动的响应速度过慢,请提高该值。10(ro.config.low_ram默认false)
ro.lmk.thrashing_limit_criticalGET_LMK_PROPERTY(int32, "thrashing_limit_critical", thrashing_limit_pct * 2)100*2
ro.lmk.swap_util_max最大交换内存量,以占可交换内存总量的百分比表示。如果交换的内存量超过此上限,则表示系统在交换了其大部分可交换内存后仍然存在压力。 当内存压力是由不可交换内存的分配导致时,就可能会发生这种情况,原因在于大部分可交换内存已经交换,所以无法通过交换来缓解这一压力。默认值为 100,这实际上会停用此检查。如果设备的性能在交换利用率较高且可用交换水平未降至 ro.lmk.swap_free_low_percentage 的内存压力期间受到影响,请降低该值以限制交换利用率。100
ro.lmk.filecache_min_kb抖动后文件缓存太低,继续杀死后台进程。0
ro.lmk.stall_limit_criticalPSI失速极限临界。如果系统停滞,允许杀死可感知的应用程序100

在这里插入图片描述

2、lmkd

2.1 lmkd启动

system/memory/lmkd/lmkd.rc

service lmkd /system/bin/lmkd
    class core
    user lmkd
    group lmkd system readproc
    capabilities DAC_OVERRIDE KILL IPC_LOCK SYS_NICE SYS_RESOURCE
    critical
    socket lmkd seqpacket+passcred 0660 system system
    task_profiles ServiceCapacityLow

on property:lmkd.reinit=1
    exec_background /system/bin/lmkd --reinit

# 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 ${sys.boot_completed:-0}

on property:persist.device_config.lmkd_native.kill_timeout_ms=*
    setprop lmkd.reinit ${sys.boot_completed:-0}

on property:persist.device_config.lmkd_native.swap_free_low_percentage=*
    setprop lmkd.reinit ${sys.boot_completed:-0}

on property:persist.device_config.lmkd_native.psi_partial_stall_ms=*
    setprop lmkd.reinit ${sys.boot_completed:-0}

on property:persist.device_config.lmkd_native.psi_complete_stall_ms=*
    setprop lmkd.reinit ${sys.boot_completed:-0}

on property:persist.device_config.lmkd_native.thrashing_limit=*
    setprop lmkd.reinit ${sys.boot_completed:-0}

on property:persist.device_config.lmkd_native.thrashing_limit_decay=*
    setprop lmkd.reinit ${sys.boot_completed:-0}

on property:persist.device_config.lmkd_native.thrashing_limit_critical=*
    setprop lmkd.reinit ${sys.boot_completed:-0}

on property:persist.device_config.lmkd_native.swap_util_max=*
    setprop lmkd.reinit ${sys.boot_completed:-0}

on property:persist.device_config.lmkd_native.filecache_min_kb=*
    setprop lmkd.reinit ${sys.boot_completed:-0}

2.2 时序图

在这里插入图片描述

举报

相关推荐

0 条评论