customer有个需求就是希望通过system interface去显示每个cpu所对应的频率运行的时间。对于这个需求,刚好再重温下cpufreq的知识点。
1.CPU frequence的概念
CPU频率(也称为时钟频率)是指cpu内核工作的时钟频率,通常以赫兹(Hz)为单位表示。它反映了 CPU 每秒钟能够执行的时钟周期数。常见的单位包括 MHz(兆赫兹)和 GHz(吉赫兹),例如 3.5 GHz 表示每秒 35 亿个时钟周期。
CPU 频率是评估 CPU 性能的一个重要指标,但它并不完全代表 CPU 的实际运算能力。CPU 的性能还取决于其他因素,如指令集、缓存大小和流水线深度等。
因此,虽然较高的频率通常意味着更快的处理速度,但这并不是唯一的衡量标准。
2.CPU frequence的管理
kernel里主要是使用调频策略(governor)来进行对cpufreq的管理,是 Linux 系统中用于管理CPU 频率的机制。它决定了在不同负载和场景下,CPU 应该运行在什么频率。以下是一些常见的调频策略:
-
performance:始终运行在最高频率,适用于需要最高性能的任务。
-
powersave:始终运行在最低频率,适用于需要最大限度节省电能的场景。
-
ondemand:根据系统负载动态调整频率,适用于日常使用。
-
conservative:类似于
ondemand,但频率调整更平滑。 -
userspace:允许用户空间程序手动设置频率,提供最大灵活性
不同的policy,对应的related cpu也不同的,对应支持的cpufreq也有所不同。通过调节policy下面不同的governor来切换不同的cpufreq。
如下是一个有40个possible cpu的PC,Linux system 显示有40个policy, 每个policy对应一个cpu,但是支持的governor是相同的。
ls /sys/devices/system/cpu/cpufreq/
policy0 policy10 policy12 policy14 policy16 policy18 policy2 policy21 policy23 policy25 policy27 policy29 policy30 policy32 policy34 policy36 policy38 policy4 policy6 policy8
policy1 policy11 policy13 policy15 policy17 policy19 policy20 policy22 policy24 policy26 policy28 policy3 policy31 policy33 policy35 policy37 policy39 policy5 policy7 policy9
cat /sys/devices/system/cpu/cpufreq/policy39/related_cpus
39
cat /sys/devices/system/cpu/cpufreq/policy39/scaling_available_governors
performance powersave
cat /sys/devices/system/cpu/cpufreq/policy39/scaling_cur_freq
800346
3.CPU frequence的运行时间统计
3.1 running时间的计算
1.使用percpu xarry保存cpufreq和对应的运行时间
struct cpu_freq_time {
ktime_t total, begin;
};
st

最低0.47元/天 解锁文章
509

被折叠的 条评论
为什么被折叠?



