admin管理员组文章数量:1612098
-
cpu_scale的意义
49 CPU0: cpu@0 {
50 device_type = "cpu";
51 compatible = "arm,cortex-a55";
52 reg = <0x0 0x0>;
53 enable-method = "psci";
54 cpu-idle-states = <&CORE_PD>;
55 cpufreq-data-v1 = <&cpufreq_cluster0_opp>;
56 capacity-dmips-mhz = <544>;
57 dynamic-power-coefficient = <102>;
58 };
capacity-dmips-mhz = <544>中:
mips是每秒处理的百万级的机器语言指令数;
dmips是Dhrystone Million Instructions Per Second的缩写,dmips并非字面上每秒百万条指令的意思。它是一个测量CPU运行一个叫Dhrystone(整数运算)的测试程序时表现出来的相对性能高低的一个单位。Dhrystone并不包括浮点运算,其输出结果为每秒钟运行Dhrystone的次数,即每秒钟迭代主循环的次数。Dhrystone的重要性在于其能作为处理器整数计算性能的指标。
dmips-mhz 表示 CPU 在每 1MHz 的运行速度下每秒钟可以执行多少dmips.
cpu_scale: 每cpu变量,通过如下函数获得:
21 unsigned long topology_get_cpu_scale(int cpu)
22 {
23 return per_cpu(cpu_scale, cpu);
24 }
函数获得,计算方法参见:cpu_scale and freq_scale。
kernel4.14/drivers/base/arch_topology.c
|init_cpu_capacity_callback() //在哪被调?cpufreq_set_policy()通过notifier方式
441 for_each_cpu(cpu, policy->related_cpus) {
442 raw_capacity[cpu] = topology_get_cpu_scale(NULL, cpu) *
443 policy->cpuinfo.max_freq / 1000UL;
/*
*raw_capacity[cpu0~2]=544*1820000/1000=990080;
*raw_capacity[cpu3]=1024*2028000/1000=2076672
*/
444 capacity_scale = max(raw_capacity[cpu], capacity_scale);
/*
*capacity_scale =2076672
*/
445 }
446
447 if (cpumask_empty(cpus_to_visit)) {
448 topology_normalize_cpu_scale();
|---->|356void topology_normalize_cpu_scale(void)
366 for_each_possible_cpu(cpu) {
367 capacity = (raw_capacity[cpu] << SCHED_CAPACITY_SHIFT)
368 / capacity_scale;
369 topology_set_cpu_scale(cpu, capacity); //cpu_scale[0~2]=488; cpu_scale[3]=1024
由以上cpu_scale初始化的代码段可知,raw_capacity表示的是cpu在最大频率下dmips,即最大频率下每秒钟执行的百万次Dhrystone。
cpu_scale对大核来说,等于1024;
cpu_scale对小核来说,表示按raw_capacity比例把小核归一化到大核的1024,
所以cpu_scale表现的是cpu在最大频率时,执行指令数对1024的归一化,而最大频率取自policy->cpuinfo.max_freq,是cpu固有的最大频率,不受QOS/IPA的影响,是一个定值。
-
max_freq_scale的含义
include/linux/arch_topology.h
38 static inline
39 unsigned long topology_get_max_freq_scale(struct sched_domain *sd, int cpu)
40 {
41 return per_cpu(max_freq_scale, cpu);
42 }
参见:《cpu_scale and freq_scale》
max_freq_scale是cpu经过qos限频后,对cpu实际最高频scale到1024.
-
cpu_capacity的含义
kernel5.4/kernel/sched/fair.c
5422 static unsigned long capacity_of(int cpu)
5423 {
5424 return cpu_rq(cpu)->cpu_capacity;
5425 }
capacity_of(cpu)在哪设置?
kernel/sched/fair.c: cpu_rq(cpu)->cpu_capacity = capacity; /*update_cpu_capacity()*/
kernel/sched/core.c: rq->cpu_capacity = rq->cpu_capacity_orig = SCHED_CAPACITY_SCALE; /*sched_init(void) */
参见:《eas k5.4 (一):v5.4 - Patch-set sched:fair: Reduce complexity of energy calculation》
cpu_capacity是cpu_capacity_orig经过qos scale(限频),减去rq上的rt和dl util,对irq util做scale(减去irq util),最终得到的cpu实际的capacity。
-
cpu_capacity_orig的含义
kernel5.4/kernel/sched/sched.h
2411 static inline unsigned long capacity_orig_of(int cpu)
2412 {
2413 return cpu_rq(cpu)->cpu_capacity_orig;
2414 }
2415 #endif
在如下代码中,可知cpu_capacity_orig=arch_scale_cpu_capacity(cpu)
kernel5.4/kernel/sched/fair.c
7949 static void update_cpu_capacity(struct sched_domain *sd, int cpu)
7950 {
7951 unsigned long capacity = arch_scale_cpu_capacity(cpu);
7958 cpu_rq(cpu)->cpu_capacity_orig = capacity;
本文标签: 含义maxfreqscalecpuscalecpucapacityorigcpucapacity
版权声明:本文标题:cpu_scalemax_freq_scalecpu_capacitycpu_capacity_orig的含义 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1728619611a1166180.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论