初試:優化高通cpu在MIUI上的配置
前言
當前手機硬體日新月異,在我個人看來,某種程度上手機硬體效能已經過剩,手機的效能反而在於軟體上的優化。比如小米4搭載的高通801這款cpu四核2.5GHZ,效能已經不錯,但是由於MIUI對cpu進行無腦的限頻,均衡模式下,關閉兩個核心,其他兩個核心頻率限制在1036MHz,1036MHz!這樣無異於殺雞用牛刀,而且用的是刀柄,連雞都搞不定。估計把效能壓得如此底,廠商也有自己的考慮吧。
正題
經過了一個上午的摸索,也是通曉一二。
下面介紹要修改的cpu配置檔案的含義
主要檔案有
1、thermal-engine-8974.conf(system/etc目錄下 )
2、changepowermode.sh(system/bin目錄下)
1、thermal-engine-8974.conf
用於設定cpu在指定條件下觸發的動作的演算法
其中各個屬性含義:
sampling:取樣時間
[CPU_MONITOR]:演算法例項標籤
algo_type:演算法型別,共有4種: monitor, pid, ss, virtual
sensor:感測器
thresholds: 覺閾值(觸發條件)
thresholds_clr:清除覺閾值(取消觸發的動作的條件)
actions:動作
action_info:動作值
changepowermode.sh
顧名思義,這個檔案就是MIUI切換均衡模式和效能模式的命令檔案。
target=`getprop ro.product.model`
powermode=`getprop persist.sys.aries.power_profile`
dev_governor=`ls /sys/class/devfreq/qcom,cpubw*/governor`
case "$target" in
"MI 3W" | "MI 3C")
case "$powermode" in
"high")
echo 2265600 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 2265600 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
echo 2265600 > /sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq
echo 2265600 > /sys/devices/system/cpu/cpu3/cpufreq/scaling_max_freq
echo 20000 > /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay
echo 60 > /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load
echo 1190400 > /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
echo 70 > /sys/devices/system/cpu/cpufreq/interactive/target_loads
echo 40000 > /sys/devices/system/cpu/cpufreq/interactive/min_sample_time
echo 20 > /sys/module/cpu_boost/parameters/boost_ms
echo 1728000 > /sys/module/cpu_boost/parameters/sync_threshold
echo 1497600 > /sys/module/cpu_boost/parameters/input_boost_freq
echo 40 > /sys/module/cpu_boost/parameters/input_boost_ms
echo 255 > /sys/class/leds/lcd-backlight/max_brightness
echo 578000000 > /sys/class/kgsl/kgsl-3d0/max_gpuclk
echo "msm_cpufreq" > $dev_governor
;;
"middle")
echo 2265600 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 2265600 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
echo 2265600 > /sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq
echo 2265600 > /sys/devices/system/cpu/cpu3/cpufreq/scaling_max_freq
echo "20000 1400000:40000 1700000:20000" > /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay
echo 90 > /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load
echo 1190400 > /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
echo "85 1500000:90 1800000:70" > /sys/devices/system/cpu/cpufreq/interactive/target_loads
echo 40000 > /sys/devices/system/cpu/cpufreq/interactive/min_sample_time
echo 20 > /sys/module/cpu_boost/parameters/boost_ms
echo 1728000 > /sys/module/cpu_boost/parameters/sync_threshold
echo 1190400 > /sys/module/cpu_boost/parameters/input_boost_freq
echo 40 > /sys/module/cpu_boost/parameters/input_boost_ms
echo 255 > /sys/class/leds/lcd-backlight/max_brightness
echo 578000000 > /sys/class/kgsl/kgsl-3d0/max_gpuclk
echo "cpubw_hwmon" > $dev_governor
;;
"low")
echo 1036800 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 1036800 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
echo 1036800 > /sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq
echo 1036800 > /sys/devices/system/cpu/cpu3/cpufreq/scaling_max_freq
echo "40000" > /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay
echo 90 > /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load
echo 960000 > /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
echo "85 960000:70" > /sys/devices/system/cpu/cpufreq/interactive/target_loads
echo 40000 > /sys/devices/system/cpu/cpufreq/interactive/min_sample_time
echo 0 > /sys/module/cpu_boost/parameters/boost_ms
echo 960000 > /sys/module/cpu_boost/parameters/sync_threshold
echo 960000 > /sys/module/cpu_boost/parameters/input_boost_freq
echo 40 > /sys/module/cpu_boost/parameters/input_boost_ms
echo 100 > /sys/class/leds/lcd-backlight/max_brightness
echo 330000000 > /sys/class/kgsl/kgsl-3d0/max_gpuclk
echo "cpubw_hwmon" > $dev_governor
;;
esac
;;
"LEO "* | "MI 4"* | "MI NOTE"* | "VIRGO"*)
case "$powermode" in
"high")
stop mpdecision
sleep 1
echo 1 > /sys/devices/system/cpu/cpu1/online
echo 1 > /sys/devices/system/cpu/cpu2/online
echo 1 > /sys/devices/system/cpu/cpu3/online
echo 1 > /sys/devices/system/cpu/cpu1/online
echo 1 > /sys/devices/system/cpu/cpu2/online
echo 1 > /sys/devices/system/cpu/cpu3/online
echo 2457600 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 2457600 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
echo 2457600 > /sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq
echo 2457600 > /sys/devices/system/cpu/cpu3/cpufreq/scaling_max_freq
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo performance > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
echo performance > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
echo performance > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
echo 20 > /sys/module/cpu_boost/parameters/boost_ms
echo 1728000 > /sys/module/cpu_boost/parameters/sync_threshold
echo 1497600 > /sys/module/cpu_boost/parameters/input_boost_freq
echo 40 > /sys/module/cpu_boost/parameters/input_boost_ms
echo 255 > /sys/class/leds/lcd-backlight/max_brightness
echo 578000000 > /sys/class/kgsl/kgsl-3d0/max_gpuclk
echo performance > /sys/class/kgsl/kgsl-3d0/devfreq/governor
echo "msm_cpufreq" > $dev_governor
;;
"middle")
echo interactive > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo interactive > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
echo interactive > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
echo interactive > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
echo 2457600 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 2457600 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
echo 2457600 > /sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq
echo 2457600 > /sys/devices/system/cpu/cpu3/cpufreq/scaling_max_freq
echo "20000 1400000:40000 1700000:20000" > /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay
echo 90 > /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load
echo 1190400 > /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
echo "85 1500000:99" > /sys/devices/system/cpu/cpufreq/interactive/target_loads
echo 40000 > /sys/devices/system/cpu/cpufreq/interactive/min_sample_time
echo 20 > /sys/module/cpu_boost/parameters/boost_ms
echo 1497600 > /sys/module/cpu_boost/parameters/sync_threshold
echo 1190400 > /sys/module/cpu_boost/parameters/input_boost_freq
echo 40 > /sys/module/cpu_boost/parameters/input_boost_ms
echo 255 > /sys/class/leds/lcd-backlight/max_brightness
echo 578000000 > /sys/class/kgsl/kgsl-3d0/max_gpuclk
echo msm-adreno-tz > /sys/class/kgsl/kgsl-3d0/devfreq/governor
echo "cpubw_hwmon" > $dev_governor
start mpdecision
;;
esac
;;
esac
可以看到 “LEO “* | “MI 4”* | “MI NOTE”* | “VIRGO”*)
case “$powermode” in
“high”)
的部分,這是效能模式下的調節檔案。
“middle”,是均衡模式的部分。
根據changepowermode的內容,可知裡面各個檔案的主要功能:
1、/sys/devices/system/cpu/cpuX/cpufreq/scaling_governor
用於控制cpu0的執行模式
執行模式有6種:interactive,conservative,ondemand,userspace,powersave,performance
2、/sys/devices/system/cpu/cpuX/cpufreq/scaling_max_freq
用於控制cpu的最大頻率,頻率從300000~2457600(此為801的範圍,其他型號各異)。系統就是通過這個檔案來限頻,修改此檔案可以修改cpu最高頻率。
3、/sys/devices/system/cpu/cpufreq/interactive/ 下的檔案
above_hispeed_delay:跳到高頻要花的時間(微妙)
go_hispeed_load:是高頻閾值。當系統的負載超過該值,升頻,否則降頻。具體如何升頻、如何降頻,後面介紹。
hispeed_freq:高速狀態的頻率
target_loads:CPU的負載達到設定百分比時進入預設的頻率
min_sample_time:下調頻率的最小時間. 該值設定的越高, CPU降頻越慢. 單位uS, 例如80000=80ms
target_loads: 一般情況下, 調速器根據target_loads引數調整頻率, 負載超過設定值時提高頻率, 反之則下降頻率. 該值設定的越低, CPU越容易提升頻率. 單位:%, 頻率單位:KHz
above_hispeed_delay:當核心保持hispeed_freq超過一定時間(above_hispeed_delay), 且負載依然很高, CPU頻率才會繼續上升.
4、 /sys/module/cpu_boost/parameters/
boost_ms:加速時間
sync_threshold:同步閾值
input_boost_freq:檢測到輸入時加速的頻率
input_boost_ms:檢測到輸入時的加速時間
5、除了以上檔案,我還發現了對防止被系統反覆修改為限頻的兩個很重要的檔案,分別是/sys/devices/system/cpu/cpuX/cpufreq/sys_cap_freq和/sys/devices/system/cpu/cpu0/cpufreq/thermal_capp_freq。
sys_cap_freq:意為系統覆蓋頻率,調了一下里面的引數,發現如果從效能模式返回均衡模式,限頻的就是這個引數
thermal_capp_freq:這個是效能模式的引數,同理。
注意:修改檔案需要使用RE管理器和獲取root。
通過修改上面的引數,解除限頻。經過測試,為了避免參數被系統修改,需要關閉MIUI的神隱模式。
以下是我自用的修改後的截圖,較為激進,當然,保守的也可以自行修改。
thermal-engine-8974.conf
sampling 5000
[CPU0_MONITOR]
algo_type monitor
sensor cpu0
sampling 1000
thresholds 55000 60000 65000 70000 85000 105000 115000
thresholds_clr 50000 55000 60000 66000 80000 90000 110000
actions cpu cpu cpu cpu cpu cpu shutdown
action_info 2457600 2457600 2457600 2457600 1728000 1036800 0
[CPU1_MONITOR]
algo_type monitor
sensor cpu1
sampling 65
thresholds 115000
thresholds_clr 110000
actions shutdown
action_info 0
[CPU2_MONITOR]
algo_type monitor
sensor cpu2
sampling 65
thresholds 115000
thresholds_clr 110000
actions shutdown
action_info 0
[CPU3_MONITOR]
algo_type monitor
sensor cpu3
sampling 65
thresholds 115000
thresholds_clr 110000
actions shutdown
action_info 0
[BATTERY_MONITOR]
algo_type monitor
sensor batt_temp
sampling 1000
thresholds 380 395 500 550
thresholds_clr 370 385 450 500
actions cpu cpu cpu cpu
action_info 2457600 2457600 2457600 2457600
/sys/devices/system/cpu/cpuX/cpufreq/scaling_max_freq
2457600
/sys/devices/system/cpu/cpuX/cpufreq/sys_cap_freq
2457600
其他檔案的保持不變。
效能監視器下截圖:
完畢。