Lines Matching +full:cpu +full:- +full:capacity

1 .. SPDX-License-Identifier: GPL-2.0
2 .. include:: ../disclaimer-zh_CN.rst
4 :Original: Documentation/scheduler/sched-capacity.rst
22 --------
27 我们引入CPU算力(capacity)的概念来测量每个CPU能达到的性能,它的值相对系统中性能最强的CPU
32 - 不是所有CPU的微架构都相同。
33 - 在动态电压频率升降(Dynamic Voltage and Frequency Scaling,DVFS)框架中,不是所有的CPU都
34 能达到一样高的操作性能值(Operating Performance Points,OPP。译注,也就是“频率-电压”对)。
42 capacity(cpu) = work_per_hz(cpu) * max_freq(cpu)
45 --------------
48 CPU的 ``capacity`` 是 ``capacity_orig`` 扣除了一些性能损失(比如处理中断的耗时)的值。
50 注意CPU的 ``capacity`` 仅仅被设计用于CFS调度类,而 ``capacity_orig`` 是不感知调度类的。为
51 简洁起见,本文档的剩余部分将不加区分的使用术语 ``capacity`` 和 ``capacity_orig`` 。
54 ------------
61 - work_per_hz(CPU0) = W
62 - work_per_hz(CPU1) = W/2
63 - 所有CPU以相同的固定频率运行
67 - capacity(CPU0) = C
68 - capacity(CPU1) = C/2
77 +----+----+----+----+----+----+----+----+----+----+-> time
82 +----+----+----+----+----+----+----+----+----+----+-> time
93 - max_freq(CPU0) = F
94 - max_freq(CPU1) = 2/3 * F
98 - capacity(CPU0) = C
99 - capacity(CPU1) = C/3
106 +----+----+----+----+----+----+----+----+----+----+-> time
112 +----+----+----+----+----+----+----+----+----+----+-> time
115 --------------------------
125 --------
138 --------------
143 CPU work ^
146 +----+----+----+----+----+----+----+----+----+----+-> time
152 CPU work ^
155 +----+----+----+----+----+----+----+----+----+----+-> time
162 task_util_freq_inv(p) = duty_cycle(p) * (curr_frequency(cpu) / max_frequency(cpu))
167 -------------
174 - capacity(CPU0) = C
175 - capacity(CPU1) = C/3
182 +----+----+----+----+----+----+----+----+----+----+-> time
187 +----+----+----+----+----+----+----+----+----+----+-> time
191 - duty_cycle(p) == 25%,如果任务p在CPU0上按最大频率运行。
192 - duty_cycle(p) == 75%,如果任务p在CPU1上按最大频率运行。
196 task_util_cpu_inv(p) = duty_cycle(p) * (capacity(cpu) / max_capacity)
202 --------------------
207 curr_frequency(cpu) capacity(cpu)
208 task_util_inv(p) = duty_cycle(p) * ------------------- * -------------
209 max_frequency(cpu) max_capacity
216 --------------
219 CFS调度类基于实体负载跟踪机制(Per-Entity Load Tracking, PELT)维护了少量CPU和任务信号,
229 -----------
234 arm、arm64和RISC-V架构直接把这个信息映射到arch_topology驱动的CPU scaling数据中(译注:参考
235 arch_topology.h的percpu变量cpu_scale),它是从capacity-dmips-mhz CPU binding中衍生计算
236 出来的。参见Documentation/devicetree/bindings/cpu/cpu-capacity.txt。
239 --------------
242 arch_scale_freq_capacity(cpu)函数。
253 - sched_asym_cpucapacity静态键(static key)将使能。
254 - SD_ASYM_CPUCAPACITY_FULL标志位将在尽量最低调度域层级中被设置,同时要满足条件:调度域恰好
256 - SD_ASYM_CPUCAPACITY标志将在所有包含非对称CPU的调度域中被设置。
261 capacity C/2 C
270 .. code-block:: sh
273 echo 0-1 > /sys/fs/cgroup/cpuset/cs0/cpuset.cpus
277 echo 2-7 > /sys/fs/cgroup/cpuset/cs1/cpuset.cpus
282 由于“这是”非对称CPU算力系统,sched_asym_cpucapacity静态键将使能。然而,CPU 0--1对应的
288 - 检查sched_asym_cpucapacity静态键
289 - 如果它被使能,接着检查调度域层级中SD_ASYM_CPUCAPACITY标志位是否出现
295 -------
302 task_util(p) < capacity(task_cpu(p))
305 任务将要更长地消耗该CPU,任务是CPU受限的(CPU-bound)。
308 cgroup接口的方式(参阅Documentation/admin-guide/cgroup-v2.rst)。如其名字所暗示,uclamp
318 clamp(task_util(p), task_uclamp_min(p), task_uclamp_max(p)) < capacity(cpu)
327 Documentation/scheduler/sched-energy.rst中描述。
336 capacity(CPU0) = C
337 capacity(CPU1) = C / 3
340 CPU work ^
343 +----+----+----+----+----+----+----+----+----+----+-> time
347 CPU work ^
350 +----+----+----+----+----+----+----+----+----+----+->
355 - 一开始发生不合适的调度(不准确的初始利用率估计)
356 - 一开始调度正确,但突然需要更多的处理器功率
358 则任务可能变为CPU受限的,也就是说 ``task_util(p) > capacity(task_cpu(p))`` ;CPU算力
367 ------------
374 task_uclamp_min(p) <= capacity(task_cpu(cpu))
380 ----------------
387 task_bandwidth(p) < capacity(task_cpu(p))