硬件平台:MT6797
软件平台:Android 6.0
今日在调整系统跑分性能,我们的板子用的MT6797,板子起来之后,通过adb命令行,查看cpu的状态,因为是十核,因此写了一个精悍的小脚本获取各cpu状态:
#!/system/bin/sh
#echo "1" > /sys/devices/system/cpu/cpu6/online
#cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
#echo "1391000" > /sys/devices/system/cpu/cpu6/cpufreq/scaling_setspeed
CPU_PATH=/sys/class/thermal
CPU_FREQ_BASE=/sys/devices/system/cpu
echo "#####################################"
for i in `seq 11`
do
((i=$i-1))
echo "Cpu$i's Temp is: `cat $CPU_PATH/thermal_zone$i/temp`"
online=`cat $CPU_FREQ_BASE/cpu$i/online`
if [ $online = "1" ];then
echo "Cpu$i's Freq is: `cat $CPU_FREQ_BASE/cpu$i/cpufreq/scaling_cur_freq`"
else
echo "Cpu$i is OFF"
fi
echo -e "\r"
done
echo "#####################################"
push到system/bin目录,运行结果如下:
root@aeon6797_6c_m:/ # cpu_stat.sh
#####################################
Cpu0's Temp is: 30000
Cpu0's Freq is: 715000
Cpu1's Temp is: 32500
Cpu1's Freq is: 715000
Cpu2's Temp is: -127000
Cpu2's Freq is: 715000
Cpu3's Temp is: 26123
Cpu3's Freq is: 715000
Cpu4's Temp is: 60000
Cpu4's Freq is: 1846000
Cpu5's Temp is: 1
Cpu5 is OFF
Cpu6's Temp is: 29000
Cpu6 is OFF
Cpu7's Temp is: 32000
Cpu7 is OFF
Cpu8's Temp is: 31300
Cpu8 is OFF
Cpu9's Temp is: 34300
Cpu9 is OFF
Cpu10's Temp is: 27700
/system/bin/cpu_stat.sh[19]: cat: /sys/devices/system/cpu/cpu10/online: No such file or directory
/system/bin/cpu_stat.sh[19]: [: 1: unexpected operator/operand
Cpu10 is OFF
#####################################
可以看到cpu0~4处于online态,后边都是offline态,通过一个设置状态的脚本把后边五个开启:
cpuset.sh如下:
#!/system/bin/sh
echo "================cpu set=================="
# 0~3 max:1391000
# 4~7 max:1846000
# 8~9 max:2314000
for i in `seq 10`
do
((i=$i-1))
# ((j=$i+4))
echo "performance" > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor
if [ $i -ge "4" ] && [ $i -le "7" ]; then
echo "1846000" > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_setspeed
echo "1" > /sys/devices/system/cpu/cpu$i/online
elif [ $i -le "3" ]; then
echo "1391000" > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_setspeed
else
echo "2314000" > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_setspeed
echo "1" > /sys/devices/system/cpu/cpu$i/online
fi
done
echo "================set finish================"
执行完成之后,再用第一个脚本查看结果:
root@aeon6797_6c_m:/ # cpu_stat.sh
#####################################
Cpu0's Temp is: 30000
Cpu0's Freq is: 1391000
Cpu1's Temp is: 35600
Cpu1's Freq is: 1391000
Cpu2's Temp is: -127000
Cpu2's Freq is: 1391000
Cpu3's Temp is: 28626
Cpu3's Freq is: 1391000
Cpu4's Temp is: 60000
Cpu4's Freq is: 1846000
Cpu5's Temp is: 2
Cpu5's Freq is: 1846000
Cpu6's Temp is: 0
Cpu6's Freq is: 1846000
Cpu7's Temp is: 15000
Cpu7's Freq is: 1846000
Cpu8's Temp is: 42500
Cpu8's Freq is: 2314000
Cpu9's Temp is: 38000
Cpu9's Freq is: 2314000
Cpu10's Temp is: 30300
/system/bin/cpu_stat.sh[19]: cat: /sys/devices/system/cpu/cpu10/online: No such file or directory
/system/bin/cpu_stat.sh[19]: [: 1: unexpected operator/operand
Cpu10 is OFF
#####################################
可以看到cpu很雄壮的开始跑了。
GPU 频率控制相关部分稍后奉上。。。
今儿把gpu满频工作的部分追加上,具体改动如下:
--- a/kernel-3.18/drivers/misc/mediatek/base/power/mt6797/mt_gpufreq.c
+++ b/kernel-3.18/drivers/misc/mediatek/base/power/mt6797/mt_gpufreq.c
@@ -272,6 +272,7 @@ static gpufreq_ptpod_update_notify g_pGpufreq_ptpod_update_notify;
/* Full Yield */
/* 20160119 type = 8*/
static struct mt_gpufreq_table_info mt_gpufreq_opp_v7_tbl_e1_0[] = {
+#if 0
GPUOP(GPU_DVFS_FREQ1, GPU_DVFS_VOLT0, 0),
GPUOP(GPU_DVFS_FREQ2, GPU_DVFS_VOLT1, 1),
GPUOP(GPU_DVFS_FREQ3, GPU_DVFS_VOLT4, 2),
@@ -279,6 +280,10 @@ static struct mt_gpufreq_table_info mt_gpufreq_opp_v7_tbl_e1_0[] = {
GPUOP(GPU_DVFS_FREQ5, GPU_DVFS_VOLT9, 4),
GPUOP(GPU_DVFS_FREQ6, GPU_DVFS_VOLT11, 5),
GPUOP(GPU_DVFS_FREQ8, GPU_DVFS_VOLT13, 6),
+#endif
+
+ //synative GPU always running at full speed
+ GPUOP(GPU_DVFS_FREQ0, GPU_DVFS_VOLT0, 0),
};
/* 20151221 type = 0*/
static struct mt_gpufreq_table_info mt_gpufreq_opp_tbl_e1_0[] = {
gpu配置包含一个table表,分为不通的档,每档对应不通的电压值,我们就是把表配置为固定的电压和最高频率。