性能优化工具: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

由调度程序管理