~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/translations/zh_CN/scheduler/sched-capacity.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/translations/zh_CN/scheduler/sched-capacity.rst (Version linux-6.12-rc7) and /Documentation/translations/zh_CN/scheduler/sched-capacity.rst (Version linux-4.14.336)


  1 .. SPDX-License-Identifier: GPL-2.0               
  2 .. include:: ../disclaimer-zh_CN.rst              
  3                                                   
  4 :Original: Documentation/scheduler/sched-capac    
  5                                                   
  6 :翻译:                                          
  7                                                   
  8   唐艺舟 Tang Yizhou <tangyeechou@gmail.com>    
  9                                                   
 10 :校译:                                          
 11                                                   
 12   时奎亮 Alex Shi <alexs@kernel.org>            
 13                                                   
 14 =============                                     
 15 算力感知调度                                
 16 =============                                     
 17                                                   
 18 1. CPU算力                                      
 19 ==========                                        
 20                                                   
 21 1.1 简介                                        
 22 --------                                          
 23                                                   
 24 一般来说,同构的SMP平台由完全相    
 25 平台中,CPU不能被认为是相同的。     
 26                                                   
 27 我们引入CPU算力(capacity)的概念    
 28 做过归一化处理。异构系统也被称    
 29                                                   
 30 最大可达性能(换言之,最大CPU算    
 31                                                   
 32 - 不是所有CPU的微架构都相同。         
 33 - 在动态电压频率升降(Dynamic Voltag    
 34   能达到一样高的操作性能值(Opera    
 35                                                   
 36 Arm大小核(big.LITTLE)系统是同时具    
 37 流水线层级,更大的缓存,更智能    
 38                                                   
 39 CPU性能通常由每秒百万指令(Million    
 40 per Hz能执行的指令数,故::               
 41                                                   
 42   capacity(cpu) = work_per_hz(cpu) * max_freq(    
 43                                                   
 44 1.2 调度器术语                               
 45 --------------                                    
 46                                                   
 47 调度器使用了两种不同的算力值。C    
 48 CPU的 ``capacity`` 是 ``capacity_orig`` 扣    
 49                                                   
 50 注意CPU的 ``capacity`` 仅仅被设计用    
 51 简洁起见,本文档的剩余部分将不    
 52                                                   
 53 1.3 平台示例                                  
 54 ------------                                      
 55                                                   
 56 1.3.1 操作性能值相同                       
 57 ~~~~~~~~~~~~~~~~~~~~                              
 58                                                   
 59 考虑一个假想的双核非对称CPU算力    
 60                                                   
 61 - work_per_hz(CPU0) = W                           
 62 - work_per_hz(CPU1) = W/2                         
 63 - 所有CPU以相同的固定频率运行         
 64                                                   
 65 根据上文对算力的定义:                   
 66                                                   
 67 - capacity(CPU0) = C                              
 68 - capacity(CPU1) = C/2                            
 69                                                   
 70 若这是Arm大小核系统,那么CPU0是大    
 71                                                   
 72 考虑一种周期性产生固定工作量的    
 73                                                   
 74  CPU0 work ^                                      
 75            |     ____                ____         
 76            |    |    |              |    |        
 77            +----+----+----+----+----+----+----    
 78                                                   
 79  CPU1 work ^                                      
 80            |     _________           _________    
 81            |    |         |         |             
 82            +----+----+----+----+----+----+----    
 83                                                   
 84 CPU0在系统中具有最高算力(C),    
 85 算力,因此在T个单位时间内仅完成    
 86                                                   
 87 1.3.2 最大操作性能值不同                 
 88 ~~~~~~~~~~~~~~~~~~~~~~~~                          
 89                                                   
 90 具有不同算力值的CPU,通常来说最    
 91 work_per_hz()相同):                           
 92                                                   
 93 - max_freq(CPU0) = F                              
 94 - max_freq(CPU1) = 2/3 * F                        
 95                                                   
 96 这将推出:                                   
 97                                                   
 98 - capacity(CPU0) = C                              
 99 - capacity(CPU1) = C/3                            
100                                                   
101 执行1.3.1节描述的工作负载,每个CP    
102                                                   
103  CPU0 work ^                                      
104            |     ____                ____         
105            |    |    |              |    |        
106            +----+----+----+----+----+----+----    
107                                                   
108                             workload on CPU1      
109  CPU1 work ^                                      
110            |     ______________      _________    
111            |    |              |    |             
112            +----+----+----+----+----+----+----    
113                                                   
114 1.4 关于计算方式的注意事项             
115 --------------------------                        
116                                                   
117 需要注意的是,使用单一值来表示C    
118 描述为:X%整数运算差异,Y%浮点数    
119 的结果目前还是令人满意的。           
120                                                   
121 2. 任务使用率                                
122 =============                                     
123                                                   
124 2.1 简介                                        
125 --------                                          
126                                                   
127 算力感知调度要求描述任务需求,    
128 任务使用率是CFS独有的描述方式,    
129                                                   
130 任务使用率是一种用百分比来描述    
131                                                   
132   task_util(p) = duty_cycle(p)                    
133                                                   
134 在频率固定的SMP系统中,100%的利用    
135 小周期任务,它在睡眠上花费的时    
136                                                   
137 2.2 频率不变性                               
138 --------------                                    
139                                                   
140 一个需要考虑的议题是,工作负载    
141 执行周期性工作负载::                     
142                                                   
143   CPU work ^                                      
144            |     ____                ____         
145            |    |    |              |    |        
146            +----+----+----+----+----+----+----    
147                                                   
148 可以算出 duty_cycle(p) == 25%。              
149                                                   
150 现在,考虑以给定频率F/2执行 *同    
151                                                   
152   CPU work ^                                      
153            |     _________           _________    
154            |    |         |         |             
155            +----+----+----+----+----+----+----    
156                                                   
157 可以算出 duty_cycle(p) == 50%,尽管两    
158 相同)。                                      
159                                                   
160 任务利用率信号可按下面公式处理    
161                                                   
162   task_util_freq_inv(p) = duty_cycle(p) * (cur    
163                                                   
164 对上面两个例子运用该公式,可以    
165                                                   
166 2.3 CPU不变性                                  
167 -------------                                     
168                                                   
169 CPU算力与任务利用率具有类型的效    
170 占空比。                                      
171                                                   
172 考虑1.3.2节提到的系统,也就是说::    
173                                                   
174 - capacity(CPU0) = C                              
175 - capacity(CPU1) = C/3                            
176                                                   
177 每个CPU按最大频率执行指定周期性    
178                                                   
179  CPU0 work ^                                      
180            |     ____                ____         
181            |    |    |              |    |        
182            +----+----+----+----+----+----+----    
183                                                   
184  CPU1 work ^                                      
185            |     ______________      _________    
186            |    |              |    |             
187            +----+----+----+----+----+----+----    
188                                                   
189 也就是说,                                   
190                                                   
191 - duty_cycle(p) == 25%,如果任务p在CPU0    
192 - duty_cycle(p) == 75%,如果任务p在CPU1    
193                                                   
194 任务利用率信号可按下面公式处理    
195                                                   
196   task_util_cpu_inv(p) = duty_cycle(p) * (capa    
197                                                   
198 其中 ``max_capacity`` 是系统中最高的C    
199 的任务利用率均为25%。                    
200                                                   
201 2.4 任务利用率不变量                      
202 --------------------                              
203                                                   
204 频率和CPU算力不变性都需要被应用    
205 任务利用率的伪计算公式是同时具    
206                                                   
207                                      curr_freq    
208   task_util_inv(p) = duty_cycle(p) * ---------    
209                                      max_frequ    
210                                                   
211 也就是说,任务利用率不变量假定    
212                                                   
213 在接下来的章节中提到的任何任务    
214                                                   
215 2.5 利用率估算                               
216 --------------                                    
217                                                   
218 由于预测未来的水晶球不存在,当    
219 CFS调度类基于实体负载跟踪机制(P    
220 其中之一可以算出平均利用率(与    
221                                                   
222 这意味着,尽管运用“真实的”任    
223 用任务利用率的估算值。                 
224                                                   
225 3. 算力感知调度的需求                    
226 =====================                             
227                                                   
228 3.1 CPU算力                                     
229 -----------                                       
230                                                   
231 当前,Linux无法凭自身算出CPU算力    
232 定义arch_scale_cpu_capacity()函数。          
233                                                   
234 arm、arm64和RISC-V架构直接把这个信    
235 arch_topology.h的percpu变量cpu_scale),    
236 出来的。参见Documentation/devicetree/bin    
237                                                   
238 3.2 频率不变性                               
239 --------------                                    
240                                                   
241 如2.2节所述,算力感知调度需要频    
242 arch_scale_freq_capacity(cpu)函数。            
243                                                   
244 实现该函数要求计算出每个CPU当前    
245 APERF/MPERF,arm64的AMU),它能按CPU当    
246 在cpufreq频率变化时直接使用钩子函    
247                                                   
248 4. 调度器拓扑结构                          
249 =================                                 
250                                                   
251 在构建调度域时,调度器将会发现    
252                                                   
253 - sched_asym_cpucapacity静态键(static key    
254 - SD_ASYM_CPUCAPACITY_FULL标志位将在尽    
255   完整包含某个CPU算力值的全部CPU    
256 - SD_ASYM_CPUCAPACITY标志将在所有包含    
257                                                   
258 sched_asym_cpucapacity静态键的设计意图    
259 是,这个键是系统范围可见的。想    
260                                                   
261   capacity    C/2          C                      
262             ________    ________                  
263            /        \  /        \                 
264   CPUs     0  1  2  3  4  5  6  7                 
265            \__/  \______________/                 
266   cpusets   cs0         cs1                       
267                                                   
268 可以通过下面的方式创建:              
269                                                   
270 .. code-block:: sh                                
271                                                   
272   mkdir /sys/fs/cgroup/cpuset/cs0                 
273   echo 0-1 > /sys/fs/cgroup/cpuset/cs0/cpuset.    
274   echo 0 > /sys/fs/cgroup/cpuset/cs0/cpuset.me    
275                                                   
276   mkdir /sys/fs/cgroup/cpuset/cs1                 
277   echo 2-7 > /sys/fs/cgroup/cpuset/cs1/cpuset.    
278   echo 0 > /sys/fs/cgroup/cpuset/cs1/cpuset.me    
279                                                   
280   echo 0 > /sys/fs/cgroup/cpuset/cpuset.sched_    
281                                                   
282 由于“这是”非对称CPU算力系统,s    
283 调度域层级,算力值仅有一个,该    
284 应该被以此处理。                          
285                                                   
286 因此,“典型的”保护非对称CPU算    
287                                                   
288 - 检查sched_asym_cpucapacity静态键           
289 - 如果它被使能,接着检查调度域    
290                                                   
291 5. 算力感知调度的实现                    
292 =====================                             
293                                                   
294 5.1 CFS                                           
295 -------                                           
296                                                   
297 5.1.1 算力适应性(fitness)                
298 ~~~~~~~~~~~~~~~~~~~~~~~~~~~                       
299                                                   
300 CFS最主要的算力调度准则是::            
301                                                   
302   task_util(p) < capacity(task_cpu(p))            
303                                                   
304 它通常被称为算力适应性准则。也    
305 任务将要更长地消耗该CPU,任务是C    
306                                                   
307 此外,uclamp允许用户空间指定任务    
308 cgroup接口的方式(参阅Documentation/ad    
309 可以被用在前一条准则中限制task_ut    
310                                                   
311 5.1.2 被唤醒任务的CPU选择                 
312 ~~~~~~~~~~~~~~~~~~~~~~~~~                         
313                                                   
314 CFS任务唤醒的CPU选择,遵循上面描    
315 这令用户空间对CFS任务的CPU选择有    
316 条件的CPU::                                    
317                                                   
318   clamp(task_util(p), task_uclamp_min(p), task    
319                                                   
320 通过使用uclamp,举例来说,用户空    
321 它设置低的uclamp.max值。相反,uclamp    
322 的CPU上运行,只要给它设置高的ucla    
323                                                   
324 .. note::                                         
325                                                   
326   CFS的被唤醒的任务的CPU选择,可    
327   Documentation/scheduler/sched-energy.rst中    
328                                                   
329 5.1.3 负载均衡                                
330 ~~~~~~~~~~~~~~                                    
331                                                   
332 被唤醒任务的CPU选择的一个病理性    
333                                                   
334   w == wakeup event                               
335                                                   
336   capacity(CPU0) = C                              
337   capacity(CPU1) = C / 3                          
338                                                   
339                            workload on CPU0       
340   CPU work ^                                      
341            |     _________           _________    
342            |    |         |         |             
343            +----+----+----+----+----+----+----    
344                 w                   w             
345                                                   
346                            workload on CPU1       
347   CPU work ^                                      
348            |     _____________________________    
349            |    |                                 
350            +----+----+----+----+----+----+----    
351                 w                                 
352                                                   
353 该工作负载应该在CPU0上运行,不过    
354                                                   
355 - 一开始发生不合适的调度(不准    
356 - 一开始调度正确,但突然需要更    
357                                                   
358 则任务可能变为CPU受限的,也就是    
359 调度准则被违反,将不会有任何唤    
360                                                   
361 这种场景下的任务被称为“不合适    
362 任务迁移借助CFS负载均衡器,更明    
363 当发生负载均衡时,如果一个misfit    
364 那么misfit任务的主动负载均衡将被    
365                                                   
366 5.2 实时调度                                  
367 ------------                                      
368                                                   
369 5.2.1 被唤醒任务的CPU选择                 
370 ~~~~~~~~~~~~~~~~~~~~~~~~~                         
371                                                   
372 实时任务唤醒时的CPU选择,搜索满    
373                                                   
374   task_uclamp_min(p) <= capacity(task_cpu(cpu)    
375                                                   
376 同时仍然允许接着使用常规的优先    
377 优先级的调度,CPU算力将被忽略。     
378                                                   
379 5.3 最后期限调度                            
380 ----------------                                  
381                                                   
382 5.3.1 被唤醒任务的CPU选择                 
383 ~~~~~~~~~~~~~~~~~~~~~~~~~                         
384                                                   
385 最后期限任务唤醒时的CPU选择,搜    
386                                                   
387   task_bandwidth(p) < capacity(task_cpu(p))       
388                                                   
389 同时仍然允许接着使用常规的带宽    
390 在当前CPU队列中。                          
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php