jsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/scheduler/schedutilmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/zh_TW/scheduler/schedutilmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/it_IT/scheduler/schedutilmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/ja_JP/scheduler/schedutilmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/ko_KR/scheduler/schedutilmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget'/translations/sp_SP/scheduler/schedutilmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhT/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/scheduler/schedutil.rsthKubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h&Documentation/scheduler/schedutil.rst h]h)}(h%Documentation/scheduler/schedutil.rsth]h%Documentation/scheduler/schedutil.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhKubh)}(h.唐艺舟 Tang Yizhou h]h)}(h-唐艺舟 Tang Yizhou h](h唐艺舟 Tang Yizhou <}(hj hhhNhNubh reference)}(htangyeechou@gmail.comh]htangyeechou@gmail.com}(hj*hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:tangyeechou@gmail.comuh1j(hj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhsection)}(hhh](htitle)}(h Schedutilh]h Schedutil}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjXhhhhhK ubh)}(h本文所有内容都假设频率和工作算力之间存在线性关系。我们知道这是有瑕疵的, 但这是最可行的近似处理。h]h)}(h本文所有内容都假设频率和工作算力之间存在线性关系。我们知道这是有瑕疵的, 但这是最可行的近似处理。h]h本文所有内容都假设频率和工作算力之间存在线性关系。我们知道这是有瑕疵的, 但这是最可行的近似处理。}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjkubah}(h]h ]h"]h$]h&]uh1hhjXhhhhhNubjW)}(hhh](j\)}(h7PELT(实体负载跟踪,Per Entity Load Tracking)h]h7PELT(实体负载跟踪,Per Entity Load Tracking)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhhhhKubh)}(hX通过PELT,我们跟踪了各种调度器实体的一些指标,从单个任务到任务组分片到CPU 运行队列。我们使用指数加权移动平均数(Exponentially Weighted Moving Average, EWMA)作为其基础,每个周期(1024us)都会衰减,衰减速率满足y^32 = 0.5。 也就是说,最近的32ms贡献负载的一半,而历史上的其它时间则贡献另一半。h]hX通过PELT,我们跟踪了各种调度器实体的一些指标,从单个任务到任务组分片到CPU 运行队列。我们使用指数加权移动平均数(Exponentially Weighted Moving Average, EWMA)作为其基础,每个周期(1024us)都会衰减,衰减速率满足y^32 = 0.5。 也就是说,最近的32ms贡献负载的一半,而历史上的其它时间则贡献另一半。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h具体而言:h]h具体而言:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh block_quote)}(hPewma_sum(u) := u_0 + u_1*y + u_2*y^2 + ... ewma(u) = ewma_sum(u) / ewma_sum(1) h](h)}(h*ewma_sum(u) := u_0 + u_1*y + u_2*y^2 + ...h]h*ewma_sum(u) := u_0 + u_1*y + u_2*y^2 + ...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(h#ewma(u) = ewma_sum(u) / ewma_sum(1)h]h#ewma(u) = ewma_sum(u) / ewma_sum(1)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubh)}(h由于这本质上是一个无限几何级数的累加,结果是可组合的,即ewma(A) + ewma(B) = ewma(A+B)。 这个属性是关键,因为它提供了在任务迁移时重新组合平均数的能力。h]h由于这本质上是一个无限几何级数的累加,结果是可组合的,即ewma(A) + ewma(B) = ewma(A+B)。 这个属性是关键,因为它提供了在任务迁移时重新组合平均数的能力。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjhhubh)}(h请注意,阻塞态的任务仍然对累加值(任务组分片和CPU运行队列)有贡献,这反映了 它们在恢复运行后的预期贡献。h]h请注意,阻塞态的任务仍然对累加值(任务组分片和CPU运行队列)有贡献,这反映了 它们在恢复运行后的预期贡献。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjhhubh)}(hX利用这一点,我们跟踪2个关键指标:“运行”和“可运行”。“运行”反映了一个调度实体 在CPU上花费的时间,而“可运行”反映了一个调度实体在运行队列中花费的时间。当只有 一个任务时,这两个指标是相同的,但一旦出现对CPU的争用,“运行”将减少以反映每个 任务在CPU上花费的时间,而“可运行”将增加以反映争用的激烈程度。h]hX利用这一点,我们跟踪2个关键指标:“运行”和“可运行”。“运行”反映了一个调度实体 在CPU上花费的时间,而“可运行”反映了一个调度实体在运行队列中花费的时间。当只有 一个任务时,这两个指标是相同的,但一旦出现对CPU的争用,“运行”将减少以反映每个 任务在CPU上花费的时间,而“可运行”将增加以反映争用的激烈程度。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjhhubh)}(h%更多细节见:kernel/sched/pelt.ch]h%更多细节见:kernel/sched/pelt.c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hjhhubeh}(h]pelt-per-entity-load-trackingah ]h"]7pelt(实体负载跟踪,per entity load tracking)ah$]h&]uh1jVhjXhhhhhKubjW)}(hhh](j\)}(h频率 / CPU不变性h]h频率 / CPU不变性}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhhhhK0ubh)}(hXz因为CPU频率在1GHz时利用率为50%和CPU频率在2GHz时利用率为50%是不一样的,同样 在小核上运行时利用率为50%和在大核上运行时利用率为50%是不一样的,我们允许架构 以两个比率来伸缩时间差,其中一个是动态电压频率升降(Dynamic Voltage and Frequency Scaling,DVFS)比率,另一个是微架构比率。h]hXz因为CPU频率在1GHz时利用率为50%和CPU频率在2GHz时利用率为50%是不一样的,同样 在小核上运行时利用率为50%和在大核上运行时利用率为50%是不一样的,我们允许架构 以两个比率来伸缩时间差,其中一个是动态电压频率升降(Dynamic Voltage and Frequency Scaling,DVFS)比率,另一个是微架构比率。}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjhhubh)}(hi对于简单的DVFS架构(软件有完全控制能力),我们可以很容易地计算该比率为::h]hh对于简单的DVFS架构(软件有完全控制能力),我们可以很容易地计算该比率为:}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjhhubh literal_block)}(h/ f_cur r_dvfs := ----- f_maxh]h/ f_cur r_dvfs := ----- f_max}hjGsbah}(h]h ]h"]h$]h&]hhuh1jEhhhK9hjhhubh)}(h对于由硬件控制DVFS的更多动态系统,我们使用硬件计数器(Intel APERF/MPERF, ARMv8.4-AMU)来计算这一比率。具体到Intel,我们使用::h]h对于由硬件控制DVFS的更多动态系统,我们使用硬件计数器(Intel APERF/MPERF, ARMv8.4-AMU)来计算这一比率。具体到Intel,我们使用:}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK=hjhhubjF)}(hX APERF f_cur := ----- * P0 MPERF 4C-turbo; 如果可用并且使能了turbo f_max := { 1C-turbo; 如果使能了turbo P0; 其它情况 f_cur r_dvfs := min( 1, ----- ) f_maxh]hX APERF f_cur := ----- * P0 MPERF 4C-turbo; 如果可用并且使能了turbo f_max := { 1C-turbo; 如果使能了turbo P0; 其它情况 f_cur r_dvfs := min( 1, ----- ) f_max}hjcsbah}(h]h ]h"]h$]h&]hhuh1jEhhhK@hjhhubh)}(hL我们选择4C turbo而不是1C turbo,以使其更持久性略微更强。h]hL我们选择4C turbo而不是1C turbo,以使其更持久性略微更强。}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhjhhubh)}(hkr_cpu被定义为当前CPU的最高性能水平与系统中任何其它CPU的最高性能水平的比率。h]hkr_cpu被定义为当前CPU的最高性能水平与系统中任何其它CPU的最高性能水平的比率。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKNhjhhubj)}(hr_tot = r_dvfs * r_cpu h]h)}(hr_tot = r_dvfs * r_cpuh]hr_tot = r_dvfs * r_cpu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKPhjubah}(h]h ]h"]h$]h&]uh1jhhhKPhjhhubh)}(h其结果是,上述“运行”和“可运行”的指标变成DVFS无关和CPU型号无关了。也就是说, 我们可以在CPU之间转移和比较它们。h]h其结果是,上述“运行”和“可运行”的指标变成DVFS无关和CPU型号无关了。也就是说, 我们可以在CPU之间转移和比较它们。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhjhhubh)}(h更多细节见:h]h更多细节见:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKUhjhhubj)}(h- kernel/sched/pelt.h:update_rq_clock_pelt() - arch/x86/kernel/smpboot.c:"APERF/MPERF frequency ratio computation." - Documentation/translations/zh_CN/scheduler/sched-capacity.rst:"1. CPU Capacity + 2. Task utilization" h]h bullet_list)}(hhh](h list_item)}(h*kernel/sched/pelt.h:update_rq_clock_pelt()h]h)}(hjh]h*kernel/sched/pelt.h:update_rq_clock_pelt()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hDarch/x86/kernel/smpboot.c:"APERF/MPERF frequency ratio computation."h]h)}(hjh]hHarch/x86/kernel/smpboot.c:”APERF/MPERF frequency ratio computation.”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKXhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hgDocumentation/translations/zh_CN/scheduler/sched-capacity.rst:"1. CPU Capacity + 2. Task utilization" h]h)}(heDocumentation/translations/zh_CN/scheduler/sched-capacity.rst:"1. CPU Capacity + 2. Task utilization"h]hiDocumentation/translations/zh_CN/scheduler/sched-capacity.rst:”1. CPU Capacity + 2. Task utilization”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhKWhjubah}(h]h ]h"]h$]h&]uh1jhhhKWhjhhubeh}(h]cpuah ]h"]频率 / cpu不变性ah$]h&]uh1jVhjXhhhhhK0ubjW)}(hhh](j\)}(hUTIL_ESTh]hUTIL_EST}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj(hhhhhK]ubh)}(h由于周期性任务的平均数在睡眠时会衰减,而在运行时其预期利用率会和睡眠前相同, 因此它们在再次运行后会面临(DVFS)的上涨。h]h由于周期性任务的平均数在睡眠时会衰减,而在运行时其预期利用率会和睡眠前相同, 因此它们在再次运行后会面临(DVFS)的上涨。}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK_hj(hhubh)}(hX为了缓解这个问题,(一个默认使能的编译选项)UTIL_EST驱动一个无限脉冲响应 (Infinite Impulse Response,IIR)的EWMA,“运行”值在出队时是最高的。 UTIL_EST滤波使其在遇到更高值时立刻增加,而遇到低值时会缓慢衰减。h]hX为了缓解这个问题,(一个默认使能的编译选项)UTIL_EST驱动一个无限脉冲响应 (Infinite Impulse Response,IIR)的EWMA,“运行”值在出队时是最高的。 UTIL_EST滤波使其在遇到更高值时立刻增加,而遇到低值时会缓慢衰减。}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhj(hhubh)}(hT进一步,运行队列的(可运行任务的)利用率之和由下式计算:h]hT进一步,运行队列的(可运行任务的)利用率之和由下式计算:}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKfhj(hhubj)}(h5util_est := \Sum_t max( t_running, t_util_est_ewma ) h]h)}(h4util_est := \Sum_t max( t_running, t_util_est_ewma )h]h4util_est := Sum_t max( t_running, t_util_est_ewma )}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhjcubah}(h]h ]h"]h$]h&]uh1jhhhKhhj(hhubh)}(h7更多细节见: kernel/sched/fair.c:util_est_dequeue()h]h7更多细节见: kernel/sched/fair.c:util_est_dequeue()}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKjhj(hhubeh}(h]util-estah ]h"]util_estah$]h&]uh1jVhjXhhhhhK]ubjW)}(hhh](j\)}(hUCLAMPh]hUCLAMP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhhhhKnubh)}(hX可以在每个CFS或RT任务上设置有效的u_min和u_max clamp值(译注:clamp可以理解 为类似滤波器的能力,它定义了有效取值范围的最大值和最小值);运行队列为所有正在 运行的任务保持这些clamp的最大聚合值。h]hX可以在每个CFS或RT任务上设置有效的u_min和u_max clamp值(译注:clamp可以理解 为类似滤波器的能力,它定义了有效取值范围的最大值和最小值);运行队列为所有正在 运行的任务保持这些clamp的最大聚合值。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKphjhhubh)}(h1更多细节见: include/uapi/linux/sched/types.hh]h1更多细节见: include/uapi/linux/sched/types.h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKthjhhubeh}(h]uclampah ]h"]uclampah$]h&]uh1jVhjXhhhhhKnubjW)}(hhh](j\)}(hSchedutil / DVFSh]hSchedutil / DVFS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhhhhKxubh)}(h每当调度器的负载跟踪被更新时(任务唤醒、任务迁移、时间流逝),我们都会调用 schedutil来更新硬件DVFS状态。h]h每当调度器的负载跟踪被更新时(任务唤醒、任务迁移、时间流逝),我们都会调用 schedutil来更新硬件DVFS状态。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKzhjhhubh)}(h其基础是CPU运行队列的“运行”指标,根据上面的内容,它是CPU的频率不变的利用率 估计值。由此我们计算出一个期望的频率,如下::h]h其基础是CPU运行队列的“运行”指标,根据上面的内容,它是CPU的频率不变的利用率 估计值。由此我们计算出一个期望的频率,如下:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK}hjhhubjF)}(hXn max( running, util_est ); 如果使能UTIL_EST u_cfs := { running; 其它情况 clamp( u_cfs + u_rt, u_min, u_max ); 如果使能UCLAMP_TASK u_clamp := { u_cfs + u_rt; 其它情况 u := u_clamp + u_irq + u_dl; [估计值。更多细节见源代码] f_des := min( f_max, 1.25 u * f_max )h]hXn max( running, util_est ); 如果使能UTIL_EST u_cfs := { running; 其它情况 clamp( u_cfs + u_rt, u_min, u_max ); 如果使能UCLAMP_TASK u_clamp := { u_cfs + u_rt; 其它情况 u := u_clamp + u_irq + u_dl; [估计值。更多细节见源代码] f_des := min( f_max, 1.25 u * f_max )}hjsbah}(h]h ]h"]h$]h&]hhuh1jEhhhKhjhhubh)}(hp关于IO-wait的说明:当发生更新是因为任务从IO完成中唤醒时,我们提升上面的“u”。h]hp关于IO-wait的说明:当发生更新是因为任务从IO完成中唤醒时,我们提升上面的“u”。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hr然后,这个频率被用来选择一个P-state或OPP,或者直接混入一个发给硬件的CPPC式 请求。h]hr然后,这个频率被用来选择一个P-state或OPP,或者直接混入一个发给硬件的CPPC式 请求。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h关于截止期限调度器的说明: 截止期限任务(偶发任务模型)使我们能够计算出满足 工作负荷所需的硬f_min值。h]h关于截止期限调度器的说明: 截止期限任务(偶发任务模型)使我们能够计算出满足 工作负荷所需的硬f_min值。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h因为这些回调函数是直接来自调度器的,所以DVFS的硬件交互应该是“快速”和非阻塞的。 在硬件交互缓慢和昂贵的时候,schedutil支持DVFS请求限速,不过会降低效率。h]h因为这些回调函数是直接来自调度器的,所以DVFS的硬件交互应该是“快速”和非阻塞的。 在硬件交互缓慢和昂贵的时候,schedutil支持DVFS请求限速,不过会降低效率。}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h1更多信息见: kernel/sched/cpufreq_schedutil.ch]h1更多信息见: kernel/sched/cpufreq_schedutil.c}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]schedutil-dvfsah ]h"]schedutil / dvfsah$]h&]uh1jVhjXhhhhhKxubjW)}(hhh](j\)}(h注意h]h注意}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjOhhhhhKubj)}(hX- 在低负载场景下,DVFS是最相关的,“运行”的值将密切反映利用率。 - 在负载饱和的场景下,任务迁移会导致一些瞬时性的使用率下降。假设我们有一个 CPU,有4个任务占用导致其饱和,接下来我们将一个任务迁移到另一个空闲CPU上, 旧的CPU的“运行”值将为0.75,而新的CPU将获得0.25。这是不可避免的,而且随着 时间流逝将自动修正。另注,由于没有空闲时间,我们还能保证f_max值吗? - 上述大部分内容是关于避免DVFS下滑,以及独立的DVFS域发生负载迁移时不得不 重新学习/提升频率。 h]j)}(hhh](j)}(h\在低负载场景下,DVFS是最相关的,“运行”的值将密切反映利用率。 h]h)}(h[在低负载场景下,DVFS是最相关的,“运行”的值将密切反映利用率。h]h[在低负载场景下,DVFS是最相关的,“运行”的值将密切反映利用率。}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjgubah}(h]h ]h"]h$]h&]uh1jhjdubj)}(hX在负载饱和的场景下,任务迁移会导致一些瞬时性的使用率下降。假设我们有一个 CPU,有4个任务占用导致其饱和,接下来我们将一个任务迁移到另一个空闲CPU上, 旧的CPU的“运行”值将为0.75,而新的CPU将获得0.25。这是不可避免的,而且随着 时间流逝将自动修正。另注,由于没有空闲时间,我们还能保证f_max值吗? h]h)}(hX在负载饱和的场景下,任务迁移会导致一些瞬时性的使用率下降。假设我们有一个 CPU,有4个任务占用导致其饱和,接下来我们将一个任务迁移到另一个空闲CPU上, 旧的CPU的“运行”值将为0.75,而新的CPU将获得0.25。这是不可避免的,而且随着 时间流逝将自动修正。另注,由于没有空闲时间,我们还能保证f_max值吗?h]hX在负载饱和的场景下,任务迁移会导致一些瞬时性的使用率下降。假设我们有一个 CPU,有4个任务占用导致其饱和,接下来我们将一个任务迁移到另一个空闲CPU上, 旧的CPU的“运行”值将为0.75,而新的CPU将获得0.25。这是不可避免的,而且随着 时间流逝将自动修正。另注,由于没有空闲时间,我们还能保证f_max值吗?}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjdubj)}(h上述大部分内容是关于避免DVFS下滑,以及独立的DVFS域发生负载迁移时不得不 重新学习/提升频率。 h]h)}(h上述大部分内容是关于避免DVFS下滑,以及独立的DVFS域发生负载迁移时不得不 重新学习/提升频率。h]h上述大部分内容是关于避免DVFS下滑,以及独立的DVFS域发生负载迁移时不得不 重新学习/提升频率。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]jjuh1jhhhKhj`ubah}(h]h ]h"]h$]h&]uh1jhhhKhjOhhubeh}(h]id1ah ]h"]注意ah$]h&]uh1jVhjXhhhhhKubeh}(h] schedutilah ]h"] schedutilah$]h&]uh1jVhhhhhhhK ubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(j[N generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjjjj%j"jjjjjLjIjju nametypes}(jjj%jjjLjuh}(jjXjjj"jjj(jjjIjjjOu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages]transform_messages] transformerN include_log]8Documentation/translations/zh_CN/scheduler/schedutil.rst(NNNNta decorationNhhub.