1 .. SPDX-License-Identifier: GPL-2.0 2 .. include:: ../disclaimer-zh_CN.rst 3 4 :Original: Documentation/scheduler/sched-stats 5 6 :翻译: 7 8 唐艺舟 Tang Yizhou <tangyeechou@gmail.com> 9 10 ============== 11 调度器统计数据 12 ============== 13 14 第15版schedstats去掉了sched_yield的一 15 和yld_both_empty。在其它方面和第14版 16 17 第14版schedstats包括对sched_domains(译 18 主线2.6.20,不过这一版schedstats与2.6 19 相同的(内核未发布第13版)。有 20 按每个调度域统计是更有意义的。 21 CONFIG_SMP的机器上是相关的和可用的 22 23 在第14版schedstat中,每个被列出的CP 24 以上的域。在这个实现中,域没有 25 CPU上仲裁平衡,而domain0是最紧密聚 26 没有任何体系结构需要3层以上的域 27 CPU受该域的影响。 28 29 这些字段是计数器,而且只能递增 30 后续每一个观测中计算出计数器的 31 可见 32 33 http://eaglet.pdxhosts.com/rick/linux/sche 34 35 请注意,任何这样的脚本都必须是 36 对于那些希望编写自己的脚本的人 37 38 CPU统计数据 39 ----------- 40 cpu<N> 1 2 3 4 5 6 7 8 9 41 42 第一个字段是sched_yield()的统计数据 43 44 1) sched_yield()被调用了#次 45 46 接下来的三个是schedule()的统计数据 47 48 2) 这个字段是一个过时的数组 49 我们保留了它,但它总是被 50 3) schedule()被调用了#次 51 4) 调用schedule()导致处理器变为 52 53 接下来的两个是try_to_wake_up()的统计 54 55 5) try_to_wake_up()被调用了#次 56 6) 调用try_to_wake_up()导致本地CPU 57 58 接下来的三个统计数据描述了调度 59 60 7) 本处理器运行任务的总时间 61 8) 本处理器任务等待运行的时 62 9) 本CPU运行了#个时间片 63 64 域统计数据 65 ---------- 66 67 对于每个被描述的CPU,和它相关的 68 CONFIG_SMP没有被定义,那么*没有*调 69 70 domain<N> <cpumask> 1 2 3 4 5 6 7 8 9 10 11 12 71 72 第一个字段是一个位掩码,表明该 73 74 接下来的24个字段是load_balance()函数 75 繁忙,新空闲): 76 77 78 1) 当CPU空闲时,sched_balance_rq() 79 2) 当CPU空闲时,sched_balance_rq() 80 均衡#次 81 3) 当CPU空闲时,sched_balance_rq() 82 任务且失败了#次 83 4) 当CPU空闲时,sched_balance_rq() 84 #次 85 5) 当CPU空闲时,pull_task()在这个 86 6) 当CPU空闲时,尽管目标任务 87 7) 当CPU空闲时,sched_balance_rq() 88 队列#次 89 8) 当CPU空闲时,在调度域中找 90 #次 91 9) 当CPU繁忙时,sched_balance_rq() 92 10) 当CPU繁忙时,sched_balance_rq() 93 均衡#次 94 11) 当CPU繁忙时,sched_balance_rq() 95 任务且失败了#次 96 12) 当CPU繁忙时,sched_balance_rq() 97 #次 98 13) 当CPU繁忙时,pull_task()在这个 99 14) 当CPU繁忙时,尽管目标任务 100 15) 当CPU繁忙时,sched_balance_rq() 101 队列#次 102 16) 当CPU繁忙时,在调度域中找 103 #次 104 17) 当CPU新空闲时,sched_balance_rq( 105 18) 当CPU新空闲时,sched_balance_rq( 106 均衡#次 107 19) 当CPU新空闲时,sched_balance_rq( 108 任务且失败了#次 109 20) 当CPU新空闲时,sched_balance_rq( 110 #次 111 21) 当CPU新空闲时,pull_task()在这 112 22) 当CPU新空闲时,尽管目标任 113 23) 当CPU新空闲时,sched_balance_rq( 114 队列#次 115 24) 当CPU新空闲时,在调度域中 116 #次 117 118 接下来的3个字段是active_load_balance() 119 120 25) active_load_balance()被调用了#次 121 26) active_load_balance()被调用,试 122 27) active_load_balance()被调用,成 123 124 接下来的3个字段是sched_balance_exec() 125 126 28) sbe_cnt不再被使用 127 29) sbe_balanced不再被使用 128 30) sbe_pushed不再被使用 129 130 接下来的3个字段是sched_balance_fork() 131 132 31) sbf_cnt不再被使用 133 32) sbf_balanced不再被使用 134 33) sbf_pushed不再被使用 135 136 接下来的3个字段是try_to_wake_up()函 137 138 34) 在这个调度域中调用try_to_wake 139 和上次运行不同的新CPU上运 140 35) 在这个调度域中调用try_to_wake 141 的CPU次数为#,因为该任务在 142 36) 在这个调度域中调用try_to_wake 143 144 /proc/<pid>/schedstat 145 --------------------- 146 schedstats还添加了一个新的/proc/<pid>/ 147 相同信息。这个文件中,有三个字 148 149 1) 在CPU上运行花费的时间(单位 150 2) 在运行队列上等待的时间(单 151 3) 在CPU上运行了#个时间片 152 153 可以很容易地编写一个程序,利用 154 调度器策略下的表现如何。这样的 155 156 http://eaglet.pdxhosts.com/rick/linux/sche
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.