性能优化工具:CPU性能分析、调试和定频(MTK)
9:51 amThursday, 3 November 2022 (HKT)Time in Hong Kong
获取
在线CPU
PPM使能
CPU频率(proc)
CPU频率(sys)
CPU档位OPPidx(频点)
CPU和高速缓存电压
CPU算力
支持的调频策略
正在使用的调频策略
调频驱动
当前启用的核心
当前固定的频率
设置
开关CPU核心个数
定频
绑核
相关源码
术语
调频策略
获取在线CPU12cat /sys/devices/system/cpu/online0-7
PPM使能
性能管理模块
12345cat /proc/ppm/enabledppm is enabledecho 0 > /proc/ppm/enabledppm is disabled
CPU频率(proc)12cat /proc/cpufreq/MT_CPU_DVFS_L/cpufreq_freqcat /proc/cpufreq/MT_CPU_DVFS_LL/cpufreq_freq
12345cat /proc/cpufreq/MT_CPU_DVFS_L/cpufreq_freq1326000 KHzcat /proc/cpufreq/MT_CPU_DVFS_LL/cpufreq_freq793000 KHz
proc节点优先级可能(通常,平台差异)低于thermal
CPU频率(sys)1234567891011121314ls /sys/devices/system/cpucpu0 cpu1 cpu2 cpu3 cpu4 cpu5 cpu6 cpu7 cpufreq cpuidle cputopo eas hotplug isolated kernel_max modalias offline online possible power present rq-stats sched sched_isolated ueventcd /sys/devices/system/cpucat cpu[0-7]/cpufreq/cpuinfo_cur_freq15080001508000150800015080001846000184600018460001846000
CPU档位OPPidx(频点)12cat /proc/cpufreq/MT_CPU_DVFS_L/cpufreq_oppidxcat /proc/cpufreq/MT_CPU_DVFS_LL/cpufreq_oppidx
1234567891011121314151617181920212223242526272829303132333435363738394041cat /proc/cpufreq/MT_CPU_DVFS_L/cpufreq_oppidx[MT_CPU_DVFS_L/4]cpufreq_oppidx = 15 0 (1989000, 103125) 1 (1924000, 101875) 2 (1846000, 99375) 3 (1781000, 98125) 4 (1716000, 96250) 5 (1677000, 94375) 6 (1625000, 92500) 7 (1586000, 91250) 8 (1508000, 88750) 9 (1417000, 86250) 10 (1326000, 83750) 11 (1248000, 81250) 12 (1131000, 78750) 13 (1014000, 76250) 14 (910000, 73750) 15 (793000, 71250)cat MT_CPU_DVFS_LL/cpufreq_oppidx[MT_CPU_DVFS_LL/0]cpufreq_oppidx = 13 0 (1989000, 93750) 1 (1924000, 92500) 2 (1846000, 90000) 3 (1781000, 88750) 4 (1716000, 87500) 5 (1677000, 85625) 6 (1625000, 83750) 7 (1586000, 82500) 8 (1508000, 80000) 9 (1417000, 77500) 10 (1326000, 75000) 11 (1248000, 71875) 12 (1131000, 69375) 13 (1014000, 66250) 14 (910000, 63125) 15 (793000, 60000)
输出解析:
123[CPU名称_核心簇/CPUID]cpufreq_oppidx = 目前使用的opp档位 档位 (频率, 供电电压uV)
簇分为LL、L、B。CPUID一般是每个簇中的第一个CPU的ID。
如4+4的CPU中,会有两个簇分别是MT_CPU_DVFS_LL(CPU0-3)和MT_CPU_DVDS_L(CPU4-7),其id分别使用每个簇的第一个CPU即0和4。
OPP即CPU能够“挂得上的档”,包含一个频率和对应的供电电压(uV)
由上可见该CPU的大小核的最高频率相同(不代表实际性能相同),但是供电差异较大
CPU和高速缓存电压123cat /proc/cpufreq/MT_CPU_DVFS_L/cpufreq_voltVproc: 812500 uVVsram: 912500 uV
CPU算力12345678910111213141516cat /sys/devices/system/cpu/cpu4/cpu_capacity /sys/devices/system/cpu/cpu0/cpu_capacity1024604cd /sys/devices/system/cpufind cpu*/cpu_capacity | xargs cat6046046046041024102410241024
支持的调频策略123cat cpu[04]/cpufreq/scaling_available_governorsondemand userspace powersave performance schedutilondemand userspace powersave performance schedutil
正在使用的调频策略123cat cpu[04]/cpufreq/scaling_governorschedutilschedutil
调频驱动123cat cpu[04]/cpufreq/scaling_drivermt-cpufreqmt-cpufreq
当前启用的核心123cat /proc/ppm/policy/ut_fix_core_numcluster 0 fix core num = -1cluster 1 fix core num = 1
输出解析:
12簇 0 指定使用核心个数 = -1簇 1 指定使用核心个数 = 1
-1表示不做任何指定,默认启用所有核心
当前固定的频率123cat /proc/ppm/policy/ut_fix_freq_idxcluster 0 fix freq idx = -1cluster 1 fix freq idx = -1
输出解析:
12簇 0 指定频点索引 = -1簇 1 指定频点索引 = 0
-1表示不做任何指定,系统会由调频管理程序自动根据当前工作负载选择合适的档位
数字不为-1时忽略调度程序,指定要求该簇(簇中的全部核心)工作到指定档位(但是可能被优先级更高的调度程序、设置、温度/功耗策略影响)
设置1/proc/ppm/policy
开关CPU核心个数开、关掉一些CPU核心。
12345echo 2 1 > /proc/ppm/policy/ut_fix_core_numcat /proc/ppm/policy/ut_fix_core_numcluster 0 fix core num = 2cluster 1 fix core num = 1
效果,小核簇(簇0)之CPU2、3下线,大核簇(簇1)之CPU5、6、7下线:
12345678cat /sys/devices/system/cpu/online0-1,4Mem: 1555028K used, 2402960K free, 0K shrd, 4040146952K buff, 1432K cachedCPU0: 76.1% usr 23.8% sys 0.0% nic 0.0% idle 0.0% io 0.0% irq 0.0% sirqCPU1: 88.5% usr 11.4% sys 0.0% nic 0.0% idle 0.0% io 0.0% irq 0.0% sirqCPU2: 98.8% usr 1.1% sys 0.0% nic 0.0% idle 0.0% io 0.0% irq 0.0% sirqLoad average: 28.04 26.40 24.93 7/1432 12912
echo送入的数字个数取决于处理器具有多少个簇(Cluster),一般大+小核处理器为2,超大+大+小核处理器为3。
设置为-1恢复默认
1echo -1 -1 > /proc/ppm/policy/ut_fix_core_num
命令解析:
1echo 簇0允许使用的核心数 簇1允许使用的核心数 > /proc/ppm/policy/ut_fix_core_num
定频定频,固定CPU频率(频点),固定到具体档位。频率的档位,即频点,为OPP index,故固定频率实际上是强制将CPU挂至对应的各个index。
12345echo 0 -1 > /proc/ppm/policy/ut_fix_freq_idxcat /proc/ppm/policy/ut_fix_freq_idxcluster 0 fix freq idx = 0cluster 1 fix freq idx = -1
命令解析:
1echo 簇0档位 簇1档位 > /proc/ppm/policy/ut_fix_freq_idx
效果,命令要求将簇0(小核簇)内的所有CPU运行在最高频率:
123456789ls /sys/devices/system/cpu/cpu[0-7]/cpufreq/cpuinfo_cur_freq | xargs cat19890001989000198900019890001248000124800012480001248000
可见,簇0的所以CPU(CPU0-4)全部工作在最高频率
绑核将指定的进程绑定到一个或一些CPU上。
123taskset -ap MASK PIDtaskset -p MASK PID
相关源码1kernel-4.14/drivers/misc/mediatek/base/power/ppm_v3/src
123456789101112131415enum mt_cpu_dvfs_id { MT_CPU_DVFS_LL, MT_CPU_DVFS_L, MT_CPU_DVFS_B, MT_CPU_DVFS_CCI, NR_MT_CPU_DVFS,};enum mt_dvfs_debug_id { DEBUG_FREQ_CLUSTER0, DEBUG_FREQ_CLUSTER1, DEBUG_FREQ_CLUSTER2, DEBUG_FREQ_ALL, DEBUG_FREQ_DISABLED = 100,};
cpufreq_freq proc节点
12cpufreq_freq_proc_show()cpufreq_freq_proc_write()
cpufreq_oppidx proc节点
1234mtk_cpufreq_interface.ccpufreq_oppidx_proc_show()cpufreq_oppidx_proc_write()
定频、核数开关
123456789mtk_ppm_policy_ut.c# 核数ppm_ut_fix_core_num_proc_show()ppm_ut_fix_core_num_proc_write()# 定频:读取设置、更新设置ppm_ut_fix_freq_idx_proc_show()ppm_ut_fix_freq_idx_proc_write()
术语
术语
说明
DVFS
Dynamic Voltage and Frequency Scaling 通过调整CPU频率、电压来匹配工作负载,取得节能目的的技术
freq
Frequency 频率
OPP
Operating Performance Points 频点、频率档位
PPM
Power Policy Manager
oppidx
OPP的Index 各档位的频率对应为一个index, 0对应最高频率
LL
小核
L
大核
B
超大核
Jade
BIG.LITTLE架构的CPU(大小端模式)
Everest
小核-大核-超大核架构的CPU
Olympus
小核-大核架构的CPU
Cluster
CPU簇;CPU的几个核心在同一簇中管理,一个CPU可能有多个簇,一般将效能核、性能核、超大核分别分入一个簇中
调频策略
策略名称
说明
performance
运行于最大频率
powersave
运行于最小频率
userspace
运行于用户指定的频率
ondemand
按需快速动态调整CPU频率, 一有cpu计算量的任务,就会立即达到最大频率运行; 空闲时间占比增加则降低频率
conservative
按需快速动态调整CPU频率,比 ondemand 的调整更保守,不会迅速达到最大频率
schedutil
由调度程序管理