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

TOMOYO Linux Cross Reference
Linux/Documentation/translations/zh_CN/scheduler/schedutil.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/schedutil.rst (Version linux-6.12-rc7) and /Documentation/translations/zh_CN/scheduler/schedutil.rst (Version linux-5.5.19)


  1 .. SPDX-License-Identifier: GPL-2.0               
  2 .. include:: ../disclaimer-zh_CN.rst              
  3                                                   
  4 :Original: Documentation/scheduler/schedutil.r    
  5                                                   
  6 :翻译:                                          
  7                                                   
  8   唐艺舟 Tang Yizhou <tangyeechou@gmail.com>    
  9                                                   
 10 =========                                         
 11 Schedutil                                         
 12 =========                                         
 13                                                   
 14 .. note::                                         
 15                                                   
 16    本文所有内容都假设频率和工作    
 17    但这是最可行的近似处理。           
 18                                                   
 19 PELT(实体负载跟踪,Per Entity Load Tr    
 20 ==============================================    
 21                                                   
 22 通过PELT,我们跟踪了各种调度器实    
 23 运行队列。我们使用指数加权移动    
 24 EWMA)作为其基础,每个周期(1024us    
 25 也就是说,最近的32ms贡献负载的一    
 26                                                   
 27 具体而言:                                   
 28                                                   
 29   ewma_sum(u) := u_0 + u_1*y + u_2*y^2 + ...      
 30                                                   
 31   ewma(u) = ewma_sum(u) / ewma_sum(1)             
 32                                                   
 33 由于这本质上是一个无限几何级数    
 34 这个属性是关键,因为它提供了在    
 35                                                   
 36 请注意,阻塞态的任务仍然对累加    
 37 它们在恢复运行后的预期贡献。        
 38                                                   
 39 利用这一点,我们跟踪2个关键指标    
 40 在CPU上花费的时间,而“可运行”    
 41 一个任务时,这两个指标是相同的    
 42 任务在CPU上花费的时间,而“可运    
 43                                                   
 44 更多细节见:kernel/sched/pelt.c             
 45                                                   
 46                                                   
 47 频率 / CPU不变性                             
 48 ================                                  
 49                                                   
 50 因为CPU频率在1GHz时利用率为50%和CPU    
 51 在小核上运行时利用率为50%和在大    
 52 以两个比率来伸缩时间差,其中一    
 53 Frequency Scaling,DVFS)比率,另一个    
 54                                                   
 55 对于简单的DVFS架构(软件有完全控    
 56                                                   
 57             f_cur                                 
 58   r_dvfs := -----                                 
 59             f_max                                 
 60                                                   
 61 对于由硬件控制DVFS的更多动态系统    
 62 ARMv8.4-AMU)来计算这一比率。具体    
 63                                                   
 64            APERF                                  
 65   f_cur := ----- * P0                             
 66            MPERF                                  
 67                                                   
 68              4C-turbo;  如果可用并且使    
 69   f_max := { 1C-turbo;  如果使能了turbo      
 70              P0;        其它情况              
 71                                                   
 72                     f_cur                         
 73   r_dvfs := min( 1, ----- )                       
 74                     f_max                         
 75                                                   
 76 我们选择4C turbo而不是1C turbo,以使    
 77                                                   
 78 r_cpu被定义为当前CPU的最高性能水    
 79                                                   
 80   r_tot = r_dvfs * r_cpu                          
 81                                                   
 82 其结果是,上述“运行”和“可运    
 83 我们可以在CPU之间转移和比较它们    
 84                                                   
 85 更多细节见:                                  
 86                                                   
 87  - kernel/sched/pelt.h:update_rq_clock_pelt()     
 88  - arch/x86/kernel/smpboot.c:"APERF/MPERF freq    
 89  - Documentation/translations/zh_CN/scheduler/    
 90                                                   
 91                                                   
 92 UTIL_EST                                          
 93 ========                                          
 94                                                   
 95 由于周期性任务的平均数在睡眠时    
 96 因此它们在再次运行后会面临(DVFS    
 97                                                   
 98 为了缓解这个问题,(一个默认使    
 99 (Infinite Impulse Response,IIR)的EWMA    
100 UTIL_EST滤波使其在遇到更高值时立    
101                                                   
102 进一步,运行队列的(可运行任务    
103                                                   
104   util_est := \Sum_t max( t_running, t_util_es    
105                                                   
106 更多细节见: kernel/sched/fair.c:util_est_    
107                                                   
108                                                   
109 UCLAMP                                            
110 ======                                            
111                                                   
112 可以在每个CFS或RT任务上设置有效    
113 为类似滤波器的能力,它定义了有    
114 运行的任务保持这些clamp的最大聚    
115                                                   
116 更多细节见: include/uapi/linux/sched/type    
117                                                   
118                                                   
119 Schedutil / DVFS                                  
120 ================                                  
121                                                   
122 每当调度器的负载跟踪被更新时(    
123 schedutil来更新硬件DVFS状态。             
124                                                   
125 其基础是CPU运行队列的“运行”指    
126 估计值。由此我们计算出一个期望    
127                                                   
128              max( running, util_est );  如果    
129   u_cfs := { running;                   其它    
130                                                   
131                clamp( u_cfs + u_rt, u_min, u_m    
132   u_clamp := { u_cfs + u_rt;                      
133                                                   
134   u := u_clamp + u_irq + u_dl;          [估    
135                                                   
136   f_des := min( f_max, 1.25 u * f_max )           
137                                                   
138 关于IO-wait的说明:当发生更新是因    
139                                                   
140 然后,这个频率被用来选择一个P-st    
141 请求。                                         
142                                                   
143 关于截止期限调度器的说明: 截止    
144 工作负荷所需的硬f_min值。               
145                                                   
146 因为这些回调函数是直接来自调度    
147 在硬件交互缓慢和昂贵的时候,sche    
148                                                   
149 更多信息见: kernel/sched/cpufreq_scheduti    
150                                                   
151                                                   
152 注意                                            
153 ====                                              
154                                                   
155  - 在低负载场景下,DVFS是最相关的    
156                                                   
157  - 在负载饱和的场景下,任务迁移    
158    CPU,有4个任务占用导致其饱和,    
159    旧的CPU的“运行”值将为0.75,而    
160    时间流逝将自动修正。另注,由    
161                                                   
162  - 上述大部分内容是关于避免DVFS下    
163    重新学习/提升频率。                   
164                                                   
                                                      

~ [ 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