<step1> Enable Kernel Module
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
<step2> Setup Recycle Memory Criteria in init.rc
# Define the oom_adj values for the classes of processes that can be # killed by the kernel. These are used in ActivityManagerService. setprop ro.FOREGROUND_APP_ADJ 0 setprop ro.VISIBLE_APP_ADJ 1 setprop ro.PERCEPTIBLE_APP_ADJ 2 setprop ro.HEAVY_WEIGHT_APP_ADJ 3 setprop ro.SECONDARY_SERVER_ADJ 4 setprop ro.BACKUP_APP_ADJ 5 setprop ro.HOME_APP_ADJ 6 setprop ro.HIDDEN_APP_MIN_ADJ 7 setprop ro.EMPTY_APP_ADJ 15 # Define the memory thresholds at which the above process classes will # be killed. These numbers are in pages (4k). # These are currently tuned for tablets with approx 1GB RAM. setprop ro.FOREGROUND_APP_MEM 8192 setprop ro.VISIBLE_APP_MEM 10240 setprop ro.PERCEPTIBLE_APP_MEM 12288 setprop ro.HEAVY_WEIGHT_APP_MEM 12288 setprop ro.SECONDARY_SERVER_MEM 14336 setprop ro.BACKUP_APP_MEM 14336 setprop ro.HOME_APP_MEM 14336 setprop ro.HIDDEN_APP_MEM 16384 setprop ro.EMPTY_APP_MEM 20480 # Write value must be consistent with the above properties. # Note that the driver only supports 6 slots, so we have combined some of # the classes into the same memory level; the associated processes of higher # classes will still be killed first. write /sys/module/lowmemorykiller/parameters/adj 0,1,2,4,7,15 write /proc/sys/vm/overcommit_memory 1 write /proc/sys/vm/min_free_order_shift 4 write /sys/module/lowmemorykiller/parameters/minfree 8192,10240,12288,14336,16384,20480 # Set init its forked children's oom_adj. write /proc/1/oom_adj -16 # Tweak background writeout write /proc/sys/vm/dirty_expire_centisecs 200 write /proc/sys/vm/dirty_background_ratio 5
在 system/core/init/init.c 中會去讀取 init.rc,並將以上這些參數設定給 low memory killer。另外,上層還有一支 ActivityManagerService,但不知道他和底層 low memory killer 如何溝通。
沒有留言:
張貼留言