9:51 am
Thursday, 3 November 2022 (HKT)
Time in Hong Kong
获取
在线CPU
1 2
| cat /sys/devices/system/cpu/online 0-7
|
PPM使能
性能管理模块
1 2 3 4 5
| cat /proc/ppm/enabled ppm is enabled
echo 0 > /proc/ppm/enabled ppm is disabled
|
CPU频率(proc)
1 2
| cat /proc/cpufreq/MT_CPU_DVFS_L/cpufreq_freq cat /proc/cpufreq/MT_CPU_DVFS_LL/cpufreq_freq
|
1 2 3 4 5
| cat /proc/cpufreq/MT_CPU_DVFS_L/cpufreq_freq 1326000 KHz
cat /proc/cpufreq/MT_CPU_DVFS_LL/cpufreq_freq 793000 KHz
|
proc节点优先级可能(通常,平台差异)低于thermal
CPU频率(sys)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ls /sys/devices/system/cpu cpu0 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 uevent
cd /sys/devices/system/cpu
cat cpu[0-7]/cpufreq/cpuinfo_cur_freq 1508000 1508000 1508000 1508000 1846000 1846000 1846000 1846000
|
CPU档位OPPidx(频点)
1 2
| cat /proc/cpufreq/MT_CPU_DVFS_L/cpufreq_oppidx cat /proc/cpufreq/MT_CPU_DVFS_LL/cpufreq_oppidx
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| cat /proc/cpufreq/MT_CPU_DVFS_L/cpufreq_oppidx
[MT_CPU_DVFS_L/4] cpufreq_oppidx = 15 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
cat MT_CPU_DVFS_LL/cpufreq_oppidx
[MT_CPU_DVFS_LL/0] cpufreq_oppidx = 13 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
1 2 3
| [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和高速缓存电压
1 2 3
| cat /proc/cpufreq/MT_CPU_DVFS_L/cpufreq_volt Vproc: 812500 uV Vsram: 912500 uV
|
CPU算力
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| cat /sys/devices/system/cpu/cpu4/cpu_capacity /sys/devices/system/cpu/cpu0/cpu_capacity
1024 604
cd /sys/devices/system/cpu
find cpu*/cpu_capacity | xargs cat 604 604 604 604 1024 1024 1024 1024
|
支持的调频策略
1 2 3
| cat cpu[04]/cpufreq/scaling_available_governors ondemand userspace powersave performance schedutil ondemand userspace powersave performance schedutil
|
正在使用的调频策略
1 2 3
| cat cpu[04]/cpufreq/scaling_governor schedutil schedutil
|
调频驱动
1 2 3
| cat cpu[04]/cpufreq/scaling_driver mt-cpufreq mt-cpufreq
|
当前启用的核心
1 2 3
| cat /proc/ppm/policy/ut_fix_core_num cluster 0 fix core num = -1 cluster 1 fix core num = 1
|
1 2
| 簇 0 指定使用核心个数 = -1 簇 1 指定使用核心个数 = 1
|
-1表示不做任何指定,默认启用所有核心
当前固定的频率
1 2 3
| cat /proc/ppm/policy/ut_fix_freq_idx cluster 0 fix freq idx = -1 cluster 1 fix freq idx = -1
|
1 2
| 簇 0 指定频点索引 = -1 簇 1 指定频点索引 = 0
|
-1表示不做任何指定,系统会由调频管理程序自动根据当前工作负载选择合适的档位
数字不为-1时忽略调度程序,指定要求该簇(簇中的全部核心)工作到指定档位(但是可能被优先级更高的调度程序、设置、温度/功耗策略影响)
设置
开关CPU核心个数
开、关掉一些CPU核心。
1 2 3 4 5
| echo 2 1 > /proc/ppm/policy/ut_fix_core_num
cat /proc/ppm/policy/ut_fix_core_num cluster 0 fix core num = 2 cluster 1 fix core num = 1
|
- 效果,小核簇(簇0)之CPU2、3下线,大核簇(簇1)之CPU5、6、7下线:
1 2 3 4 5 6 7 8
| cat /sys/devices/system/cpu/online 0-1,4
Mem: 1555028K used, 2402960K free, 0K shrd, 4040146952K buff, 1432K cached CPU0: 76.1% usr 23.8% sys 0.0% nic 0.0% idle 0.0% io 0.0% irq 0.0% sirq CPU1: 88.5% usr 11.4% sys 0.0% nic 0.0% idle 0.0% io 0.0% irq 0.0% sirq CPU2: 98.8% usr 1.1% sys 0.0% nic 0.0% idle 0.0% io 0.0% irq 0.0% sirq Load average: 28.04 26.40 24.93 7/1432 12912
|
echo送入的数字个数取决于处理器具有多少个簇(Cluster),一般大+小核处理器为2,超大+大+小核处理器为3。
1
| echo -1 -1 > /proc/ppm/policy/ut_fix_core_num
|
1
| echo 簇0允许使用的核心数 簇1允许使用的核心数 > /proc/ppm/policy/ut_fix_core_num
|
定频
定频,固定CPU频率(频点),固定到具体档位。频率的档位,即频点,为OPP index,故固定频率实际上是强制将CPU挂至对应的各个index。
1 2 3 4 5
| echo 0 -1 > /proc/ppm/policy/ut_fix_freq_idx
cat /proc/ppm/policy/ut_fix_freq_idx cluster 0 fix freq idx = 0 cluster 1 fix freq idx = -1
|
1
| echo 簇0档位 簇1档位 > /proc/ppm/policy/ut_fix_freq_idx
|
- 效果,命令要求将簇0(小核簇)内的所有CPU运行在最高频率:
1 2 3 4 5 6 7 8 9
| ls /sys/devices/system/cpu/cpu[0-7]/cpufreq/cpuinfo_cur_freq | xargs cat 1989000 1989000 1989000 1989000 1248000 1248000 1248000 1248000
|
可见,簇0的所以CPU(CPU0-4)全部工作在最高频率
绑核
将指定的进程绑定到一个或一些CPU上。
1 2 3
| taskset -ap MASK PID
taskset -p MASK PID
|
相关源码
1
| kernel-4.14/drivers/misc/mediatek/base/power/ppm_v3/src
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| enum 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, }
|
1 2
| cpufreq_freq_proc_show() cpufreq_freq_proc_write()
|
1 2 3 4
| mtk_cpufreq_interface.c
cpufreq_oppidx_proc_show() cpufreq_oppidx_proc_write()
|
1 2 3 4 5 6 7 8 9
| mtk_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 |
由调度程序管理 |