文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

cpu参数调优

2023-08-28 11:55

关注

CPU目录

查看数据

在手机上,我们可以进入adb shell查看cpu相关信息,例如
在这里插入图片描述
在/sys/devices/system/cpu目录下可以看到你的CPU有几个核心,如果是双核,就是cpu0和cpu1,如果是四核,还会加上cpu2和cpu3,像我们手中现在这部手机就是八核的。
在这里插入图片描述
可以进入present查看设备最多支持多少个CPU
在这里插入图片描述
可以进入online查看哪些CPU在线,反之也可以进入offline查看不在线的CPU

其他

高通平台的话在cpufreq目录下面有/interactive目录可以设置升频降频的延时以及一些其他操作

单个CPU目录

cpufreq

开启核心

进入单个cpu后,可以查看单独核心的内容
在这里插入图片描述
online里的内容代表这个核心有没有被开启,0代表关闭,1代表开启。
在这里插入图片描述
我们也可以运用命令来调整它的状态

echo 0 > /sys/devices/system/cpu/cpu0/online # 关闭该核心
echo 1 > /sys/devices/system/cpu/cpu0/online # 打开该核心

其余参数可以进入cpufreg查看
在这里插入图片描述

governor

前面我们说到,scaling_available_governors可以显示当前内核中支持的所有cpufreq governor类型,那么原生支持的cpufreq governor有哪些呢

在本机器中,总共支持5种

ondemand userspace powersave performance schedutil

各个项目有所不同,具体查看自己手机内所支持的governor。

echo userspace(或者其他策略) > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

然后使用命令去查看更改是否成功

cat scaling_governor

频率

首先,我们可以通过

cpuinfo_min_freg cpu
cpuinfo_max_freg cpu
cpuinfo_cur_freg

去查看CPU的最大、最小、当前频率,并且可以通过

scaling_available_frequencies

查看cpu支持的频率
那么我们如果要调整cpu的频率,我们首先需要进入用户模式,也就是将governor调整至userspace

echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
然后
echo 1000000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo 1000000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq

我们就可以看到cpu频率发生改变了,但是这个频率设定要在支持范围之内
在这里插入图片描述

mtk芯片配置app白名单路径

vender/mediatek/proprietary/hardware/power/config/mt[xxxx]/app_list
在这个名单目录里面,我们可以对特定的APP进行调整和配置

在这里插入图片描述

例如这一个配置,就是对zee5APP的配置(百度出来是一个印度的视频点播软件),这个软件只调整了CPU频率,还有其他的软件调整了帧率或者DDR或者GPU。

在这张图里面这两个参数的意思分别是
PERF_RES_CPUFREQ_MIN_CLUSTER_0: 是对小核频率的最小值的修改,也就是在运行这个软件时CPU的最小频率也会达到1.4GHz
PERF_RES_CPUFREQ_MIN_CLUSTER_1: 是对大核频率的最小值的修改,也就是在运行这个软件时CPU的最小频率也会达到1.4GHz
若CPU最高频率不到1.4GHz,则默认最高频运行

那么由此我们可以延展出更多的参数含义

Resource ID含义更改方案
PERF_RES_CPUFREQ_PERF_MODE CPU高性能模式1:开启,打开CPU所有核心并且拉到最高频
PERF_RES_CPUCORE_MIN_CLUSTER_0使用的最少CPU小核数量
PERF_RES_CPUCORE_MIN_CLUSTER_1使用的最小CPU大核数量
PERF_RES_CPUCORE_MAX_CLUSTER_0使用的最多CPU小核数量
PERF_RES_CPUCORE_MAX_CLUSTER_1使用的最多CPU大核数量
PERF_RES_SCHED_PREFER_IDLE_TA倾向于向顶级应用使用空闲CPU0代表不可用 1代表开启
PERF_RES_SCHED_PREFER_IDLE_FG倾向于向前台应用使用空闲CPU0代表不可用 1代表开启
PERF_RES_SCHED_BOOST设置大核优先默认是0 ,0代表不可用,1代表倾向于所有任务都放在大核上处理,2代表通过CPUSET将top和fg应用放在大核上
这里的参数都是core number,输入想要使用的核数量

DDR

在mtk的官网,我们可以找到查找到有关CPU、DDR或者GPU的相关命令,但是这里有一个问题,那就是现在手上接触的是KI7项目,它的内核kernel是-4.x版本的,而mtk给的标准查看DDR命令是-5.x版本的,所以我们要进行一些对应的更改

更改DDR频率

如果要将DDR频率调至对大,则

adb shell “echo 0 > /sys/devices/platform/10012000.dvfsrc/helio-dvfsrc/dvfsrc_req_ddr_opp”

查看当前的DDR频率(Current)

adb shell “cat /sys/devices/platform/10012000.dvfsrc/helio-dvfsrc/dvfsrc_dump | grep -e uv -e khz”

但是,如果要查看内核kernel版本为-5.x版本的话,指令就要分别改为

adb shell “echo 0 > /sys/kernel/helio-dvfsrc/dvfsrc_force_vcore_dvfs_opp”----------将DDR频率调至最大

adb shell “cat /sys/kernel/helio-dvfsrc/dvfsrc_dump | grep -e uv -e khz” 查看当前的DDR频率

在代码中提高DDR频率

在kernel层中:
参考 kernel-4.14/drivers/misc/mediatek/usb_boost/v1/usb_boost_plat.c
1) Makefile:
ccflags-y += -I$(srctree)/drivers/devfreq/

2) kernel usage:
          #include <linux/pm_qos.h>          #include "helio-dvfsrc-opp.h"          static struct pm_qos_request xxx_ddr_req;          pm_qos_add_request(&xxx_ddr_req, PM_QOS_DDR_OPP_DEFAULT_VALUE);          pm_qos_update_request(&xxx_ddr_req, DDR_OPP_0); //LP4-3200, LP3-1866, 最高檔          pm_qos_update_request(&xxx_ddr_req, DDR_OPP_1); //LP4-2400, LP3-1600 or above          pm_qos_update_request(&xxx_ddr_req, DDR_OPP_3); //LP4-1600, LP3-1200 or above          pm_qos_update_request(&xxx_ddr_req, DDR_OPP_UNREQ); //un-request, or PM_QOS_DDR_OPP_DEFAULT_VALUE          可以参考:          static int vcorefs_hold(struct act_arg_obj *arg)          {                    pm_qos_update_request(&pm_qos_ddr_req, DDR_OPP_0);                    return 0;          }          static int vcorefs_release(struct act_arg_obj *arg)          {                    pm_qos_update_request(&pm_qos_ddr_req, DDR_OPP_UNREQ);                    return 0;          }         注意:vcorefs_hold 和 vcorefs_release要对应起来,否则会有power问题。

在java代码中更改,要查看mtk官网中给的接口怎么使用,每个版本都有区别

GPU

GPU也就是图形处理器,我们一般俗称“显卡”,一款GPU的好坏,主要取决于它的多边形生成能力和像素渲染能力。

一般来说GPU的使用都是正常的,如果不对劲就要check GPU 。
在这里插入图片描述

如下两种情况需要check GPU:
1、 wait for GPU completion 时间超过1个vsync, 且没有hwc release时间长
若有hwc release 时间长,需要check SurfaceFlinger
2、GPU相关function 除runnable以外的持续时间较对比机长
若有runnable时间长,则需要check runnable 时间长的原因

方法为

确认是GPU处理时间长,可以先boost GPU试试看,不管是否有效,可以将结果带给GPU owner。

boost方式为:

adb shell “cat /proc/gpufreq/gpufreq_opp_dump” //确认GPU所支持的档位

[0] freq = 850000, volt = 80000, vsram = 90000, gpufreq_power = 935

[1] freq = 823000, volt = 78750, vsram = 88750, gpufreq_power = 885

adb shell “echo 850000 > /proc/gpufreq/gpufreq_opp_freq” //将最大值设置下去,因platform不同,所支持的最大值不同

如果GPU频率/gpu_time与对比机明显有差异,可以尝试调整GPU policy:

/
//Game APP是否配置了 GPU min/max freq,如果有,尝试调整GPU min/max档位,提升performance or 降低power


// loading-based margin (非单一 render thread),拉频预留的天花板百分比
// 数字越大,性能越好,但功耗会变差 ,表示gpu loading (100-50)=50% 时, 会拉一次gpu freq
// 默认30 ,表示loading达到 70%的时候就开始升4档


// 本参数和PERF_RES_GPU_GED_TIMER_BASE_DVFS_MARGIN配合使用,每次会拉高几个档位调频,数字越大,越for GPU performance,相对power越多


// GPU DVFS margin value with frame-based margin,多线程版本用loading base,其它用 framebase, 预留的GPU能力,对应节点是/sys/kernel/debug/ged/hal/dvfs_margin_value
// 百位1~5 表示 dynamic margin,即加1%~30%
// margin越大表示gpu 调频越积极, 当然功耗也会上去一些,默认是130。

在这里插入图片描述

来源地址:https://blog.csdn.net/m0_53696288/article/details/127670732

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯