ϡsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/scheduler/sched-statsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/zh_TW/scheduler/sched-statsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/it_IT/scheduler/sched-statsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ja_JP/scheduler/sched-statsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ko_KR/scheduler/sched-statsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/sp_SP/scheduler/sched-statsmodnameN 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:spacepreserveuh1hhhhhhV/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/scheduler/sched-stats.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-stats.rst h]h)}(h'Documentation/scheduler/sched-stats.rsth]h'Documentation/scheduler/sched-stats.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调度器统计数据h]h调度器统计数据}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjXhhhhhK ubh)}(h第15版schedstats去掉了sched_yield的一些计数器:yld_exp_empty,yld_act_empty 和yld_both_empty。在其它方面和第14版完全相同。h]h第15版schedstats去掉了sched_yield的一些计数器:yld_exp_empty,yld_act_empty 和yld_both_empty。在其它方面和第14版完全相同。}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubh)}(hX第14版schedstats包括对sched_domains(译注:调度域)的支持,该特性进入内核 主线2.6.20,不过这一版schedstats与2.6.13-2.6.19内核的版本12的统计数据是完全 相同的(内核未发布第13版)。有些计数器按每个运行队列统计是更有意义的,其它则 按每个调度域统计是更有意义的。注意,调度域(以及它们的附属信息)仅在开启 CONFIG_SMP的机器上是相关的和可用的。h]hX第14版schedstats包括对sched_domains(译注:调度域)的支持,该特性进入内核 主线2.6.20,不过这一版schedstats与2.6.13-2.6.19内核的版本12的统计数据是完全 相同的(内核未发布第13版)。有些计数器按每个运行队列统计是更有意义的,其它则 按每个调度域统计是更有意义的。注意,调度域(以及它们的附属信息)仅在开启 CONFIG_SMP的机器上是相关的和可用的。}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubh)}(hX在第14版schedstat中,每个被列出的CPU至少会有一级域统计数据,且很可能有一个 以上的域。在这个实现中,域没有特别的名字,但是编号最高的域通常在机器上所有的 CPU上仲裁平衡,而domain0是最紧密聚焦的域,有时仅在一对CPU之间进行平衡。此时, 没有任何体系结构需要3层以上的域。域统计数据中的第一个字段是一个位图,表明哪些 CPU受该域的影响。h]hX在第14版schedstat中,每个被列出的CPU至少会有一级域统计数据,且很可能有一个 以上的域。在这个实现中,域没有特别的名字,但是编号最高的域通常在机器上所有的 CPU上仲裁平衡,而domain0是最紧密聚焦的域,有时仅在一对CPU之间进行平衡。此时, 没有任何体系结构需要3层以上的域。域统计数据中的第一个字段是一个位图,表明哪些 CPU受该域的影响。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubh)}(h这些字段是计数器,而且只能递增。使用这些字段的程序将需要从基线观测开始,然后在 后续每一个观测中计算出计数器的变化。一个能以这种方式处理其中很多字段的perl脚本 可见h]h这些字段是计数器,而且只能递增。使用这些字段的程序将需要从基线观测开始,然后在 后续每一个观测中计算出计数器的变化。一个能以这种方式处理其中很多字段的perl脚本 可见}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjXhhubh block_quote)}(h1http://eaglet.pdxhosts.com/rick/linux/schedstat/ h]h)}(h0http://eaglet.pdxhosts.com/rick/linux/schedstat/h]j))}(hjh]h0http://eaglet.pdxhosts.com/rick/linux/schedstat/}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1j(hjubah}(h]h ]h"]h$]h&]uh1hhhhK!hjubah}(h]h ]h"]h$]h&]uh1jhhhK!hjXhhubh)}(h请注意,任何这样的脚本都必须是特定于版本的,改变版本的主要原因是输出格式的变化。 对于那些希望编写自己的脚本的人,可以参考这里描述的各个字段。h]h请注意,任何这样的脚本都必须是特定于版本的,改变版本的主要原因是输出格式的变化。 对于那些希望编写自己的脚本的人,可以参考这里描述的各个字段。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjXhhubjW)}(hhh](j\)}(hCPU统计数据h]hCPU统计数据}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhhhhK'ubh)}(hcpu 1 2 3 4 5 6 7 8 9h]hcpu 1 2 3 4 5 6 7 8 9}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hjhhubh)}(h1第一个字段是sched_yield()的统计数据:h]h1第一个字段是sched_yield()的统计数据:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hjhhubj)}(h!1) sched_yield()被调用了#次 h]henumerated_list)}(hhh]h list_item)}(hsched_yield()被调用了#次 h]h)}(hsched_yield()被调用了#次h]hsched_yield()被调用了#次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hj ubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix)uh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhK,hjhhubh)}(h1接下来的三个是schedule()的统计数据:h]h1接下来的三个是schedule()的统计数据:}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hjhhubj)}(h2) 这个字段是一个过时的数组过期计数,在O(1)调度器中使用。为了ABI兼容性, 我们保留了它,但它总是被设置为0。 3) schedule()被调用了#次 4) 调用schedule()导致处理器变为空闲了#次 h]j)}(hhh](j )}(h这个字段是一个过时的数组过期计数,在O(1)调度器中使用。为了ABI兼容性, 我们保留了它,但它总是被设置为0。h]h)}(h这个字段是一个过时的数组过期计数,在O(1)调度器中使用。为了ABI兼容性, 我们保留了它,但它总是被设置为0。h]h这个字段是一个过时的数组过期计数,在O(1)调度器中使用。为了ABI兼容性, 我们保留了它,但它总是被设置为0。}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hjKubah}(h]h ]h"]h$]h&]uh1j hjHubj )}(hschedule()被调用了#次h]h)}(hjeh]hschedule()被调用了#次}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjcubah}(h]h ]h"]h$]h&]uh1j hjHubj )}(h3调用schedule()导致处理器变为空闲了#次 h]h)}(h2调用schedule()导致处理器变为空闲了#次h]h2调用schedule()导致处理器变为空闲了#次}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjzubah}(h]h ]h"]h$]h&]uh1j hjHubeh}(h]h ]h"]h$]h&]j+j,j-hj.j/startKuh1jhjDubah}(h]h ]h"]h$]h&]uh1jhhhK0hjhhubh)}(h7接下来的两个是try_to_wake_up()的统计数据:h]h7接下来的两个是try_to_wake_up()的统计数据:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjhhubj)}(h]5) try_to_wake_up()被调用了#次 6) 调用try_to_wake_up()导致本地CPU被唤醒了#次 h]j)}(hhh](j )}(h try_to_wake_up()被调用了#次h]h)}(hjh]h try_to_wake_up()被调用了#次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(h6调用try_to_wake_up()导致本地CPU被唤醒了#次 h]h)}(h5调用try_to_wake_up()导致本地CPU被唤醒了#次h]h5调用try_to_wake_up()导致本地CPU被唤醒了#次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK8hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]j+j,j-hj.j/jKuh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhK7hjhhubh)}(h6接下来的三个统计数据描述了调度延迟:h]h6接下来的三个统计数据描述了调度延迟:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK:hjhhubj)}(h7) 本处理器运行任务的总时间,单位是纳秒 8) 本处理器任务等待运行的时间,单位是纳秒 9) 本CPU运行了#个时间片 h]j)}(hhh](j )}(h6本处理器运行任务的总时间,单位是纳秒h]h)}(hjh]h6本处理器运行任务的总时间,单位是纳秒}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj2ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]j+j,j-hj.j/jKuh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhK 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36h]hvdomain 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKFhj^hhubh)}(hE第一个字段是一个位掩码,表明该域在操作哪些CPU。h]hE第一个字段是一个位掩码,表明该域在操作哪些CPU。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhj^hhubh)}(h接下来的24个字段是load_balance()函数的各个统计数据,按空闲类型分组(空闲, 繁忙,新空闲):h]h接下来的24个字段是load_balance()函数的各个统计数据,按空闲类型分组(空闲, 繁忙,新空闲):}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKJhj^hhubj)}(hX 1) 当CPU空闲时,sched_balance_rq()在这个调度域中被调用了#次 2) 当CPU空闲时,sched_balance_rq()在这个调度域中被调用,但是发现负载无需 均衡#次 3) 当CPU空闲时,sched_balance_rq()在这个调度域中被调用,试图迁移1个或更多 任务且失败了#次 4) 当CPU空闲时,sched_balance_rq()在这个调度域中被调用,发现不均衡(如果有) #次 5) 当CPU空闲时,pull_task()在这个调度域中被调用#次 6) 当CPU空闲时,尽管目标任务是热缓存状态,pull_task()依然被调用#次 7) 当CPU空闲时,sched_balance_rq()在这个调度域中被调用,未能找到更繁忙的 队列#次 8) 当CPU空闲时,在调度域中找到了更繁忙的队列,但未找到更繁忙的调度组 #次 9) 当CPU繁忙时,sched_balance_rq()在这个调度域中被调用了#次 10) 当CPU繁忙时,sched_balance_rq()在这个调度域中被调用,但是发现负载无需 均衡#次 11) 当CPU繁忙时,sched_balance_rq()在这个调度域中被调用,试图迁移1个或更多 任务且失败了#次 12) 当CPU繁忙时,sched_balance_rq()在这个调度域中被调用,发现不均衡(如果有) #次 13) 当CPU繁忙时,pull_task()在这个调度域中被调用#次 14) 当CPU繁忙时,尽管目标任务是热缓存状态,pull_task()依然被调用#次 15) 当CPU繁忙时,sched_balance_rq()在这个调度域中被调用,未能找到更繁忙的 队列#次 16) 当CPU繁忙时,在调度域中找到了更繁忙的队列,但未找到更繁忙的调度组 #次 17) 当CPU新空闲时,sched_balance_rq()在这个调度域中被调用了#次 18) 当CPU新空闲时,sched_balance_rq()在这个调度域中被调用,但是发现负载无需 均衡#次 19) 当CPU新空闲时,sched_balance_rq()在这个调度域中被调用,试图迁移1个或更多 任务且失败了#次 20) 当CPU新空闲时,sched_balance_rq()在这个调度域中被调用,发现不均衡(如果有) #次 21) 当CPU新空闲时,pull_task()在这个调度域中被调用#次 22) 当CPU新空闲时,尽管目标任务是热缓存状态,pull_task()依然被调用#次 23) 当CPU新空闲时,sched_balance_rq()在这个调度域中被调用,未能找到更繁忙的 队列#次 24) 当CPU新空闲时,在调度域中找到了更繁忙的队列,但未找到更繁忙的调度组 #次 h]j)}(hhh](j )}(hI当CPU空闲时,sched_balance_rq()在这个调度域中被调用了#次h]h)}(hjh]hI当CPU空闲时,sched_balance_rq()在这个调度域中被调用了#次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKNhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hh当CPU空闲时,sched_balance_rq()在这个调度域中被调用,但是发现负载无需 均衡#次h]h)}(hh当CPU空闲时,sched_balance_rq()在这个调度域中被调用,但是发现负载无需 均衡#次h]hh当CPU空闲时,sched_balance_rq()在这个调度域中被调用,但是发现负载无需 均衡#次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hu当CPU空闲时,sched_balance_rq()在这个调度域中被调用,试图迁移1个或更多 任务且失败了#次h]h)}(hu当CPU空闲时,sched_balance_rq()在这个调度域中被调用,试图迁移1个或更多 任务且失败了#次h]hu当CPU空闲时,sched_balance_rq()在这个调度域中被调用,试图迁移1个或更多 任务且失败了#次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKQhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hh当CPU空闲时,sched_balance_rq()在这个调度域中被调用,发现不均衡(如果有) #次h]h)}(hh当CPU空闲时,sched_balance_rq()在这个调度域中被调用,发现不均衡(如果有) #次h]hh当CPU空闲时,sched_balance_rq()在这个调度域中被调用,发现不均衡(如果有) #次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(h?当CPU空闲时,pull_task()在这个调度域中被调用#次h]h)}(hjh]h?当CPU空闲时,pull_task()在这个调度域中被调用#次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKUhj ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hW当CPU空闲时,尽管目标任务是热缓存状态,pull_task()依然被调用#次h]h)}(hj&h]hW当CPU空闲时,尽管目标任务是热缓存状态,pull_task()依然被调用#次}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhj$ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hh当CPU空闲时,sched_balance_rq()在这个调度域中被调用,未能找到更繁忙的 队列#次h]h)}(hh当CPU空闲时,sched_balance_rq()在这个调度域中被调用,未能找到更繁忙的 队列#次h]hh当CPU空闲时,sched_balance_rq()在这个调度域中被调用,未能找到更繁忙的 队列#次}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhj;ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(he当CPU空闲时,在调度域中找到了更繁忙的队列,但未找到更繁忙的调度组 #次h]h)}(he当CPU空闲时,在调度域中找到了更繁忙的队列,但未找到更繁忙的调度组 #次h]he当CPU空闲时,在调度域中找到了更繁忙的队列,但未找到更繁忙的调度组 #次}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhjSubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hI当CPU繁忙时,sched_balance_rq()在这个调度域中被调用了#次h]h)}(hjmh]hI当CPU繁忙时,sched_balance_rq()在这个调度域中被调用了#次}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hjkubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hh当CPU繁忙时,sched_balance_rq()在这个调度域中被调用,但是发现负载无需 均衡#次h]h)}(hh当CPU繁忙时,sched_balance_rq()在这个调度域中被调用,但是发现负载无需 均衡#次h]hh当CPU繁忙时,sched_balance_rq()在这个调度域中被调用,但是发现负载无需 均衡#次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK\hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hu当CPU繁忙时,sched_balance_rq()在这个调度域中被调用,试图迁移1个或更多 任务且失败了#次h]h)}(hu当CPU繁忙时,sched_balance_rq()在这个调度域中被调用,试图迁移1个或更多 任务且失败了#次h]hu当CPU繁忙时,sched_balance_rq()在这个调度域中被调用,试图迁移1个或更多 任务且失败了#次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hh当CPU繁忙时,sched_balance_rq()在这个调度域中被调用,发现不均衡(如果有) #次h]h)}(hh当CPU繁忙时,sched_balance_rq()在这个调度域中被调用,发现不均衡(如果有) #次h]hh当CPU繁忙时,sched_balance_rq()在这个调度域中被调用,发现不均衡(如果有) #次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK`hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(h?当CPU繁忙时,pull_task()在这个调度域中被调用#次h]h)}(hjh]h?当CPU繁忙时,pull_task()在这个调度域中被调用#次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hW当CPU繁忙时,尽管目标任务是热缓存状态,pull_task()依然被调用#次h]h)}(hjh]hW当CPU繁忙时,尽管目标任务是热缓存状态,pull_task()依然被调用#次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKchjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hh当CPU繁忙时,sched_balance_rq()在这个调度域中被调用,未能找到更繁忙的 队列#次h]h)}(hh当CPU繁忙时,sched_balance_rq()在这个调度域中被调用,未能找到更繁忙的 队列#次h]hh当CPU繁忙时,sched_balance_rq()在这个调度域中被调用,未能找到更繁忙的 队列#次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKdhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(he当CPU繁忙时,在调度域中找到了更繁忙的队列,但未找到更繁忙的调度组 #次h]h)}(he当CPU繁忙时,在调度域中找到了更繁忙的队列,但未找到更繁忙的调度组 #次h]he当CPU繁忙时,在调度域中找到了更繁忙的队列,但未找到更繁忙的调度组 #次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKfhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hL当CPU新空闲时,sched_balance_rq()在这个调度域中被调用了#次h]h)}(hj*h]hL当CPU新空闲时,sched_balance_rq()在这个调度域中被调用了#次}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhj(ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hk当CPU新空闲时,sched_balance_rq()在这个调度域中被调用,但是发现负载无需 均衡#次h]h)}(hk当CPU新空闲时,sched_balance_rq()在这个调度域中被调用,但是发现负载无需 均衡#次h]hk当CPU新空闲时,sched_balance_rq()在这个调度域中被调用,但是发现负载无需 均衡#次}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKihj?ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hx当CPU新空闲时,sched_balance_rq()在这个调度域中被调用,试图迁移1个或更多 任务且失败了#次h]h)}(hx当CPU新空闲时,sched_balance_rq()在这个调度域中被调用,试图迁移1个或更多 任务且失败了#次h]hx当CPU新空闲时,sched_balance_rq()在这个调度域中被调用,试图迁移1个或更多 任务且失败了#次}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKkhjWubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hk当CPU新空闲时,sched_balance_rq()在这个调度域中被调用,发现不均衡(如果有) #次h]h)}(hk当CPU新空闲时,sched_balance_rq()在这个调度域中被调用,发现不均衡(如果有) #次h]hk当CPU新空闲时,sched_balance_rq()在这个调度域中被调用,发现不均衡(如果有) #次}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKmhjoubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hB当CPU新空闲时,pull_task()在这个调度域中被调用#次h]h)}(hjh]hB当CPU新空闲时,pull_task()在这个调度域中被调用#次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKohjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hZ当CPU新空闲时,尽管目标任务是热缓存状态,pull_task()依然被调用#次h]h)}(hjh]hZ当CPU新空闲时,尽管目标任务是热缓存状态,pull_task()依然被调用#次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKphjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hk当CPU新空闲时,sched_balance_rq()在这个调度域中被调用,未能找到更繁忙的 队列#次h]h)}(hk当CPU新空闲时,sched_balance_rq()在这个调度域中被调用,未能找到更繁忙的 队列#次h]hk当CPU新空闲时,sched_balance_rq()在这个调度域中被调用,未能找到更繁忙的 队列#次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKqhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hi当CPU新空闲时,在调度域中找到了更繁忙的队列,但未找到更繁忙的调度组 #次 h]h)}(hh当CPU新空闲时,在调度域中找到了更繁忙的队列,但未找到更繁忙的调度组 #次h]hh当CPU新空闲时,在调度域中找到了更繁忙的队列,但未找到更繁忙的调度组 #次}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKshjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]j+j,j-hj.j/uh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhKNhj^hhubh)}(hL接下来的3个字段是active_load_balance()函数的各个统计数据:h]hL接下来的3个字段是active_load_balance()函数的各个统计数据:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKvhj^hhubj)}(h25) active_load_balance()被调用了#次 26) active_load_balance()被调用,试图迁移1个或更多任务且失败了#次 27) active_load_balance()被调用,成功迁移了#次任务 h]j)}(hhh](j )}(h%active_load_balance()被调用了#次h]h)}(hjh]h%active_load_balance()被调用了#次}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKxhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hPactive_load_balance()被调用,试图迁移1个或更多任务且失败了#次h]h)}(hjh]hPactive_load_balance()被调用,试图迁移1个或更多任务且失败了#次}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKyhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(h;active_load_balance()被调用,成功迁移了#次任务 h]h)}(h:active_load_balance()被调用,成功迁移了#次任务h]h:active_load_balance()被调用,成功迁移了#次任务}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKzhj4ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]j+j,j-hj.j/jKuh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhKxhj^hhubh)}(hK接下来的3个字段是sched_balance_exec()函数的各个统计数据:h]hK接下来的3个字段是sched_balance_exec()函数的各个统计数据:}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK|hj^hhubj)}(hY28) sbe_cnt不再被使用 29) sbe_balanced不再被使用 30) sbe_pushed不再被使用 h]j)}(hhh](j )}(hsbe_cnt不再被使用h]h)}(hjoh]hsbe_cnt不再被使用}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK~hjmubah}(h]h ]h"]h$]h&]uh1j hjjubj )}(hsbe_balanced不再被使用h]h)}(hjh]hsbe_balanced不再被使用}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjjubj )}(hsbe_pushed不再被使用 h]h)}(hsbe_pushed不再被使用h]hsbe_pushed不再被使用}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjjubeh}(h]h ]h"]h$]h&]j+j,j-hj.j/jKuh1jhjfubah}(h]h ]h"]h$]h&]uh1jhhhK~hj^hhubh)}(hK接下来的3个字段是sched_balance_fork()函数的各个统计数据:h]hK接下来的3个字段是sched_balance_fork()函数的各个统计数据:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj^hhubj)}(hY31) sbf_cnt不再被使用 32) sbf_balanced不再被使用 33) sbf_pushed不再被使用 h]j)}(hhh](j )}(hsbf_cnt不再被使用h]h)}(hjh]hsbf_cnt不再被使用}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hsbf_balanced不再被使用h]h)}(hjh]hsbf_balanced不再被使用}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hsbf_pushed不再被使用 h]h)}(hsbf_pushed不再被使用h]hsbf_pushed不再被使用}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]j+j,j-hj.j/jKuh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhKhj^hhubh)}(hG接下来的3个字段是try_to_wake_up()函数的各个统计数据:h]hG接下来的3个字段是try_to_wake_up()函数的各个统计数据:}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj^hhubj)}(hX34) 在这个调度域中调用try_to_wake_up()唤醒任务时,任务在调度域中一个 和上次运行不同的新CPU上运行了#次 35) 在这个调度域中调用try_to_wake_up()唤醒任务时,任务被迁移到发生唤醒 的CPU次数为#,因为该任务在原CPU是冷缓存状态 36) 在这个调度域中调用try_to_wake_up()唤醒任务时,引发被动负载均衡#次 h]j)}(hhh](j )}(h在这个调度域中调用try_to_wake_up()唤醒任务时,任务在调度域中一个 和上次运行不同的新CPU上运行了#次h]h)}(h在这个调度域中调用try_to_wake_up()唤醒任务时,任务在调度域中一个 和上次运行不同的新CPU上运行了#次h]h在这个调度域中调用try_to_wake_up()唤醒任务时,任务在调度域中一个 和上次运行不同的新CPU上运行了#次}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj;ubah}(h]h ]h"]h$]h&]uh1j hj8ubj )}(h在这个调度域中调用try_to_wake_up()唤醒任务时,任务被迁移到发生唤醒 的CPU次数为#,因为该任务在原CPU是冷缓存状态h]h)}(h在这个调度域中调用try_to_wake_up()唤醒任务时,任务被迁移到发生唤醒 的CPU次数为#,因为该任务在原CPU是冷缓存状态h]h在这个调度域中调用try_to_wake_up()唤醒任务时,任务被迁移到发生唤醒 的CPU次数为#,因为该任务在原CPU是冷缓存状态}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjSubah}(h]h ]h"]h$]h&]uh1j hj8ubj )}(hZ在这个调度域中调用try_to_wake_up()唤醒任务时,引发被动负载均衡#次 h]h)}(hY在这个调度域中调用try_to_wake_up()唤醒任务时,引发被动负载均衡#次h]hY在这个调度域中调用try_to_wake_up()唤醒任务时,引发被动负载均衡#次}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjkubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]j+j,j-hj.j/jK"uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhhhKhj^hhubeh}(h]id2ah ]h"]域统计数据ah$]h&]uh1jVhjXhhhhhKAubjW)}(hhh](j\)}(h/proc//schedstath]h/proc//schedstat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhhhhKubh)}(hschedstats还添加了一个新的/proc//schedstat文件,来提供一些进程级的 相同信息。这个文件中,有三个字段与该进程相关:h]hschedstats还添加了一个新的/proc//schedstat文件,来提供一些进程级的 相同信息。这个文件中,有三个字段与该进程相关:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(h1) 在CPU上运行花费的时间(单位是纳秒) 2) 在运行队列上等待的时间(单位是纳秒) 3) 在CPU上运行了#个时间片 h]j)}(hhh](j )}(h/在CPU上运行花费的时间(单位是纳秒)h]h)}(hjh]h/在CPU上运行花费的时间(单位是纳秒)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(h2在运行队列上等待的时间(单位是纳秒)h]h)}(hjh]h2在运行队列上等待的时间(单位是纳秒)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(h 在CPU上运行了#个时间片 h]h)}(h在CPU上运行了#个时间片h]h在CPU上运行了#个时间片}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]j+j,j-hj.j/uh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubh)}(h可以很容易地编写一个程序,利用这些额外的字段来报告一个特定的进程或一组进程在 调度器策略下的表现如何。这样的程序的一个简单版本可在下面的链接找到h]h可以很容易地编写一个程序,利用这些额外的字段来报告一个特定的进程或一组进程在 调度器策略下的表现如何。这样的程序的一个简单版本可在下面的链接找到}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(h=http://eaglet.pdxhosts.com/rick/linux/schedstat/v12/latency.ch]h)}(hjh]j))}(hjh]h=http://eaglet.pdxhosts.com/rick/linux/schedstat/v12/latency.c}(hj$hhhNhNubah}(h]h ]h"]h$]h&]refurijuh1j(hj!ubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h]proc-pid-schedstatah ]h"]/proc//schedstatah$]h&]uh1jVhjXhhhhhKubeh}(h]id1ah ]h"]调度器统计数据ah$]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_handlerjqerror_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}(jKjHj[jXjjjCj@u nametypes}(jKj[jjCuh}(jHjXjXjjj^j@ju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages](hsystem_message)}(hhh]h)}(h:Enumerated list start value not ordinal-1: "2" (ordinal 2)h]h>Enumerated list start value not ordinal-1: “2” (ordinal 2)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineK uh1jhjDubj)}(hhh]h)}(h:Enumerated list start value not ordinal-1: "5" (ordinal 5)h]h>Enumerated list start value not ordinal-1: “5” (ordinal 5)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineK uh1jhjubj)}(hhh]h)}(h:Enumerated list start value not ordinal-1: "7" (ordinal 7)h]h>Enumerated list start value not ordinal-1: “7” (ordinal 7)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]levelKtypejsourcehlineK uh1jhjubj)}(hhh]h)}(h