Hsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/scheduler/sched-nice-designmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/zh_TW/scheduler/sched-nice-designmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/it_IT/scheduler/sched-nice-designmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/ja_JP/scheduler/sched-nice-designmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/ko_KR/scheduler/sched-nice-designmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget//translations/sp_SP/scheduler/sched-nice-designmodnameN 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:spacepreserveuh1hhhhhh\/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/scheduler/sched-nice-design.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/sched-nice-design.rst h]h)}(h-Documentation/scheduler/sched-nice-design.rsth]h-Documentation/scheduler/sched-nice-design.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调度器nice值设计h]h调度器nice值设计}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjXhhhhhK ubh)}(hZ本文档解释了新的Linux调度器中修改和精简后的nice级别的实现思路。h]hZ本文档解释了新的Linux调度器中修改和精简后的nice级别的实现思路。}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubh)}(h{Linux的nice级别总是非常脆弱,人们持续不断地缠着我们,让nice +19的任务占用 更少的CPU时间。h]h{Linux的nice级别总是非常脆弱,人们持续不断地缠着我们,让nice +19的任务占用 更少的CPU时间。}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubh)}(hX不幸的是,在旧的调度器中,这不是那么容易实现的(否则我们早就做到了),因为对 nice级别的支持在历史上是与时间片长度耦合的,而时间片单位是由HZ滴答驱动的, 所以最小的时间片是1/HZ。h]hX不幸的是,在旧的调度器中,这不是那么容易实现的(否则我们早就做到了),因为对 nice级别的支持在历史上是与时间片长度耦合的,而时间片单位是由HZ滴答驱动的, 所以最小的时间片是1/HZ。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubh)}(hX[在O(1)调度器中(2003年),我们改变了负的nice级别,使它们比2.4内核更强 (人们对这一变化很满意),而且我们还故意校正了线性时间片准则,使得nice +19 的级别 _正好_ 是1 jiffy。为了让大家更好地理解它,时间片的图会是这样的(质量 不佳的ASCII艺术提醒!)::h]hXZ在O(1)调度器中(2003年),我们改变了负的nice级别,使它们比2.4内核更强 (人们对这一变化很满意),而且我们还故意校正了线性时间片准则,使得nice +19 的级别 _正好_ 是1 jiffy。为了让大家更好地理解它,时间片的图会是这样的(质量 不佳的ASCII艺术提醒!):}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubh literal_block)}(hX A \ | [timeslice length] \ | \ | \ | \ | \|___100msecs |^ . _ | ^ . _ | ^ . _ -*----------------------------------*-----> [nice level] -20 | +19 | |h]hX A \ | [timeslice length] \ | \ | \ | \ | \|___100msecs |^ . _ | ^ . _ | ^ . _ -*----------------------------------*-----> [nice level] -20 | +19 | |}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjXhhubh)}(h因此,如果有人真的想renice任务,相较线性规则,+19会给出更大的效果(改变 ABI来扩展优先级的解决方案在早期就被放弃了)。h]h因此,如果有人真的想renice任务,相较线性规则,+19会给出更大的效果(改变 ABI来扩展优先级的解决方案在早期就被放弃了)。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hjXhhubh)}(hX这种方法在一定程度上奏效了一段时间,但后来HZ=1000时,它导致1 jiffy为 1ms,这意味着0.1%的CPU使用率,我们认为这有点过度。过度 _不是_ 因为它表示 的CPU使用率过小,而是因为它引发了过于频繁(每毫秒1次)的重新调度(因此会 破坏缓存,等等。请记住,硬件更弱、cache更小是很久以前的事了,当时人们在 nice +19级别运行数量颇多的应用程序)。h]hX这种方法在一定程度上奏效了一段时间,但后来HZ=1000时,它导致1 jiffy为 1ms,这意味着0.1%的CPU使用率,我们认为这有点过度。过度 _不是_ 因为它表示 的CPU使用率过小,而是因为它引发了过于频繁(每毫秒1次)的重新调度(因此会 破坏缓存,等等。请记住,硬件更弱、cache更小是很久以前的事了,当时人们在 nice +19级别运行数量颇多的应用程序)。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjXhhubh)}(hXV因此,对于HZ=1000,我们将nice +19改为5毫秒,因为这感觉像是正确的最小 粒度——这相当于5%的CPU利用率。但nice +19的根本的HZ敏感属性依然保持不变, 我们没有收到过关于nice +19在CPU利用率方面太 _弱_ 的任何抱怨,我们只收到 过它(依然)太 _强_ 的抱怨 :-)。h]hXV因此,对于HZ=1000,我们将nice +19改为5毫秒,因为这感觉像是正确的最小 粒度——这相当于5%的CPU利用率。但nice +19的根本的HZ敏感属性依然保持不变, 我们没有收到过关于nice +19在CPU利用率方面太 _弱_ 的任何抱怨,我们只收到 过它(依然)太 _强_ 的抱怨 :-)。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjXhhubh)}(h总结一下:我们一直想让nice各级别一致性更强,但在HZ和jiffies的限制下,以及 nice级别与时间片、调度粒度耦合是令人讨厌的设计,这一目标并不真正可行。h]h总结一下:我们一直想让nice各级别一致性更强,但在HZ和jiffies的限制下,以及 nice级别与时间片、调度粒度耦合是令人讨厌的设计,这一目标并不真正可行。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK:hjXhhubh)}(hXL第二个关于Linux nice级别支持的抱怨是(不那么频繁,但仍然定期发生),它 在原点周围的不对称性(你可以在上面的图片中看到),或者更准确地说:事实上 nice级别的行为取决于 _绝对的_ nice级别,而nice应用程序接口本身从根本上 说是“相对”的:h]hXL第二个关于Linux nice级别支持的抱怨是(不那么频繁,但仍然定期发生),它 在原点周围的不对称性(你可以在上面的图片中看到),或者更准确地说:事实上 nice级别的行为取决于 _绝对的_ nice级别,而nice应用程序接口本身从根本上 说是“相对”的:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK=hjXhhubh block_quote)}(h