diff --git a/magisk/common/system.prop b/magisk/common/system.prop index 3d42789..7c4ea94 100644 --- a/magisk/common/system.prop +++ b/magisk/common/system.prop @@ -1,3 +1,30 @@ # This file will be read by resetprop # Example: Change dpi # ro.sf.lcd_density=320 + +# unify surfaceflinger props +debug.sf.latch_unsignaled=1 +ro.surface_flinger.max_frame_buffer_acquired_buffers=3 +# app phase +ro.surface_flinger.vsync_event_phase_offset_ns=1000000 +# SF phase +ro.surface_flinger.vsync_sf_event_phase_offset_ns=1000000 +# the offset in nanoseconds to add to vsync time when timestamping present fences. +ro.surface_flinger.present_time_offset_from_vsync_ns=0 +# early SF phase +debug.sf.early_phase_offset_ns=1000000 +# GL early app phase +debug.sf.early_gl_phase_offset_ns=1000000 +# early app phase +debug.sf.early_app_phase_offset_ns=1000000 +# GL early SF phase +debug.sf.early_gl_app_phase_offset_ns=1000000 +# GL early app phase(90Hz+) +debug.sf.high_fps_early_gl_phase_offset_ns=1000000 +# early SF phase(90Hz+) +debug.sf.high_fps_early_phase_offset_ns=1000000 +# Below defines the threshold when an offset is considered to be negative, i.e. targeting +# for the N+2 vsync instead of N+1. This means that: +# For offset < threshold, SF wake up (vsync_duration - offset) before HW vsync. +# For offset >= threshold, SF wake up (2 * vsync_duration - offset) before HW vsync. +# debug.sf.phase_offset_threshold_for_next_vsync_ns=6100000 diff --git a/magisk/initsvc_uperf.sh b/magisk/initsvc_uperf.sh index 0835677..5e70055 100755 --- a/magisk/initsvc_uperf.sh +++ b/magisk/initsvc_uperf.sh @@ -8,11 +8,12 @@ BASEDIR="$(dirname $(readlink -f "$0"))" wait_until_login() { - # we doesn't have the permission to rw "/sdcard" before the user unlocks the screen - while [ ! -d "/sdcard/Android" ]; do + # in case of /data encryption is disabled + while [ "$(getprop sys.boot_completed)" != "1" ]; do sleep 1 done + # we doesn't have the permission to rw "/sdcard" before the user unlocks the screen local test_file="/sdcard/Android/.PERMISSION_TEST" touch "$test_file" while [ ! -f "$test_file" ]; do diff --git a/magisk/module.prop b/magisk/module.prop index 434bcf3..24f3545 100644 --- a/magisk/module.prop +++ b/magisk/module.prop @@ -1,6 +1,6 @@ id=uperf name=Uperf -version=v1 (20200516) +version=v2 (20210102) versionCode=1 author=Matt Yang description=Userspace performance controller for android. Repo: https://github.com/yc9559/uperf/ diff --git a/magisk/script/libcgroup.sh b/magisk/script/libcgroup.sh new file mode 100644 index 0000000..c372f79 --- /dev/null +++ b/magisk/script/libcgroup.sh @@ -0,0 +1,152 @@ +#!/system/bin/sh +# Cgroup Library +# https://github.com/yc9559/ +# Author: Matt Yang +# Version: 20201230 + +BASEDIR="$(dirname "$0")" +. $BASEDIR/pathinfo.sh +. $BASEDIR/libcommon.sh + +# avoid matching grep itself +# ps -Ao pid,args | grep kswapd +# 150 [kswapd0] +# 16490 grep kswapd + +# $1:task_name $2:cgroup_name $3:"cpuset"/"stune" +change_task_cgroup() +{ + local ps_ret + ps_ret="$(ps -Ao pid,args)" + for temp_pid in $(echo "$ps_ret" | grep -i "$1" | awk '{print $1}'); do + for temp_tid in $(ls "/proc/$temp_pid/task/"); do + comm="$(cat /proc/$temp_pid/task/$temp_tid/comm)" + log "change $1/$comm($temp_tid) -> cgroup:$2" + echo "$temp_tid" > "/dev/$3/$2/tasks" + done + done +} + +# $1:process_name $2:cgroup_name $3:"cpuset"/"stune" +change_proc_cgroup() +{ + local ps_ret + ps_ret="$(ps -Ao pid,args)" + for temp_pid in $(echo "$ps_ret" | grep -i "$1" | awk '{print $1}'); do + comm="$(cat /proc/$temp_pid/comm)" + log "change $comm($temp_pid) -> cgroup:$2" + echo $temp_pid > "/dev/$3/$2/cgroup.procs" + done +} + +# $1:task_name $2:thread_name $3:cgroup_name $4:"cpuset"/"stune" +change_thread_cgroup() +{ + local ps_ret + ps_ret="$(ps -Ao pid,args)" + for temp_pid in $(echo "$ps_ret" | grep -i "$1" | awk '{print $1}'); do + for temp_tid in $(ls "/proc/$temp_pid/task/"); do + comm="$(cat /proc/$temp_pid/task/$temp_tid/comm)" + if [ "$(echo $comm | grep -i "$2")" != "" ]; then + log "change $1/$comm($temp_tid) -> cgroup:$3" + echo "$temp_tid" > "/dev/$4/$3/tasks" + fi + done + done +} + +# $1:task_name $2:hex_mask(0x00000003 is CPU0 and CPU1) +change_task_affinity() +{ + local ps_ret + ps_ret="$(ps -Ao pid,args)" + for temp_pid in $(echo "$ps_ret" | grep -i "$1" | awk '{print $1}'); do + for temp_tid in $(ls "/proc/$temp_pid/task/"); do + comm="$(cat /proc/$temp_pid/task/$temp_tid/comm)" + log "change $1/$comm($temp_tid) -> mask:$2" + taskset -p "$2" "$temp_tid" >> $LOG_FILE + done + done +} + +# $1:task_name $2:thread_name $3:hex_mask(0x00000003 is CPU0 and CPU1) +change_thread_affinity() +{ + local ps_ret + local comm + ps_ret="$(ps -Ao pid,args)" + for temp_pid in $(echo "$ps_ret" | grep -i "$1" | awk '{print $1}'); do + for temp_tid in $(ls "/proc/$temp_pid/task/"); do + comm="$(cat /proc/$temp_pid/task/$temp_tid/comm)" + if [ "$(echo $comm | grep -i "$2")" != "" ]; then + log "change $1/$comm($temp_tid) -> mask:$3" + taskset -p "$3" "$temp_tid" >> $LOG_FILE + fi + done + done +} + +# $1:task_name $2:nice(relative to 120) +change_task_nice() +{ + local ps_ret + ps_ret="$(ps -Ao pid,args)" + for temp_pid in $(echo "$ps_ret" | grep -i "$1" | awk '{print $1}'); do + for temp_tid in $(ls "/proc/$temp_pid/task/"); do + renice "$2" -p "$temp_tid" >> $LOG_FILE + done + done +} + +# $1:task_name $2:thread_name $3:priority(100-x, 2-99) +change_thread_rt() +{ + local ps_ret + local comm + ps_ret="$(ps -Ao pid,args)" + for temp_pid in $(echo "$ps_ret" | grep -i "$1" | awk '{print $1}'); do + for temp_tid in $(ls "/proc/$temp_pid/task/"); do + comm="$(cat /proc/$temp_pid/task/$temp_tid/comm)" + if [ "$(echo $comm | grep -i "$2")" != "" ]; then + log "change $1/$comm($temp_tid) -> RT policy" + chrt -f -p "$3" "$temp_tid" >> $LOG_FILE + fi + done + done +} + +# $1:task_name $2:thread_name +pin_thread_on_pwr() +{ + change_thread_cgroup "$1" "$2" "background" "cpuset" +} + +# $1:task_name $2:thread_name +pin_thread_on_perf() +{ + change_thread_affinity "$1" "$2" "f0" +} + +# $1:task_name $2:thread_name +unpin_thread() +{ + change_thread_cgroup "$1" "$2" "" "cpuset" +} + +# $1:task_name +pin_proc_on_pwr() +{ + change_task_cgroup "$1" "background" "cpuset" +} + +# $1:task_name +pin_proc_on_perf() +{ + change_task_affinity "$1" "f0" +} + +# $1:task_name +unpin_proc() +{ + change_task_cgroup "$1" "" "cpuset" +} diff --git a/magisk/script/libcommon.sh b/magisk/script/libcommon.sh index 10f1fec..119b242 100644 --- a/magisk/script/libcommon.sh +++ b/magisk/script/libcommon.sh @@ -2,7 +2,7 @@ # Basic Tool Library # https://github.com/yc9559/ # Author: Matt Yang -# Version: 20200516 +# Version: 20201206 BASEDIR="$(dirname "$0")" . $BASEDIR/pathinfo.sh @@ -51,7 +51,7 @@ read_cfg_value() { local value="" if [ -f "$PANEL_FILE" ]; then - value="$(grep "^$1=" "$PANEL_FILE" | head -n 1 | tr -d ' ' | cut -d= -f2)" + value="$(grep -i "^$1=" "$PANEL_FILE" | head -n 1 | tr -d ' ' | cut -d= -f2)" fi echo "$value" } @@ -69,11 +69,12 @@ clear_panel() wait_until_login() { - # we doesn't have the permission to rw "/sdcard" before the user unlocks the screen - while [ ! -d "/sdcard/Android" ]; do + # in case of /data encryption is disabled + while [ "$(getprop sys.boot_completed)" != "1" ]; do sleep 1 done + # we doesn't have the permission to rw "/sdcard" before the user unlocks the screen local test_file="/sdcard/Android/.PERMISSION_TEST" touch "$test_file" while [ ! -f "$test_file" ]; do @@ -84,87 +85,18 @@ wait_until_login() } ############################### -# Cgroup functions +# Log ############################### -# $1:task_name $2:cgroup_name $3:"cpuset"/"stune" -change_task_cgroup() -{ - # avoid matching grep itself - # ps -Ao pid,args | grep kswapd - # 150 [kswapd0] - # 16490 grep kswapd - local ps_ret - ps_ret="$(ps -Ao pid,args)" - for temp_pid in $(echo "$ps_ret" | grep "$1" | awk '{print $1}'); do - for temp_tid in $(ls "/proc/$temp_pid/task/"); do - echo "$temp_tid" > "/dev/$3/$2/tasks" - done - done -} - -# $1:process_name $2:cgroup_name $3:"cpuset"/"stune" -change_proc_cgroup() -{ - # avoid matching grep itself - # ps -Ao pid,args | grep kswapd - # 150 [kswapd0] - # 16490 grep kswapd - local ps_ret - ps_ret="$(ps -Ao pid,args)" - for temp_pid in $(echo "$ps_ret" | grep "$1" | awk '{print $1}'); do - echo $temp_pid > "/dev/$3/$2/cgroup.procs" - done -} - -# $1:task_name $2:thread_name $3:cgroup_name $4:"cpuset"/"stune" -change_thread_cgroup() -{ - # avoid matching grep itself - # ps -Ao pid,args | grep kswapd - # 150 [kswapd0] - # 16490 grep kswapd - local ps_ret - ps_ret="$(ps -Ao pid,args)" - for temp_pid in $(echo "$ps_ret" | grep "$1" | awk '{print $1}'); do - for temp_tid in $(ls "/proc/$temp_pid/task/"); do - if [ "$(grep "$2" /proc/$temp_pid/task/$temp_tid/comm)" != "" ]; then - echo "$temp_tid" > "/dev/$4/$3/tasks" - fi - done - done -} - -# $1:task_name $2:hex_mask(0x00000003 is CPU0 and CPU1) -change_task_affinity() +# $1:content +log() { - # avoid matching grep itself - # ps -Ao pid,args | grep kswapd - # 150 [kswapd0] - # 16490 grep kswapd - local ps_ret - ps_ret="$(ps -Ao pid,args)" - for temp_pid in $(echo "$ps_ret" | grep "$1" | awk '{print $1}'); do - for temp_tid in $(ls "/proc/$temp_pid/task/"); do - taskset -p "$2" "$temp_tid" > /dev/null - done - done + echo "$1" >> "$LOG_FILE" } -# $1:task_name $2:nice(relative to 120) -change_task_nice() +clear_log() { - # avoid matching grep itself - # ps -Ao pid,args | grep kswapd - # 150 [kswapd0] - # 16490 grep kswapd - local ps_ret - ps_ret="$(ps -Ao pid,args)" - for temp_pid in $(echo "$ps_ret" | grep "$1" | awk '{print $1}'); do - for temp_tid in $(ls "/proc/$temp_pid/task/"); do - renice "$2" -p "$temp_tid" - done - done + true > "$LOG_FILE" } ############################### @@ -174,7 +106,7 @@ change_task_nice() # $1:"4.14" return:string_in_version match_linux_version() { - echo "$(cat /proc/version | grep "$1")" + echo "$(cat /proc/version | grep -i "$1")" } # return:platform_name diff --git a/magisk/script/libpowercfg.sh b/magisk/script/libpowercfg.sh index 6a1d24a..f066074 100644 --- a/magisk/script/libpowercfg.sh +++ b/magisk/script/libpowercfg.sh @@ -24,10 +24,6 @@ KSGL="/sys/class/kgsl/kgsl-3d0" DEVFREQ="/sys/class/devfreq" LPM="/sys/module/lpm_levels/parameters" MSM_PERF="/sys/module/msm_performance/parameters" -ST_TOP="/dev/stune/top-app" -ST_FORE="/dev/stune/foreground" -ST_BACK="/dev/stune/background" -ST_RT="/dev/stune/rt" SDA_Q="/sys/block/sda/queue" if [ "$(match_linux_version 4.19)" != "" ]; then @@ -129,32 +125,6 @@ set_corectl_param() done } -# array not working in sh shell -# $1:func $2:percluster_vals -# set_percluster() -# { -# local cpuids -# local prev_maxf="0" -# local now_maxf="0" -# for i in $(seq 0 9); do -# now_maxf="$(get_maxfreq $i)" -# if [ "$now_maxf" != "" ] && [ "$now_maxf" != "$prev_maxf" ]; then -# prev_maxf="$now_maxf" -# cpuids[${#cpuids[@]}]="$i" -# fi -# done - -# local vals -# vals=($2) - -# local composed="" -# for i in ${!cpuids[@]}; do -# composed="$composed ${cpuids[$i]}:${vals[$i]}" -# done - -# $($1 "$composed") -# } - # $1:upmigrate $2:downmigrate $3:group_upmigrate $4:group_downmigrate set_sched_migrate() { diff --git a/magisk/script/pathinfo.sh b/magisk/script/pathinfo.sh index cfaf09c..a615748 100644 --- a/magisk/script/pathinfo.sh +++ b/magisk/script/pathinfo.sh @@ -8,4 +8,5 @@ BIN_DIR="/bin" MODULE_PATH="$(dirname $(readlink -f "$0"))" MODULE_PATH="${MODULE_PATH%$SCRIPT_DIR}" PANEL_FILE="/sdcard/Android/panel_uperf.txt" +LOG_FILE="$MODULE_PATH/log.txt" PATH="/sbin/.magisk/busybox:/sbin:/system/sbin:/product/bin:/apex/com.android.runtime/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin" diff --git a/magisk/script/powercfg_main.sh b/magisk/script/powercfg_main.sh index 0c5b714..142fccd 100644 --- a/magisk/script/powercfg_main.sh +++ b/magisk/script/powercfg_main.sh @@ -30,7 +30,7 @@ save_panel() write_panel "" write_panel "Uperf https://github.com/yc9559/uperf/" write_panel "Author: Matt Yang" - write_panel "Version: v1 (20200516)" + write_panel "Version: v2 (20210102)" write_panel "Last performed: $(date '+%Y-%m-%d %H:%M:%S')" write_panel "" write_panel "[Uperf status]" diff --git a/magisk/script/powercfg_once.sh b/magisk/script/powercfg_once.sh index ce4311f..de8c192 100644 --- a/magisk/script/powercfg_once.sh +++ b/magisk/script/powercfg_once.sh @@ -6,226 +6,297 @@ BASEDIR="$(dirname "$0")" . $BASEDIR/libcommon.sh +. $BASEDIR/libcgroup.sh . $BASEDIR/libpowercfg.sh . $BASEDIR/libuperf.sh -# unify schedtune misc -# android 10 doesn't have schedtune.sched_boost_enabled exposed, default = true -mutate "0" $ST_BACK/schedtune.boost -mutate "0" $ST_BACK/schedtune.prefer_idle -mutate "0" $ST_FORE/schedtune.boost -mutate "0" $ST_FORE/schedtune.prefer_idle -mutate "0" $ST_TOP/schedtune.boost -mutate "0" $ST_TOP/schedtune.prefer_idle - -# CFQ io scheduler takes cgroup into consideration -lock_val "cfq" $SDA_Q/scheduler -# Flash doesn't have back seek problem, so penalty is as low as possible -lock_val "1" $SDA_Q/iosched/back_seek_penalty -# slice_idle = 0 means CFQ IOP mode, https://lore.kernel.org/patchwork/patch/944972/ -lock_val "0" $SDA_Q/iosched/slice_idle -# UFS 2.0+ hardware queue depth is 32 -lock_val "16" $SDA_Q/iosched/quantum -# lower read_ahead_kb to reduce random access overhead -lock_val "128" $SDA_Q/read_ahead_kb - -# Reserve 90% IO bandwith for foreground tasks -lock_val "1000" /dev/blkio/blkio.weight -lock_val "1000" /dev/blkio/blkio.leaf_weight -lock_val "100" /dev/blkio/background/blkio.weight -lock_val "100" /dev/blkio/background/blkio.leaf_weight - -# save ~100mw under light 3D workload -lock_val "0" $KSGL/force_no_nap -lock_val "1" $KSGL/bus_split -lock_val "0" $KSGL/force_bus_on -lock_val "0" $KSGL/force_clk_on -lock_val "0" $KSGL/force_rail_on - -# treat crtc_commit as background, avoid display preemption on big -change_task_cgroup "crtc_commit" "background" "cpuset" - -# fix laggy bilibili feed scrolling -change_task_cgroup "servicemanager" "top-app" "cpuset" -change_task_cgroup "servicemanager" "foreground" "stune" -change_task_cgroup "android.phone" "top-app" "cpuset" -change_task_cgroup "android.phone" "foreground" "stune" - -# treat surfaceflinger as top-app, foreground is restricted by uperf -change_task_cgroup "surfaceflinger" "top-app" "cpuset" -change_task_cgroup "surfaceflinger" "foreground" "stune" - -# fix system_server in /dev/stune/top-app/cgroup.procs -change_proc_cgroup "system_server" "top-app" "cpuset" -change_proc_cgroup "system_server" "foreground" "stune" -# ...but exclude UI related -change_thread_cgroup "system_server" "android.anim" "top-app" "stune" -change_thread_cgroup "system_server" "android.anim.lf" "top-app" "stune" -change_thread_cgroup "system_server" "android.ui" "top-app" "stune" -# ...and pin HeapTaskDaemon on LITTLE -change_thread_cgroup "system_server" "HeapTaskDaemon" "background" "cpuset" - -# reduce big cluster wakeup, eg. android.hardware.sensors@1.0-service -change_task_cgroup ".hardware." "background" "cpuset" -change_task_affinity ".hardware." "0f" -# ...but exclude fingerprint&camera&display service for speed -change_task_cgroup ".hardware.biometrics.fingerprint" "" "cpuset" -change_task_cgroup ".hardware.camera.provider" "" "cpuset" -change_task_cgroup ".hardware.display" "" "cpuset" -change_task_affinity ".hardware.biometrics.fingerprint" "ff" -change_task_affinity ".hardware.camera.provider" "ff" -change_task_affinity ".hardware.display" "ff" - -# provide best performance for fingerprint service -change_task_cgroup ".hardware.biometrics.fingerprint" "rt" "stune" -change_task_nice ".hardware.biometrics.fingerprint" "-20" -mutate "100" $ST_RT/schedtune.boost -mutate "1" $ST_RT/schedtune.prefer_idle - -# try to disable all kernel input boost -# Qualcomm -lock_val "0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0" $CPU_BOOST/input_boost_freq -lock_val "0" $CPU_BOOST/input_boost_ms -lock_val "0" $CPU_BOOST/sched_boost_on_input -lock_val "0" /sys/module/msm_performance/parameters/touchboost -lock_val "0" /sys/module/cpu_boost/parameters/boost_ms -# HTC -lock_val "0" /sys/power/pnpmgr/touch_boost -lock_val "0" /sys/power/pnpmgr/long_duration_touch_boost -# Samsung -mutate "0" /sys/class/input_booster/level -mutate "0" /sys/class/input_booster/head -mutate "0" /sys/class/input_booster/tail -# Samsung EPIC interfaces -mutate "0" /dev/cluster0_freq_min -mutate "0" /dev/cluster1_freq_min -mutate "0" /dev/cluster2_freq_min -# lock_val "0" /dev/bus_throughput -# lock_val "0" /dev/gpu_freq_min -# Samsung /kernel/sched/ems/... -mutate "0" /sys/kernel/ems/eff_mode -# 3rd -lock_val "0" /sys/kernel/cpu_input_boost/enabled -lock_val "0" /sys/kernel/cpu_input_boost/ib_freqs -lock_val "0" /sys/kernel/cpu_input_boost/ib_duration_m -lock_val "0" /sys/kernel/cpu_input_boost/ib_duration_ms -lock_val "0" /sys/module/cpu_boost/parameters/input_boost_enabled -lock_val "0" /sys/module/cpu_boost/parameters/dynamic_stune_boost -lock_val "0" /sys/module/cpu_boost/parameters/input_boost_ms -lock_val "0" /sys/module/cpu_boost/parameters/input_boost_ms_s2 -lock_val "0" /sys/module/dsboost/parameters/input_boost_duration -lock_val "0" /sys/module/dsboost/parameters/input_stune_boost -lock_val "0" /sys/module/dsboost/parameters/sched_stune_boost -lock_val "0" /sys/module/dsboost/parameters/cooldown_boost_duration -lock_val "0" /sys/module/dsboost/parameters/cooldown_stune_boost -lock_val "0" /sys/module/cpu_input_boost/parameters/input_boost_duration -lock_val "0" /sys/module/cpu_input_boost/parameters/dynamic_stune_boost -lock_val "0" /sys/module/cpu_input_boost/parameters/input_boost_freq_lp -lock_val "0" /sys/module/cpu_input_boost/parameters/input_boost_freq_hp -lock_val "0" /sys/module/cpu_input_boost/parameters/input_boost_freq_gold -lock_val "0" /sys/module/cpu_input_boost/parameters/flex_stune_boost_offset -lock_val "0" /sys/module/cpu_input_boost/parameters/dynamic_stune_boost -lock_val "0" /sys/module/cpu_input_boost/parameters/input_stune_boost_offset -lock_val "0" /sys/module/cpu_input_boost/parameters/max_stune_boost_offset -lock_val "0" /sys/module/cpu_input_boost/parameters/stune_boost_extender_ms -lock_val "0" /sys/module/cpu_input_boost/parameters/max_stune_boost_extender_ms -lock_val "0" /sys/module/cpu_input_boost/parameters/gpu_boost_extender_ms -lock_val "0" /sys/module/cpu_input_boost/parameters/flex_boost_freq_gold -lock_val "0" /sys/module/cpu_input_boost/parameters/flex_boost_freq_hp -lock_val "0" /sys/module/cpu_input_boost/parameters/flex_boost_freq_lp -lock_val "0" /sys/module/devfreq_boost/parameters/input_boost_duration - -# try to disable all other userspace performance daemon -# Qualcomm perfd -stop perfd -# Qualcomm perfhal -perfhal_stop -# brain service maybe not smart -stop oneplus_brain_service -# disable service below will BOOM -# stop vendor.power.stats-hal-1-0 -# stop vendor.power-hal-1-0 -# stop vendor.power-hal-1-1 -# stop vendor.power-hal-1-2 -# stop vendor.power-hal-1-3 - -# try to disable all hotplug -# Exynos hotplug -mutate "0" /sys/power/cpuhotplug/enabled -mutate "0" $CPU/cpuhotplug/enabled -# turn off msm_thermal -lock_val "0" /sys/module/msm_thermal/core_control/enabled -lock_val "N" /sys/module/msm_thermal/parameters/enabled -# 3rd -lock_val "0" /sys/kernel/intelli_plug/intelli_plug_active -lock_val "0" /sys/module/blu_plug/parameters/enabled -lock_val "0" /sys/devices/virtual/misc/mako_hotplug_control/enabled -lock_val "0" /sys/module/autosmp/parameters/enabled -lock_val "0" /sys/kernel/zen_decision/enabled -# bring all cores online -for i in 0 1 2 3 4 5 6 7 8 9; do - mutate "1" $CPU/cpu$i/online -done - -# no msm_performance limit -set_cpufreq_min "0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0" -set_cpufreq_max "0:9999000 1:9999000 2:9999000 3:9999000 4:9999000 5:9999000 6:9999000 7:9999000" -# conservative sched core_ctl -set_corectl_param "enable" "0:1 2:1 4:1 6:1 7:1" -set_corectl_param "busy_down_thres" "0:10 2:10 4:10 6:10 7:10" -set_corectl_param "busy_up_thres" "0:20 2:20 4:20 6:20 7:20" -set_corectl_param "offline_delay_ms" "0:100 2:100 4:100 6:100 7:100" - -# unify governor -if [ "$(is_eas)" == "true" ]; then - set_governor_param "scaling_governor" "0:schedutil 2:schedutil 4:schedutil 6:schedutil 7:schedutil" -else - set_governor_param "scaling_governor" "0:interactive 2:interactive 4:interactive 6:interactive 7:interactive" -fi -# more conservative governor -set_governor_param "schedutil/hispeed_load" "0:95 2:95 4:95 6:95 7:95" -set_governor_param "schedutil/hispeed_freq" "0:1200000 2:1200000 4:1200000 6:1200000 7:1200000" -set_governor_param "schedutil/pl" "0:0 2:0 4:0 6:0 7:0" -set_governor_param "schedutil/hispeed_load" "0:90" -set_governor_param "schedutil/hispeed_freq" "0:1000000" -# unify hmp interactive governor, only 2+2 4+2 4+4 -set_governor_param "interactive/use_sched_load" "0:1 2:1 4:1" -set_governor_param "interactive/use_migration_notif" "0:1 2:1 4:1" -set_governor_param "interactive/enable_prediction" "0:0 2:0 4:0" -set_governor_param "interactive/ignore_hispeed_on_notif" "0:0 2:0 4:0" -set_governor_param "interactive/fast_ramp_down" "0:0 2:0 4:0" -set_governor_param "interactive/boostpulse_duration" "0:0 2:0 4:0" -set_governor_param "interactive/boost" "0:0 2:0 4:0" -set_governor_param "interactive/timer_slack" "0:12345678 2:12345678 4:12345678" - -# disable sched global placement boost -lock_val "0" $SCHED/sched_boost -lock_val "1" $SCHED/sched_walt_rotate_big_tasks -lock_val "1000" $SCHED/sched_min_task_util_for_boost -lock_val "1000" $SCHED/sched_min_task_util_for_colocation -# scheduler boost for top app main from msm kernel 4.19 -lock_val "0" $SCHED/sched_boost_top_app -# unify WALT HMP sched -lock_val "5" $SCHED/sched_ravg_hist_size -lock_val "2" $SCHED/sched_window_stats_policy -lock_val "90" $SCHED/sched_spill_load -lock_val "1" $SCHED/sched_restrict_cluster_spill -lock_val "1" $SCHED/sched_prefer_sync_wakee_to_waker -lock_val "200000" $SCHED/sched_freq_inc_notify -lock_val "400000" $SCHED/sched_freq_dec_notify -# place a little heavier processes on big cluster, due to Cortex-A55 poor efficiency -# The same Binder, A55@1.0g took 7.3ms,A76@1.0g took 3.0ms, in this case, A76's efficiency is 2.4x of A55's. -# However in EAS model A76's efficiency is 1.7x of A55's, so the migrate thresholds need compensate. -set_sched_migrate "80 90" "30 60" "120" "100" -# prefer to use prev cpu, decrease jitter from 0.5ms to 0.3ms with lpm settings -lock_val "30000000" $SCHED/sched_migration_cost_ns -# OnePlus opchain pins UX threads on the big cluster -lock_val "0" /sys/module/opchain/parameters/chain_on - -# C-state controller -lock_val "1" $LPM/lpm_prediction -lock_val "0" $LPM/sleep_disabled -lock_val "25" $LPM/bias_hyst +unify_cgroup() +{ + mutate "0" /dev/stune/background/schedtune.boost + mutate "0" /dev/stune/background/schedtune.prefer_idle + mutate "0" /dev/stune/foreground/schedtune.boost + mutate "0" /dev/stune/foreground/schedtune.prefer_idle + mutate "0" /dev/stune/top-app/schedtune.boost + mutate "0" /dev/stune/top-app/schedtune.prefer_idle + mutate "100" /dev/stune/rt/schedtune.boost + mutate "1" /dev/stune/rt/schedtune.prefer_idle + + mutate "0-2,6" /dev/cpuset/foreground/cpus + mutate "0-2" /dev/cpuset/background/cpus + + # fix laggy bilibili feed scrolling + change_task_cgroup "servicemanager" "top-app" "cpuset" + change_task_cgroup "servicemanager" "foreground" "stune" + change_task_cgroup "android\.phone" "top-app" "cpuset" + change_task_cgroup "android\.phone" "foreground" "stune" + + # provide best performance for fingerprint service + change_task_cgroup "\.hardware\.biometrics\.fingerprint" "rt" "stune" + change_task_nice "\.hardware\.biometrics\.fingerprint" "-20" + + # reduce big cluster wakeup + pin_proc_on_pwr "crtc_commit" + pin_proc_on_pwr "crtc_event" + pin_proc_on_pwr "ueventd" + pin_proc_on_pwr "netd" + # eg. android.hardware.sensors@1.0-service + pin_proc_on_pwr "\.hardware\." + # ...but exclude fingerprint&camera&display service for speed + unpin_proc "\.hardware\.biometrics\.fingerprint" + unpin_proc "\.hardware\.camera\.provider" + unpin_proc "\.hardware\.display\." + + # pin system_server in foreground to save bandwidth for UI + change_task_cgroup "system_server" "foreground" "cpuset" + # ...but exclude Binders + unpin_thread "system_server" "Binder" + # ...set UX pipeline related thread to RT policy + change_thread_rt "system_server" "input" "3" + change_thread_rt "system_server" "android\.anim" "2" + change_thread_rt "system_server" "android\.ui" "2" + # ...and pin hardware related on LITTLE + pin_thread_on_pwr "system_server" "sensor" + pin_thread_on_pwr "system_server" "wifi" + pin_thread_on_pwr "system_server" "network" + pin_thread_on_pwr "system_server" "input" + pin_thread_on_pwr "system_server" "power" + pin_thread_on_pwr "system_server" "android\.io" + pin_thread_on_pwr "system_server" "\.bg" + + # let binders of surfaceflinger run with top-app + pin_proc_on_pwr "surfaceflinger" + change_thread_rt "surfaceflinger" "surfaceflinger" "4" + unpin_thread "surfaceflinger" "Binder" +} + +unify_cpufreq() +{ + # no msm_performance limit + set_cpufreq_min "0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0" + set_cpufreq_max "0:9999000 1:9999000 2:9999000 3:9999000 4:9999000 5:9999000 6:9999000 7:9999000" + + # stop sched core_ctl, game's main thread need be pinned on prime core + set_corectl_param "enable" "0:0 2:0 4:0 6:0 7:0" + + # unify governor + if [ "$(is_eas)" == "true" ]; then + set_governor_param "scaling_governor" "0:schedutil 2:schedutil 4:schedutil 6:schedutil 7:schedutil" + else + set_governor_param "scaling_governor" "0:interactive 2:interactive 4:interactive 6:interactive 7:interactive" + fi + + # more conservative governor + set_governor_param "schedutil/hispeed_load" "0:99 2:99 4:99 6:99 7:99" + set_governor_param "schedutil/hispeed_freq" "0:1500000 2:1500000 4:1500000 6:1500000 7:1500000" + set_governor_param "schedutil/pl" "0:0 2:0 4:0 6:0 7:0" + # ...but prefer longer idle time in light loads + set_governor_param "schedutil/hispeed_load" "0:80" + set_governor_param "schedutil/hispeed_freq" "0:1000000" + + # unify hmp interactive governor, only 2+2 4+2 4+4 + set_governor_param "interactive/use_sched_load" "0:1 2:1 4:1" + set_governor_param "interactive/use_migration_notif" "0:1 2:1 4:1" + set_governor_param "interactive/enable_prediction" "0:0 2:0 4:0" + set_governor_param "interactive/ignore_hispeed_on_notif" "0:0 2:0 4:0" + set_governor_param "interactive/fast_ramp_down" "0:0 2:0 4:0" + set_governor_param "interactive/boostpulse_duration" "0:0 2:0 4:0" + set_governor_param "interactive/boost" "0:0 2:0 4:0" + set_governor_param "interactive/timer_slack" "0:12345678 2:12345678 4:12345678" +} + +unify_adreno() +{ + # save ~100mw under light 3D workload + lock_val "0" $KSGL/force_no_nap + lock_val "1" $KSGL/bus_split + lock_val "0" $KSGL/force_bus_on + lock_val "0" $KSGL/force_clk_on + lock_val "0" $KSGL/force_rail_on +} + +unify_sched() +{ + # disable sched global placement boost + lock_val "0" $SCHED/sched_boost + lock_val "0" $SCHED/sched_walt_rotate_big_tasks + lock_val "1000" $SCHED/sched_min_task_util_for_boost + lock_val "1000" $SCHED/sched_min_task_util_for_colocation + + # scheduler boost for top app main from msm kernel 4.19 + lock_val "0" $SCHED/sched_boost_top_app + + # unify WALT HMP sched + lock_val "5" $SCHED/sched_ravg_hist_size + lock_val "2" $SCHED/sched_window_stats_policy + lock_val "90" $SCHED/sched_spill_load + lock_val "1" $SCHED/sched_restrict_cluster_spill + lock_val "1" $SCHED/sched_prefer_sync_wakee_to_waker + lock_val "200000" $SCHED/sched_freq_inc_notify + lock_val "400000" $SCHED/sched_freq_dec_notify + + # place a little heavier processes on big cluster, due to Cortex-A55 poor efficiency + # The same Binder, A55@1.0g took 7.3ms,A76@1.0g took 3.0ms, in this case, A76's efficiency is 2.4x of A55's. + # However in EAS model A76's efficiency is 1.7x of A55's, so the migrate thresholds need compensate. + set_sched_migrate "99" "40" "999" "888" + set_sched_migrate "99 99" "40 40" "999" "888" + + # prefer to use prev cpu, decrease jitter from 0.5ms to 0.3ms with lpm settings + lock_val "10000000" $SCHED/sched_migration_cost_ns +} + +unify_lpm() +{ + # C-state controller + lock_val "1" $LPM/lpm_prediction + lock_val "0" $LPM/sleep_disabled + lock_val "10" $LPM/bias_hyst +} + +disable_hotplug() +{ + # Exynos hotplug + mutate "0" /sys/power/cpuhotplug/enabled + mutate "0" $CPU/cpuhotplug/enabled + + # turn off msm_thermal + lock_val "0" /sys/module/msm_thermal/core_control/enabled + lock_val "N" /sys/module/msm_thermal/parameters/enabled + + # 3rd + lock_val "0" /sys/kernel/intelli_plug/intelli_plug_active + lock_val "0" /sys/module/blu_plug/parameters/enabled + lock_val "0" /sys/devices/virtual/misc/mako_hotplug_control/enabled + lock_val "0" /sys/module/autosmp/parameters/enabled + lock_val "0" /sys/kernel/zen_decision/enabled + + # bring all cores online + for i in 0 1 2 3 4 5 6 7 8 9; do + mutate "1" $CPU/cpu$i/online + done +} + +disable_kernel_boost() +{ + # Qualcomm + lock_val "0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0" $CPU_BOOST/input_boost_freq + lock_val "0" $CPU_BOOST/input_boost_ms + lock_val "0" $CPU_BOOST/sched_boost_on_input + lock_val "0" /sys/module/msm_performance/parameters/touchboost + lock_val "0" /sys/module/cpu_boost/parameters/boost_ms + + # MediaTek + # policy_status + # [0] PPM_POLICY_PTPOD: Meature PMIC buck currents + # [1] PPM_POLICY_UT: Unit test + # [2] PPM_POLICY_FORCE_LIMIT: enabled + # [3] PPM_POLICY_PWR_THRO: enabled + # [4] PPM_POLICY_THERMAL: enabled + # [5] PPM_POLICY_DLPT: Power measurment and power budget managing + # [6] PPM_POLICY_HARD_USER_LIMIT: enabled + # [7] PPM_POLICY_USER_LIMIT: enabled + # [8] PPM_POLICY_LCM_OFF: disabled + # [9] PPM_POLICY_SYS_BOOST: disabled + # [10] PPM_POLICY_HICA: ? + # Usage: echo <1(enable)/0(disable)> > /proc/ppm/policy_status + lock_val "0 0" /proc/ppm/policy_status + lock_val "1 0" /proc/ppm/policy_status + lock_val "2 0" /proc/ppm/policy_status + lock_val "3 0" /proc/ppm/policy_status + lock_val "4 1" /proc/ppm/policy_status + lock_val "5 0" /proc/ppm/policy_status + lock_val "6 0" /proc/ppm/policy_status + lock_val "7 0" /proc/ppm/policy_status + lock_val "8 0" /proc/ppm/policy_status + lock_val "9 0" /proc/ppm/policy_status + lock_val "10 0" /proc/ppm/policy_status + + # Samsung + mutate "0" /sys/class/input_booster/level + mutate "0" /sys/class/input_booster/head + mutate "0" /sys/class/input_booster/tail + + # Samsung EPIC interfaces + mutate "0" /dev/cluster0_freq_min + mutate "0" /dev/cluster1_freq_min + mutate "0" /dev/cluster2_freq_min + # lock_val "0" /dev/bus_throughput + # lock_val "0" /dev/gpu_freq_min + # Samsung /kernel/sched/ems/... + mutate "0" /sys/kernel/ems/eff_mode + + # Oneplus + lock_val "N" /sys/module/control_center/parameters/cpu_boost_enable + lock_val "N" /sys/module/control_center/parameters/ddr_boost_enable + lock_val "0" /sys/module/aigov/parameters/enable + lock_val "0" /sys/module/houston/parameters/ais_enable + lock_val "0" /sys/module/houston/parameters/fps_boost_enable + lock_val "0" /sys/module/houston/parameters/ht_registed + # OnePlus opchain pins UX threads on the big cluster + lock_val "0" /sys/module/opchain/parameters/chain_on + + # HTC + lock_val "0" /sys/power/pnpmgr/touch_boost + lock_val "0" /sys/power/pnpmgr/long_duration_touch_boost + + # 3rd + lock_val "0" /sys/kernel/cpu_input_boost/enabled + lock_val "0" /sys/kernel/cpu_input_boost/ib_freqs + lock_val "0" /sys/kernel/cpu_input_boost/ib_duration_m + lock_val "0" /sys/kernel/cpu_input_boost/ib_duration_ms + lock_val "0" /sys/module/cpu_boost/parameters/input_boost_enabled + lock_val "0" /sys/module/cpu_boost/parameters/dynamic_stune_boost + lock_val "0" /sys/module/cpu_boost/parameters/input_boost_ms + lock_val "0" /sys/module/cpu_boost/parameters/input_boost_ms_s2 + lock_val "0" /sys/module/dsboost/parameters/input_boost_duration + lock_val "0" /sys/module/dsboost/parameters/input_stune_boost + lock_val "0" /sys/module/dsboost/parameters/sched_stune_boost + lock_val "0" /sys/module/dsboost/parameters/cooldown_boost_duration + lock_val "0" /sys/module/dsboost/parameters/cooldown_stune_boost + lock_val "0" /sys/module/cpu_input_boost/parameters/input_boost_duration + lock_val "0" /sys/module/cpu_input_boost/parameters/dynamic_stune_boost + lock_val "0" /sys/module/cpu_input_boost/parameters/input_boost_freq_lp + lock_val "0" /sys/module/cpu_input_boost/parameters/input_boost_freq_hp + lock_val "0" /sys/module/cpu_input_boost/parameters/input_boost_freq_gold + lock_val "0" /sys/module/cpu_input_boost/parameters/flex_stune_boost_offset + lock_val "0" /sys/module/cpu_input_boost/parameters/dynamic_stune_boost + lock_val "0" /sys/module/cpu_input_boost/parameters/input_stune_boost_offset + lock_val "0" /sys/module/cpu_input_boost/parameters/max_stune_boost_offset + lock_val "0" /sys/module/cpu_input_boost/parameters/stune_boost_extender_ms + lock_val "0" /sys/module/cpu_input_boost/parameters/max_stune_boost_extender_ms + lock_val "0" /sys/module/cpu_input_boost/parameters/gpu_boost_extender_ms + lock_val "0" /sys/module/cpu_input_boost/parameters/flex_boost_freq_gold + lock_val "0" /sys/module/cpu_input_boost/parameters/flex_boost_freq_hp + lock_val "0" /sys/module/cpu_input_boost/parameters/flex_boost_freq_lp + lock_val "0" /sys/module/devfreq_boost/parameters/input_boost_duration +} + +disable_userspace_boost() +{ + # Qualcomm perfd + stop perfd + # Qualcomm perfhal + perfhal_stop + # brain service maybe not smart + stop oneplus_brain_service + # disable service below will BOOM + # stop vendor.power.stats-hal-1-0 + # stop vendor.power-hal-1-0 + # stop vendor.power-hal-1-1 + # stop vendor.power-hal-1-2 + # stop vendor.power-hal-1-3 +} + +clear_log +disable_userspace_boost +disable_kernel_boost +disable_hotplug +unify_cpufreq +unify_adreno +unify_sched +unify_lpm + +# make sure that all the related cpu is online +unify_cgroup # start uperf once only uperf_stop diff --git a/magisk/script/start_sfanalysis.sh b/magisk/script/start_sfanalysis.sh index 9a72125..30c6133 100644 --- a/magisk/script/start_sfanalysis.sh +++ b/magisk/script/start_sfanalysis.sh @@ -15,6 +15,7 @@ BASEDIR="$(dirname "$0")" SFA_REL="$BIN_DIR" SFA_NAME="injector" SFA_LIB="libsfanalysis.so" +SFA_LOG="/data/cache/injector.log" ############################### # SfAnalysis tool functions @@ -37,14 +38,14 @@ sfa_start() # fallback to standlone mode [ ! -f "$lib_path" ] && lib_path="$MODULE_PATH/$lib_path" - echo "$(date '+%Y-%m-%d %H:%M:%S')" > /cache/injector.log - "$MODULE_PATH/$SFA_REL/$SFA_NAME" "/system/bin/surfaceflinger" "$lib_path" >> /cache/injector.log + echo "$(date '+%Y-%m-%d %H:%M:%S')" > "$SFA_LOG" + "$MODULE_PATH/$SFA_REL/$SFA_NAME" "/system/bin/surfaceflinger" "$lib_path" >> "$SFA_LOG" # injection failed. Retry after setting SELinux to permissive if [ "$?" != "0" ]; then setenforce 0 - echo "Retry after setting SELinux to permissive." >> /cache/injector.log - "$MODULE_PATH/$SFA_REL/$SFA_NAME" "/system/bin/surfaceflinger" "$lib_path" >> /cache/injector.log + echo "Retry after setting SELinux to permissive." >> "$SFA_LOG" + "$MODULE_PATH/$SFA_REL/$SFA_NAME" "/system/bin/surfaceflinger" "$lib_path" >> "$SFA_LOG" fi } diff --git a/magisk/setup_uperf.sh b/magisk/setup_uperf.sh index 9d30025..77c3a1f 100755 --- a/magisk/setup_uperf.sh +++ b/magisk/setup_uperf.sh @@ -2,7 +2,7 @@ # Uperf Setup # https://github.com/yc9559/ # Author: Matt Yang & cjybyjk (cjybyjk@gmail.com) -# Version: 20200516 +# Version: 20201129 BASEDIR="$(dirname $(readlink -f "$0"))" @@ -111,7 +111,7 @@ _get_sdm865_type() _get_sdm76x_type() { - if [ "$(cat /sys/devices/soc0/revision)" == "2.0" ]; then + if [ "$(_get_maxfreq 7)" -gt 2800000 ]; then echo "sdm768" else echo "sdm765" @@ -289,6 +289,10 @@ _get_cfgname() "universal8895") ret="$(_get_e8895_type)" ;; "universal8890") ret="e8890" ;; "universal7420") ret="e7420" ;; + "mt6873") ret="mt6873" ;; + "mt6875") ret="mt6875" ;; + "mt6885") ret="mt6885" ;; + "mt6889") ret="mt6889" ;; *) ret="unsupported" ;; esac echo "$ret" @@ -299,7 +303,7 @@ uperf_print_banner() echo "" echo "* Uperf https://github.com/yc9559/uperf/" echo "* Author: Matt Yang" - echo "* Version: v1 (20200516)" + echo "* Version: v2 (20210102)" echo "" } diff --git a/magisk/system/vendor/etc/init/vendor.mediatek.hardware.power@1.0-service.rc b/magisk/system/vendor/etc/init/vendor.mediatek.hardware.power@1.0-service.rc new file mode 100644 index 0000000..6b38a09 --- /dev/null +++ b/magisk/system/vendor/etc/init/vendor.mediatek.hardware.power@1.0-service.rc @@ -0,0 +1,2 @@ +on post-fs-data + mkdir /data/vendor/powerhal 0775 system system diff --git a/magisk/system/vendor/etc/init/vendor.mediatek.hardware.power@1.1-service.rc b/magisk/system/vendor/etc/init/vendor.mediatek.hardware.power@1.1-service.rc new file mode 100644 index 0000000..6b38a09 --- /dev/null +++ b/magisk/system/vendor/etc/init/vendor.mediatek.hardware.power@1.1-service.rc @@ -0,0 +1,2 @@ +on post-fs-data + mkdir /data/vendor/powerhal 0775 system system diff --git a/magisk/system/vendor/etc/init/vendor.mediatek.hardware.power@1.2-service.rc b/magisk/system/vendor/etc/init/vendor.mediatek.hardware.power@1.2-service.rc new file mode 100644 index 0000000..6b38a09 --- /dev/null +++ b/magisk/system/vendor/etc/init/vendor.mediatek.hardware.power@1.2-service.rc @@ -0,0 +1,2 @@ +on post-fs-data + mkdir /data/vendor/powerhal 0775 system system diff --git a/magisk/system/vendor/etc/init/vendor.mediatek.hardware.power@1.3-service.rc b/magisk/system/vendor/etc/init/vendor.mediatek.hardware.power@1.3-service.rc new file mode 100644 index 0000000..6b38a09 --- /dev/null +++ b/magisk/system/vendor/etc/init/vendor.mediatek.hardware.power@1.3-service.rc @@ -0,0 +1,2 @@ +on post-fs-data + mkdir /data/vendor/powerhal 0775 system system