1 .. SPDX-License-Identifier: GPL-2.0 2 .. include:: ../disclaimer-zh_CN.rst 3 4 :Original: Documentation/scheduler/sched-nice- 5 6 :翻译: 7 8 唐艺舟 Tang Yizhou <tangyeechou@gmail.com> 9 10 ===================== 11 调度器nice值设计 12 ===================== 13 14 本文档解释了新的Linux调度器中修 15 16 Linux的nice级别总是非常脆弱,人们 17 更少的CPU时间。 18 19 不幸的是,在旧的调度器中,这不 20 nice级别的支持在历史上是与时间片 21 所以最小的时间片是1/HZ。 22 23 在O(1)调度器中(2003年),我们改 24 (人们对这一变化很满意),而且 25 的级别 _正好_ 是1 jiffy。为了让大 26 不佳的ASCII艺术提醒!):: 27 28 29 A 30 \ | [timeslice length] 31 \ | 32 \ | 33 \ | 34 \ | 35 \|___100msecs 36 |^ . _ 37 | ^ . _ 38 | ^ . _ 39 -*----------------------------------*-----> [ 40 -20 | +19 41 | 42 | 43 44 因此,如果有人真的想renice任务, 45 ABI来扩展优先级的解决方案在早期 46 47 这种方法在一定程度上奏效了一段 48 1ms,这意味着0.1%的CPU使用率,我们 49 的CPU使用率过小,而是因为它引发 50 破坏缓存,等等。请记住,硬件更 51 nice +19级别运行数量颇多的应用程 52 53 因此,对于HZ=1000,我们将nice +19改 54 粒度——这相当于5%的CPU利用率。 55 我们没有收到过关于nice +19在CPU利 56 过它(依然)太 _强_ 的抱怨 :-)。 57 58 总结一下:我们一直想让nice各级别 59 nice级别与时间片、调度粒度耦合是 60 61 第二个关于Linux nice级别支持的抱怨 62 在原点周围的不对称性(你可以在 63 nice级别的行为取决于 _绝对的_ nice 64 说是“相对”的: 65 66 int nice(int inc); 67 68 asmlinkage long sys_nice(int increment) 69 70 (第一个是glibc的应用程序接口, 71 注意,“inc”是相对当前nice级别而 72 相对性应用程序接口的镜像。 73 74 在旧的调度器中,举例来说,如果 75 另一个任务,这两个任务的CPU分配 76 nice -10,那么CPU的分配不同于+5或+10 77 78 第三个关于Linux nice级别支持的抱怨 79 不得不诉诸于实时调度优先级来运 80 SCHED_FIFO。但这也造成了其它问题: 81 有问题的SCHED_FIFO应用程序也会锁住 82 83 v2.6.23版内核的新调度器解决了这三 84 85 为了解决第一个抱怨(nice级别不够 86 解耦(调度粒度被处理成一个和nice 87 更一致的nice +19支持:在新的调度 88 1.5%CPU使用率,而不是旧版调度器中 89 90 为了解决第二个抱怨(nice各级别不 91 CPU利用率有相同的影响,无论其绝 92 nice +10和一个nice +11的任务会与运行 93 CPU利用率分割是相同的(一个会得 94 nice级别被改为“乘法”(或指数) 95 结果将总是一样的。 96 97 第三个抱怨(负数nice级别不够“有 98 SCHED_FIFO调度策略下运行)几乎被新 99 具有重新校正nice级别动态范围的自
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.